@sylvesterllc/aws-constructs 1.1.44 → 1.1.45
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/dist/resources/dynamodb/CreateDynamoSingleTableDesign.js +25 -24
- package/dist/resources/lambda/createLambda.js +20 -14
- package/dist/resources/sqs/create-sqs-resource.js +11 -7
- package/package.json +1 -1
- package/src/resources/dynamodb/CreateDynamoSingleTableDesign.ts +109 -106
- package/src/resources/lambda/createLambda.ts +214 -178
- package/src/resources/sqs/create-sqs-resource.ts +13 -9
|
@@ -34,51 +34,51 @@ class CreateDynamoSingleTableDesign extends tsgBaseResource_1.TsgBaseResource {
|
|
|
34
34
|
tableName: this.tableName,
|
|
35
35
|
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
36
36
|
partitionKey: {
|
|
37
|
-
name:
|
|
37
|
+
name: "pk",
|
|
38
38
|
type: aws_dynamodb_1.AttributeType.STRING,
|
|
39
39
|
},
|
|
40
40
|
sortKey: {
|
|
41
|
-
name:
|
|
41
|
+
name: "sk",
|
|
42
42
|
type: aws_dynamodb_1.AttributeType.STRING,
|
|
43
43
|
},
|
|
44
44
|
billingMode: aws_dynamodb_1.BillingMode.PAY_PER_REQUEST,
|
|
45
45
|
});
|
|
46
46
|
const gsiIndexes = [
|
|
47
47
|
{
|
|
48
|
-
indexName:
|
|
48
|
+
indexName: "gsi1Index",
|
|
49
49
|
partitionKey: {
|
|
50
|
-
name:
|
|
51
|
-
type: aws_dynamodb_1.AttributeType.STRING
|
|
50
|
+
name: "gsi1pk",
|
|
51
|
+
type: aws_dynamodb_1.AttributeType.STRING,
|
|
52
52
|
},
|
|
53
53
|
sortKey: {
|
|
54
|
-
name:
|
|
55
|
-
type: aws_dynamodb_1.AttributeType.STRING
|
|
54
|
+
name: "gsi1sk",
|
|
55
|
+
type: aws_dynamodb_1.AttributeType.STRING,
|
|
56
56
|
},
|
|
57
|
-
projectionType: aws_dynamodb_1.ProjectionType.ALL
|
|
57
|
+
projectionType: aws_dynamodb_1.ProjectionType.ALL,
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
|
-
indexName:
|
|
60
|
+
indexName: "gsi2Index",
|
|
61
61
|
partitionKey: {
|
|
62
|
-
name:
|
|
63
|
-
type: aws_dynamodb_1.AttributeType.STRING
|
|
62
|
+
name: "gsi2pk",
|
|
63
|
+
type: aws_dynamodb_1.AttributeType.STRING,
|
|
64
64
|
},
|
|
65
65
|
sortKey: {
|
|
66
|
-
name:
|
|
67
|
-
type: aws_dynamodb_1.AttributeType.STRING
|
|
66
|
+
name: "gsi2sk",
|
|
67
|
+
type: aws_dynamodb_1.AttributeType.STRING,
|
|
68
68
|
},
|
|
69
|
-
projectionType: aws_dynamodb_1.ProjectionType.ALL
|
|
69
|
+
projectionType: aws_dynamodb_1.ProjectionType.ALL,
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
|
-
indexName:
|
|
72
|
+
indexName: "gsi3Index",
|
|
73
73
|
partitionKey: {
|
|
74
|
-
name:
|
|
75
|
-
type: aws_dynamodb_1.AttributeType.STRING
|
|
74
|
+
name: "gsi3pk",
|
|
75
|
+
type: aws_dynamodb_1.AttributeType.STRING,
|
|
76
76
|
},
|
|
77
77
|
sortKey: {
|
|
78
|
-
name:
|
|
79
|
-
type: aws_dynamodb_1.AttributeType.STRING
|
|
78
|
+
name: "gsi3sk",
|
|
79
|
+
type: aws_dynamodb_1.AttributeType.STRING,
|
|
80
80
|
},
|
|
81
|
-
projectionType: aws_dynamodb_1.ProjectionType.ALL
|
|
81
|
+
projectionType: aws_dynamodb_1.ProjectionType.ALL,
|
|
82
82
|
},
|
|
83
83
|
];
|
|
84
84
|
gsiIndexes.map((gsi) => {
|
|
@@ -86,17 +86,18 @@ class CreateDynamoSingleTableDesign extends tsgBaseResource_1.TsgBaseResource {
|
|
|
86
86
|
indexName: gsi.indexName,
|
|
87
87
|
partitionKey: gsi.partitionKey,
|
|
88
88
|
sortKey: gsi.sortKey,
|
|
89
|
-
projectionType: gsi.projectionType
|
|
89
|
+
projectionType: gsi.projectionType,
|
|
90
90
|
};
|
|
91
91
|
dbTable.addGlobalSecondaryIndex(gsiProps);
|
|
92
92
|
});
|
|
93
93
|
return dbTable;
|
|
94
94
|
}
|
|
95
95
|
createOutput(scope) {
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
// Logical IDs must not include unresolved tokens; use a stable ID
|
|
97
|
+
new aws_cdk_lib_1.CfnOutput(scope, "dynamoTable", {
|
|
98
|
+
value: `Table Name: ${this.createdResource?.tableName}\t Table Arn: ${this.createdResource?.tableArn}`,
|
|
98
99
|
});
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
102
|
exports.CreateDynamoSingleTableDesign = CreateDynamoSingleTableDesign;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlYXRlRHluYW1vU2luZ2xlVGFibGVEZXNpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzb3VyY2VzL2R5bmFtb2RiL0NyZWF0ZUR5bmFtb1NpbmdsZVRhYmxlRGVzaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1RDtBQUN2RCwyREFPa0M7QUFFbEMsNkRBQTBEO0FBRTFELE1BQWEsNkJBQThCLFNBQVEsaUNBR2xEO0lBb0J1QjtJQUE0QjtJQW5CbEQsTUFBTSxDQUFDLGdCQUFnQixHQUFhO1FBQ2xDLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIsNkJBQTZCO1FBQzdCLHFCQUFxQjtRQUNyQix3QkFBd0I7UUFDeEIsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQiwyQkFBMkI7UUFDM0Isa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2YscUJBQXFCO0tBQ3RCLENBQUM7SUFFRixJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQXNCLEtBQWdCLEVBQVksU0FBaUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQURKLFVBQUssR0FBTCxLQUFLLENBQVc7UUFBWSxjQUFTLEdBQVQsU0FBUyxDQUFRO0lBRW5FLENBQUM7SUFFUyxjQUFjLENBQUMsS0FBZ0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQkFBSyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUVwQyxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLDRCQUFhLENBQUMsTUFBTTthQUMzQjtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsNEJBQWEsQ0FBQyxNQUFNO2FBQzNCO1lBQ0QsV0FBVyxFQUFFLDBCQUFXLENBQUMsZUFBZTtTQUN6QyxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRztZQUNqQjtnQkFDRSxTQUFTLEVBQUUsV0FBVztnQkFDdEIsWUFBWSxFQUFFO29CQUNaLElBQUksRUFBRSxRQUFRO29CQUNkLElBQUksRUFBRSw0QkFBYSxDQUFDLE1BQU07aUJBQzNCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxJQUFJLEVBQUUsNEJBQWEsQ0FBQyxNQUFNO2lCQUMzQjtnQkFDRCxjQUFjLEVBQUUsNkJBQWMsQ0FBQyxHQUFHO2FBQ25DO1lBQ0Q7Z0JBQ0UsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLFlBQVksRUFBRTtvQkFDWixJQUFJLEVBQUUsUUFBUTtvQkFDZCxJQUFJLEVBQUUsNEJBQWEsQ0FBQyxNQUFNO2lCQUMzQjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLDRCQUFhLENBQUMsTUFBTTtpQkFDM0I7Z0JBQ0QsY0FBYyxFQUFFLDZCQUFjLENBQUMsR0FBRzthQUNuQztZQUNEO2dCQUNFLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixZQUFZLEVBQUU7b0JBQ1osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLDRCQUFhLENBQUMsTUFBTTtpQkFDM0I7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxRQUFRO29CQUNkLElBQUksRUFBRSw0QkFBYSxDQUFDLE1BQU07aUJBQzNCO2dCQUNELGNBQWMsRUFBRSw2QkFBYyxDQUFDLEdBQUc7YUFDbkM7U0FDRixDQUFDO1FBRUYsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sUUFBUSxHQUE4QjtnQkFDMUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO2dCQUN4QixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7Z0JBQzlCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztnQkFDcEIsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjO2FBQ25DLENBQUM7WUFFRixPQUFPLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRVMsWUFBWSxDQUFJLEtBQWdCO1FBQ3hDLGtFQUFrRTtRQUNsRSxJQUFJLHVCQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUNsQyxLQUFLLEVBQUUsZUFBZSxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsaUJBQWlCLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFO1NBQ3ZHLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBckdILHNFQXNHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xyXG5pbXBvcnQge1xyXG4gIEF0dHJpYnV0ZVR5cGUsXHJcbiAgQmlsbGluZ01vZGUsXHJcbiAgR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcyxcclxuICBQcm9qZWN0aW9uVHlwZSxcclxuICBUYWJsZSxcclxuICBUYWJsZVByb3BzLFxyXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcclxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcclxuaW1wb3J0IHsgVHNnQmFzZVJlc291cmNlIH0gZnJvbSBcIi4uL2Jhc2UvdHNnQmFzZVJlc291cmNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlRHluYW1vU2luZ2xlVGFibGVEZXNpZ24gZXh0ZW5kcyBUc2dCYXNlUmVzb3VyY2U8XHJcbiAgVGFibGUsXHJcbiAgc3RyaW5nXHJcbj4ge1xyXG4gIHN0YXRpYyBSZWFkV3JpdGVBY3Rpb25zOiBzdHJpbmdbXSA9IFtcclxuICAgIFwiZHluYW1vZGI6QmF0Y2hHZXRJdGVtXCIsXHJcbiAgICBcImR5bmFtb2RiOkJhdGNoV3JpdGVJdGVtXCIsXHJcbiAgICBcImR5bmFtb2RiOkNvbmRpdGlvbkNoZWNrSXRlbVwiLFxyXG4gICAgXCJkeW5hbW9kYjpEZWxldGVJdGVtXCIsXHJcbiAgICBcImR5bmFtb2RiOkRlc2NyaWJlVGFibGVcIixcclxuICAgIFwiZHluYW1vZGI6R2V0SXRlbVwiLFxyXG4gICAgXCJkeW5hbW9kYjpHZXRSZWNvcmRzXCIsXHJcbiAgICBcImR5bmFtb2RiOkdldFNoYXJkSXRlcmF0b3JcIixcclxuICAgIFwiZHluYW1vZGI6UHV0SXRlbVwiLFxyXG4gICAgXCJkeW5hbW9kYjpRdWVyeVwiLFxyXG4gICAgXCJkeW5hbW9kYjpTY2FuXCIsXHJcbiAgICBcImR5bmFtb2RiOlVwZGF0ZUl0ZW1cIixcclxuICBdO1xyXG5cclxuICBnZXQgQ3JlYXRlZFRhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlZFJlc291cmNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNjb3BlOiBDb25zdHJ1Y3QsIHByb3RlY3RlZCB0YWJsZU5hbWU6IHN0cmluZykge1xyXG4gICAgc3VwZXIoc2NvcGUsIHRhYmxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2Uoc2NvcGU6IENvbnN0cnVjdCk6IFRhYmxlIHtcclxuICAgIGNvbnN0IGRiVGFibGUgPSBuZXcgVGFibGUoc2NvcGUsIGAke3RoaXMudGFibGVOYW1lfWAsIHtcclxuICAgICAgdGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcclxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxyXG5cclxuICAgICAgcGFydGl0aW9uS2V5OiB7XHJcbiAgICAgICAgbmFtZTogXCJwa1wiLFxyXG4gICAgICAgIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxyXG4gICAgICB9LFxyXG4gICAgICBzb3J0S2V5OiB7XHJcbiAgICAgICAgbmFtZTogXCJza1wiLFxyXG4gICAgICAgIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxyXG4gICAgICB9LFxyXG4gICAgICBiaWxsaW5nTW9kZTogQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZ3NpSW5kZXhlcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGluZGV4TmFtZTogXCJnc2kxSW5kZXhcIixcclxuICAgICAgICBwYXJ0aXRpb25LZXk6IHtcclxuICAgICAgICAgIG5hbWU6IFwiZ3NpMXBrXCIsXHJcbiAgICAgICAgICB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNvcnRLZXk6IHtcclxuICAgICAgICAgIG5hbWU6IFwiZ3NpMXNrXCIsXHJcbiAgICAgICAgICB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByb2plY3Rpb25UeXBlOiBQcm9qZWN0aW9uVHlwZS5BTEwsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpbmRleE5hbWU6IFwiZ3NpMkluZGV4XCIsXHJcbiAgICAgICAgcGFydGl0aW9uS2V5OiB7XHJcbiAgICAgICAgICBuYW1lOiBcImdzaTJwa1wiLFxyXG4gICAgICAgICAgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzb3J0S2V5OiB7XHJcbiAgICAgICAgICBuYW1lOiBcImdzaTJza1wiLFxyXG4gICAgICAgICAgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcm9qZWN0aW9uVHlwZTogUHJvamVjdGlvblR5cGUuQUxMLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5kZXhOYW1lOiBcImdzaTNJbmRleFwiLFxyXG4gICAgICAgIHBhcnRpdGlvbktleToge1xyXG4gICAgICAgICAgbmFtZTogXCJnc2kzcGtcIixcclxuICAgICAgICAgIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc29ydEtleToge1xyXG4gICAgICAgICAgbmFtZTogXCJnc2kzc2tcIixcclxuICAgICAgICAgIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJvamVjdGlvblR5cGU6IFByb2plY3Rpb25UeXBlLkFMTCxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgZ3NpSW5kZXhlcy5tYXAoKGdzaSkgPT4ge1xyXG4gICAgICBjb25zdCBnc2lQcm9wczogR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcyA9IHtcclxuICAgICAgICBpbmRleE5hbWU6IGdzaS5pbmRleE5hbWUsXHJcbiAgICAgICAgcGFydGl0aW9uS2V5OiBnc2kucGFydGl0aW9uS2V5LFxyXG4gICAgICAgIHNvcnRLZXk6IGdzaS5zb3J0S2V5LFxyXG4gICAgICAgIHByb2plY3Rpb25UeXBlOiBnc2kucHJvamVjdGlvblR5cGUsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBkYlRhYmxlLmFkZEdsb2JhbFNlY29uZGFyeUluZGV4KGdzaVByb3BzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkYlRhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNyZWF0ZU91dHB1dDxUPihzY29wZTogQ29uc3RydWN0KTogdm9pZCB7XHJcbiAgICAvLyBMb2dpY2FsIElEcyBtdXN0IG5vdCBpbmNsdWRlIHVucmVzb2x2ZWQgdG9rZW5zOyB1c2UgYSBzdGFibGUgSURcclxuICAgIG5ldyBDZm5PdXRwdXQoc2NvcGUsIFwiZHluYW1vVGFibGVcIiwge1xyXG4gICAgICB2YWx1ZTogYFRhYmxlIE5hbWU6ICR7dGhpcy5jcmVhdGVkUmVzb3VyY2U/LnRhYmxlTmFtZX1cXHQgVGFibGUgQXJuOiAke3RoaXMuY3JlYXRlZFJlc291cmNlPy50YWJsZUFybn1gLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -31,7 +31,7 @@ class CreateLambda extends baseResource_1.BaseResource {
|
|
|
31
31
|
createdAssets.forEach((x, idx) => {
|
|
32
32
|
new aws_cdk_lib_1.CfnOutput(scope, `lambda-${idx}`, {
|
|
33
33
|
// @ts-ignore
|
|
34
|
-
value: x.functionName
|
|
34
|
+
value: x.functionName,
|
|
35
35
|
});
|
|
36
36
|
});
|
|
37
37
|
}
|
|
@@ -53,36 +53,42 @@ class CreateLambda extends baseResource_1.BaseResource {
|
|
|
53
53
|
prop,
|
|
54
54
|
role,
|
|
55
55
|
layers,
|
|
56
|
-
props
|
|
56
|
+
props,
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
createLambdaFunctionProps(props) {
|
|
60
60
|
const { prop, role, layers } = props;
|
|
61
|
+
// Create explicit LogGroup to avoid deprecated `logRetention`
|
|
62
|
+
const functionName = `${this.config.AppPrefix}-${prop.name}`;
|
|
63
|
+
const logGroup = new aws_logs_1.LogGroup(this.scope, `${functionName}-logs`, {
|
|
64
|
+
retention: !prop.logDuration
|
|
65
|
+
? aws_logs_1.RetentionDays.FIVE_DAYS
|
|
66
|
+
: lambdaHelper_1.LambdaHelper.getDayToSaveLogs(prop.logDuration),
|
|
67
|
+
});
|
|
61
68
|
const lambdaProp = {
|
|
62
69
|
entry: path.join(prop.codePath),
|
|
63
|
-
functionName
|
|
70
|
+
functionName,
|
|
64
71
|
handler: prop.handler,
|
|
65
|
-
|
|
72
|
+
logGroup,
|
|
66
73
|
runtime: prop.runtime || this.config.GLOBALS.stackRuntime,
|
|
67
74
|
timeout: prop.duration || aws_cdk_lib_1.Duration.minutes(2),
|
|
68
75
|
memorySize: prop.memory || 512,
|
|
69
76
|
environment: {
|
|
70
|
-
|
|
71
|
-
...prop.environment
|
|
77
|
+
VERBOSE_LOGGING: "true",
|
|
78
|
+
...prop.environment,
|
|
72
79
|
},
|
|
73
80
|
bundling: {
|
|
74
81
|
minify: false,
|
|
75
|
-
target:
|
|
82
|
+
target: "es2020",
|
|
76
83
|
sourceMap: true,
|
|
77
84
|
sourceMapMode: aws_lambda_nodejs_1.SourceMapMode.EXTERNAL,
|
|
78
85
|
environment: prop.environment || prop.environment,
|
|
79
86
|
},
|
|
80
87
|
role,
|
|
81
|
-
layers
|
|
88
|
+
layers,
|
|
82
89
|
};
|
|
83
90
|
return lambdaProp;
|
|
84
91
|
}
|
|
85
|
-
;
|
|
86
92
|
createAlarmsForLambdas(lambdas) {
|
|
87
93
|
const lambdaRecords = this.createRecordForLambda(lambdas);
|
|
88
94
|
// console.log('Lambda Records:', lambdaRecords);
|
|
@@ -98,14 +104,14 @@ class CreateLambda extends baseResource_1.BaseResource {
|
|
|
98
104
|
const invocationMetric = lambda.metricInvocations({
|
|
99
105
|
period: aws_cdk_lib_1.Duration.minutes(3),
|
|
100
106
|
});
|
|
101
|
-
const uuid = (0, util_helper_1.getUUID)().split(
|
|
107
|
+
const uuid = (0, util_helper_1.getUUID)().split("-")[0];
|
|
102
108
|
new aws_cloudwatch_1.Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-error-alarm`, {
|
|
103
109
|
metric: errorMetric,
|
|
104
110
|
threshold: 5,
|
|
105
111
|
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
106
112
|
evaluationPeriods: 3,
|
|
107
113
|
alarmDescription: `${this.config.AppPrefix} errors over 3 min period`,
|
|
108
|
-
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-error-alarm
|
|
114
|
+
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-error-alarm`,
|
|
109
115
|
});
|
|
110
116
|
new aws_cloudwatch_1.Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-duration-alarm`, {
|
|
111
117
|
metric: durationMetric,
|
|
@@ -113,7 +119,7 @@ class CreateLambda extends baseResource_1.BaseResource {
|
|
|
113
119
|
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
114
120
|
evaluationPeriods: 3,
|
|
115
121
|
alarmDescription: `${this.config.AppPrefix}-${lambda.node.id} duration errors over 3 min period`,
|
|
116
|
-
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-duration-alarm
|
|
122
|
+
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-duration-alarm`,
|
|
117
123
|
});
|
|
118
124
|
const invocationAlarm = new aws_cloudwatch_1.Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-invocation-alarm`, {
|
|
119
125
|
metric: errorMetric,
|
|
@@ -121,7 +127,7 @@ class CreateLambda extends baseResource_1.BaseResource {
|
|
|
121
127
|
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
122
128
|
evaluationPeriods: 3,
|
|
123
129
|
alarmDescription: `${this.config.AppPrefix}-${lambda.node.id} errors over 3 min period`,
|
|
124
|
-
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-invocation-Metric-alarm
|
|
130
|
+
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-invocation-Metric-alarm`,
|
|
125
131
|
});
|
|
126
132
|
});
|
|
127
133
|
}
|
|
@@ -141,4 +147,4 @@ class CreateLambda extends baseResource_1.BaseResource {
|
|
|
141
147
|
}
|
|
142
148
|
}
|
|
143
149
|
exports.CreateLambda = CreateLambda;
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlTGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc291cmNlcy9sYW1iZGEvY3JlYXRlTGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFrRDtBQUVsRCwrREFBcUY7QUFHckYscUVBQW1HO0FBRW5HLDZCQUE2QjtBQU03Qix1REFBb0Q7QUFDcEQsbURBQXFEO0FBQ3JELGlEQUE4QztBQUM5QywyREFBb0Q7QUFHcEQsTUFBYSxZQUFhLFNBQVEsMkJBQTRCO0lBS0Q7SUFIbEQsT0FBTyxHQUFxQixFQUFFLENBQUM7SUFDL0IsYUFBYSxHQUFtQyxFQUFFLENBQUM7SUFFMUQsWUFBWSxLQUFnQixFQUFFLE1BQWlCLEVBQVUsTUFBdUI7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQURnQyxXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUc1RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVTLGNBQWMsQ0FBQyxLQUFnQjtRQUVyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQyxPQUFPLE1BQU0sQ0FBQztJQUNsQixD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QUFDLElBQUksQ0FBQyxFQUFFLDBCQUEwQjthQUNsRixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQXlCLEVBQUUsU0FBb0I7UUFDeEUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUF5QjtRQUVuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBVSxDQUFDO1FBS3hDLE1BQU0sWUFBWSxHQUF1QyxFQUF3QyxDQUFDO1FBRWxHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDNUIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQWUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7Q0FLSjtBQXJMRCxvQ0FxTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XHJcbmltcG9ydCB7IFRva2VuQXV0aG9yaXplciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheVwiO1xyXG5pbXBvcnQgeyBBbGFybSwgQ29tcGFyaXNvbk9wZXJhdG9yLCBJQWxhcm1BY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcclxuaW1wb3J0IHsgSVJvbGUsIE1hbmFnZWRQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xyXG5pbXBvcnQgeyBMYXllclZlcnNpb24sIFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xyXG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvbiwgTm9kZWpzRnVuY3Rpb25Qcm9wcywgU291cmNlTWFwTW9kZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiO1xyXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBBcHBDb25maWcgfSBmcm9tIFwiLi4vLi4vY29uZmlnL0FwcENvbmZpZ1wiO1xyXG5pbXBvcnQgeyBUc2dMYW1iZGFQcm9wIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy90eXBlc1wiO1xyXG5cclxuaW1wb3J0IHsgVHNnTGFtYmRhUHJvcHMgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3R5cGVzL1RzZ0xhbWJkYVByb3BzXCI7XHJcbmltcG9ydCB7IENyZWF0ZUxhbWJkYUZ1bmN0aW9uSW5wdXQgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9DcmVhdGVMYW1iZGFGdW5jdGlvbklucHV0XCI7XHJcbmltcG9ydCB7IEJhc2VSZXNvdXJjZSB9IGZyb20gXCIuLi9iYXNlL2Jhc2VSZXNvdXJjZVwiO1xyXG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XHJcbmltcG9ydCB7IExhbWJkYUhlbHBlciB9IGZyb20gXCIuL2xhbWJkYUhlbHBlclwiO1xyXG5pbXBvcnQgeyBnZXRVVUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvdXRpbC1oZWxwZXJcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlTGFtYmRhIGV4dGVuZHMgQmFzZVJlc291cmNlPE5vZGVqc0Z1bmN0aW9uPiB7XHJcblxyXG4gICAgcHVibGljIExhbWJkYXM6IE5vZGVqc0Z1bmN0aW9uW10gPSBbXTtcclxuICAgIHB1YmxpYyBMYW1iZGFSZWNvcmRzOiBSZWNvcmQ8c3RyaW5nLCBOb2RlanNGdW5jdGlvbj4gPSB7fTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBjb25maWc6IEFwcENvbmZpZywgcHJpdmF0ZSBsYXllcnM/OiBMYXllclZlcnNpb25bXSkge1xyXG4gICAgICAgIHN1cGVyKHNjb3BlLCBjb25maWcpO1xyXG5cclxuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLmNyZWF0ZVJlc291cmNlKHNjb3BlKTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVkUmVzb3VyY2VzID0gWy4uLnJlc291cmNlc107XHJcblxyXG4gICAgICAgIHRoaXMuTGFtYmRhcyA9IFsuLi5yZXNvdXJjZXNdO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZUFsYXJtc0ZvckxhbWJkYXModGhpcy5MYW1iZGFzKTtcclxuXHJcbiAgICAgICAgdGhpcy5MYW1iZGFSZWNvcmRzID0gdGhpcy5jcmVhdGVSZWNvcmRGb3JMYW1iZGEodGhpcy5MYW1iZGFzKTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVPdXRwdXQoc2NvcGUsIHJlc291cmNlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlKHNjb3BlOiBDb25zdHJ1Y3QpOiBOb2RlanNGdW5jdGlvbltdIHtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jcmVhdGVMYW1iZGFzKHRoaXMuY29uZmlnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlT3V0cHV0PFQ+KHNjb3BlOiBDb25zdHJ1Y3QsIGNyZWF0ZWRBc3NldHM6IFRbXSk6IHZvaWQge1xyXG4gICAgICAgIGNyZWF0ZWRBc3NldHMuZm9yRWFjaCgoeCwgaWR4KSA9PiB7XHJcblxyXG4gICAgICAgICAgICBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCBgbGFtYmRhLSR7aWR4fWAsIHtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB4LmZ1bmN0aW9uTmFtZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUxhbWJkYXMoY29uZmlnOiBBcHBDb25maWcpOiBOb2RlanNGdW5jdGlvbltdIHtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZExhbWJkYXM6IE5vZGVqc0Z1bmN0aW9uW10gPSB0aGlzLmNyZWF0ZUxhbWJkYUZ1bmN0aW9ucyh0aGlzLnNjb3BlLCB1bmRlZmluZWQsIHRoaXMubGF5ZXJzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRMYW1iZGFzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb25zKHNjb3BlOiBDb25zdHJ1Y3QsIHJvbGU/OiBJUm9sZSwgbGF5ZXJzPzogTGF5ZXJWZXJzaW9uW10pIHtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZExhbWJkYXMgPSB0aGlzLmNvbmZpZy5SRVNPVVJDRVMuTEFNQkRBLm1hcCgoY29uZmlnOiBUc2dMYW1iZGFQcm9wKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgbGFtYmRhUHJvcHMgPSB0aGlzLmNyZWF0ZUxhbWJkYVByb3BzKGNvbmZpZywgcm9sZSwgbGF5ZXJzKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUlkID0gQ3JlYXRlTGFtYmRhLmdldElkRm9yTGFtYmRhKGNvbmZpZywgdGhpcy5jb25maWcpO1xyXG4gICAgICAgICAgICBsZXQgZmN0biA9IG5ldyBOb2RlanNGdW5jdGlvbihzY29wZSwgbGFtYmRhSWQsIGxhbWJkYVByb3BzKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmY3RuO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gY3JlYXRlZExhbWJkYXMgfHwgW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFQcm9wcyhwcm9wOiBUc2dMYW1iZGFQcm9wLCByb2xlPzogSVJvbGUsIGxheWVycz86IExheWVyVmVyc2lvbltdLCBwcm9wcz86IFRzZ0xhbWJkYVByb3BzKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxhbWJkYUZ1bmN0aW9uUHJvcHMoe1xyXG4gICAgICAgICAgICBwcm9wLFxyXG4gICAgICAgICAgICByb2xlLFxyXG4gICAgICAgICAgICBsYXllcnMsXHJcbiAgICAgICAgICAgIHByb3BzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvblByb3BzKHByb3BzOiBDcmVhdGVMYW1iZGFGdW5jdGlvbklucHV0KSB7XHJcbiAgICAgICAgY29uc3QgeyBwcm9wLCByb2xlLCBsYXllcnMgfSA9IHByb3BzO1xyXG5cclxuICAgICAgICBjb25zdCBsYW1iZGFQcm9wOiBOb2RlanNGdW5jdGlvblByb3BzID0ge1xyXG4gICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKHByb3AuY29kZVBhdGgpLFxyXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGAke3RoaXMuY29uZmlnLkFwcFByZWZpeH0tJHtwcm9wLm5hbWV9YCxcclxuICAgICAgICAgICAgaGFuZGxlcjogcHJvcC5oYW5kbGVyLFxyXG4gICAgICAgICAgICBsb2dSZXRlbnRpb246ICghcHJvcC5sb2dEdXJhdGlvbikgPyBSZXRlbnRpb25EYXlzLkZJVkVfREFZUyA6IExhbWJkYUhlbHBlci5nZXREYXlUb1NhdmVMb2dzKHByb3AubG9nRHVyYXRpb24pLFxyXG4gICAgICAgICAgICBydW50aW1lOiBwcm9wLnJ1bnRpbWUgfHwgdGhpcy5jb25maWcuR0xPQkFMUy5zdGFja1J1bnRpbWUsXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IHByb3AuZHVyYXRpb24gfHwgRHVyYXRpb24ubWludXRlcygyKSxcclxuICAgICAgICAgICAgbWVtb3J5U2l6ZTogcHJvcC5tZW1vcnkgfHwgNTEyLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAgICAgICAgICAgXCJWRVJCT1NFX0xPR0dJTkdcIjogXCJ0cnVlXCIsXHJcbiAgICAgICAgICAgICAgICAuLi5wcm9wLmVudmlyb25tZW50XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XHJcbiAgICAgICAgICAgICAgICBtaW5pZnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiAnZXMyMDIwJyxcclxuICAgICAgICAgICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZU1hcE1vZGU6IFNvdXJjZU1hcE1vZGUuRVhURVJOQUwsXHJcbiAgICAgICAgICAgICAgICBlbnZpcm9ubWVudDogcHJvcC5lbnZpcm9ubWVudCB8fCBwcm9wLmVudmlyb25tZW50LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByb2xlLFxyXG4gICAgICAgICAgICBsYXllcnNcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbGFtYmRhUHJvcDtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVBbGFybXNGb3JMYW1iZGFzKGxhbWJkYXM6IE5vZGVqc0Z1bmN0aW9uW10pIHtcclxuXHJcbiAgICAgICAgY29uc3QgbGFtYmRhUmVjb3JkcyA9IHRoaXMuY3JlYXRlUmVjb3JkRm9yTGFtYmRhKGxhbWJkYXMpO1xyXG5cclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnTGFtYmRhIFJlY29yZHM6JywgbGFtYmRhUmVjb3Jkcyk7XHJcbiAgICAgICAgLy8gY29uc3QgbGFtYmRhTmFtZXMgPSBPYmplY3Qua2V5cyhsYW1iZGFSZWNvcmRzKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnbGFtYmRhIE5hbWVzIGZyb20gUmVjb3JkcycsIGxhbWJkYU5hbWVzKTtcclxuXHJcbiAgICAgICAgbGFtYmRhcy5mb3JFYWNoKChsYW1iZGEsIGlkeCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXRyaWMgPSBsYW1iZGEubWV0cmljRXJyb3JzKHtcclxuICAgICAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygzKSxcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZHVyYXRpb25NZXRyaWMgPSBsYW1iZGEubWV0cmljRHVyYXRpb24oe1xyXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDMpLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGludm9jYXRpb25NZXRyaWMgPSBsYW1iZGEubWV0cmljSW52b2NhdGlvbnMoe1xyXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDMpLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKCkuc3BsaXQoJy0nKVswXTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBBbGFybSh0aGlzLnNjb3BlLCBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9LWVycm9yLWFsYXJtYCwge1xyXG4gICAgICAgICAgICAgICAgbWV0cmljOiBlcnJvck1ldHJpYyxcclxuICAgICAgICAgICAgICAgIHRocmVzaG9sZDogNSxcclxuICAgICAgICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXHJcbiAgICAgICAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcclxuICAgICAgICAgICAgICAgIGFsYXJtRGVzY3JpcHRpb246IGAke3RoaXMuY29uZmlnLkFwcFByZWZpeH0gZXJyb3JzIG92ZXIgMyBtaW4gcGVyaW9kYCxcclxuICAgICAgICAgICAgICAgIGFsYXJtTmFtZTogYCR7dGhpcy5jb25maWcuQXBwUHJlZml4fS0ke2xhbWJkYS5ub2RlLmlkfS1lcnJvci1hbGFybWBcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBuZXcgQWxhcm0odGhpcy5zY29wZSwgYCR7dGhpcy5jb25maWcuQXBwUHJlZml4fS0ke2xhbWJkYS5ub2RlLmlkfS1kdXJhdGlvbi1hbGFybWAsIHtcclxuICAgICAgICAgICAgICAgIG1ldHJpYzogZHVyYXRpb25NZXRyaWMsXHJcbiAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDEsXHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxyXG4gICAgICAgICAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXHJcbiAgICAgICAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9IGR1cmF0aW9uIGVycm9ycyBvdmVyIDMgbWluIHBlcmlvZGAsXHJcbiAgICAgICAgICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMuY29uZmlnLkFwcFByZWZpeH0tJHtsYW1iZGEubm9kZS5pZH0tZHVyYXRpb24tYWxhcm1gXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaW52b2NhdGlvbkFsYXJtID0gbmV3IEFsYXJtKHRoaXMuc2NvcGUsIGAke3RoaXMuY29uZmlnLkFwcFByZWZpeH0tJHtsYW1iZGEubm9kZS5pZH0taW52b2NhdGlvbi1hbGFybWAsIHtcclxuICAgICAgICAgICAgICAgIG1ldHJpYzogZXJyb3JNZXRyaWMsXHJcbiAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDEwMDAsXHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxyXG4gICAgICAgICAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXHJcbiAgICAgICAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9IGVycm9ycyBvdmVyIDMgbWluIHBlcmlvZGAsXHJcbiAgICAgICAgICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMuY29uZmlnLkFwcFByZWZpeH0tJHtsYW1iZGEubm9kZS5pZH0taW52b2NhdGlvbi1NZXRyaWMtYWxhcm1gXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SWRGb3JMYW1iZGEobGFtYmRhUHJvcDogVHNnTGFtYmRhUHJvcCwgYXBwQ29uZmlnOiBBcHBDb25maWcpIHtcclxuICAgICAgICByZXR1cm4gYCR7YXBwQ29uZmlnLkFwcFByZWZpeH0tJHtsYW1iZGFQcm9wLm5hbWV9YC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlUmVjb3JkRm9yTGFtYmRhKGxhbWJkYXM6IE5vZGVqc0Z1bmN0aW9uW10pIHtcclxuXHJcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLmNvbmZpZy5SRVNPVVJDRVMuTEFNQkRBLm1hcCgobGFtYmRhKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBsYW1iZGEubmFtZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgbGFtYmRhTmFtZXMgPSBbLi4ubmFtZXNdIGFzIGNvbnN0O1xyXG5cclxuICAgICAgICB0eXBlIExhbWJkYU5hbWUgPSB0eXBlb2YgbGFtYmRhTmFtZXNbbnVtYmVyXTtcclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGxhbWJkYVJlY29yZDogUmVjb3JkPExhbWJkYU5hbWUsIE5vZGVqc0Z1bmN0aW9uPiA9IHt9IGFzIFJlY29yZDxMYW1iZGFOYW1lLCBOb2RlanNGdW5jdGlvbj47XHJcblxyXG4gICAgICAgIGxhbWJkYXMuZm9yRWFjaCgobGFtYmRhLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgbGFtYmRhUmVjb3JkW2xhbWJkYU5hbWVzW2lkeF0gYXMgTGFtYmRhTmFtZV0gPSBsYW1iZGFzW2lkeF07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBsYW1iZGFSZWNvcmQ7XHJcbiAgICB9XHJcblxyXG4gICBcclxuXHJcbiAgICBcclxufVxyXG5cclxuXHJcbiJdfQ==
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlTGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc291cmNlcy9sYW1iZGEvY3JlYXRlTGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFrRDtBQUVsRCwrREFJb0M7QUFHcEMscUVBSXVDO0FBRXZDLDZCQUE2QjtBQU03Qix1REFBb0Q7QUFDcEQsbURBQStEO0FBQy9ELGlEQUE4QztBQUM5QywyREFBb0Q7QUFFcEQsTUFBYSxZQUFhLFNBQVEsMkJBQTRCO0lBT2xEO0lBTkgsT0FBTyxHQUFxQixFQUFFLENBQUM7SUFDL0IsYUFBYSxHQUFtQyxFQUFFLENBQUM7SUFFMUQsWUFDRSxLQUFnQixFQUNoQixNQUFpQixFQUNULE1BQXVCO1FBRS9CLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFGYixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUkvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVTLGNBQWMsQ0FBQyxLQUFnQjtRQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixD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LEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLDJCQUEyQjtnQkFDdkYsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLDBCQUEwQjthQUNoRixDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsY0FBYyxDQUMxQixVQUF5QixFQUN6QixTQUFvQjtRQUVwQixPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE9BQXlCO1FBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN4RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFVLENBQUM7UUFJeEMsTUFBTSxZQUFZLEdBQXVDLEVBR3hELENBQUM7UUFFRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzlCLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFlLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFwTkQsb0NBb05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0LCBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xyXG5pbXBvcnQgeyBUb2tlbkF1dGhvcml6ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjtcclxuaW1wb3J0IHtcclxuICBBbGFybSxcclxuICBDb21wYXJpc29uT3BlcmF0b3IsXHJcbiAgSUFsYXJtQWN0aW9uLFxyXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xyXG5pbXBvcnQgeyBJUm9sZSwgTWFuYWdlZFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XHJcbmltcG9ydCB7IExheWVyVmVyc2lvbiwgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XHJcbmltcG9ydCB7XHJcbiAgTm9kZWpzRnVuY3Rpb24sXHJcbiAgTm9kZWpzRnVuY3Rpb25Qcm9wcyxcclxuICBTb3VyY2VNYXBNb2RlLFxyXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiO1xyXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IEFwcENvbmZpZyB9IGZyb20gXCIuLi8uLi9jb25maWcvQXBwQ29uZmlnXCI7XHJcbmltcG9ydCB7IFRzZ0xhbWJkYVByb3AgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3R5cGVzXCI7XHJcblxyXG5pbXBvcnQgeyBUc2dMYW1iZGFQcm9wcyB9IGZyb20gXCIuLi8uLi9jb25maWcvdHlwZXMvVHNnTGFtYmRhUHJvcHNcIjtcclxuaW1wb3J0IHsgQ3JlYXRlTGFtYmRhRnVuY3Rpb25JbnB1dCB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL0NyZWF0ZUxhbWJkYUZ1bmN0aW9uSW5wdXRcIjtcclxuaW1wb3J0IHsgQmFzZVJlc291cmNlIH0gZnJvbSBcIi4uL2Jhc2UvYmFzZVJlc291cmNlXCI7XHJcbmltcG9ydCB7IExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XHJcbmltcG9ydCB7IExhbWJkYUhlbHBlciB9IGZyb20gXCIuL2xhbWJkYUhlbHBlclwiO1xyXG5pbXBvcnQgeyBnZXRVVUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvdXRpbC1oZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVMYW1iZGEgZXh0ZW5kcyBCYXNlUmVzb3VyY2U8Tm9kZWpzRnVuY3Rpb24+IHtcclxuICBwdWJsaWMgTGFtYmRhczogTm9kZWpzRnVuY3Rpb25bXSA9IFtdO1xyXG4gIHB1YmxpYyBMYW1iZGFSZWNvcmRzOiBSZWNvcmQ8c3RyaW5nLCBOb2RlanNGdW5jdGlvbj4gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBzY29wZTogQ29uc3RydWN0LFxyXG4gICAgY29uZmlnOiBBcHBDb25maWcsXHJcbiAgICBwcml2YXRlIGxheWVycz86IExheWVyVmVyc2lvbltdXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzY29wZSwgY29uZmlnKTtcclxuXHJcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLmNyZWF0ZVJlc291cmNlKHNjb3BlKTtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZWRSZXNvdXJjZXMgPSBbLi4ucmVzb3VyY2VzXTtcclxuXHJcbiAgICB0aGlzLkxhbWJkYXMgPSBbLi4ucmVzb3VyY2VzXTtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZUFsYXJtc0ZvckxhbWJkYXModGhpcy5MYW1iZGFzKTtcclxuXHJcbiAgICB0aGlzLkxhbWJkYVJlY29yZHMgPSB0aGlzLmNyZWF0ZVJlY29yZEZvckxhbWJkYSh0aGlzLkxhbWJkYXMpO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlT3V0cHV0KHNjb3BlLCByZXNvdXJjZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlKHNjb3BlOiBDb25zdHJ1Y3QpOiBOb2RlanNGdW5jdGlvbltdIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlTGFtYmRhcyh0aGlzLmNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjcmVhdGVPdXRwdXQ8VD4oc2NvcGU6IENvbnN0cnVjdCwgY3JlYXRlZEFzc2V0czogVFtdKTogdm9pZCB7XHJcbiAgICBjcmVhdGVkQXNzZXRzLmZvckVhY2goKHgsIGlkeCkgPT4ge1xyXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCBgbGFtYmRhLSR7aWR4fWAsIHtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgdmFsdWU6IHguZnVuY3Rpb25OYW1lLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFzKGNvbmZpZzogQXBwQ29uZmlnKTogTm9kZWpzRnVuY3Rpb25bXSB7XHJcbiAgICBjb25zdCBjcmVhdGVkTGFtYmRhczogTm9kZWpzRnVuY3Rpb25bXSA9IHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb25zKFxyXG4gICAgICB0aGlzLnNjb3BlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIHRoaXMubGF5ZXJzXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBjcmVhdGVkTGFtYmRhcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb25zKFxyXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcclxuICAgIHJvbGU/OiBJUm9sZSxcclxuICAgIGxheWVycz86IExheWVyVmVyc2lvbltdXHJcbiAgKSB7XHJcbiAgICBjb25zdCBjcmVhdGVkTGFtYmRhcyA9IHRoaXMuY29uZmlnLlJFU09VUkNFUy5MQU1CREEubWFwKFxyXG4gICAgICAoY29uZmlnOiBUc2dMYW1iZGFQcm9wKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhbWJkYVByb3BzID0gdGhpcy5jcmVhdGVMYW1iZGFQcm9wcyhjb25maWcsIHJvbGUsIGxheWVycyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxhbWJkYUlkID0gQ3JlYXRlTGFtYmRhLmdldElkRm9yTGFtYmRhKGNvbmZpZywgdGhpcy5jb25maWcpO1xyXG4gICAgICAgIGxldCBmY3RuID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHNjb3BlLCBsYW1iZGFJZCwgbGFtYmRhUHJvcHMpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmN0bjtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gY3JlYXRlZExhbWJkYXMgfHwgW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUxhbWJkYVByb3BzKFxyXG4gICAgcHJvcDogVHNnTGFtYmRhUHJvcCxcclxuICAgIHJvbGU/OiBJUm9sZSxcclxuICAgIGxheWVycz86IExheWVyVmVyc2lvbltdLFxyXG4gICAgcHJvcHM/OiBUc2dMYW1iZGFQcm9wc1xyXG4gICkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb25Qcm9wcyh7XHJcbiAgICAgIHByb3AsXHJcbiAgICAgIHJvbGUsXHJcbiAgICAgIGxheWVycyxcclxuICAgICAgcHJvcHMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb25Qcm9wcyhwcm9wczogQ3JlYXRlTGFtYmRhRnVuY3Rpb25JbnB1dCkge1xyXG4gICAgY29uc3QgeyBwcm9wLCByb2xlLCBsYXllcnMgfSA9IHByb3BzO1xyXG5cclxuICAgIC8vIENyZWF0ZSBleHBsaWNpdCBMb2dHcm91cCB0byBhdm9pZCBkZXByZWNhdGVkIGBsb2dSZXRlbnRpb25gXHJcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7cHJvcC5uYW1lfWA7XHJcbiAgICBjb25zdCBsb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLnNjb3BlLCBgJHtmdW5jdGlvbk5hbWV9LWxvZ3NgLCB7XHJcbiAgICAgIHJldGVudGlvbjogIXByb3AubG9nRHVyYXRpb25cclxuICAgICAgICA/IFJldGVudGlvbkRheXMuRklWRV9EQVlTXHJcbiAgICAgICAgOiBMYW1iZGFIZWxwZXIuZ2V0RGF5VG9TYXZlTG9ncyhwcm9wLmxvZ0R1cmF0aW9uKSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGxhbWJkYVByb3A6IE5vZGVqc0Z1bmN0aW9uUHJvcHMgPSB7XHJcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4ocHJvcC5jb2RlUGF0aCksXHJcbiAgICAgIGZ1bmN0aW9uTmFtZSxcclxuICAgICAgaGFuZGxlcjogcHJvcC5oYW5kbGVyLFxyXG4gICAgICBsb2dHcm91cCxcclxuICAgICAgcnVudGltZTogcHJvcC5ydW50aW1lIHx8IHRoaXMuY29uZmlnLkdMT0JBTFMuc3RhY2tSdW50aW1lLFxyXG4gICAgICB0aW1lb3V0OiBwcm9wLmR1cmF0aW9uIHx8IER1cmF0aW9uLm1pbnV0ZXMoMiksXHJcbiAgICAgIG1lbW9yeVNpemU6IHByb3AubWVtb3J5IHx8IDUxMixcclxuICAgICAgZW52aXJvbm1lbnQ6IHtcclxuICAgICAgICBWRVJCT1NFX0xPR0dJTkc6IFwidHJ1ZVwiLFxyXG4gICAgICAgIC4uLnByb3AuZW52aXJvbm1lbnQsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJ1bmRsaW5nOiB7XHJcbiAgICAgICAgbWluaWZ5OiBmYWxzZSxcclxuICAgICAgICB0YXJnZXQ6IFwiZXMyMDIwXCIsXHJcbiAgICAgICAgc291cmNlTWFwOiB0cnVlLFxyXG4gICAgICAgIHNvdXJjZU1hcE1vZGU6IFNvdXJjZU1hcE1vZGUuRVhURVJOQUwsXHJcbiAgICAgICAgZW52aXJvbm1lbnQ6IHByb3AuZW52aXJvbm1lbnQgfHwgcHJvcC5lbnZpcm9ubWVudCxcclxuICAgICAgfSxcclxuICAgICAgcm9sZSxcclxuICAgICAgbGF5ZXJzLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbGFtYmRhUHJvcDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQWxhcm1zRm9yTGFtYmRhcyhsYW1iZGFzOiBOb2RlanNGdW5jdGlvbltdKSB7XHJcbiAgICBjb25zdCBsYW1iZGFSZWNvcmRzID0gdGhpcy5jcmVhdGVSZWNvcmRGb3JMYW1iZGEobGFtYmRhcyk7XHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coJ0xhbWJkYSBSZWNvcmRzOicsIGxhbWJkYVJlY29yZHMpO1xyXG4gICAgLy8gY29uc3QgbGFtYmRhTmFtZXMgPSBPYmplY3Qua2V5cyhsYW1iZGFSZWNvcmRzKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdsYW1iZGEgTmFtZXMgZnJvbSBSZWNvcmRzJywgbGFtYmRhTmFtZXMpO1xyXG5cclxuICAgIGxhbWJkYXMuZm9yRWFjaCgobGFtYmRhLCBpZHgpID0+IHtcclxuICAgICAgY29uc3QgZXJyb3JNZXRyaWMgPSBsYW1iZGEubWV0cmljRXJyb3JzKHtcclxuICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMyksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZHVyYXRpb25NZXRyaWMgPSBsYW1iZGEubWV0cmljRHVyYXRpb24oe1xyXG4gICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygzKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBpbnZvY2F0aW9uTWV0cmljID0gbGFtYmRhLm1ldHJpY0ludm9jYXRpb25zKHtcclxuICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMyksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoKS5zcGxpdChcIi1cIilbMF07XHJcblxyXG4gICAgICBuZXcgQWxhcm0oXHJcbiAgICAgICAgdGhpcy5zY29wZSxcclxuICAgICAgICBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9LWVycm9yLWFsYXJtYCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtZXRyaWM6IGVycm9yTWV0cmljLFxyXG4gICAgICAgICAgdGhyZXNob2xkOiA1LFxyXG4gICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxyXG4gICAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcclxuICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAzLFxyXG4gICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYCR7dGhpcy5jb25maWcuQXBwUHJlZml4fSBlcnJvcnMgb3ZlciAzIG1pbiBwZXJpb2RgLFxyXG4gICAgICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9LWVycm9yLWFsYXJtYCxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBuZXcgQWxhcm0oXHJcbiAgICAgICAgdGhpcy5zY29wZSxcclxuICAgICAgICBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9LWR1cmF0aW9uLWFsYXJtYCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtZXRyaWM6IGR1cmF0aW9uTWV0cmljLFxyXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxyXG4gICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxyXG4gICAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcclxuICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAzLFxyXG4gICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYCR7dGhpcy5jb25maWcuQXBwUHJlZml4fS0ke2xhbWJkYS5ub2RlLmlkfSBkdXJhdGlvbiBlcnJvcnMgb3ZlciAzIG1pbiBwZXJpb2RgLFxyXG4gICAgICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9LWR1cmF0aW9uLWFsYXJtYCxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBpbnZvY2F0aW9uQWxhcm0gPSBuZXcgQWxhcm0oXHJcbiAgICAgICAgdGhpcy5zY29wZSxcclxuICAgICAgICBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9LWludm9jYXRpb24tYWxhcm1gLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG1ldHJpYzogZXJyb3JNZXRyaWMsXHJcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEwMDAsXHJcbiAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XHJcbiAgICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxyXG4gICAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXHJcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgJHt0aGlzLmNvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhLm5vZGUuaWR9IGVycm9ycyBvdmVyIDMgbWluIHBlcmlvZGAsXHJcbiAgICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMuY29uZmlnLkFwcFByZWZpeH0tJHtsYW1iZGEubm9kZS5pZH0taW52b2NhdGlvbi1NZXRyaWMtYWxhcm1gLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRJZEZvckxhbWJkYShcclxuICAgIGxhbWJkYVByb3A6IFRzZ0xhbWJkYVByb3AsXHJcbiAgICBhcHBDb25maWc6IEFwcENvbmZpZ1xyXG4gICkge1xyXG4gICAgcmV0dXJuIGAke2FwcENvbmZpZy5BcHBQcmVmaXh9LSR7bGFtYmRhUHJvcC5uYW1lfWAudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUmVjb3JkRm9yTGFtYmRhKGxhbWJkYXM6IE5vZGVqc0Z1bmN0aW9uW10pIHtcclxuICAgIGNvbnN0IG5hbWVzID0gdGhpcy5jb25maWcuUkVTT1VSQ0VTLkxBTUJEQS5tYXAoKGxhbWJkYSkgPT4ge1xyXG4gICAgICByZXR1cm4gbGFtYmRhLm5hbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBsYW1iZGFOYW1lcyA9IFsuLi5uYW1lc10gYXMgY29uc3Q7XHJcblxyXG4gICAgdHlwZSBMYW1iZGFOYW1lID0gKHR5cGVvZiBsYW1iZGFOYW1lcylbbnVtYmVyXTtcclxuXHJcbiAgICBjb25zdCBsYW1iZGFSZWNvcmQ6IFJlY29yZDxMYW1iZGFOYW1lLCBOb2RlanNGdW5jdGlvbj4gPSB7fSBhcyBSZWNvcmQ8XHJcbiAgICAgIExhbWJkYU5hbWUsXHJcbiAgICAgIE5vZGVqc0Z1bmN0aW9uXHJcbiAgICA+O1xyXG5cclxuICAgIGxhbWJkYXMuZm9yRWFjaCgobGFtYmRhLCBpZHgpID0+IHtcclxuICAgICAgbGFtYmRhUmVjb3JkW2xhbWJkYU5hbWVzW2lkeF0gYXMgTGFtYmRhTmFtZV0gPSBsYW1iZGFzW2lkeF07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGFtYmRhUmVjb3JkO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -2,20 +2,24 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSQSResource = void 0;
|
|
4
4
|
const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
|
|
5
|
+
const core_1 = require("aws-cdk-lib/core");
|
|
5
6
|
const createSQSResource = (scope, queueName) => {
|
|
6
|
-
const
|
|
7
|
-
|
|
7
|
+
const stackSuffix = core_1.Stack.of(scope).stackName;
|
|
8
|
+
const physicalQueueName = `${queueName}-${stackSuffix}`;
|
|
9
|
+
const physicalDlqName = `${queueName}-dead-letter-queue-${stackSuffix}`;
|
|
10
|
+
const dlQueue = new aws_sqs_1.Queue(scope, `sqs-queue-dl-${physicalQueueName}`, {
|
|
11
|
+
queueName: physicalDlqName,
|
|
8
12
|
});
|
|
9
13
|
const queueProp = {
|
|
10
|
-
queueName,
|
|
14
|
+
queueName: physicalQueueName,
|
|
11
15
|
deadLetterQueue: {
|
|
12
16
|
queue: dlQueue,
|
|
13
|
-
maxReceiveCount: 5
|
|
14
|
-
}
|
|
17
|
+
maxReceiveCount: 5,
|
|
18
|
+
},
|
|
15
19
|
};
|
|
16
20
|
// SQS resource creation logic goes here
|
|
17
|
-
const createdQueue = new aws_sqs_1.Queue(scope, `sqs-queue-${
|
|
21
|
+
const createdQueue = new aws_sqs_1.Queue(scope, `sqs-queue-${physicalQueueName}`, queueProp);
|
|
18
22
|
return createdQueue;
|
|
19
23
|
};
|
|
20
24
|
exports.createSQSResource = createSQSResource;
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNxcy1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXNvdXJjZXMvc3FzL2NyZWF0ZS1zcXMtcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQXdEO0FBQ3hELDJDQUF5QztBQUdsQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBZ0IsRUFBRSxTQUFpQixFQUFFLEVBQUU7SUFDdkUsTUFBTSxXQUFXLEdBQUcsWUFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN4RCxNQUFNLGVBQWUsR0FBRyxHQUFHLFNBQVMsc0JBQXNCLFdBQVcsRUFBRSxDQUFDO0lBRXhFLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBSyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsaUJBQWlCLEVBQUUsRUFBRTtRQUNwRSxTQUFTLEVBQUUsZUFBZTtLQUMzQixDQUFDLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBZTtRQUM1QixTQUFTLEVBQUUsaUJBQWlCO1FBQzVCLGVBQWUsRUFBRTtZQUNmLEtBQUssRUFBRSxPQUFPO1lBQ2QsZUFBZSxFQUFFLENBQUM7U0FDbkI7S0FDRixDQUFDO0lBRUYsd0NBQXdDO0lBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBSyxDQUFDLEtBQUssRUFBRSxhQUFhLGlCQUFpQixFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFbkYsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBckJXLFFBQUEsaUJBQWlCLHFCQXFCNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWV1ZSwgUXVldWVQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3FzXCI7XHJcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVTUVNSZXNvdXJjZSA9IChzY29wZTogQ29uc3RydWN0LCBxdWV1ZU5hbWU6IHN0cmluZykgPT4ge1xyXG4gIGNvbnN0IHN0YWNrU3VmZml4ID0gU3RhY2sub2Yoc2NvcGUpLnN0YWNrTmFtZTtcclxuICBjb25zdCBwaHlzaWNhbFF1ZXVlTmFtZSA9IGAke3F1ZXVlTmFtZX0tJHtzdGFja1N1ZmZpeH1gO1xyXG4gIGNvbnN0IHBoeXNpY2FsRGxxTmFtZSA9IGAke3F1ZXVlTmFtZX0tZGVhZC1sZXR0ZXItcXVldWUtJHtzdGFja1N1ZmZpeH1gO1xyXG5cclxuICBjb25zdCBkbFF1ZXVlID0gbmV3IFF1ZXVlKHNjb3BlLCBgc3FzLXF1ZXVlLWRsLSR7cGh5c2ljYWxRdWV1ZU5hbWV9YCwge1xyXG4gICAgcXVldWVOYW1lOiBwaHlzaWNhbERscU5hbWUsXHJcbiAgfSk7XHJcblxyXG4gICAgY29uc3QgcXVldWVQcm9wOiBRdWV1ZVByb3BzID0ge1xyXG4gICAgICBxdWV1ZU5hbWU6IHBoeXNpY2FsUXVldWVOYW1lLFxyXG4gICAgICBkZWFkTGV0dGVyUXVldWU6IHtcclxuICAgICAgICBxdWV1ZTogZGxRdWV1ZSxcclxuICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IDUsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIFxyXG4gICAgLy8gU1FTIHJlc291cmNlIGNyZWF0aW9uIGxvZ2ljIGdvZXMgaGVyZVxyXG4gIGNvbnN0IGNyZWF0ZWRRdWV1ZSA9IG5ldyBRdWV1ZShzY29wZSwgYHNxcy1xdWV1ZS0ke3BoeXNpY2FsUXVldWVOYW1lfWAsIHF1ZXVlUHJvcCk7XHJcblxyXG4gIHJldHVybiBjcmVhdGVkUXVldWU7XHJcbn07XHJcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,112 +1,115 @@
|
|
|
1
1
|
import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
AttributeType,
|
|
4
|
+
BillingMode,
|
|
5
|
+
GlobalSecondaryIndexProps,
|
|
6
|
+
ProjectionType,
|
|
7
|
+
Table,
|
|
8
|
+
TableProps,
|
|
9
|
+
} from "aws-cdk-lib/aws-dynamodb";
|
|
3
10
|
import { Construct } from "constructs";
|
|
4
11
|
import { TsgBaseResource } from "../base/tsgBaseResource";
|
|
5
12
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
export class CreateDynamoSingleTableDesign extends TsgBaseResource<
|
|
14
|
+
Table,
|
|
15
|
+
string
|
|
16
|
+
> {
|
|
17
|
+
static ReadWriteActions: string[] = [
|
|
18
|
+
"dynamodb:BatchGetItem",
|
|
19
|
+
"dynamodb:BatchWriteItem",
|
|
20
|
+
"dynamodb:ConditionCheckItem",
|
|
21
|
+
"dynamodb:DeleteItem",
|
|
22
|
+
"dynamodb:DescribeTable",
|
|
23
|
+
"dynamodb:GetItem",
|
|
24
|
+
"dynamodb:GetRecords",
|
|
25
|
+
"dynamodb:GetShardIterator",
|
|
26
|
+
"dynamodb:PutItem",
|
|
27
|
+
"dynamodb:Query",
|
|
28
|
+
"dynamodb:Scan",
|
|
29
|
+
"dynamodb:UpdateItem",
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
get CreatedTable() {
|
|
33
|
+
return this.createdResource;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
constructor(protected scope: Construct, protected tableName: string) {
|
|
37
|
+
super(scope, tableName);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
protected createResource(scope: Construct): Table {
|
|
41
|
+
const dbTable = new Table(scope, `${this.tableName}`, {
|
|
42
|
+
tableName: this.tableName,
|
|
43
|
+
removalPolicy: RemovalPolicy.DESTROY,
|
|
44
|
+
|
|
45
|
+
partitionKey: {
|
|
46
|
+
name: "pk",
|
|
47
|
+
type: AttributeType.STRING,
|
|
48
|
+
},
|
|
49
|
+
sortKey: {
|
|
50
|
+
name: "sk",
|
|
51
|
+
type: AttributeType.STRING,
|
|
52
|
+
},
|
|
53
|
+
billingMode: BillingMode.PAY_PER_REQUEST,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const gsiIndexes = [
|
|
57
|
+
{
|
|
58
|
+
indexName: "gsi1Index",
|
|
59
|
+
partitionKey: {
|
|
60
|
+
name: "gsi1pk",
|
|
61
|
+
type: AttributeType.STRING,
|
|
62
|
+
},
|
|
63
|
+
sortKey: {
|
|
64
|
+
name: "gsi1sk",
|
|
65
|
+
type: AttributeType.STRING,
|
|
66
|
+
},
|
|
67
|
+
projectionType: ProjectionType.ALL,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
indexName: "gsi2Index",
|
|
71
|
+
partitionKey: {
|
|
72
|
+
name: "gsi2pk",
|
|
73
|
+
type: AttributeType.STRING,
|
|
74
|
+
},
|
|
75
|
+
sortKey: {
|
|
76
|
+
name: "gsi2sk",
|
|
77
|
+
type: AttributeType.STRING,
|
|
78
|
+
},
|
|
79
|
+
projectionType: ProjectionType.ALL,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
indexName: "gsi3Index",
|
|
83
|
+
partitionKey: {
|
|
84
|
+
name: "gsi3pk",
|
|
85
|
+
type: AttributeType.STRING,
|
|
86
|
+
},
|
|
87
|
+
sortKey: {
|
|
88
|
+
name: "gsi3sk",
|
|
89
|
+
type: AttributeType.STRING,
|
|
90
|
+
},
|
|
91
|
+
projectionType: ProjectionType.ALL,
|
|
92
|
+
},
|
|
22
93
|
];
|
|
23
94
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
},
|
|
46
|
-
billingMode: BillingMode.PAY_PER_REQUEST,
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
const gsiIndexes = [
|
|
50
|
-
{
|
|
51
|
-
indexName: 'gsi1Index',
|
|
52
|
-
partitionKey: {
|
|
53
|
-
name: 'gsi1pk',
|
|
54
|
-
type: AttributeType.STRING
|
|
55
|
-
},
|
|
56
|
-
sortKey: {
|
|
57
|
-
name: 'gsi1sk',
|
|
58
|
-
type: AttributeType.STRING
|
|
59
|
-
},
|
|
60
|
-
projectionType: ProjectionType.ALL
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
indexName: 'gsi2Index',
|
|
64
|
-
partitionKey: {
|
|
65
|
-
name: 'gsi2pk',
|
|
66
|
-
type: AttributeType.STRING
|
|
67
|
-
},
|
|
68
|
-
sortKey: {
|
|
69
|
-
name: 'gsi2sk',
|
|
70
|
-
type: AttributeType.STRING
|
|
71
|
-
},
|
|
72
|
-
projectionType: ProjectionType.ALL
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
indexName: 'gsi3Index',
|
|
76
|
-
partitionKey: {
|
|
77
|
-
name: 'gsi3pk',
|
|
78
|
-
type: AttributeType.STRING
|
|
79
|
-
},
|
|
80
|
-
sortKey: {
|
|
81
|
-
name: 'gsi3sk',
|
|
82
|
-
type: AttributeType.STRING
|
|
83
|
-
},
|
|
84
|
-
projectionType: ProjectionType.ALL
|
|
85
|
-
},
|
|
86
|
-
];
|
|
87
|
-
|
|
88
|
-
gsiIndexes.map((gsi) => {
|
|
89
|
-
|
|
90
|
-
const gsiProps: GlobalSecondaryIndexProps = {
|
|
91
|
-
indexName: gsi.indexName,
|
|
92
|
-
partitionKey: gsi.partitionKey,
|
|
93
|
-
sortKey: gsi.sortKey,
|
|
94
|
-
projectionType: gsi.projectionType
|
|
95
|
-
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
dbTable.addGlobalSecondaryIndex(gsiProps);
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
return dbTable;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
protected createOutput<T>(scope: Construct): void {
|
|
106
|
-
|
|
107
|
-
new CfnOutput(scope, `dynamoTable-${this.CreatedTable?.tableName}`, {
|
|
108
|
-
value: `Table Name: ${this.createdResource?.tableName}\t Table Arn: ${this.createdResource?.tableArn}`
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
}
|
|
95
|
+
gsiIndexes.map((gsi) => {
|
|
96
|
+
const gsiProps: GlobalSecondaryIndexProps = {
|
|
97
|
+
indexName: gsi.indexName,
|
|
98
|
+
partitionKey: gsi.partitionKey,
|
|
99
|
+
sortKey: gsi.sortKey,
|
|
100
|
+
projectionType: gsi.projectionType,
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
dbTable.addGlobalSecondaryIndex(gsiProps);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
return dbTable;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
protected createOutput<T>(scope: Construct): void {
|
|
110
|
+
// Logical IDs must not include unresolved tokens; use a stable ID
|
|
111
|
+
new CfnOutput(scope, "dynamoTable", {
|
|
112
|
+
value: `Table Name: ${this.createdResource?.tableName}\t Table Arn: ${this.createdResource?.tableArn}`,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -1,203 +1,239 @@
|
|
|
1
1
|
import { CfnOutput, Duration } from "aws-cdk-lib";
|
|
2
2
|
import { TokenAuthorizer } from "aws-cdk-lib/aws-apigateway";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Alarm,
|
|
5
|
+
ComparisonOperator,
|
|
6
|
+
IAlarmAction,
|
|
7
|
+
} from "aws-cdk-lib/aws-cloudwatch";
|
|
4
8
|
import { IRole, ManagedPolicy } from "aws-cdk-lib/aws-iam";
|
|
5
9
|
import { LayerVersion, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
6
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
NodejsFunction,
|
|
12
|
+
NodejsFunctionProps,
|
|
13
|
+
SourceMapMode,
|
|
14
|
+
} from "aws-cdk-lib/aws-lambda-nodejs";
|
|
7
15
|
import { Construct } from "constructs";
|
|
8
|
-
import * as path from
|
|
16
|
+
import * as path from "path";
|
|
9
17
|
import { AppConfig } from "../../config/AppConfig";
|
|
10
18
|
import { TsgLambdaProp } from "../../config/types";
|
|
11
19
|
|
|
12
20
|
import { TsgLambdaProps } from "../../config/types/TsgLambdaProps";
|
|
13
21
|
import { CreateLambdaFunctionInput } from "../../interfaces/CreateLambdaFunctionInput";
|
|
14
22
|
import { BaseResource } from "../base/baseResource";
|
|
15
|
-
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
23
|
+
import { LogGroup, RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
16
24
|
import { LambdaHelper } from "./lambdaHelper";
|
|
17
25
|
import { getUUID } from "../../helpers/util-helper";
|
|
18
26
|
|
|
19
|
-
|
|
20
27
|
export class CreateLambda extends BaseResource<NodejsFunction> {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
28
|
+
public Lambdas: NodejsFunction[] = [];
|
|
29
|
+
public LambdaRecords: Record<string, NodejsFunction> = {};
|
|
30
|
+
|
|
31
|
+
constructor(
|
|
32
|
+
scope: Construct,
|
|
33
|
+
config: AppConfig,
|
|
34
|
+
private layers?: LayerVersion[]
|
|
35
|
+
) {
|
|
36
|
+
super(scope, config);
|
|
37
|
+
|
|
38
|
+
const resources = this.createResource(scope);
|
|
39
|
+
|
|
40
|
+
this.createdResources = [...resources];
|
|
41
|
+
|
|
42
|
+
this.Lambdas = [...resources];
|
|
43
|
+
|
|
44
|
+
this.createAlarmsForLambdas(this.Lambdas);
|
|
45
|
+
|
|
46
|
+
this.LambdaRecords = this.createRecordForLambda(this.Lambdas);
|
|
47
|
+
|
|
48
|
+
this.createOutput(scope, resources);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
protected createResource(scope: Construct): NodejsFunction[] {
|
|
52
|
+
const result = this.createLambdas(this.config);
|
|
53
|
+
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
|
|
58
|
+
createdAssets.forEach((x, idx) => {
|
|
59
|
+
new CfnOutput(scope, `lambda-${idx}`, {
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
value: x.functionName,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private createLambdas(config: AppConfig): NodejsFunction[] {
|
|
67
|
+
const createdLambdas: NodejsFunction[] = this.createLambdaFunctions(
|
|
68
|
+
this.scope,
|
|
69
|
+
undefined,
|
|
70
|
+
this.layers
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
return createdLambdas;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private createLambdaFunctions(
|
|
77
|
+
scope: Construct,
|
|
78
|
+
role?: IRole,
|
|
79
|
+
layers?: LayerVersion[]
|
|
80
|
+
) {
|
|
81
|
+
const createdLambdas = this.config.RESOURCES.LAMBDA.map(
|
|
82
|
+
(config: TsgLambdaProp) => {
|
|
83
|
+
let lambdaProps = this.createLambdaProps(config, role, layers);
|
|
84
|
+
|
|
85
|
+
const lambdaId = CreateLambda.getIdForLambda(config, this.config);
|
|
86
|
+
let fctn = new NodejsFunction(scope, lambdaId, lambdaProps);
|
|
87
|
+
|
|
88
|
+
return fctn;
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
return createdLambdas || [];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private createLambdaProps(
|
|
96
|
+
prop: TsgLambdaProp,
|
|
97
|
+
role?: IRole,
|
|
98
|
+
layers?: LayerVersion[],
|
|
99
|
+
props?: TsgLambdaProps
|
|
100
|
+
) {
|
|
101
|
+
return this.createLambdaFunctionProps({
|
|
102
|
+
prop,
|
|
103
|
+
role,
|
|
104
|
+
layers,
|
|
105
|
+
props,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private createLambdaFunctionProps(props: CreateLambdaFunctionInput) {
|
|
110
|
+
const { prop, role, layers } = props;
|
|
111
|
+
|
|
112
|
+
// Create explicit LogGroup to avoid deprecated `logRetention`
|
|
113
|
+
const functionName = `${this.config.AppPrefix}-${prop.name}`;
|
|
114
|
+
const logGroup = new LogGroup(this.scope, `${functionName}-logs`, {
|
|
115
|
+
retention: !prop.logDuration
|
|
116
|
+
? RetentionDays.FIVE_DAYS
|
|
117
|
+
: LambdaHelper.getDayToSaveLogs(prop.logDuration),
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const lambdaProp: NodejsFunctionProps = {
|
|
121
|
+
entry: path.join(prop.codePath),
|
|
122
|
+
functionName,
|
|
123
|
+
handler: prop.handler,
|
|
124
|
+
logGroup,
|
|
125
|
+
runtime: prop.runtime || this.config.GLOBALS.stackRuntime,
|
|
126
|
+
timeout: prop.duration || Duration.minutes(2),
|
|
127
|
+
memorySize: prop.memory || 512,
|
|
128
|
+
environment: {
|
|
129
|
+
VERBOSE_LOGGING: "true",
|
|
130
|
+
...prop.environment,
|
|
131
|
+
},
|
|
132
|
+
bundling: {
|
|
133
|
+
minify: false,
|
|
134
|
+
target: "es2020",
|
|
135
|
+
sourceMap: true,
|
|
136
|
+
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
137
|
+
environment: prop.environment || prop.environment,
|
|
138
|
+
},
|
|
139
|
+
role,
|
|
140
|
+
layers,
|
|
118
141
|
};
|
|
119
142
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
143
|
+
return lambdaProp;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private createAlarmsForLambdas(lambdas: NodejsFunction[]) {
|
|
147
|
+
const lambdaRecords = this.createRecordForLambda(lambdas);
|
|
148
|
+
|
|
149
|
+
// console.log('Lambda Records:', lambdaRecords);
|
|
150
|
+
// const lambdaNames = Object.keys(lambdaRecords);
|
|
151
|
+
// console.log('lambda Names from Records', lambdaNames);
|
|
152
|
+
|
|
153
|
+
lambdas.forEach((lambda, idx) => {
|
|
154
|
+
const errorMetric = lambda.metricErrors({
|
|
155
|
+
period: Duration.minutes(3),
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
const durationMetric = lambda.metricDuration({
|
|
159
|
+
period: Duration.minutes(3),
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
const invocationMetric = lambda.metricInvocations({
|
|
163
|
+
period: Duration.minutes(3),
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const uuid = getUUID().split("-")[0];
|
|
167
|
+
|
|
168
|
+
new Alarm(
|
|
169
|
+
this.scope,
|
|
170
|
+
`${this.config.AppPrefix}-${lambda.node.id}-error-alarm`,
|
|
171
|
+
{
|
|
172
|
+
metric: errorMetric,
|
|
173
|
+
threshold: 5,
|
|
174
|
+
comparisonOperator:
|
|
175
|
+
ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
176
|
+
evaluationPeriods: 3,
|
|
177
|
+
alarmDescription: `${this.config.AppPrefix} errors over 3 min period`,
|
|
178
|
+
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-error-alarm`,
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
new Alarm(
|
|
183
|
+
this.scope,
|
|
184
|
+
`${this.config.AppPrefix}-${lambda.node.id}-duration-alarm`,
|
|
185
|
+
{
|
|
186
|
+
metric: durationMetric,
|
|
187
|
+
threshold: 1,
|
|
188
|
+
comparisonOperator:
|
|
189
|
+
ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
190
|
+
evaluationPeriods: 3,
|
|
191
|
+
alarmDescription: `${this.config.AppPrefix}-${lambda.node.id} duration errors over 3 min period`,
|
|
192
|
+
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-duration-alarm`,
|
|
193
|
+
}
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
const invocationAlarm = new Alarm(
|
|
197
|
+
this.scope,
|
|
198
|
+
`${this.config.AppPrefix}-${lambda.node.id}-invocation-alarm`,
|
|
199
|
+
{
|
|
200
|
+
metric: errorMetric,
|
|
201
|
+
threshold: 1000,
|
|
202
|
+
comparisonOperator:
|
|
203
|
+
ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
204
|
+
evaluationPeriods: 3,
|
|
205
|
+
alarmDescription: `${this.config.AppPrefix}-${lambda.node.id} errors over 3 min period`,
|
|
206
|
+
alarmName: `${this.config.AppPrefix}-${lambda.node.id}-invocation-Metric-alarm`,
|
|
207
|
+
}
|
|
208
|
+
);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
185
211
|
|
|
186
|
-
|
|
212
|
+
public static getIdForLambda(
|
|
213
|
+
lambdaProp: TsgLambdaProp,
|
|
214
|
+
appConfig: AppConfig
|
|
215
|
+
) {
|
|
216
|
+
return `${appConfig.AppPrefix}-${lambdaProp.name}`.toLowerCase();
|
|
217
|
+
}
|
|
187
218
|
|
|
219
|
+
private createRecordForLambda(lambdas: NodejsFunction[]) {
|
|
220
|
+
const names = this.config.RESOURCES.LAMBDA.map((lambda) => {
|
|
221
|
+
return lambda.name;
|
|
222
|
+
});
|
|
188
223
|
|
|
189
|
-
|
|
224
|
+
const lambdaNames = [...names] as const;
|
|
190
225
|
|
|
191
|
-
|
|
192
|
-
lambdaRecord[lambdaNames[idx] as LambdaName] = lambdas[idx];
|
|
193
|
-
});
|
|
226
|
+
type LambdaName = (typeof lambdaNames)[number];
|
|
194
227
|
|
|
195
|
-
|
|
196
|
-
|
|
228
|
+
const lambdaRecord: Record<LambdaName, NodejsFunction> = {} as Record<
|
|
229
|
+
LambdaName,
|
|
230
|
+
NodejsFunction
|
|
231
|
+
>;
|
|
197
232
|
|
|
198
|
-
|
|
233
|
+
lambdas.forEach((lambda, idx) => {
|
|
234
|
+
lambdaRecord[lambdaNames[idx] as LambdaName] = lambdas[idx];
|
|
235
|
+
});
|
|
199
236
|
|
|
200
|
-
|
|
237
|
+
return lambdaRecord;
|
|
238
|
+
}
|
|
201
239
|
}
|
|
202
|
-
|
|
203
|
-
|
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
import { Queue, QueueProps } from "aws-cdk-lib/aws-sqs";
|
|
2
|
+
import { Stack } from "aws-cdk-lib/core";
|
|
2
3
|
import { Construct } from "constructs";
|
|
3
4
|
|
|
4
5
|
export const createSQSResource = (scope: Construct, queueName: string) => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const stackSuffix = Stack.of(scope).stackName;
|
|
7
|
+
const physicalQueueName = `${queueName}-${stackSuffix}`;
|
|
8
|
+
const physicalDlqName = `${queueName}-dead-letter-queue-${stackSuffix}`;
|
|
9
|
+
|
|
10
|
+
const dlQueue = new Queue(scope, `sqs-queue-dl-${physicalQueueName}`, {
|
|
11
|
+
queueName: physicalDlqName,
|
|
8
12
|
});
|
|
9
13
|
|
|
10
14
|
const queueProp: QueueProps = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
queueName: physicalQueueName,
|
|
16
|
+
deadLetterQueue: {
|
|
17
|
+
queue: dlQueue,
|
|
18
|
+
maxReceiveCount: 5,
|
|
19
|
+
},
|
|
16
20
|
};
|
|
17
21
|
|
|
18
22
|
// SQS resource creation logic goes here
|
|
19
|
-
const createdQueue = new Queue(scope, `sqs-queue-${
|
|
23
|
+
const createdQueue = new Queue(scope, `sqs-queue-${physicalQueueName}`, queueProp);
|
|
20
24
|
|
|
21
25
|
return createdQueue;
|
|
22
26
|
};
|