@ashishpandeyone/cdk-lambda-web-function 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +759 -264
- package/.jsii.tabl.json +1 -1
- package/API.md +1006 -237
- package/README.md +23 -3
- package/assets/web-function-provider/index.js +23 -23
- package/lib/nodejs-web-function.js +1 -1
- package/lib/private/code-bucket.d.ts +3 -0
- package/lib/private/code-bucket.js +18 -2
- package/lib/private/provider-protocol.d.ts +13 -0
- package/lib/private/provider-protocol.js +9 -2
- package/lib/private/provider.d.ts +3 -2
- package/lib/private/provider.js +25 -4
- package/lib/web-function-deployment.js +1 -1
- package/lib/web-function-endpoint.js +1 -1
- package/lib/web-function-grants.d.ts +7 -1
- package/lib/web-function-grants.js +15 -7
- package/lib/web-function-revision.js +1 -1
- package/lib/web-function.d.ts +104 -34
- package/lib/web-function.js +124 -57
- package/package.json +1 -2
|
@@ -49,7 +49,7 @@ const web_function_1 = require("./web-function");
|
|
|
49
49
|
* bundle, and `NODE_OPTIONS=--enable-source-maps` when source maps are on.
|
|
50
50
|
*/
|
|
51
51
|
class NodejsWebFunction extends web_function_1.WebFunction {
|
|
52
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction", version: "0.1.
|
|
52
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction", version: "0.1.4" };
|
|
53
53
|
constructor(scope, id, props) {
|
|
54
54
|
const runtime = props.runtime ?? lambda.Runtime.NODEJS_24_X;
|
|
55
55
|
const entry = (0, bundling_1.resolveEntry)(props.entry);
|
|
@@ -7,5 +7,8 @@ import type { Construct } from 'constructs';
|
|
|
7
7
|
* reject unversioned buckets; the CDK bootstrap bucket allows neither, so code is copied here.
|
|
8
8
|
* Revisions capture their code when they're created, so superseded versions can expire, but
|
|
9
9
|
* current objects must stay: a later revision may be created from the same object.
|
|
10
|
+
*
|
|
11
|
+
* The shared provider empties it when it's deleted (instead of `autoDeleteObjects`, which adds another
|
|
12
|
+
* Lambda function whose log group outlives the stack).
|
|
10
13
|
*/
|
|
11
14
|
export declare function codeBucket(scope: Construct): s3.Bucket;
|
|
@@ -37,6 +37,8 @@ exports.codeBucket = codeBucket;
|
|
|
37
37
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
38
38
|
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
39
39
|
const s3 = __importStar(require("aws-cdk-lib/aws-s3"));
|
|
40
|
+
const provider_1 = require("./provider");
|
|
41
|
+
const provider_protocol_1 = require("./provider-protocol");
|
|
40
42
|
const ID = 'LambdaWebFunctionCodeBucket';
|
|
41
43
|
/**
|
|
42
44
|
* The stack's code bucket (one per stack).
|
|
@@ -45,6 +47,9 @@ const ID = 'LambdaWebFunctionCodeBucket';
|
|
|
45
47
|
* reject unversioned buckets; the CDK bootstrap bucket allows neither, so code is copied here.
|
|
46
48
|
* Revisions capture their code when they're created, so superseded versions can expire, but
|
|
47
49
|
* current objects must stay: a later revision may be created from the same object.
|
|
50
|
+
*
|
|
51
|
+
* The shared provider empties it when it's deleted (instead of `autoDeleteObjects`, which adds another
|
|
52
|
+
* Lambda function whose log group outlives the stack).
|
|
48
53
|
*/
|
|
49
54
|
function codeBucket(scope) {
|
|
50
55
|
const stack = aws_cdk_lib_1.Stack.of(scope);
|
|
@@ -57,7 +62,6 @@ function codeBucket(scope) {
|
|
|
57
62
|
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
|
|
58
63
|
encryption: s3.BucketEncryption.S3_MANAGED,
|
|
59
64
|
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
60
|
-
autoDeleteObjects: true,
|
|
61
65
|
lifecycleRules: [{
|
|
62
66
|
id: 'ExpireSupersededCode',
|
|
63
67
|
noncurrentVersionExpiration: aws_cdk_lib_1.Duration.days(30),
|
|
@@ -71,6 +75,18 @@ function codeBucket(scope) {
|
|
|
71
75
|
resources: [bucket.arnForObjects('*')],
|
|
72
76
|
conditions: { StringEquals: { 'aws:SourceAccount': stack.account } },
|
|
73
77
|
}));
|
|
78
|
+
// Only a tagged bucket is emptied (see EMPTY_ON_DELETE_TAG).
|
|
79
|
+
aws_cdk_lib_1.Tags.of(bucket).add(provider_protocol_1.EMPTY_ON_DELETE_TAG.key, provider_protocol_1.EMPTY_ON_DELETE_TAG.value);
|
|
80
|
+
const provider = (0, provider_1.webFunctionProvider)(stack);
|
|
81
|
+
(0, provider_1.grantToProvider)(provider, { Action: ['s3:ListBucketVersions', 's3:GetBucketTagging'], Resource: bucket.bucketArn });
|
|
82
|
+
(0, provider_1.grantToProvider)(provider, { Action: ['s3:DeleteObject', 's3:DeleteObjectVersion'], Resource: bucket.arnForObjects('*') });
|
|
83
|
+
const properties = { BucketName: bucket.bucketName };
|
|
84
|
+
// Depends on the bucket (through its name), so it's deleted, and empties it, just before the bucket.
|
|
85
|
+
new aws_cdk_lib_1.CustomResource(stack, `${ID}Cleanup`, {
|
|
86
|
+
serviceToken: provider.serviceToken,
|
|
87
|
+
resourceType: provider_protocol_1.CODE_BUCKET_CLEANUP_RESOURCE_TYPE,
|
|
88
|
+
properties: { ...properties },
|
|
89
|
+
});
|
|
74
90
|
return bucket;
|
|
75
91
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1idWNrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9jb2RlLWJ1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxnQ0FzQ0M7QUExREQsNkNBQW1GO0FBQ25GLHlEQUEyQztBQUMzQyx1REFBeUM7QUFFekMseUNBQWtFO0FBQ2xFLDJEQUErSDtBQUUvSCxNQUFNLEVBQUUsR0FBRyw2QkFBNkIsQ0FBQztBQUV6Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEtBQWdCO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBMEIsQ0FBQztJQUN0RSxJQUFJLFFBQVE7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUU5QixNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUN0QyxTQUFTLEVBQUUsSUFBSTtRQUNmLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTO1FBQ2pELFVBQVUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtRQUMxQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLGNBQWMsRUFBRSxDQUFDO2dCQUNmLEVBQUUsRUFBRSxzQkFBc0I7Z0JBQzFCLDJCQUEyQixFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsbUNBQW1DLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3RELENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQ2pELEdBQUcsRUFBRSw0QkFBNEI7UUFDakMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RCxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUM7UUFDaEQsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxVQUFVLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7S0FDckUsQ0FBQyxDQUFDLENBQUM7SUFFSiw2REFBNkQ7SUFDN0Qsa0JBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLHVDQUFtQixDQUFDLEdBQUcsRUFBRSx1Q0FBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxNQUFNLFFBQVEsR0FBRyxJQUFBLDhCQUFtQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLElBQUEsMEJBQWUsRUFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNwSCxJQUFBLDBCQUFlLEVBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsd0JBQXdCLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUgsTUFBTSxVQUFVLEdBQWdDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNsRixxR0FBcUc7SUFDckcsSUFBSSw0QkFBYyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ3hDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtRQUNuQyxZQUFZLEVBQUUscURBQWlDO1FBQy9DLFVBQVUsRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFO0tBQzlCLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBncmFudFRvUHJvdmlkZXIsIHdlYkZ1bmN0aW9uUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVyJztcbmltcG9ydCB7IENPREVfQlVDS0VUX0NMRUFOVVBfUkVTT1VSQ0VfVFlQRSwgRU1QVFlfT05fREVMRVRFX1RBRywgdHlwZSBDb2RlQnVja2V0Q2xlYW51cFByb3BlcnRpZXMgfSBmcm9tICcuL3Byb3ZpZGVyLXByb3RvY29sJztcblxuY29uc3QgSUQgPSAnTGFtYmRhV2ViRnVuY3Rpb25Db2RlQnVja2V0JztcblxuLyoqXG4gKiBUaGUgc3RhY2sncyBjb2RlIGJ1Y2tldCAob25lIHBlciBzdGFjaykuXG4gKlxuICogTGFtYmRhIFdlYiBGdW5jdGlvbnMgZG93bmxvYWQgY29kZSBhcyB0aGUgYGxhbWJkYS5hbWF6b25hd3MuY29tYCBzZXJ2aWNlIHByaW5jaXBhbCBhbmRcbiAqIHJlamVjdCB1bnZlcnNpb25lZCBidWNrZXRzOyB0aGUgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWxsb3dzIG5laXRoZXIsIHNvIGNvZGUgaXMgY29waWVkIGhlcmUuXG4gKiBSZXZpc2lvbnMgY2FwdHVyZSB0aGVpciBjb2RlIHdoZW4gdGhleSdyZSBjcmVhdGVkLCBzbyBzdXBlcnNlZGVkIHZlcnNpb25zIGNhbiBleHBpcmUsIGJ1dFxuICogY3VycmVudCBvYmplY3RzIG11c3Qgc3RheTogYSBsYXRlciByZXZpc2lvbiBtYXkgYmUgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIG9iamVjdC5cbiAqXG4gKiBUaGUgc2hhcmVkIHByb3ZpZGVyIGVtcHRpZXMgaXQgd2hlbiBpdCdzIGRlbGV0ZWQgKGluc3RlYWQgb2YgYGF1dG9EZWxldGVPYmplY3RzYCwgd2hpY2ggYWRkcyBhbm90aGVyXG4gKiBMYW1iZGEgZnVuY3Rpb24gd2hvc2UgbG9nIGdyb3VwIG91dGxpdmVzIHRoZSBzdGFjaykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2RlQnVja2V0KHNjb3BlOiBDb25zdHJ1Y3QpOiBzMy5CdWNrZXQge1xuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChJRCkgYXMgczMuQnVja2V0IHwgdW5kZWZpbmVkO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHN0YWNrLCBJRCwge1xuICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBsaWZlY3ljbGVSdWxlczogW3tcbiAgICAgIGlkOiAnRXhwaXJlU3VwZXJzZWRlZENvZGUnLFxuICAgICAgbm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uOiBEdXJhdGlvbi5kYXlzKDMwKSxcbiAgICAgIGFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZEFmdGVyOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgIH1dLFxuICB9KTtcbiAgYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgIHNpZDogJ0xhbWJkYVdlYkZ1bmN0aW9uc1JlYWRDb2RlJyxcbiAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpXSxcbiAgICBhY3Rpb25zOiBbJ3MzOkdldE9iamVjdCcsICdzMzpHZXRPYmplY3RWZXJzaW9uJ10sXG4gICAgcmVzb3VyY2VzOiBbYnVja2V0LmFybkZvck9iamVjdHMoJyonKV0sXG4gICAgY29uZGl0aW9uczogeyBTdHJpbmdFcXVhbHM6IHsgJ2F3czpTb3VyY2VBY2NvdW50Jzogc3RhY2suYWNjb3VudCB9IH0sXG4gIH0pKTtcblxuICAvLyBPbmx5IGEgdGFnZ2VkIGJ1Y2tldCBpcyBlbXB0aWVkIChzZWUgRU1QVFlfT05fREVMRVRFX1RBRykuXG4gIFRhZ3Mub2YoYnVja2V0KS5hZGQoRU1QVFlfT05fREVMRVRFX1RBRy5rZXksIEVNUFRZX09OX0RFTEVURV9UQUcudmFsdWUpO1xuICBjb25zdCBwcm92aWRlciA9IHdlYkZ1bmN0aW9uUHJvdmlkZXIoc3RhY2spO1xuICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHsgQWN0aW9uOiBbJ3MzOkxpc3RCdWNrZXRWZXJzaW9ucycsICdzMzpHZXRCdWNrZXRUYWdnaW5nJ10sIFJlc291cmNlOiBidWNrZXQuYnVja2V0QXJuIH0pO1xuICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHsgQWN0aW9uOiBbJ3MzOkRlbGV0ZU9iamVjdCcsICdzMzpEZWxldGVPYmplY3RWZXJzaW9uJ10sIFJlc291cmNlOiBidWNrZXQuYXJuRm9yT2JqZWN0cygnKicpIH0pO1xuICBjb25zdCBwcm9wZXJ0aWVzOiBDb2RlQnVja2V0Q2xlYW51cFByb3BlcnRpZXMgPSB7IEJ1Y2tldE5hbWU6IGJ1Y2tldC5idWNrZXROYW1lIH07XG4gIC8vIERlcGVuZHMgb24gdGhlIGJ1Y2tldCAodGhyb3VnaCBpdHMgbmFtZSksIHNvIGl0J3MgZGVsZXRlZCwgYW5kIGVtcHRpZXMgaXQsIGp1c3QgYmVmb3JlIHRoZSBidWNrZXQuXG4gIG5ldyBDdXN0b21SZXNvdXJjZShzdGFjaywgYCR7SUR9Q2xlYW51cGAsIHtcbiAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICByZXNvdXJjZVR5cGU6IENPREVfQlVDS0VUX0NMRUFOVVBfUkVTT1VSQ0VfVFlQRSxcbiAgICBwcm9wZXJ0aWVzOiB7IC4uLnByb3BlcnRpZXMgfSxcbiAgfSk7XG4gIHJldHVybiBidWNrZXQ7XG59XG4iXX0=
|
|
@@ -97,3 +97,16 @@ export interface RegionalAlarmProperties {
|
|
|
97
97
|
/** PutMetricAlarm's `TreatMissingData`. */
|
|
98
98
|
readonly TreatMissingData: string;
|
|
99
99
|
}
|
|
100
|
+
/** Empties the stack's code bucket (every object version and delete marker) when the stack deletes it. */
|
|
101
|
+
export declare const CODE_BUCKET_CLEANUP_RESOURCE_TYPE = "Custom::LambdaWebCodeBucketCleanup";
|
|
102
|
+
/**
|
|
103
|
+
* Tag on the code bucket that lets the cleanup empty it. A rollback reverts the bucket's tags before it deletes
|
|
104
|
+
* resources the failed update created, so a cleanup resource added to an existing bucket never empties it on rollback.
|
|
105
|
+
*/
|
|
106
|
+
export declare const EMPTY_ON_DELETE_TAG: {
|
|
107
|
+
key: string;
|
|
108
|
+
value: string;
|
|
109
|
+
};
|
|
110
|
+
export interface CodeBucketCleanupProperties {
|
|
111
|
+
readonly BucketName: string;
|
|
112
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* CloudFormation passes every scalar property to the handler as a string.
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.REGIONAL_ALARM_RESOURCE_TYPE = exports.ALARM_NAME_PREFIX = exports.TRAFFIC_SHIFT_RESOURCE_TYPE = exports.REVISION_CLEANUP_RESOURCE_TYPE = exports.ENDPOINT_LOOKUP_RESOURCE_TYPE = exports.LOG_GROUP_RESOURCE_TYPE = exports.CODE_RESOURCE_TYPE = void 0;
|
|
10
|
+
exports.EMPTY_ON_DELETE_TAG = exports.CODE_BUCKET_CLEANUP_RESOURCE_TYPE = exports.REGIONAL_ALARM_RESOURCE_TYPE = exports.ALARM_NAME_PREFIX = exports.TRAFFIC_SHIFT_RESOURCE_TYPE = exports.REVISION_CLEANUP_RESOURCE_TYPE = exports.ENDPOINT_LOOKUP_RESOURCE_TYPE = exports.LOG_GROUP_RESOURCE_TYPE = exports.CODE_RESOURCE_TYPE = void 0;
|
|
11
11
|
exports.regionalDomainAttribute = regionalDomainAttribute;
|
|
12
12
|
/** Copies a code zip into the stack's code bucket and returns the object's version. */
|
|
13
13
|
exports.CODE_RESOURCE_TYPE = 'Custom::LambdaWebCode';
|
|
@@ -30,4 +30,11 @@ exports.TRAFFIC_SHIFT_RESOURCE_TYPE = 'Custom::LambdaWebTrafficShift';
|
|
|
30
30
|
/** Prefix of every alarm this library creates outside the stack's region; the provider's IAM is scoped to it. */
|
|
31
31
|
exports.ALARM_NAME_PREFIX = 'LambdaWeb-';
|
|
32
32
|
exports.REGIONAL_ALARM_RESOURCE_TYPE = 'Custom::LambdaWebAlarm';
|
|
33
|
-
|
|
33
|
+
/** Empties the stack's code bucket (every object version and delete marker) when the stack deletes it. */
|
|
34
|
+
exports.CODE_BUCKET_CLEANUP_RESOURCE_TYPE = 'Custom::LambdaWebCodeBucketCleanup';
|
|
35
|
+
/**
|
|
36
|
+
* Tag on the code bucket that lets the cleanup empty it. A rollback reverts the bucket's tags before it deletes
|
|
37
|
+
* resources the failed update created, so a cleanup resource added to an existing bucket never empties it on rollback.
|
|
38
|
+
*/
|
|
39
|
+
exports.EMPTY_ON_DELETE_TAG = { key: 'cdk-lambda-web:empty-on-delete', value: 'true' };
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9wcm92aWRlci1wcm90b2NvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUEyQ0gsMERBRUM7QUEzQ0QsdUZBQXVGO0FBQzFFLFFBQUEsa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFjMUQsdUdBQXVHO0FBQzFGLFFBQUEsdUJBQXVCLEdBQUcsMkJBQTJCLENBQUM7QUFjbkUsZ0hBQWdIO0FBQ25HLFFBQUEsNkJBQTZCLEdBQUcsaUNBQWlDLENBQUM7QUFTL0UsZ0ZBQWdGO0FBQ2hGLFNBQWdCLHVCQUF1QixDQUFDLE1BQWM7SUFDcEQsT0FBTyxVQUFVLE1BQU0sRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtSEFBbUg7QUFDdEcsUUFBQSw4QkFBOEIsR0FBRyxrQ0FBa0MsQ0FBQztBQWFqRjs7O0dBR0c7QUFDVSxRQUFBLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBMkIzRSxrSEFBa0g7QUFDbEgsaUhBQWlIO0FBQ3BHLFFBQUEsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLFFBQUEsNEJBQTRCLEdBQUcsd0JBQXdCLENBQUM7QUFnQnJFLDBHQUEwRztBQUM3RixRQUFBLGlDQUFpQyxHQUFHLG9DQUFvQyxDQUFDO0FBRXRGOzs7R0FHRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250cmFjdCBiZXR3ZWVuIHRoZSBjb25zdHJ1Y3RzIGFuZCB0aGUgY3VzdG9tIHJlc291cmNlIGhhbmRsZXIgaW5cbiAqIGBoYW5kbGVycy93ZWItZnVuY3Rpb24tcHJvdmlkZXJgLiBCb3RoIHNpZGVzIGltcG9ydCB0aGlzIGZpbGUsIHNvIHJlc291cmNlXG4gKiB0eXBlcyBhbmQgcHJvcGVydHkgbmFtZXMgY2FuJ3QgZHJpZnQgYXBhcnQuXG4gKlxuICogQ2xvdWRGb3JtYXRpb24gcGFzc2VzIGV2ZXJ5IHNjYWxhciBwcm9wZXJ0eSB0byB0aGUgaGFuZGxlciBhcyBhIHN0cmluZy5cbiAqL1xuXG4vKiogQ29waWVzIGEgY29kZSB6aXAgaW50byB0aGUgc3RhY2sncyBjb2RlIGJ1Y2tldCBhbmQgcmV0dXJucyB0aGUgb2JqZWN0J3MgdmVyc2lvbi4gKi9cbmV4cG9ydCBjb25zdCBDT0RFX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJDb2RlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IFNvdXJjZUJ1Y2tldDogc3RyaW5nO1xuICByZWFkb25seSBTb3VyY2VLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgU291cmNlVmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgRGVzdGluYXRpb25CdWNrZXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgRGVzdGluYXRpb25LZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQXR0cmlidXRlcyB7XG4gIHJlYWRvbmx5IFZlcnNpb25JZDogc3RyaW5nO1xufVxuXG4vKiogRW5zdXJlcyBvbmUgbG9nIGdyb3VwIChpbiBhbnkgcmVnaW9uKSBleGlzdHMgd2l0aCB0aGUgZ2l2ZW4gcmV0ZW50aW9uLCBhbmQgcmVtb3ZlcyBpdCBvbiBkZWxldGUuICovXG5leHBvcnQgY29uc3QgTE9HX0dST1VQX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJMb2dHcm91cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nR3JvdXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgUmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IExvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICAvKiogRGF5cywgb3IgJ0luZmluaXRlJyBmb3Igbm8gcmV0ZW50aW9uLiAqL1xuICByZWFkb25seSBSZXRlbnRpb25JbkRheXM6IHN0cmluZztcbiAgcmVhZG9ubHkgUmVtb3ZhbFBvbGljeTogJ3JldGFpbicgfCAnZGVzdHJveSc7XG4gIC8qKiBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nLCBzbyBlbnZpcm9ubWVudHMgc3RpbGwgc2h1dHRpbmcgZG93biBjYW4gZmx1c2ggdGhlaXIgbGFzdCBsaW5lcy4gKi9cbiAgcmVhZG9ubHkgRmx1c2hXYWl0U2Vjb25kczogc3RyaW5nO1xuICAvKiogU2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjaGVja2luZyBvbmNlIG1vcmUgdGhhdCB0aGUgc2VydmljZSBoYXNuJ3QgcmUtY3JlYXRlZCB0aGUgZ3JvdXAuICovXG4gIHJlYWRvbmx5IFJlY2hlY2tXYWl0U2Vjb25kczogc3RyaW5nO1xufVxuXG4vKiogUmVhZHMgYW4gZW5kcG9pbnQncyBwZXItcmVnaW9uIGRvbWFpbiBuYW1lcywgd2hpY2ggQ2xvdWRGb3JtYXRpb24gY2FuJ3QgaW5kZXggb3V0IG9mIGBSZWdpb25hbEVuZHBvaW50c2AuICovXG5leHBvcnQgY29uc3QgRU5EUE9JTlRfTE9PS1VQX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJFbmRwb2ludExvb2t1cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5kcG9pbnRMb29rdXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgRnVuY3Rpb25Bcm46IHN0cmluZztcbiAgcmVhZG9ubHkgRW5kcG9pbnROYW1lOiBzdHJpbmc7XG4gIC8qKiBDaGFuZ2VzIHdoZW5ldmVyIHRoZSBlbmRwb2ludCBpcyByZXBsYWNlZCwgc28gdGhlIGxvb2t1cCBydW5zIGFnYWluLiAqL1xuICByZWFkb25seSBFbmRwb2ludEFybjogc3RyaW5nO1xufVxuXG4vKiogQXR0cmlidXRlIG5hbWUgaG9sZGluZyB0aGUgZG9tYWluIG9mIG9uZSByZWdpb24sIGUuZy4gYERvbWFpbi51cy1lYXN0LTFgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvbmFsRG9tYWluQXR0cmlidXRlKHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBEb21haW4uJHtyZWdpb259YDtcbn1cblxuLyoqIERlbGV0ZXMgYSBmdW5jdGlvbidzIG9sZGVzdCByZXZpc2lvbnMgYmV5b25kIGEgY291bnQsIGV4Y2VwdCB0aG9zZSB0aGF0IGFyZSBpbiB1c2Ugb3IgbWF5IGJlIHJvbGxlZCBiYWNrIHRvLiAqL1xuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NMRUFOVVBfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYlJldmlzaW9uQ2xlYW51cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2aXNpb25DbGVhbnVwUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IEZ1bmN0aW9uQXJuOiBzdHJpbmc7XG4gIC8qKiBIb3cgbWFueSBvZiB0aGUgbmV3ZXN0IHJldmlzaW9ucyB0byBrZWVwLiAqL1xuICByZWFkb25seSBLZWVwOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXZpc2lvbnMgdGhlIHRlbXBsYXRlIHVzZXMgKHRoZSBjdXJyZW50IG9uZSBhbmQgYW55IGFuIGVuZHBvaW50IHJvdXRlcyB0bykuIEFsd2F5cyBrZXB0LCBhbmQgb24gYW4gdXBkYXRlXG4gICAqIHRoZSBwcmV2aW91cyB0ZW1wbGF0ZSdzIGFyZSBrZXB0IHRvbzogdGhleSdyZSB3aGF0IGEgcm9sbGJhY2sgcm91dGVzIGJhY2sgdG8uXG4gICAqL1xuICByZWFkb25seSBSZXZpc2lvbklkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTW92ZXMgYW4gZW5kcG9pbnQncyB0cmFmZmljIHRvIGEgcmV2aXNpb24gaW4gc3RlcHMsIHdhdGNoaW5nIGFsYXJtcyAoY2FuYXJ5IGFuZCBsaW5lYXIgZGVwbG95bWVudHMpLlxuICogU2VydmVkIGJ5IHRoZSBkZXBsb3ltZW50IHByb3ZpZGVyIChgaGFuZGxlcnMvd2ViLWZ1bmN0aW9uLWRlcGxveW1lbnRgKSwgbm90IHRoZSBzaGFyZWQgcHJvdmlkZXI6IGl0IGNhbiBydW4gZm9yIHVwIHRvIGFuIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFGRklDX1NISUZUX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJUcmFmZmljU2hpZnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWZmaWNTaGlmdFByb3BlcnRpZXMge1xuICByZWFkb25seSBGdW5jdGlvbkFybjogc3RyaW5nO1xuICByZWFkb25seSBFbmRwb2ludE5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSByZXZpc2lvbiB0aGF0IGVuZHMgdXAgd2l0aCBhbGwgb2YgdGhlIGVuZHBvaW50J3MgdHJhZmZpYy4gKi9cbiAgcmVhZG9ubHkgUmV2aXNpb25JZDogc3RyaW5nO1xuICAvKiogVGhlIHJldmlzaW9uJ3Mgc2hhcmUgb2YgdHJhZmZpYyBhdCBlYWNoIHN0ZXAsIGluIHBlcmNlbnQsIGNvbW1hLXNlcGFyYXRlZDsgdGhlIGxhc3QgaXMgMTAwLiAqL1xuICByZWFkb25seSBTdGVwczogc3RyaW5nO1xuICAvKiogU2Vjb25kcyBlYWNoIHN0ZXAgc2VydmVzIChjb3VudGVkIGZyb20gd2hlbiBpdHMgdXBkYXRlIHN0YXJ0ZWQpIGJlZm9yZSB0aGUgbmV4dC4gKi9cbiAgcmVhZG9ubHkgV2FpdFNlY29uZHM6IHN0cmluZztcbiAgLyoqIEFsYXJtcyAoaW4gYW55IHJlZ2lvbikgdGhhdCBzdG9wIHRoZSBkZXBsb3ltZW50IGFuZCByZXN0b3JlIHRoZSBwcmV2aW91cyB3ZWlnaHRzLiAqL1xuICByZWFkb25seSBBbGFybUFybnM/OiBzdHJpbmdbXTtcbiAgLyoqIEhhc2ggb2YgdGhlIGVuZHBvaW50J3Mgb3RoZXIgc2V0dGluZ3M6IGFueSBlbmRwb2ludCBjaGFuZ2UgcmUtY2hlY2tzIGl0cyB0cmFmZmljIGJlZm9yZSBDbG91ZEZvcm1hdGlvbiB3cml0ZXMgaXQuICovXG4gIHJlYWRvbmx5IEVuZHBvaW50Q29uZmlnOiBzdHJpbmc7XG59XG5cbi8qKiBXaGF0IGBvbkV2ZW50YCBoYW5kcyB0byBgaXNDb21wbGV0ZWAgKHRoZSBQcm92aWRlciBmcmFtZXdvcmsgcGFzc2VzIGl0IGFzIGBEYXRhYCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWZmaWNTaGlmdFN0YXRlIHtcbiAgLyoqIGBub25lYDogbm90aGluZyB0byBkbzsgYHNoaWZ0YDogbW92aW5nIGluIHN0ZXBzOyBgc3dpdGNoYDogYWxsIGF0IG9uY2UsIHdpdGhvdXQgYWxhcm1zIChzdGFjayByb2xsYmFjaykuICovXG4gIHJlYWRvbmx5IEFjdGlvbjogJ25vbmUnIHwgJ3NoaWZ0JyB8ICdzd2l0Y2gnO1xuICAvKiogYHNoaWZ0YDogdGhlIGVuZHBvaW50J3Mgd2VpZ2h0cyBiZWZvcmUgdGhlIGRlcGxveW1lbnQgKEpTT04gYFt7cmV2aXNpb25JZCwgd2VpZ2h0fV1gKSwgcmVzdG9yZWQgd2hlbiBhbiBhbGFybSBmaXJlcy4gKi9cbiAgcmVhZG9ubHkgUHJldmlvdXNXZWlnaHRzPzogc3RyaW5nO1xuICAvKiogYHN3aXRjaGA6IHRoZSB3ZWlnaHRzIGJlaW5nIHdyaXR0ZW4gKEpTT04gYFt7cmV2aXNpb25JZCwgd2VpZ2h0fV1gKS4gKi9cbiAgcmVhZG9ubHkgVGFyZ2V0V2VpZ2h0cz86IHN0cmluZztcbn1cblxuLyoqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBhbGFybSBpbiBhbnkgcmVnaW9uIChDbG91ZEZvcm1hdGlvbiBvbmx5IGNyZWF0ZXMgYWxhcm1zIGluIHRoZSBzdGFjaydzIHJlZ2lvbikuICovXG4vKiogUHJlZml4IG9mIGV2ZXJ5IGFsYXJtIHRoaXMgbGlicmFyeSBjcmVhdGVzIG91dHNpZGUgdGhlIHN0YWNrJ3MgcmVnaW9uOyB0aGUgcHJvdmlkZXIncyBJQU0gaXMgc2NvcGVkIHRvIGl0LiAqL1xuZXhwb3J0IGNvbnN0IEFMQVJNX05BTUVfUFJFRklYID0gJ0xhbWJkYVdlYi0nO1xuZXhwb3J0IGNvbnN0IFJFR0lPTkFMX0FMQVJNX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJBbGFybSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uYWxBbGFybVByb3BlcnRpZXMge1xuICByZWFkb25seSBSZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgQWxhcm1OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IEFsYXJtRGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFB1dE1ldHJpY0FsYXJtJ3MgYE1ldHJpY3NgLCBhcyBKU09OLiAqL1xuICByZWFkb25seSBNZXRyaWNzOiBzdHJpbmc7XG4gIHJlYWRvbmx5IFRocmVzaG9sZDogc3RyaW5nO1xuICByZWFkb25seSBFdmFsdWF0aW9uUGVyaW9kczogc3RyaW5nO1xuICAvKiogUHV0TWV0cmljQWxhcm0ncyBgQ29tcGFyaXNvbk9wZXJhdG9yYC4gKi9cbiAgcmVhZG9ubHkgQ29tcGFyaXNvbk9wZXJhdG9yOiBzdHJpbmc7XG4gIC8qKiBQdXRNZXRyaWNBbGFybSdzIGBUcmVhdE1pc3NpbmdEYXRhYC4gKi9cbiAgcmVhZG9ubHkgVHJlYXRNaXNzaW5nRGF0YTogc3RyaW5nO1xufVxuXG4vKiogRW1wdGllcyB0aGUgc3RhY2sncyBjb2RlIGJ1Y2tldCAoZXZlcnkgb2JqZWN0IHZlcnNpb24gYW5kIGRlbGV0ZSBtYXJrZXIpIHdoZW4gdGhlIHN0YWNrIGRlbGV0ZXMgaXQuICovXG5leHBvcnQgY29uc3QgQ09ERV9CVUNLRVRfQ0xFQU5VUF9SRVNPVVJDRV9UWVBFID0gJ0N1c3RvbTo6TGFtYmRhV2ViQ29kZUJ1Y2tldENsZWFudXAnO1xuXG4vKipcbiAqIFRhZyBvbiB0aGUgY29kZSBidWNrZXQgdGhhdCBsZXRzIHRoZSBjbGVhbnVwIGVtcHR5IGl0LiBBIHJvbGxiYWNrIHJldmVydHMgdGhlIGJ1Y2tldCdzIHRhZ3MgYmVmb3JlIGl0IGRlbGV0ZXNcbiAqIHJlc291cmNlcyB0aGUgZmFpbGVkIHVwZGF0ZSBjcmVhdGVkLCBzbyBhIGNsZWFudXAgcmVzb3VyY2UgYWRkZWQgdG8gYW4gZXhpc3RpbmcgYnVja2V0IG5ldmVyIGVtcHRpZXMgaXQgb24gcm9sbGJhY2suXG4gKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9PTl9ERUxFVEVfVEFHID0geyBrZXk6ICdjZGstbGFtYmRhLXdlYjplbXB0eS1vbi1kZWxldGUnLCB2YWx1ZTogJ3RydWUnIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1Y2tldENsZWFudXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgQnVja2V0TmFtZTogc3RyaW5nO1xufVxuIl19
|
|
@@ -2,8 +2,9 @@ import { CustomResourceProvider } from 'aws-cdk-lib';
|
|
|
2
2
|
import type { Construct } from 'constructs';
|
|
3
3
|
/**
|
|
4
4
|
* The single custom resource provider (one Lambda per stack) behind code copies, log groups,
|
|
5
|
-
* endpoint lookups, revision cleanup
|
|
6
|
-
* not a `lambda.Function`, so tools that discover functions by class (e.g. cdk-watchful)
|
|
5
|
+
* endpoint lookups, revision cleanup, alarms in other regions and emptying the code bucket. It's a core
|
|
6
|
+
* `CustomResourceProvider`, not a `lambda.Function`, so tools that discover functions by class (e.g. cdk-watchful)
|
|
7
|
+
* don't pick it up.
|
|
7
8
|
*/
|
|
8
9
|
export declare function webFunctionProvider(scope: Construct): CustomResourceProvider;
|
|
9
10
|
/**
|
package/lib/private/provider.js
CHANGED
|
@@ -37,14 +37,17 @@ exports.webFunctionProvider = webFunctionProvider;
|
|
|
37
37
|
exports.grantToProvider = grantToProvider;
|
|
38
38
|
const path = __importStar(require("node:path"));
|
|
39
39
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
40
|
+
const logs = __importStar(require("aws-cdk-lib/aws-logs"));
|
|
40
41
|
const provider_protocol_1 = require("./provider-protocol");
|
|
41
42
|
/**
|
|
42
43
|
* The single custom resource provider (one Lambda per stack) behind code copies, log groups,
|
|
43
|
-
* endpoint lookups, revision cleanup
|
|
44
|
-
* not a `lambda.Function`, so tools that discover functions by class (e.g. cdk-watchful)
|
|
44
|
+
* endpoint lookups, revision cleanup, alarms in other regions and emptying the code bucket. It's a core
|
|
45
|
+
* `CustomResourceProvider`, not a `lambda.Function`, so tools that discover functions by class (e.g. cdk-watchful)
|
|
46
|
+
* don't pick it up.
|
|
45
47
|
*/
|
|
46
48
|
function webFunctionProvider(scope) {
|
|
47
|
-
const
|
|
49
|
+
const stack = aws_cdk_lib_1.Stack.of(scope);
|
|
50
|
+
const provider = aws_cdk_lib_1.CustomResourceProvider.getOrCreateProvider(scope, PROVIDER_ID, {
|
|
48
51
|
codeDirectory: path.join(__dirname, '..', '..', 'assets', 'web-function-provider'),
|
|
49
52
|
runtime: aws_cdk_lib_1.CustomResourceProviderRuntime.NODEJS_24_X,
|
|
50
53
|
// Log group deletion waits for late flushes (75s + a re-check) on top of the API calls.
|
|
@@ -60,8 +63,26 @@ function webFunctionProvider(scope) {
|
|
|
60
63
|
service: 'cloudwatch', region: '*', resource: 'alarm', resourceName: `${provider_protocol_1.ALARM_NAME_PREFIX}*`, arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
|
|
61
64
|
}),
|
|
62
65
|
});
|
|
66
|
+
if (stack.node.tryFindChild(LOG_GROUP_ID))
|
|
67
|
+
return provider;
|
|
68
|
+
// Logs go to a group the stack owns, with retention, deleted with the stack: the provider's default group
|
|
69
|
+
// (/aws/lambda/<function>) would be created by Lambda without retention and outlive the stack.
|
|
70
|
+
const logGroup = new logs.LogGroup(stack, LOG_GROUP_ID, {
|
|
71
|
+
retention: logs.RetentionDays.ONE_MONTH,
|
|
72
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
73
|
+
});
|
|
74
|
+
const handler = provider.node.findChild('Handler');
|
|
75
|
+
handler.addPropertyOverride('LoggingConfig', { LogGroup: logGroup.logGroupName, LogFormat: 'Text' });
|
|
76
|
+
handler.addDependency(logGroup.node.defaultChild);
|
|
77
|
+
// Only write to that group. The default AWSLambdaBasicExecutionRole allows logs:CreateLogGroup, so log lines
|
|
78
|
+
// Lambda delivers late, after CloudFormation deleted the group with the stack, would re-create it without retention.
|
|
79
|
+
// No Role child when the app uses pre-created roles (iam.Role.customizeRoles): that role is managed outside CDK.
|
|
80
|
+
provider.node.tryFindChild('Role')?.addPropertyDeletionOverride('ManagedPolicyArns');
|
|
81
|
+
grantToProvider(provider, { Action: ['logs:CreateLogStream', 'logs:PutLogEvents'], Resource: logGroup.logGroupArn });
|
|
63
82
|
return provider;
|
|
64
83
|
}
|
|
84
|
+
const PROVIDER_ID = 'Custom::LambdaWebFunctionProvider';
|
|
85
|
+
const LOG_GROUP_ID = 'LambdaWebFunctionProviderLogs';
|
|
65
86
|
const granted = new WeakMap();
|
|
66
87
|
/**
|
|
67
88
|
* Adds a statement to the shared provider's role, once.
|
|
@@ -84,4 +105,4 @@ function grantToProvider(provider, statement) {
|
|
|
84
105
|
seen.add(key);
|
|
85
106
|
provider.addToRolePolicy({ Effect: 'Allow', ...statement });
|
|
86
107
|
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLGtEQWtDQztBQWdCRCwwQ0FVQztBQXhFRCxnREFBa0M7QUFDbEMsNkNBQXVKO0FBQ3ZKLDJEQUE2QztBQUU3QywyREFBd0Q7QUFFeEQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFnQjtJQUNsRCxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixNQUFNLFFBQVEsR0FBRyxvQ0FBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFO1FBQzlFLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQztRQUNsRixPQUFPLEVBQUUsMkNBQTZCLENBQUMsV0FBVztRQUNsRCx3RkFBd0Y7UUFDeEYsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM1QixVQUFVLEVBQUUsa0JBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQy9CLFdBQVcsRUFBRSxzR0FBc0c7S0FDcEgsQ0FBQyxDQUFDO0lBQ0gsNkdBQTZHO0lBQzdHLHNHQUFzRztJQUN0RyxlQUFlLENBQUMsUUFBUSxFQUFFO1FBQ3hCLE1BQU0sRUFBRSxDQUFDLDJCQUEyQixFQUFFLHlCQUF5QixDQUFDO1FBQ2hFLFFBQVEsRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcscUNBQWlCLEdBQUcsRUFBRSxTQUFTLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUI7U0FDdkksQ0FBQztLQUNILENBQUMsQ0FBQztJQUNILElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDM0QsMEdBQTBHO0lBQzFHLCtGQUErRjtJQUMvRixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtRQUN0RCxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTO1FBQ3ZDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87S0FDckMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFnQixDQUFDO0lBQ2xFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBMkIsQ0FBQyxDQUFDO0lBQ2pFLDZHQUE2RztJQUM3RyxxSEFBcUg7SUFDckgsaUhBQWlIO0lBQ2hILFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBNkIsRUFBRSwyQkFBMkIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xILGVBQWUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNySCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxXQUFXLEdBQUcsbUNBQW1DLENBQUM7QUFDeEQsTUFBTSxZQUFZLEdBQUcsK0JBQStCLENBQUM7QUFFckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQXVDLENBQUM7QUFFbkU7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixlQUFlLENBQUMsUUFBZ0MsRUFBRSxTQUFxRTtJQUNySSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPO0lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IEFybkZvcm1hdCwgdHlwZSBDZm5SZXNvdXJjZSwgQ3VzdG9tUmVzb3VyY2VQcm92aWRlciwgQ3VzdG9tUmVzb3VyY2VQcm92aWRlclJ1bnRpbWUsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBTaXplLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEFMQVJNX05BTUVfUFJFRklYIH0gZnJvbSAnLi9wcm92aWRlci1wcm90b2NvbCc7XG5cbi8qKlxuICogVGhlIHNpbmdsZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIgKG9uZSBMYW1iZGEgcGVyIHN0YWNrKSBiZWhpbmQgY29kZSBjb3BpZXMsIGxvZyBncm91cHMsXG4gKiBlbmRwb2ludCBsb29rdXBzLCByZXZpc2lvbiBjbGVhbnVwLCBhbGFybXMgaW4gb3RoZXIgcmVnaW9ucyBhbmQgZW1wdHlpbmcgdGhlIGNvZGUgYnVja2V0LiBJdCdzIGEgY29yZVxuICogYEN1c3RvbVJlc291cmNlUHJvdmlkZXJgLCBub3QgYSBgbGFtYmRhLkZ1bmN0aW9uYCwgc28gdG9vbHMgdGhhdCBkaXNjb3ZlciBmdW5jdGlvbnMgYnkgY2xhc3MgKGUuZy4gY2RrLXdhdGNoZnVsKVxuICogZG9uJ3QgcGljayBpdCB1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYkZ1bmN0aW9uUHJvdmlkZXIoc2NvcGU6IENvbnN0cnVjdCk6IEN1c3RvbVJlc291cmNlUHJvdmlkZXIge1xuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3QgcHJvdmlkZXIgPSBDdXN0b21SZXNvdXJjZVByb3ZpZGVyLmdldE9yQ3JlYXRlUHJvdmlkZXIoc2NvcGUsIFBST1ZJREVSX0lELCB7XG4gICAgY29kZURpcmVjdG9yeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2Fzc2V0cycsICd3ZWItZnVuY3Rpb24tcHJvdmlkZXInKSxcbiAgICBydW50aW1lOiBDdXN0b21SZXNvdXJjZVByb3ZpZGVyUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAvLyBMb2cgZ3JvdXAgZGVsZXRpb24gd2FpdHMgZm9yIGxhdGUgZmx1c2hlcyAoNzVzICsgYSByZS1jaGVjaykgb24gdG9wIG9mIHRoZSBBUEkgY2FsbHMuXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICBtZW1vcnlTaXplOiBTaXplLm1lYmlieXRlcygyNTYpLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29waWVzIGNvZGUsIG1hbmFnZXMgbG9nIGdyb3VwcywgbG9va3MgdXAgZW5kcG9pbnRzIGFuZCBjbGVhbnMgdXAgcmV2aXNpb25zIGZvciBMYW1iZGEgV2ViIEZ1bmN0aW9ucycsXG4gIH0pO1xuICAvLyBHcmFudGVkIHdoZXRoZXIgb3Igbm90IGEgc3RhY2sgaGFzIGFsYXJtcyBpbiBvdGhlciByZWdpb25zIHlldDogYSBncmFudCBhZGRlZCBvciByZW1vdmVkIHRvZ2V0aGVyIHdpdGggdGhlXG4gIC8vIGFsYXJtIGZhaWxzIG9uIElBTSBwcm9wYWdhdGlvbiwgb3IgbGVhdmVzIHRoZSBhbGFybSBiZWhpbmQgd2hlbiBpdCdzIHJlbW92ZWQgKHNlZSBncmFudFRvUHJvdmlkZXIpLlxuICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHtcbiAgICBBY3Rpb246IFsnY2xvdWR3YXRjaDpQdXRNZXRyaWNBbGFybScsICdjbG91ZHdhdGNoOkRlbGV0ZUFsYXJtcyddLFxuICAgIFJlc291cmNlOiBTdGFjay5vZihwcm92aWRlcikuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdjbG91ZHdhdGNoJywgcmVnaW9uOiAnKicsIHJlc291cmNlOiAnYWxhcm0nLCByZXNvdXJjZU5hbWU6IGAke0FMQVJNX05BTUVfUFJFRklYfSpgLCBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgIH0pLFxuICB9KTtcbiAgaWYgKHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKExPR19HUk9VUF9JRCkpIHJldHVybiBwcm92aWRlcjtcbiAgLy8gTG9ncyBnbyB0byBhIGdyb3VwIHRoZSBzdGFjayBvd25zLCB3aXRoIHJldGVudGlvbiwgZGVsZXRlZCB3aXRoIHRoZSBzdGFjazogdGhlIHByb3ZpZGVyJ3MgZGVmYXVsdCBncm91cFxuICAvLyAoL2F3cy9sYW1iZGEvPGZ1bmN0aW9uPikgd291bGQgYmUgY3JlYXRlZCBieSBMYW1iZGEgd2l0aG91dCByZXRlbnRpb24gYW5kIG91dGxpdmUgdGhlIHN0YWNrLlxuICBjb25zdCBsb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHN0YWNrLCBMT0dfR1JPVVBfSUQsIHtcbiAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICB9KTtcbiAgY29uc3QgaGFuZGxlciA9IHByb3ZpZGVyLm5vZGUuZmluZENoaWxkKCdIYW5kbGVyJykgYXMgQ2ZuUmVzb3VyY2U7XG4gIGhhbmRsZXIuYWRkUHJvcGVydHlPdmVycmlkZSgnTG9nZ2luZ0NvbmZpZycsIHsgTG9nR3JvdXA6IGxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSwgTG9nRm9ybWF0OiAnVGV4dCcgfSk7XG4gIGhhbmRsZXIuYWRkRGVwZW5kZW5jeShsb2dHcm91cC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5SZXNvdXJjZSk7XG4gIC8vIE9ubHkgd3JpdGUgdG8gdGhhdCBncm91cC4gVGhlIGRlZmF1bHQgQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlIGFsbG93cyBsb2dzOkNyZWF0ZUxvZ0dyb3VwLCBzbyBsb2cgbGluZXNcbiAgLy8gTGFtYmRhIGRlbGl2ZXJzIGxhdGUsIGFmdGVyIENsb3VkRm9ybWF0aW9uIGRlbGV0ZWQgdGhlIGdyb3VwIHdpdGggdGhlIHN0YWNrLCB3b3VsZCByZS1jcmVhdGUgaXQgd2l0aG91dCByZXRlbnRpb24uXG4gIC8vIE5vIFJvbGUgY2hpbGQgd2hlbiB0aGUgYXBwIHVzZXMgcHJlLWNyZWF0ZWQgcm9sZXMgKGlhbS5Sb2xlLmN1c3RvbWl6ZVJvbGVzKTogdGhhdCByb2xlIGlzIG1hbmFnZWQgb3V0c2lkZSBDREsuXG4gIChwcm92aWRlci5ub2RlLnRyeUZpbmRDaGlsZCgnUm9sZScpIGFzIENmblJlc291cmNlIHwgdW5kZWZpbmVkKT8uYWRkUHJvcGVydHlEZWxldGlvbk92ZXJyaWRlKCdNYW5hZ2VkUG9saWN5QXJucycpO1xuICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHsgQWN0aW9uOiBbJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJywgJ2xvZ3M6UHV0TG9nRXZlbnRzJ10sIFJlc291cmNlOiBsb2dHcm91cC5sb2dHcm91cEFybiB9KTtcbiAgcmV0dXJuIHByb3ZpZGVyO1xufVxuXG5jb25zdCBQUk9WSURFUl9JRCA9ICdDdXN0b206OkxhbWJkYVdlYkZ1bmN0aW9uUHJvdmlkZXInO1xuY29uc3QgTE9HX0dST1VQX0lEID0gJ0xhbWJkYVdlYkZ1bmN0aW9uUHJvdmlkZXJMb2dzJztcblxuY29uc3QgZ3JhbnRlZCA9IG5ldyBXZWFrTWFwPEN1c3RvbVJlc291cmNlUHJvdmlkZXIsIFNldDxzdHJpbmc+PigpO1xuXG4vKipcbiAqIEFkZHMgYSBzdGF0ZW1lbnQgdG8gdGhlIHNoYXJlZCBwcm92aWRlcidzIHJvbGUsIG9uY2UuXG4gKlxuICogR3JhbnRzIG11c3QgYmUgKipzdGFibGUgYWNyb3NzIHVwZGF0ZXMqKjogc2NvcGVkIGJ5IHByZWZpeGVzIHRoYXQgZG9uJ3QgY2hhbmdlIHdoZW4gYVxuICogcmVzb3VyY2UgaXMgcmVuYW1lZCBvciByZXBsYWNlZC4gQ2xvdWRGb3JtYXRpb24gdXBkYXRlcyB0aGUgcm9sZSBqdXN0IGJlZm9yZSAoYW5kIG9uIHJvbGxiYWNrLFxuICogcmV2ZXJ0cyBpdCBqdXN0IGJlZm9yZSkgdGhlIGN1c3RvbSByZXNvdXJjZXMgcnVuLCBhbmQgSUFNIHRha2VzIHNlY29uZHMgdG8gbWludXRlcyB0b1xuICogcHJvcGFnYXRlLCBzbyBwZXItbmFtZSBncmFudHMgZmFpbCB3aXRoIEFjY2Vzc0RlbmllZCBvbiByZW5hbWVzIGFuZCBvbiByb2xsYmFjayBjbGVhbnVwLlxuICogVGhleSBtdXN0IGFsc28gbmV2ZXIgcmVmZXJlbmNlIGF0dHJpYnV0ZXMgb2YgcmVzb3VyY2VzIHRoYXQgdXNlIHRoZSBwcm92aWRlciAoY3ljbGUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhbnRUb1Byb3ZpZGVyKHByb3ZpZGVyOiBDdXN0b21SZXNvdXJjZVByb3ZpZGVyLCBzdGF0ZW1lbnQ6IHsgQWN0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXTsgUmVzb3VyY2U6IHN0cmluZyB8IHN0cmluZ1tdIH0pOiB2b2lkIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoU3RhY2sub2YocHJvdmlkZXIpLnJlc29sdmUoc3RhdGVtZW50KSk7XG4gIGxldCBzZWVuID0gZ3JhbnRlZC5nZXQocHJvdmlkZXIpO1xuICBpZiAoIXNlZW4pIHtcbiAgICBzZWVuID0gbmV3IFNldCgpO1xuICAgIGdyYW50ZWQuc2V0KHByb3ZpZGVyLCBzZWVuKTtcbiAgfVxuICBpZiAoc2Vlbi5oYXMoa2V5KSkgcmV0dXJuO1xuICBzZWVuLmFkZChrZXkpO1xuICBwcm92aWRlci5hZGRUb1JvbGVQb2xpY3koeyBFZmZlY3Q6ICdBbGxvdycsIC4uLnN0YXRlbWVudCB9KTtcbn1cbiJdfQ==
|
|
@@ -11,7 +11,7 @@ const MAX_STEPS = 20;
|
|
|
11
11
|
* How an endpoint moves its traffic to a new revision.
|
|
12
12
|
*/
|
|
13
13
|
class WebFunctionDeployment {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.4" };
|
|
15
15
|
/**
|
|
16
16
|
* All traffic moves to the new revision at once, as soon as it's ready (the default).
|
|
17
17
|
*/
|
|
@@ -53,7 +53,7 @@ const web_function_grants_1 = require("./web-function-grants");
|
|
|
53
53
|
* Endpoints are created only through `WebFunction`, which owns their log groups in every region, so the constructor is private.
|
|
54
54
|
*/
|
|
55
55
|
class WebFunctionEndpoint extends constructs_1.Construct {
|
|
56
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpoint", version: "0.1.
|
|
56
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpoint", version: "0.1.4" };
|
|
57
57
|
/**
|
|
58
58
|
* Creates an endpoint of a Web Function. Used by `WebFunction`.
|
|
59
59
|
*
|
|
@@ -4,11 +4,17 @@ import type { WebFunctionEndpoint } from './web-function-endpoint';
|
|
|
4
4
|
* Grants on a Web Function endpoint. Access them as `fn.grants` (the default endpoint) or `endpoint.grants`.
|
|
5
5
|
*/
|
|
6
6
|
export declare class WebFunctionGrants {
|
|
7
|
-
private readonly
|
|
7
|
+
private readonly endpointArns;
|
|
8
8
|
/**
|
|
9
9
|
* @internal
|
|
10
10
|
*/
|
|
11
11
|
static _forEndpoint(endpoint: WebFunctionEndpoint): WebFunctionGrants;
|
|
12
|
+
/**
|
|
13
|
+
* Grants on endpoints known only by ARN (an imported function's).
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
static _forEndpointArns(endpointArns: string[]): WebFunctionGrants;
|
|
12
18
|
private constructor();
|
|
13
19
|
/**
|
|
14
20
|
* Allows `grantee` to call the endpoint (`lambda:InvokeWebFunctionEndpoint`).
|
|
@@ -40,16 +40,24 @@ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
|
40
40
|
* Grants on a Web Function endpoint. Access them as `fn.grants` (the default endpoint) or `endpoint.grants`.
|
|
41
41
|
*/
|
|
42
42
|
class WebFunctionGrants {
|
|
43
|
-
|
|
44
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionGrants", version: "0.1.
|
|
43
|
+
endpointArns;
|
|
44
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionGrants", version: "0.1.4" };
|
|
45
45
|
/**
|
|
46
46
|
* @internal
|
|
47
47
|
*/
|
|
48
48
|
static _forEndpoint(endpoint) {
|
|
49
|
-
return new WebFunctionGrants(endpoint);
|
|
49
|
+
return new WebFunctionGrants(() => [endpoint.endpointArn]);
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Grants on endpoints known only by ARN (an imported function's).
|
|
53
|
+
*
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
static _forEndpointArns(endpointArns) {
|
|
57
|
+
return new WebFunctionGrants(() => endpointArns);
|
|
58
|
+
}
|
|
59
|
+
constructor(endpointArns) {
|
|
60
|
+
this.endpointArns = endpointArns;
|
|
53
61
|
}
|
|
54
62
|
/**
|
|
55
63
|
* Allows `grantee` to call the endpoint (`lambda:InvokeWebFunctionEndpoint`).
|
|
@@ -61,9 +69,9 @@ class WebFunctionGrants {
|
|
|
61
69
|
return iam.Grant.addToPrincipal({
|
|
62
70
|
grantee,
|
|
63
71
|
actions: ['lambda:InvokeWebFunctionEndpoint'],
|
|
64
|
-
resourceArns:
|
|
72
|
+
resourceArns: this.endpointArns(),
|
|
65
73
|
});
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
76
|
exports.WebFunctionGrants = WebFunctionGrants;
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLWdyYW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWItZnVuY3Rpb24tZ3JhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkM7QUFHM0M7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQWlCUzs7SUFoQnJDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUE2QjtRQUN0RCxPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFzQjtRQUNuRCxPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFlBQXFDLFlBQTRCO1FBQTVCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtJQUFHLENBQUM7SUFFckU7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsT0FBdUI7UUFDbkMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTyxFQUFFLENBQUMsa0NBQWtDLENBQUM7WUFDN0MsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvQkgsOENBZ0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgeyBXZWJGdW5jdGlvbkVuZHBvaW50IH0gZnJvbSAnLi93ZWItZnVuY3Rpb24tZW5kcG9pbnQnO1xuXG4vKipcbiAqIEdyYW50cyBvbiBhIFdlYiBGdW5jdGlvbiBlbmRwb2ludC4gQWNjZXNzIHRoZW0gYXMgYGZuLmdyYW50c2AgKHRoZSBkZWZhdWx0IGVuZHBvaW50KSBvciBgZW5kcG9pbnQuZ3JhbnRzYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYkZ1bmN0aW9uR3JhbnRzIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBfZm9yRW5kcG9pbnQoZW5kcG9pbnQ6IFdlYkZ1bmN0aW9uRW5kcG9pbnQpOiBXZWJGdW5jdGlvbkdyYW50cyB7XG4gICAgcmV0dXJuIG5ldyBXZWJGdW5jdGlvbkdyYW50cygoKSA9PiBbZW5kcG9pbnQuZW5kcG9pbnRBcm5dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgb24gZW5kcG9pbnRzIGtub3duIG9ubHkgYnkgQVJOIChhbiBpbXBvcnRlZCBmdW5jdGlvbidzKS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIF9mb3JFbmRwb2ludEFybnMoZW5kcG9pbnRBcm5zOiBzdHJpbmdbXSk6IFdlYkZ1bmN0aW9uR3JhbnRzIHtcbiAgICByZXR1cm4gbmV3IFdlYkZ1bmN0aW9uR3JhbnRzKCgpID0+IGVuZHBvaW50QXJucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRBcm5zOiAoKSA9PiBzdHJpbmdbXSkge31cblxuICAvKipcbiAgICogQWxsb3dzIGBncmFudGVlYCB0byBjYWxsIHRoZSBlbmRwb2ludCAoYGxhbWJkYTpJbnZva2VXZWJGdW5jdGlvbkVuZHBvaW50YCkuXG4gICAqXG4gICAqIFRoZSBncmFudCBpcyBvbiB0aGUgZW5kcG9pbnQncyBob21lLXJlZ2lvbiBBUk4sIHdoaWNoIElBTSBldmFsdWF0ZXMgZm9yIGV2ZXJ5IHJlZ2lvbiB0aGVcbiAgICogZW5kcG9pbnQgc2VydmVzIGZyb20sIGluY2x1ZGluZyBhIE1VTFRJX1JFR0lPTiBnbG9iYWwgVVJMLlxuICAgKi9cbiAgcHVibGljIGludm9rZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlV2ViRnVuY3Rpb25FbmRwb2ludCddLFxuICAgICAgcmVzb3VyY2VBcm5zOiB0aGlzLmVuZHBvaW50QXJucygpLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -11,7 +11,7 @@ const constructs_1 = require("constructs");
|
|
|
11
11
|
* only revisions within `revisionRetention`, or that an endpoint routes to, are kept.
|
|
12
12
|
*/
|
|
13
13
|
class WebFunctionRevision extends constructs_1.Construct {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionRevision", version: "0.1.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionRevision", version: "0.1.4" };
|
|
15
15
|
/**
|
|
16
16
|
* References an existing revision of `webFunction`, e.g. to pin an endpoint to it or split traffic with it.
|
|
17
17
|
*/
|
package/lib/web-function.d.ts
CHANGED
|
@@ -126,7 +126,7 @@ export interface WebFunctionProps extends WebFunctionOptions {
|
|
|
126
126
|
readonly entrypoint?: string;
|
|
127
127
|
}
|
|
128
128
|
/**
|
|
129
|
-
* A Lambda Web Function.
|
|
129
|
+
* A Lambda Web Function, created in this app (`WebFunction`) or imported (`WebFunction.fromWebFunctionArn`).
|
|
130
130
|
*/
|
|
131
131
|
export interface IWebFunction extends IResource, lambda.IWebFunctionRef {
|
|
132
132
|
/**
|
|
@@ -141,6 +141,95 @@ export interface IWebFunction extends IResource, lambda.IWebFunctionRef {
|
|
|
141
141
|
* @attribute
|
|
142
142
|
*/
|
|
143
143
|
readonly webFunctionArn: string;
|
|
144
|
+
/**
|
|
145
|
+
* Allows `grantee` to call the function's endpoint (`lambda:InvokeWebFunctionEndpoint`): the default endpoint
|
|
146
|
+
* of a `WebFunction`; for an imported function, the endpoint named in its attributes, or every endpoint.
|
|
147
|
+
*
|
|
148
|
+
* This adds to the grantee's IAM policy. For a function in another account, its resource policy must also allow the grantee.
|
|
149
|
+
* [disable-awslint:no-grants]
|
|
150
|
+
*/
|
|
151
|
+
grantInvoke(grantee: iam.IGrantable): iam.Grant;
|
|
152
|
+
/**
|
|
153
|
+
* A metric of the function's execution environments in `AWS/Lambda/Web` (dimension `FunctionName`).
|
|
154
|
+
*/
|
|
155
|
+
metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
156
|
+
/** Time the execution environments were active (`EnvironmentActiveTime`). */
|
|
157
|
+
metricActiveTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
158
|
+
/** CPU time the execution environments used (`EnvironmentCPUTime`). */
|
|
159
|
+
metricCpuTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
160
|
+
/** Requests an execution environment handled at once (`EnvironmentConcurrentRequests`, maximum). */
|
|
161
|
+
metricConcurrentRequests(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
162
|
+
/** Peak memory an execution environment used (`EnvironmentMaxMemoryUsage`, maximum). */
|
|
163
|
+
metricMaxMemoryUsage(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
164
|
+
/** Bytes sent in responses (`ResponseBytes`). */
|
|
165
|
+
metricResponseBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Attributes of an existing Web Function. Give its ARN or its name.
|
|
169
|
+
*/
|
|
170
|
+
export interface WebFunctionAttributes {
|
|
171
|
+
/**
|
|
172
|
+
* The function's ARN, e.g. `arn:aws:lambda:us-east-1:111122223333:web-function/orders`. It may be in another
|
|
173
|
+
* region or account; across accounts, `grantInvoke` also needs the function's resource policy to allow the caller.
|
|
174
|
+
*
|
|
175
|
+
* @default - built from `webFunctionName`, in this stack's account and region
|
|
176
|
+
*/
|
|
177
|
+
readonly webFunctionArn?: string;
|
|
178
|
+
/**
|
|
179
|
+
* The function's name.
|
|
180
|
+
*
|
|
181
|
+
* @default - taken from `webFunctionArn`
|
|
182
|
+
*/
|
|
183
|
+
readonly webFunctionName?: string;
|
|
184
|
+
/**
|
|
185
|
+
* The endpoint `grantInvoke` allows calling.
|
|
186
|
+
*
|
|
187
|
+
* @default - every endpoint of the function
|
|
188
|
+
*/
|
|
189
|
+
readonly endpointName?: string;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* What `WebFunction` and imported functions have in common.
|
|
193
|
+
*/
|
|
194
|
+
export declare abstract class WebFunctionBase extends Resource implements IWebFunction {
|
|
195
|
+
abstract readonly webFunctionName: string;
|
|
196
|
+
abstract readonly webFunctionArn: string;
|
|
197
|
+
/** A reference to this function, for APIs that accept `lambda.IWebFunctionRef`. */
|
|
198
|
+
get webFunctionRef(): lambda.WebFunctionReference;
|
|
199
|
+
/**
|
|
200
|
+
* Allows `grantee` to call the function's endpoint.
|
|
201
|
+
* [disable-awslint:no-grants]
|
|
202
|
+
*/
|
|
203
|
+
abstract grantInvoke(grantee: iam.IGrantable): iam.Grant;
|
|
204
|
+
/**
|
|
205
|
+
* A metric of this function's execution environments in `AWS/Lambda/Web` (dimension `FunctionName`), across all endpoints.
|
|
206
|
+
* For request and error counts, use the endpoint's metrics (`fn.endpoint.metricRequests()`).
|
|
207
|
+
*
|
|
208
|
+
* Metrics are published in the region that served the request: pass `region` for another serving region.
|
|
209
|
+
* An alarm can only use metrics from its own stack's region.
|
|
210
|
+
*
|
|
211
|
+
* @default - sum over 1 minute, in the function's home region
|
|
212
|
+
*/
|
|
213
|
+
metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
214
|
+
/** Time the execution environments were active (`EnvironmentActiveTime`). */
|
|
215
|
+
metricActiveTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
216
|
+
/** CPU time the execution environments used (`EnvironmentCPUTime`). */
|
|
217
|
+
metricCpuTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
218
|
+
/**
|
|
219
|
+
* Requests an execution environment handled at once (`EnvironmentConcurrentRequests`), to compare with
|
|
220
|
+
* `maxConcurrencyPerEnvironment`.
|
|
221
|
+
*
|
|
222
|
+
* @default - maximum over 1 minute
|
|
223
|
+
*/
|
|
224
|
+
metricConcurrentRequests(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
225
|
+
/**
|
|
226
|
+
* Peak memory an execution environment used (`EnvironmentMaxMemoryUsage`); each environment has 2 GB.
|
|
227
|
+
*
|
|
228
|
+
* @default - maximum over 1 minute
|
|
229
|
+
*/
|
|
230
|
+
metricMaxMemoryUsage(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
231
|
+
/** Bytes sent in responses (`ResponseBytes`). */
|
|
232
|
+
metricResponseBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
144
233
|
}
|
|
145
234
|
/**
|
|
146
235
|
* A Node.js HTTP server running as an AWS Lambda Web Function, served from one or more regions.
|
|
@@ -149,11 +238,23 @@ export interface IWebFunction extends IResource, lambda.IWebFunctionRef {
|
|
|
149
238
|
* and the newest `revisionRetention` are kept), a default HTTPS endpoint, an execution role, and owns
|
|
150
239
|
* the function's log groups in every region its endpoints serve from.
|
|
151
240
|
*
|
|
152
|
-
*
|
|
241
|
+
* Use `fromWebFunctionArn`, `fromWebFunctionName` or `fromWebFunctionAttributes` for a function defined elsewhere.
|
|
153
242
|
*
|
|
154
243
|
* @resource AWS::Lambda::WebFunction
|
|
155
244
|
*/
|
|
156
|
-
export declare class WebFunction extends
|
|
245
|
+
export declare class WebFunction extends WebFunctionBase implements iam.IGrantable {
|
|
246
|
+
/**
|
|
247
|
+
* Imports an existing Web Function by its ARN (in any region or account).
|
|
248
|
+
*/
|
|
249
|
+
static fromWebFunctionArn(scope: Construct, id: string, webFunctionArn: string): IWebFunction;
|
|
250
|
+
/**
|
|
251
|
+
* Imports an existing Web Function in this stack's account and region by its name.
|
|
252
|
+
*/
|
|
253
|
+
static fromWebFunctionName(scope: Construct, id: string, webFunctionName: string): IWebFunction;
|
|
254
|
+
/**
|
|
255
|
+
* Imports an existing Web Function: give its ARN or its name, and optionally the endpoint `grantInvoke` allows.
|
|
256
|
+
*/
|
|
257
|
+
static fromWebFunctionAttributes(scope: Construct, id: string, attrs: WebFunctionAttributes): IWebFunction;
|
|
157
258
|
readonly webFunctionName: string;
|
|
158
259
|
readonly webFunctionArn: string;
|
|
159
260
|
/** The ID of the current revision. Same as `currentRevision.revisionId`. */
|
|
@@ -180,8 +281,6 @@ export declare class WebFunction extends Resource implements IWebFunction, iam.I
|
|
|
180
281
|
private readonly logOptions;
|
|
181
282
|
private readonly resource;
|
|
182
283
|
private readonly revisionCleanup;
|
|
183
|
-
/** A reference to this function, for APIs that accept `lambda.IWebFunctionRef`. */
|
|
184
|
-
get webFunctionRef(): lambda.WebFunctionReference;
|
|
185
284
|
constructor(scope: Construct, id: string, props: WebFunctionProps);
|
|
186
285
|
/**
|
|
187
286
|
* Adds an endpoint (up to 10 per function), e.g. a public one next to an IAM-only one, or one pinned to an
|
|
@@ -203,35 +302,6 @@ export declare class WebFunction extends Resource implements IWebFunction, iam.I
|
|
|
203
302
|
* [disable-awslint:no-grants]
|
|
204
303
|
*/
|
|
205
304
|
grantInvoke(grantee: iam.IGrantable): iam.Grant;
|
|
206
|
-
/**
|
|
207
|
-
* A metric of this function's execution environments in `AWS/Lambda/Web` (dimension `FunctionName`), across all endpoints.
|
|
208
|
-
* For request and error counts, use the endpoint's metrics (`fn.endpoint.metricRequests()`).
|
|
209
|
-
*
|
|
210
|
-
* Metrics are published in the region that served the request: pass `region` for another serving region.
|
|
211
|
-
* An alarm can only use metrics from its own stack's region.
|
|
212
|
-
*
|
|
213
|
-
* @default - sum over 1 minute, in the home region
|
|
214
|
-
*/
|
|
215
|
-
metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
216
|
-
/** Time the execution environments were active (`EnvironmentActiveTime`). */
|
|
217
|
-
metricActiveTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
218
|
-
/** CPU time the execution environments used (`EnvironmentCPUTime`). */
|
|
219
|
-
metricCpuTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
220
|
-
/**
|
|
221
|
-
* Requests an execution environment handled at once (`EnvironmentConcurrentRequests`), to compare with
|
|
222
|
-
* `maxConcurrencyPerEnvironment`.
|
|
223
|
-
*
|
|
224
|
-
* @default - maximum over 1 minute
|
|
225
|
-
*/
|
|
226
|
-
metricConcurrentRequests(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
227
|
-
/**
|
|
228
|
-
* Peak memory an execution environment used (`EnvironmentMaxMemoryUsage`); each environment has 2 GB.
|
|
229
|
-
*
|
|
230
|
-
* @default - maximum over 1 minute
|
|
231
|
-
*/
|
|
232
|
-
metricMaxMemoryUsage(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
233
|
-
/** Bytes sent in responses (`ResponseBytes`). */
|
|
234
|
-
metricResponseBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
235
305
|
private createEndpoint;
|
|
236
306
|
private createLogGroups;
|
|
237
307
|
private logGroupIn;
|