@aws-solutions-constructs/aws-sns-lambda 2.26.0 → 2.28.0
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 +197 -15
- package/README.md +3 -0
- package/lib/index.d.ts +20 -0
- package/lib/index.js +6 -3
- package/package.json +6 -6
- package/test/sns-lambda.test.js +130 -1
package/.jsii
CHANGED
|
@@ -8,11 +8,89 @@
|
|
|
8
8
|
"url": "https://aws.amazon.com"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@aws-solutions-constructs/core": "2.
|
|
12
|
-
"aws-cdk-lib": "^2.
|
|
11
|
+
"@aws-solutions-constructs/core": "2.28.0",
|
|
12
|
+
"aws-cdk-lib": "^2.53.0",
|
|
13
13
|
"constructs": "^10.0.0"
|
|
14
14
|
},
|
|
15
15
|
"dependencyClosure": {
|
|
16
|
+
"@aws-cdk/asset-awscli-v1": {
|
|
17
|
+
"targets": {
|
|
18
|
+
"dotnet": {
|
|
19
|
+
"namespace": "Amazon.CDK.Asset.AwsCliV1",
|
|
20
|
+
"packageId": "Amazon.CDK.Asset.AwsCliV1"
|
|
21
|
+
},
|
|
22
|
+
"go": {
|
|
23
|
+
"moduleName": "github.com/cdklabs/awscdk-asset-awscli-go",
|
|
24
|
+
"packageName": "awscliv1"
|
|
25
|
+
},
|
|
26
|
+
"java": {
|
|
27
|
+
"maven": {
|
|
28
|
+
"artifactId": "cdk-asset-awscli-v1",
|
|
29
|
+
"groupId": "software.amazon.awscdk"
|
|
30
|
+
},
|
|
31
|
+
"package": "software.amazon.awscdk.cdk.asset.awscli.v1"
|
|
32
|
+
},
|
|
33
|
+
"js": {
|
|
34
|
+
"npm": "@aws-cdk/asset-awscli-v1"
|
|
35
|
+
},
|
|
36
|
+
"python": {
|
|
37
|
+
"distName": "aws-cdk.asset-awscli-v1",
|
|
38
|
+
"module": "aws_cdk.asset_awscli_v1"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"@aws-cdk/asset-kubectl-v20": {
|
|
43
|
+
"targets": {
|
|
44
|
+
"dotnet": {
|
|
45
|
+
"namespace": "Amazon.CDK.Asset.KubectlV20",
|
|
46
|
+
"packageId": "Amazon.CDK.Asset.KubectlV20"
|
|
47
|
+
},
|
|
48
|
+
"go": {
|
|
49
|
+
"moduleName": "github.com/cdklabs/awscdk-asset-kubectl-go",
|
|
50
|
+
"packageName": "kubectlv20"
|
|
51
|
+
},
|
|
52
|
+
"java": {
|
|
53
|
+
"maven": {
|
|
54
|
+
"artifactId": "cdk-asset-kubectl-v20",
|
|
55
|
+
"groupId": "software.amazon.awscdk"
|
|
56
|
+
},
|
|
57
|
+
"package": "software.amazon.awscdk.cdk.asset.kubectl.v20"
|
|
58
|
+
},
|
|
59
|
+
"js": {
|
|
60
|
+
"npm": "@aws-cdk/asset-kubectl-v20"
|
|
61
|
+
},
|
|
62
|
+
"python": {
|
|
63
|
+
"distName": "aws-cdk.asset-kubectl-v20",
|
|
64
|
+
"module": "aws_cdk.asset_kubectl_v20"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"@aws-cdk/asset-node-proxy-agent-v5": {
|
|
69
|
+
"targets": {
|
|
70
|
+
"dotnet": {
|
|
71
|
+
"namespace": "Amazon.CDK.Asset.NodeProxyAgentV5",
|
|
72
|
+
"packageId": "Amazon.CDK.Asset.NodeProxyAgentV5"
|
|
73
|
+
},
|
|
74
|
+
"go": {
|
|
75
|
+
"moduleName": "github.com/cdklabs/awscdk-asset-node-proxy-agent-go",
|
|
76
|
+
"packageName": "nodeproxyagentv5"
|
|
77
|
+
},
|
|
78
|
+
"java": {
|
|
79
|
+
"maven": {
|
|
80
|
+
"artifactId": "cdk-asset-node-proxy-agent-v5",
|
|
81
|
+
"groupId": "software.amazon.awscdk"
|
|
82
|
+
},
|
|
83
|
+
"package": "software.amazon.awscdk.cdk.asset.node.proxy.agent.v5"
|
|
84
|
+
},
|
|
85
|
+
"js": {
|
|
86
|
+
"npm": "@aws-cdk/asset-node-proxy-agent-v5"
|
|
87
|
+
},
|
|
88
|
+
"python": {
|
|
89
|
+
"distName": "aws-cdk.asset-node-proxy-agent-v5",
|
|
90
|
+
"module": "aws_cdk.asset_node_proxy_agent_v5"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
16
94
|
"@aws-solutions-constructs/core": {
|
|
17
95
|
"targets": {
|
|
18
96
|
"dotnet": {
|
|
@@ -1431,6 +1509,19 @@
|
|
|
1431
1509
|
}
|
|
1432
1510
|
}
|
|
1433
1511
|
},
|
|
1512
|
+
"aws-cdk-lib.aws_identitystore": {
|
|
1513
|
+
"targets": {
|
|
1514
|
+
"dotnet": {
|
|
1515
|
+
"namespace": "Amazon.CDK.AWS.IdentityStore"
|
|
1516
|
+
},
|
|
1517
|
+
"java": {
|
|
1518
|
+
"package": "software.amazon.awscdk.services.identitystore"
|
|
1519
|
+
},
|
|
1520
|
+
"python": {
|
|
1521
|
+
"module": "aws_cdk.aws_identitystore"
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
},
|
|
1434
1525
|
"aws-cdk-lib.aws_imagebuilder": {
|
|
1435
1526
|
"targets": {
|
|
1436
1527
|
"dotnet": {
|
|
@@ -2159,6 +2250,19 @@
|
|
|
2159
2250
|
}
|
|
2160
2251
|
}
|
|
2161
2252
|
},
|
|
2253
|
+
"aws-cdk-lib.aws_organizations": {
|
|
2254
|
+
"targets": {
|
|
2255
|
+
"dotnet": {
|
|
2256
|
+
"namespace": "Amazon.CDK.AWS.Organizations"
|
|
2257
|
+
},
|
|
2258
|
+
"java": {
|
|
2259
|
+
"package": "software.amazon.awscdk.services.organizations"
|
|
2260
|
+
},
|
|
2261
|
+
"python": {
|
|
2262
|
+
"module": "aws_cdk.aws_organizations"
|
|
2263
|
+
}
|
|
2264
|
+
}
|
|
2265
|
+
},
|
|
2162
2266
|
"aws-cdk-lib.aws_panorama": {
|
|
2163
2267
|
"targets": {
|
|
2164
2268
|
"dotnet": {
|
|
@@ -2328,6 +2432,19 @@
|
|
|
2328
2432
|
}
|
|
2329
2433
|
}
|
|
2330
2434
|
},
|
|
2435
|
+
"aws-cdk-lib.aws_resourceexplorer2": {
|
|
2436
|
+
"targets": {
|
|
2437
|
+
"dotnet": {
|
|
2438
|
+
"namespace": "Amazon.CDK.AWS.ResourceExplorer2"
|
|
2439
|
+
},
|
|
2440
|
+
"java": {
|
|
2441
|
+
"package": "software.amazon.awscdk.services.resourceexplorer2"
|
|
2442
|
+
},
|
|
2443
|
+
"python": {
|
|
2444
|
+
"module": "aws_cdk.aws_resourceexplorer2"
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
},
|
|
2331
2448
|
"aws-cdk-lib.aws_resourcegroups": {
|
|
2332
2449
|
"targets": {
|
|
2333
2450
|
"dotnet": {
|
|
@@ -2562,6 +2679,19 @@
|
|
|
2562
2679
|
}
|
|
2563
2680
|
}
|
|
2564
2681
|
},
|
|
2682
|
+
"aws-cdk-lib.aws_scheduler": {
|
|
2683
|
+
"targets": {
|
|
2684
|
+
"dotnet": {
|
|
2685
|
+
"namespace": "Amazon.CDK.AWS.Scheduler"
|
|
2686
|
+
},
|
|
2687
|
+
"java": {
|
|
2688
|
+
"package": "software.amazon.awscdk.services.scheduler"
|
|
2689
|
+
},
|
|
2690
|
+
"python": {
|
|
2691
|
+
"module": "aws_cdk.aws_scheduler"
|
|
2692
|
+
}
|
|
2693
|
+
}
|
|
2694
|
+
},
|
|
2565
2695
|
"aws-cdk-lib.aws_sdb": {
|
|
2566
2696
|
"targets": {
|
|
2567
2697
|
"dotnet": {
|
|
@@ -3124,7 +3254,7 @@
|
|
|
3124
3254
|
},
|
|
3125
3255
|
"description": "CDK Constructs for AWS SNS to AWS Lambda integration",
|
|
3126
3256
|
"homepage": "https://github.com/awslabs/aws-solutions-constructs.git",
|
|
3127
|
-
"jsiiVersion": "1.
|
|
3257
|
+
"jsiiVersion": "1.71.0 (build f1f58ae)",
|
|
3128
3258
|
"keywords": [
|
|
3129
3259
|
"aws",
|
|
3130
3260
|
"cdk",
|
|
@@ -3143,7 +3273,7 @@
|
|
|
3143
3273
|
},
|
|
3144
3274
|
"name": "@aws-solutions-constructs/aws-sns-lambda",
|
|
3145
3275
|
"readme": {
|
|
3146
|
-
"markdown": "# aws-sns-lambda module\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n\n\n---\n<!--END STABILITY BANNER-->\n\n| **Reference Documentation**:| <span style=\"font-weight: normal\">https://docs.aws.amazon.com/solutions/latest/constructs/</span>|\n|:-------------|:-------------|\n<div style=\"height:8px\"></div>\n\n| **Language** | **Package** |\n|:-------------|-----------------|\n| Python|`aws_solutions_constructs.aws_sns_lambda`|\n| Typescript|`@aws-solutions-constructs/aws-sns-lambda`|\n| Java|`software.amazon.awsconstructs.services.snslambda`|\n\n## Overview\nThis AWS Solutions Construct implements an Amazon SNS connected to an AWS Lambda function.\n\nHere is a minimal deployable pattern definition:\n\nTypescript\n``` typescript\nimport { Construct } from 'constructs';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { SnsToLambda, SnsToLambdaProps } from \"@aws-solutions-constructs/aws-sns-lambda\";\nimport * as lambda from 'aws-cdk-lib/aws-lambda';\n\nnew SnsToLambda(this, 'test-sns-lambda', {\n lambdaFunctionProps: {\n runtime: lambda.Runtime.NODEJS_14_X,\n handler: 'index.handler',\n code: lambda.Code.fromAsset(`lambda`)\n }\n});\n```\nPython\n```python\nfrom aws_solutions_constructs.aws_sns_lambda import SnsToLambda\nfrom aws_cdk import (\n aws_lambda as _lambda,\n Stack\n)\nfrom constructs import Construct\n\nSnsToLambda(self, 'test_sns_lambda',\n lambda_function_props=_lambda.FunctionProps(\n code=_lambda.Code.from_asset('lambda'),\n runtime=_lambda.Runtime.PYTHON_3_9,\n handler='index.handler'\n )\n )\n```\n\nJava\n``` java\nimport software.constructs.Construct;\n\nimport software.amazon.awscdk.Stack;\nimport software.amazon.awscdk.StackProps;\nimport software.amazon.awscdk.services.lambda.*;\nimport software.amazon.awscdk.services.lambda.Runtime;\nimport software.amazon.awsconstructs.services.snslambda.*;\n\nnew SnsToLambda(this, \"test-lambda-sqs-stack\", new SnsToLambdaProps.Builder()\n .lambdaFunctionProps(new FunctionProps.Builder()\n .runtime(Runtime.NODEJS_14_X)\n .code(Code.fromAsset(\"lambda\"))\n .handler(\"index.handler\")\n .build())\n .build());\n```\n\n## Pattern Construct Props\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|existingLambdaObj?|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Existing instance of Lambda Function object, providing both this and `lambdaFunctionProps` will cause an error.|\n|lambdaFunctionProps?|[`lambda.FunctionProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionProps.html)|User provided props to override the default props for the Lambda function.|\n|existingTopicObj?|[`sns.Topic`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Existing instance of SNS Topic object, providing both this and `topicProps` will cause an error.|\n|topicProps?|[`sns.TopicProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_sns.TopicProps.html)|Optional user provided properties to override the default properties for the SNS topic.|\n\n## Pattern Properties\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|lambdaFunction|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Returns an instance of the Lambda function created by the pattern.|\n|snsTopic|[`sns.Topic`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_sns.Topic.html)|Returns an instance of the SNS topic created by the pattern.|\n\n## Default settings\n\nOut of the box implementation of the Construct without any override will set the following defaults:\n\n### Amazon SNS Topic\n* Configure least privilege access permissions for SNS Topic\n* Enable server-side encryption for SNS Topic using AWS managed KMS Key\n* Enforce encryption of data in transit\n\n### AWS Lambda Function\n* Configure limited privilege access IAM role for Lambda function\n* Enable reusing connections with Keep-Alive for NodeJs Lambda function\n* Enable X-Ray Tracing\n* Set Environment Variables\n * AWS_NODEJS_CONNECTION_REUSE_ENABLED (for Node 10.x and higher functions)\n\n## Architecture\n\n\n***\n© Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
|
|
3276
|
+
"markdown": "# aws-sns-lambda module\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n\n\n---\n<!--END STABILITY BANNER-->\n\n| **Reference Documentation**:| <span style=\"font-weight: normal\">https://docs.aws.amazon.com/solutions/latest/constructs/</span>|\n|:-------------|:-------------|\n<div style=\"height:8px\"></div>\n\n| **Language** | **Package** |\n|:-------------|-----------------|\n| Python|`aws_solutions_constructs.aws_sns_lambda`|\n| Typescript|`@aws-solutions-constructs/aws-sns-lambda`|\n| Java|`software.amazon.awsconstructs.services.snslambda`|\n\n## Overview\nThis AWS Solutions Construct implements an Amazon SNS connected to an AWS Lambda function.\n\nHere is a minimal deployable pattern definition:\n\nTypescript\n``` typescript\nimport { Construct } from 'constructs';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { SnsToLambda, SnsToLambdaProps } from \"@aws-solutions-constructs/aws-sns-lambda\";\nimport * as lambda from 'aws-cdk-lib/aws-lambda';\n\nnew SnsToLambda(this, 'test-sns-lambda', {\n lambdaFunctionProps: {\n runtime: lambda.Runtime.NODEJS_14_X,\n handler: 'index.handler',\n code: lambda.Code.fromAsset(`lambda`)\n }\n});\n```\nPython\n```python\nfrom aws_solutions_constructs.aws_sns_lambda import SnsToLambda\nfrom aws_cdk import (\n aws_lambda as _lambda,\n Stack\n)\nfrom constructs import Construct\n\nSnsToLambda(self, 'test_sns_lambda',\n lambda_function_props=_lambda.FunctionProps(\n code=_lambda.Code.from_asset('lambda'),\n runtime=_lambda.Runtime.PYTHON_3_9,\n handler='index.handler'\n )\n )\n```\n\nJava\n``` java\nimport software.constructs.Construct;\n\nimport software.amazon.awscdk.Stack;\nimport software.amazon.awscdk.StackProps;\nimport software.amazon.awscdk.services.lambda.*;\nimport software.amazon.awscdk.services.lambda.Runtime;\nimport software.amazon.awsconstructs.services.snslambda.*;\n\nnew SnsToLambda(this, \"test-lambda-sqs-stack\", new SnsToLambdaProps.Builder()\n .lambdaFunctionProps(new FunctionProps.Builder()\n .runtime(Runtime.NODEJS_14_X)\n .code(Code.fromAsset(\"lambda\"))\n .handler(\"index.handler\")\n .build())\n .build());\n```\n\n## Pattern Construct Props\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|existingLambdaObj?|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Existing instance of Lambda Function object, providing both this and `lambdaFunctionProps` will cause an error.|\n|lambdaFunctionProps?|[`lambda.FunctionProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionProps.html)|User provided props to override the default props for the Lambda function.|\n|existingTopicObj?|[`sns.Topic`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Existing instance of SNS Topic object, providing both this and `topicProps` will cause an error.|\n|topicProps?|[`sns.TopicProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_sns.TopicProps.html)|Optional user provided properties to override the default properties for the SNS topic.|\n|enableEncryptionWithCustomerManagedKey?|`boolean`|If no key is provided, this flag determines whether the SNS Topic is encrypted with a new CMK or an AWS managed key. This flag is ignored if any of the following are defined: topicProps.masterKey, encryptionKey or encryptionKeyProps.|\n|encryptionKey?|[`kms.Key`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_kms.Key.html)|An optional, imported encryption key to encrypt the SNS Topic with.|\n|encryptionKeyProps?|[`kms.KeyProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_kms.Key.html#construct-props)|Optional user provided properties to override the default properties for the KMS encryption key used to encrypt the SNS Topic with.|\n\n## Pattern Properties\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|lambdaFunction|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Returns an instance of the Lambda function created by the pattern.|\n|snsTopic|[`sns.Topic`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_sns.Topic.html)|Returns an instance of the SNS topic created by the pattern.|\n\n## Default settings\n\nOut of the box implementation of the Construct without any override will set the following defaults:\n\n### Amazon SNS Topic\n* Configure least privilege access permissions for SNS Topic\n* Enable server-side encryption for SNS Topic using AWS managed KMS Key\n* Enforce encryption of data in transit\n\n### AWS Lambda Function\n* Configure limited privilege access IAM role for Lambda function\n* Enable reusing connections with Keep-Alive for NodeJs Lambda function\n* Enable X-Ray Tracing\n* Set Environment Variables\n * AWS_NODEJS_CONNECTION_REUSE_ENABLED (for Node 10.x and higher functions)\n\n## Architecture\n\n\n***\n© Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
|
|
3147
3277
|
},
|
|
3148
3278
|
"repository": {
|
|
3149
3279
|
"directory": "source/patterns/@aws-solutions-constructs/aws-sns-lambda",
|
|
@@ -3193,7 +3323,7 @@
|
|
|
3193
3323
|
},
|
|
3194
3324
|
"locationInModule": {
|
|
3195
3325
|
"filename": "lib/index.ts",
|
|
3196
|
-
"line":
|
|
3326
|
+
"line": 86
|
|
3197
3327
|
},
|
|
3198
3328
|
"parameters": [
|
|
3199
3329
|
{
|
|
@@ -3228,7 +3358,7 @@
|
|
|
3228
3358
|
"kind": "class",
|
|
3229
3359
|
"locationInModule": {
|
|
3230
3360
|
"filename": "lib/index.ts",
|
|
3231
|
-
"line":
|
|
3361
|
+
"line": 74
|
|
3232
3362
|
},
|
|
3233
3363
|
"name": "SnsToLambda",
|
|
3234
3364
|
"properties": [
|
|
@@ -3236,7 +3366,7 @@
|
|
|
3236
3366
|
"immutable": true,
|
|
3237
3367
|
"locationInModule": {
|
|
3238
3368
|
"filename": "lib/index.ts",
|
|
3239
|
-
"line":
|
|
3369
|
+
"line": 75
|
|
3240
3370
|
},
|
|
3241
3371
|
"name": "lambdaFunction",
|
|
3242
3372
|
"type": {
|
|
@@ -3247,7 +3377,7 @@
|
|
|
3247
3377
|
"immutable": true,
|
|
3248
3378
|
"locationInModule": {
|
|
3249
3379
|
"filename": "lib/index.ts",
|
|
3250
|
-
"line":
|
|
3380
|
+
"line": 76
|
|
3251
3381
|
},
|
|
3252
3382
|
"name": "snsTopic",
|
|
3253
3383
|
"type": {
|
|
@@ -3269,10 +3399,62 @@
|
|
|
3269
3399
|
"kind": "interface",
|
|
3270
3400
|
"locationInModule": {
|
|
3271
3401
|
"filename": "lib/index.ts",
|
|
3272
|
-
"line":
|
|
3402
|
+
"line": 25
|
|
3273
3403
|
},
|
|
3274
3404
|
"name": "SnsToLambdaProps",
|
|
3275
3405
|
"properties": [
|
|
3406
|
+
{
|
|
3407
|
+
"abstract": true,
|
|
3408
|
+
"docs": {
|
|
3409
|
+
"default": "- False if topicProps.masterKey, encryptionKey, and encryptionKeyProps are all undefined.",
|
|
3410
|
+
"remarks": "This flag is ignored if any of the following are defined: topicProps.masterKey, encryptionKey or encryptionKeyProps.",
|
|
3411
|
+
"summary": "If no key is provided, this flag determines whether the SNS Topic is encrypted with a new CMK or an AWS managed key."
|
|
3412
|
+
},
|
|
3413
|
+
"immutable": true,
|
|
3414
|
+
"locationInModule": {
|
|
3415
|
+
"filename": "lib/index.ts",
|
|
3416
|
+
"line": 56
|
|
3417
|
+
},
|
|
3418
|
+
"name": "enableEncryptionWithCustomerManagedKey",
|
|
3419
|
+
"optional": true,
|
|
3420
|
+
"type": {
|
|
3421
|
+
"primitive": "boolean"
|
|
3422
|
+
}
|
|
3423
|
+
},
|
|
3424
|
+
{
|
|
3425
|
+
"abstract": true,
|
|
3426
|
+
"docs": {
|
|
3427
|
+
"default": "- None",
|
|
3428
|
+
"summary": "An optional, imported encryption key to encrypt the SNS Topic with."
|
|
3429
|
+
},
|
|
3430
|
+
"immutable": true,
|
|
3431
|
+
"locationInModule": {
|
|
3432
|
+
"filename": "lib/index.ts",
|
|
3433
|
+
"line": 62
|
|
3434
|
+
},
|
|
3435
|
+
"name": "encryptionKey",
|
|
3436
|
+
"optional": true,
|
|
3437
|
+
"type": {
|
|
3438
|
+
"fqn": "aws-cdk-lib.aws_kms.Key"
|
|
3439
|
+
}
|
|
3440
|
+
},
|
|
3441
|
+
{
|
|
3442
|
+
"abstract": true,
|
|
3443
|
+
"docs": {
|
|
3444
|
+
"default": "- None",
|
|
3445
|
+
"summary": "Optional user provided properties to override the default properties for the KMS encryption key used to encrypt the SNS Topic with."
|
|
3446
|
+
},
|
|
3447
|
+
"immutable": true,
|
|
3448
|
+
"locationInModule": {
|
|
3449
|
+
"filename": "lib/index.ts",
|
|
3450
|
+
"line": 68
|
|
3451
|
+
},
|
|
3452
|
+
"name": "encryptionKeyProps",
|
|
3453
|
+
"optional": true,
|
|
3454
|
+
"type": {
|
|
3455
|
+
"fqn": "aws-cdk-lib.aws_kms.KeyProps"
|
|
3456
|
+
}
|
|
3457
|
+
},
|
|
3276
3458
|
{
|
|
3277
3459
|
"abstract": true,
|
|
3278
3460
|
"docs": {
|
|
@@ -3282,7 +3464,7 @@
|
|
|
3282
3464
|
"immutable": true,
|
|
3283
3465
|
"locationInModule": {
|
|
3284
3466
|
"filename": "lib/index.ts",
|
|
3285
|
-
"line":
|
|
3467
|
+
"line": 31
|
|
3286
3468
|
},
|
|
3287
3469
|
"name": "existingLambdaObj",
|
|
3288
3470
|
"optional": true,
|
|
@@ -3299,7 +3481,7 @@
|
|
|
3299
3481
|
"immutable": true,
|
|
3300
3482
|
"locationInModule": {
|
|
3301
3483
|
"filename": "lib/index.ts",
|
|
3302
|
-
"line":
|
|
3484
|
+
"line": 43
|
|
3303
3485
|
},
|
|
3304
3486
|
"name": "existingTopicObj",
|
|
3305
3487
|
"optional": true,
|
|
@@ -3316,7 +3498,7 @@
|
|
|
3316
3498
|
"immutable": true,
|
|
3317
3499
|
"locationInModule": {
|
|
3318
3500
|
"filename": "lib/index.ts",
|
|
3319
|
-
"line":
|
|
3501
|
+
"line": 37
|
|
3320
3502
|
},
|
|
3321
3503
|
"name": "lambdaFunctionProps",
|
|
3322
3504
|
"optional": true,
|
|
@@ -3333,7 +3515,7 @@
|
|
|
3333
3515
|
"immutable": true,
|
|
3334
3516
|
"locationInModule": {
|
|
3335
3517
|
"filename": "lib/index.ts",
|
|
3336
|
-
"line":
|
|
3518
|
+
"line": 49
|
|
3337
3519
|
},
|
|
3338
3520
|
"name": "topicProps",
|
|
3339
3521
|
"optional": true,
|
|
@@ -3345,6 +3527,6 @@
|
|
|
3345
3527
|
"symbolId": "lib/index:SnsToLambdaProps"
|
|
3346
3528
|
}
|
|
3347
3529
|
},
|
|
3348
|
-
"version": "2.
|
|
3349
|
-
"fingerprint": "
|
|
3530
|
+
"version": "2.28.0",
|
|
3531
|
+
"fingerprint": "CSBIY8PrN52/22yCaDVoE4hGqwNz3BOodMBom5E3kdU="
|
|
3350
3532
|
}
|
package/README.md
CHANGED
|
@@ -83,6 +83,9 @@ new SnsToLambda(this, "test-lambda-sqs-stack", new SnsToLambdaProps.Builder()
|
|
|
83
83
|
|lambdaFunctionProps?|[`lambda.FunctionProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionProps.html)|User provided props to override the default props for the Lambda function.|
|
|
84
84
|
|existingTopicObj?|[`sns.Topic`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Existing instance of SNS Topic object, providing both this and `topicProps` will cause an error.|
|
|
85
85
|
|topicProps?|[`sns.TopicProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_sns.TopicProps.html)|Optional user provided properties to override the default properties for the SNS topic.|
|
|
86
|
+
|enableEncryptionWithCustomerManagedKey?|`boolean`|If no key is provided, this flag determines whether the SNS Topic is encrypted with a new CMK or an AWS managed key. This flag is ignored if any of the following are defined: topicProps.masterKey, encryptionKey or encryptionKeyProps.|
|
|
87
|
+
|encryptionKey?|[`kms.Key`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_kms.Key.html)|An optional, imported encryption key to encrypt the SNS Topic with.|
|
|
88
|
+
|encryptionKeyProps?|[`kms.KeyProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_kms.Key.html#construct-props)|Optional user provided properties to override the default properties for the KMS encryption key used to encrypt the SNS Topic with.|
|
|
86
89
|
|
|
87
90
|
## Pattern Properties
|
|
88
91
|
|
package/lib/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
11
11
|
* and limitations under the License.
|
|
12
12
|
*/
|
|
13
|
+
import * as kms from 'aws-cdk-lib/aws-kms';
|
|
13
14
|
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
14
15
|
import * as sns from 'aws-cdk-lib/aws-sns';
|
|
15
16
|
import { Construct } from 'constructs';
|
|
@@ -41,6 +42,25 @@ export interface SnsToLambdaProps {
|
|
|
41
42
|
* @default - Default properties are used.
|
|
42
43
|
*/
|
|
43
44
|
readonly topicProps?: sns.TopicProps;
|
|
45
|
+
/**
|
|
46
|
+
* If no key is provided, this flag determines whether the SNS Topic is encrypted with a new CMK or an AWS managed key.
|
|
47
|
+
* This flag is ignored if any of the following are defined: topicProps.masterKey, encryptionKey or encryptionKeyProps.
|
|
48
|
+
*
|
|
49
|
+
* @default - False if topicProps.masterKey, encryptionKey, and encryptionKeyProps are all undefined.
|
|
50
|
+
*/
|
|
51
|
+
readonly enableEncryptionWithCustomerManagedKey?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* An optional, imported encryption key to encrypt the SNS Topic with.
|
|
54
|
+
*
|
|
55
|
+
* @default - None
|
|
56
|
+
*/
|
|
57
|
+
readonly encryptionKey?: kms.Key;
|
|
58
|
+
/**
|
|
59
|
+
* Optional user provided properties to override the default properties for the KMS encryption key used to encrypt the SNS Topic with.
|
|
60
|
+
*
|
|
61
|
+
* @default - None
|
|
62
|
+
*/
|
|
63
|
+
readonly encryptionKeyProps?: kms.KeyProps;
|
|
44
64
|
}
|
|
45
65
|
/**
|
|
46
66
|
* @summary The SnsToLambda class.
|
package/lib/index.js
CHANGED
|
@@ -30,12 +30,15 @@ class SnsToLambda extends constructs_1.Construct {
|
|
|
30
30
|
// Setup the SNS topic
|
|
31
31
|
[this.snsTopic] = defaults.buildTopic(this, {
|
|
32
32
|
existingTopicObj: props.existingTopicObj,
|
|
33
|
-
topicProps: props.topicProps
|
|
33
|
+
topicProps: props.topicProps,
|
|
34
|
+
enableEncryptionWithCustomerManagedKey: props.enableEncryptionWithCustomerManagedKey,
|
|
35
|
+
encryptionKey: props.encryptionKey,
|
|
36
|
+
encryptionKeyProps: props.encryptionKeyProps
|
|
34
37
|
});
|
|
35
38
|
this.lambdaFunction.addEventSource(new aws_lambda_event_sources_1.SnsEventSource(this.snsTopic));
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
41
|
exports.SnsToLambda = SnsToLambda;
|
|
39
42
|
_a = JSII_RTTI_SYMBOL_1;
|
|
40
|
-
SnsToLambda[_a] = { fqn: "@aws-solutions-constructs/aws-sns-lambda.SnsToLambda", version: "2.
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
SnsToLambda[_a] = { fqn: "@aws-solutions-constructs/aws-sns-lambda.SnsToLambda", version: "2.28.0" };
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWdCQSwyREFBMkQ7QUFDM0Qsd0ZBQXdGO0FBQ3hGLDJDQUF1QztBQUN2QyxtRkFBc0U7QUFtRHRFOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFJeEM7Ozs7Ozs7T0FPRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUU7WUFDdkQsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1NBQy9DLENBQUMsQ0FBQztRQUVILHNCQUFzQjtRQUN0QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUMxQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixzQ0FBc0MsRUFBRSxLQUFLLENBQUMsc0NBQXNDO1lBQ3BGLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1NBQzdDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUkseUNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDOztBQWhDSCxrQ0FpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG4vLyBOb3RlOiBUbyBlbnN1cmUgQ0RLdjIgY29tcGF0aWJpbGl0eSwga2VlcCB0aGUgaW1wb3J0IHN0YXRlbWVudCBmb3IgQ29uc3RydWN0IHNlcGFyYXRlXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFNuc0V2ZW50U291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzJztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcHJvcGVydGllcyBmb3IgdGhlIFNuc1RvTGFtYmRhIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNuc1RvTGFtYmRhUHJvcHMge1xuICAvKipcbiAgICogRXhpc3RpbmcgaW5zdGFuY2Ugb2YgTGFtYmRhIEZ1bmN0aW9uIG9iamVjdCwgcHJvdmlkaW5nIGJvdGggdGhpcyBhbmQgYGxhbWJkYUZ1bmN0aW9uUHJvcHNgIHdpbGwgY2F1c2UgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdMYW1iZGFPYmo/OiBsYW1iZGEuRnVuY3Rpb247XG4gIC8qKlxuICAgKiBVc2VyIHByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcGVydGllcyBhcmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uUHJvcHM/OiBsYW1iZGEuRnVuY3Rpb25Qcm9wcztcbiAgLyoqXG4gICAqIEV4aXN0aW5nIGluc3RhbmNlIG9mIFNOUyBUb3BpYyBvYmplY3QsIHByb3ZpZGluZyBib3RoIHRoaXMgYW5kIHRvcGljUHJvcHMgd2lsbCBjYXVzZSBhbiBlcnJvci4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wcyBhcmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdUb3BpY09iaj86IHNucy5Ub3BpYztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgcHJvdmlkZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciB0aGUgU05TIHRvcGljLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcGVydGllcyBhcmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRvcGljUHJvcHM/OiBzbnMuVG9waWNQcm9wcztcbiAgLyoqXG4gICAqIElmIG5vIGtleSBpcyBwcm92aWRlZCwgdGhpcyBmbGFnIGRldGVybWluZXMgd2hldGhlciB0aGUgU05TIFRvcGljIGlzIGVuY3J5cHRlZCB3aXRoIGEgbmV3IENNSyBvciBhbiBBV1MgbWFuYWdlZCBrZXkuXG4gICAqIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGFyZSBkZWZpbmVkOiB0b3BpY1Byb3BzLm1hc3RlcktleSwgZW5jcnlwdGlvbktleSBvciBlbmNyeXB0aW9uS2V5UHJvcHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRmFsc2UgaWYgdG9waWNQcm9wcy5tYXN0ZXJLZXksIGVuY3J5cHRpb25LZXksIGFuZCBlbmNyeXB0aW9uS2V5UHJvcHMgYXJlIGFsbCB1bmRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVFbmNyeXB0aW9uV2l0aEN1c3RvbWVyTWFuYWdlZEtleT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCwgaW1wb3J0ZWQgZW5jcnlwdGlvbiBrZXkgdG8gZW5jcnlwdCB0aGUgU05TIFRvcGljIHdpdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5LZXk7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyIHByb3ZpZGVkIHByb3BlcnRpZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcGVydGllcyBmb3IgdGhlIEtNUyBlbmNyeXB0aW9uIGtleSB1c2VkIHRvICBlbmNyeXB0IHRoZSBTTlMgVG9waWMgd2l0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5UHJvcHM/OiBrbXMuS2V5UHJvcHM7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIFNuc1RvTGFtYmRhIGNsYXNzLlxuICovXG5leHBvcnQgY2xhc3MgU25zVG9MYW1iZGEgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IGxhbWJkYS5GdW5jdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IHNuc1RvcGljOiBzbnMuVG9waWM7XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIExhbWJkYVRvU25zIGNsYXNzLlxuICAgKiBAcGFyYW0ge2Nkay5BcHB9IHNjb3BlIC0gcmVwcmVzZW50cyB0aGUgc2NvcGUgZm9yIGFsbCB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSB0aGlzIGlzIGEgYSBzY29wZS11bmlxdWUgaWQuXG4gICAqIEBwYXJhbSB7TGFtYmRhVG9TbnNQcm9wc30gcHJvcHMgLSB1c2VyIHByb3ZpZGVkIHByb3BzIGZvciB0aGUgY29uc3RydWN0LlxuICAgKiBAc2luY2UgMC44LjBcbiAgICogQGFjY2VzcyBwdWJsaWNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTbnNUb0xhbWJkYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBkZWZhdWx0cy5DaGVja1Byb3BzKHByb3BzKTtcblxuICAgIC8vIFNldHVwIHRoZSBMYW1iZGEgZnVuY3Rpb25cbiAgICB0aGlzLmxhbWJkYUZ1bmN0aW9uID0gZGVmYXVsdHMuYnVpbGRMYW1iZGFGdW5jdGlvbih0aGlzLCB7XG4gICAgICBleGlzdGluZ0xhbWJkYU9iajogcHJvcHMuZXhpc3RpbmdMYW1iZGFPYmosXG4gICAgICBsYW1iZGFGdW5jdGlvblByb3BzOiBwcm9wcy5sYW1iZGFGdW5jdGlvblByb3BzXG4gICAgfSk7XG5cbiAgICAvLyBTZXR1cCB0aGUgU05TIHRvcGljXG4gICAgW3RoaXMuc25zVG9waWNdID0gZGVmYXVsdHMuYnVpbGRUb3BpYyh0aGlzLCB7XG4gICAgICBleGlzdGluZ1RvcGljT2JqOiBwcm9wcy5leGlzdGluZ1RvcGljT2JqLFxuICAgICAgdG9waWNQcm9wczogcHJvcHMudG9waWNQcm9wcyxcbiAgICAgIGVuYWJsZUVuY3J5cHRpb25XaXRoQ3VzdG9tZXJNYW5hZ2VkS2V5OiBwcm9wcy5lbmFibGVFbmNyeXB0aW9uV2l0aEN1c3RvbWVyTWFuYWdlZEtleSxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHByb3BzLmVuY3J5cHRpb25LZXksXG4gICAgICBlbmNyeXB0aW9uS2V5UHJvcHM6IHByb3BzLmVuY3J5cHRpb25LZXlQcm9wc1xuICAgIH0pO1xuXG4gICAgdGhpcy5sYW1iZGFGdW5jdGlvbi5hZGRFdmVudFNvdXJjZShuZXcgU25zRXZlbnRTb3VyY2UodGhpcy5zbnNUb3BpYykpO1xuICB9XG59Il19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-solutions-constructs/aws-sns-lambda",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.28.0",
|
|
4
4
|
"description": "CDK Constructs for AWS SNS to AWS Lambda integration",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -53,13 +53,13 @@
|
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@aws-solutions-constructs/core": "2.
|
|
56
|
+
"@aws-solutions-constructs/core": "2.28.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@aws-cdk/assert": "2.
|
|
59
|
+
"@aws-cdk/assert": "2.53.0",
|
|
60
60
|
"@types/jest": "^27.4.0",
|
|
61
61
|
"@types/node": "^10.3.0",
|
|
62
|
-
"aws-cdk-lib": "2.
|
|
62
|
+
"aws-cdk-lib": "2.53.0",
|
|
63
63
|
"constructs": "^10.0.0"
|
|
64
64
|
},
|
|
65
65
|
"jest": {
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
]
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
|
-
"@aws-solutions-constructs/core": "2.
|
|
81
|
-
"aws-cdk-lib": "^2.
|
|
80
|
+
"@aws-solutions-constructs/core": "2.28.0",
|
|
81
|
+
"aws-cdk-lib": "^2.53.0",
|
|
82
82
|
"constructs": "^10.0.0"
|
|
83
83
|
},
|
|
84
84
|
"keywords": [
|
package/test/sns-lambda.test.js
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const assert_1 = require("@aws-cdk/assert");
|
|
16
16
|
const lib_1 = require("../lib");
|
|
17
|
+
const kms = require("aws-cdk-lib/aws-kms");
|
|
17
18
|
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
18
19
|
const sns = require("aws-cdk-lib/aws-sns");
|
|
19
20
|
const cdk = require("aws-cdk-lib");
|
|
@@ -69,4 +70,132 @@ test('provide existingTopicObj', () => {
|
|
|
69
70
|
TopicName: "custom-topic"
|
|
70
71
|
}));
|
|
71
72
|
});
|
|
72
|
-
|
|
73
|
+
test('Topic is encrypted with imported CMK when set on encryptionKey prop', () => {
|
|
74
|
+
const stack = new cdk.Stack();
|
|
75
|
+
const cmk = new kms.Key(stack, 'cmk');
|
|
76
|
+
const props = {
|
|
77
|
+
lambdaFunctionProps: {
|
|
78
|
+
code: lambda.Code.fromAsset(`${__dirname}/lambda`),
|
|
79
|
+
runtime: lambda.Runtime.NODEJS_14_X,
|
|
80
|
+
handler: 'index.handler'
|
|
81
|
+
},
|
|
82
|
+
encryptionKey: cmk
|
|
83
|
+
};
|
|
84
|
+
new lib_1.SnsToLambda(stack, 'test-sns-lambda', props);
|
|
85
|
+
expect(stack).toHaveResource("AWS::SNS::Topic", {
|
|
86
|
+
KmsMasterKeyId: {
|
|
87
|
+
"Fn::GetAtt": [
|
|
88
|
+
"cmk01DE03DA",
|
|
89
|
+
"Arn"
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
test('Topic is encrypted with imported CMK when set on topicProps.masterKey prop', () => {
|
|
95
|
+
const stack = new cdk.Stack();
|
|
96
|
+
const cmk = new kms.Key(stack, 'cmk');
|
|
97
|
+
const props = {
|
|
98
|
+
lambdaFunctionProps: {
|
|
99
|
+
code: lambda.Code.fromAsset(`${__dirname}/lambda`),
|
|
100
|
+
runtime: lambda.Runtime.NODEJS_14_X,
|
|
101
|
+
handler: 'index.handler'
|
|
102
|
+
},
|
|
103
|
+
topicProps: {
|
|
104
|
+
masterKey: cmk
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
new lib_1.SnsToLambda(stack, 'test-sns-lambda', props);
|
|
108
|
+
expect(stack).toHaveResource("AWS::SNS::Topic", {
|
|
109
|
+
KmsMasterKeyId: {
|
|
110
|
+
"Fn::GetAtt": [
|
|
111
|
+
"cmk01DE03DA",
|
|
112
|
+
"Arn"
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
test('Topic is encrypted with provided encrytionKeyProps', () => {
|
|
118
|
+
const stack = new cdk.Stack();
|
|
119
|
+
const props = {
|
|
120
|
+
lambdaFunctionProps: {
|
|
121
|
+
code: lambda.Code.fromAsset(`${__dirname}/lambda`),
|
|
122
|
+
runtime: lambda.Runtime.NODEJS_14_X,
|
|
123
|
+
handler: 'index.handler'
|
|
124
|
+
},
|
|
125
|
+
encryptionKeyProps: {
|
|
126
|
+
alias: 'new-key-alias-from-props'
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
new lib_1.SnsToLambda(stack, 'test-sns-lambda', props);
|
|
130
|
+
expect(stack).toHaveResource('AWS::SNS::Topic', {
|
|
131
|
+
KmsMasterKeyId: {
|
|
132
|
+
'Fn::GetAtt': [
|
|
133
|
+
'testsnslambdaEncryptionKeyDDDF040B',
|
|
134
|
+
'Arn'
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
expect(stack).toHaveResource('AWS::KMS::Alias', {
|
|
139
|
+
AliasName: 'alias/new-key-alias-from-props',
|
|
140
|
+
TargetKeyId: {
|
|
141
|
+
'Fn::GetAtt': [
|
|
142
|
+
'testsnslambdaEncryptionKeyDDDF040B',
|
|
143
|
+
'Arn'
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
test('Topic is encrypted by default with AWS-managed KMS key when no other encryption properties are set', () => {
|
|
149
|
+
const stack = new cdk.Stack();
|
|
150
|
+
const props = {
|
|
151
|
+
lambdaFunctionProps: {
|
|
152
|
+
code: lambda.Code.fromAsset(`${__dirname}/lambda`),
|
|
153
|
+
runtime: lambda.Runtime.NODEJS_14_X,
|
|
154
|
+
handler: 'index.handler'
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
new lib_1.SnsToLambda(stack, 'test-sns-lambda', props);
|
|
158
|
+
expect(stack).toHaveResource('AWS::SNS::Topic', {
|
|
159
|
+
KmsMasterKeyId: {
|
|
160
|
+
"Fn::Join": [
|
|
161
|
+
"",
|
|
162
|
+
[
|
|
163
|
+
"arn:",
|
|
164
|
+
{
|
|
165
|
+
Ref: "AWS::Partition"
|
|
166
|
+
},
|
|
167
|
+
":kms:",
|
|
168
|
+
{
|
|
169
|
+
Ref: "AWS::Region"
|
|
170
|
+
},
|
|
171
|
+
":",
|
|
172
|
+
{
|
|
173
|
+
Ref: "AWS::AccountId"
|
|
174
|
+
},
|
|
175
|
+
":alias/aws/sns"
|
|
176
|
+
]
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
test('Topic is encrypted with customer managed KMS Key when enable encryption flag is true', () => {
|
|
182
|
+
const stack = new cdk.Stack();
|
|
183
|
+
const props = {
|
|
184
|
+
lambdaFunctionProps: {
|
|
185
|
+
code: lambda.Code.fromAsset(`${__dirname}/lambda`),
|
|
186
|
+
runtime: lambda.Runtime.NODEJS_14_X,
|
|
187
|
+
handler: 'index.handler'
|
|
188
|
+
},
|
|
189
|
+
enableEncryptionWithCustomerManagedKey: true
|
|
190
|
+
};
|
|
191
|
+
new lib_1.SnsToLambda(stack, 'test-sns-lambda', props);
|
|
192
|
+
expect(stack).toHaveResource('AWS::SNS::Topic', {
|
|
193
|
+
KmsMasterKeyId: {
|
|
194
|
+
'Fn::GetAtt': [
|
|
195
|
+
'testsnslambdaEncryptionKeyDDDF040B',
|
|
196
|
+
'Arn'
|
|
197
|
+
]
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25zLWxhbWJkYS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic25zLWxhbWJkYS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCw0Q0FBb0U7QUFDcEUsZ0NBQXVEO0FBQ3ZELDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsMkNBQTJDO0FBQzNDLG1DQUFtQztBQUNuQyxnQ0FBOEI7QUFFOUIsU0FBUyxhQUFhLENBQUMsS0FBZ0I7SUFDckMsTUFBTSxLQUFLLEdBQXFCO1FBQzlCLG1CQUFtQixFQUFFO1lBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO1lBQ2xELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDbkMsT0FBTyxFQUFFLGVBQWU7U0FDekI7S0FDRixDQUFDO0lBRUYsT0FBTyxJQUFJLGlCQUFXLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRTlCLE1BQU0sU0FBUyxHQUFnQixhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRTlCLE1BQU0sS0FBSyxHQUFxQjtRQUM5QixtQkFBbUIsRUFBRTtZQUNu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LENBQUMsR0FBRyxTQUFTLFNBQVMsQ0FBQztZQUNsRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxlQUFlO1NBQ3pCO1FBQ0Qsc0NBQXNDLEVBQUUsSUFBSTtLQUM3QyxDQUFDO0lBRUYsSUFBSSxpQkFBVyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVqRCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFO1FBQzlDLGNBQWMsRUFBRTtZQUNkLFlBQVksRUFBRTtnQkFDWixvQ0FBb0M7Z0JBQ3BDLEtBQUs7YUFDTjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGV4cGVjdCBhcyBleHBlY3RDREssIGhhdmVSZXNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2Fzc2VydCc7XG5pbXBvcnQgeyBTbnNUb0xhbWJkYSwgU25zVG9MYW1iZGFQcm9wcyB9IGZyb20gXCIuLi9saWJcIjtcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAnQGF3cy1jZGsvYXNzZXJ0L2plc3QnO1xuXG5mdW5jdGlvbiBkZXBsb3lOZXdGdW5jKHN0YWNrOiBjZGsuU3RhY2spIHtcbiAgY29uc3QgcHJvcHM6IFNuc1RvTGFtYmRhUHJvcHMgPSB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTRfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJ1xuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIG5ldyBTbnNUb0xhbWJkYShzdGFjaywgJ3Rlc3Qtc25zLWxhbWJkYScsIHByb3BzKTtcbn1cblxudGVzdCgnY2hlY2sgcHJvcGVydGllcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgY29uc3RydWN0OiBTbnNUb0xhbWJkYSA9IGRlcGxveU5ld0Z1bmMoc3RhY2spO1xuXG4gIGV4cGVjdChjb25zdHJ1Y3QubGFtYmRhRnVuY3Rpb24gIT09IG51bGwpO1xuICBleHBlY3QoY29uc3RydWN0LnNuc1RvcGljICE9PSBudWxsKTtcbn0pO1xuXG50ZXN0KCdvdmVycmlkZSB0b3BpY1Byb3BzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBwcm9wczogU25zVG9MYW1iZGFQcm9wcyA9IHtcbiAgICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInXG4gICAgfSxcbiAgICB0b3BpY1Byb3BzOiB7XG4gICAgICB0b3BpY05hbWU6IFwiY3VzdG9tLXRvcGljXCJcbiAgICB9XG4gIH07XG5cbiAgbmV3IFNuc1RvTGFtYmRhKHN0YWNrLCAndGVzdC1zbnMtbGFtYmRhJywgcHJvcHMpO1xuXG4gIGV4cGVjdENESyhzdGFjaykudG8oaGF2ZVJlc291cmNlKFwiQVdTOjpTTlM6OlRvcGljXCIsIHtcbiAgICBUb3BpY05hbWU6IFwiY3VzdG9tLXRvcGljXCJcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ3Byb3ZpZGUgZXhpc3RpbmdUb3BpY09iaicsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgdG9waWMgPSBuZXcgc25zLlRvcGljKHN0YWNrLCAnTXlUb3BpYycsIHtcbiAgICB0b3BpY05hbWU6IFwiY3VzdG9tLXRvcGljXCJcbiAgfSk7XG5cbiAgY29uc3QgcHJvcHM6IFNuc1RvTGFtYmRhUHJvcHMgPSB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTRfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJ1xuICAgIH0sXG4gICAgZXhpc3RpbmdUb3BpY09iajogdG9waWNcbiAgfTtcblxuICBuZXcgU25zVG9MYW1iZGEoc3RhY2ssICd0ZXN0LXNucy1sYW1iZGEnLCBwcm9wcyk7XG5cbiAgZXhwZWN0Q0RLKHN0YWNrKS50byhoYXZlUmVzb3VyY2UoXCJBV1M6OlNOUzo6VG9waWNcIiwge1xuICAgIFRvcGljTmFtZTogXCJjdXN0b20tdG9waWNcIlxuICB9KSk7XG59KTtcblxudGVzdCgnVG9waWMgaXMgZW5jcnlwdGVkIHdpdGggaW1wb3J0ZWQgQ01LIHdoZW4gc2V0IG9uIGVuY3J5cHRpb25LZXkgcHJvcCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gIGNvbnN0IGNtayA9IG5ldyBrbXMuS2V5KHN0YWNrLCAnY21rJyk7XG4gIGNvbnN0IHByb3BzOiBTbnNUb0xhbWJkYVByb3BzID0ge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE0X1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcidcbiAgICB9LFxuICAgIGVuY3J5cHRpb25LZXk6IGNta1xuICB9O1xuXG4gIG5ldyBTbnNUb0xhbWJkYShzdGFjaywgJ3Rlc3Qtc25zLWxhbWJkYScsIHByb3BzKTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKFwiQVdTOjpTTlM6OlRvcGljXCIsIHtcbiAgICBLbXNNYXN0ZXJLZXlJZDoge1xuICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgXCJjbWswMURFMDNEQVwiLFxuICAgICAgICBcIkFyblwiXG4gICAgICBdXG4gICAgfVxuICB9KTtcbn0pO1xuXG50ZXN0KCdUb3BpYyBpcyBlbmNyeXB0ZWQgd2l0aCBpbXBvcnRlZCBDTUsgd2hlbiBzZXQgb24gdG9waWNQcm9wcy5tYXN0ZXJLZXkgcHJvcCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gIGNvbnN0IGNtayA9IG5ldyBrbXMuS2V5KHN0YWNrLCAnY21rJyk7XG4gIGNvbnN0IHByb3BzOiBTbnNUb0xhbWJkYVByb3BzID0ge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE0X1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcidcbiAgICB9LFxuICAgIHRvcGljUHJvcHM6IHtcbiAgICAgIG1hc3RlcktleTogY21rXG4gICAgfVxuICB9O1xuXG4gIG5ldyBTbnNUb0xhbWJkYShzdGFjaywgJ3Rlc3Qtc25zLWxhbWJkYScsIHByb3BzKTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKFwiQVdTOjpTTlM6OlRvcGljXCIsIHtcbiAgICBLbXNNYXN0ZXJLZXlJZDoge1xuICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgXCJjbWswMURFMDNEQVwiLFxuICAgICAgICBcIkFyblwiXG4gICAgICBdXG4gICAgfVxuICB9KTtcbn0pO1xuXG50ZXN0KCdUb3BpYyBpcyBlbmNyeXB0ZWQgd2l0aCBwcm92aWRlZCBlbmNyeXRpb25LZXlQcm9wcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgcHJvcHM6IFNuc1RvTGFtYmRhUHJvcHMgPSB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTRfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJ1xuICAgIH0sXG4gICAgZW5jcnlwdGlvbktleVByb3BzOiB7XG4gICAgICBhbGlhczogJ25ldy1rZXktYWxpYXMtZnJvbS1wcm9wcydcbiAgICB9XG4gIH07XG5cbiAgbmV3IFNuc1RvTGFtYmRhKHN0YWNrLCAndGVzdC1zbnMtbGFtYmRhJywgcHJvcHMpO1xuXG4gIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2UoJ0FXUzo6U05TOjpUb3BpYycsIHtcbiAgICBLbXNNYXN0ZXJLZXlJZDoge1xuICAgICAgJ0ZuOjpHZXRBdHQnOiBbXG4gICAgICAgICd0ZXN0c25zbGFtYmRhRW5jcnlwdGlvbktleUREREYwNDBCJyxcbiAgICAgICAgJ0FybidcbiAgICAgIF1cbiAgICB9LFxuICB9KTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKCdBV1M6OktNUzo6QWxpYXMnLCB7XG4gICAgQWxpYXNOYW1lOiAnYWxpYXMvbmV3LWtleS1hbGlhcy1mcm9tLXByb3BzJyxcbiAgICBUYXJnZXRLZXlJZDoge1xuICAgICAgJ0ZuOjpHZXRBdHQnOiBbXG4gICAgICAgICd0ZXN0c25zbGFtYmRhRW5jcnlwdGlvbktleUREREYwNDBCJyxcbiAgICAgICAgJ0FybidcbiAgICAgIF1cbiAgICB9XG4gIH0pO1xufSk7XG5cbnRlc3QoJ1RvcGljIGlzIGVuY3J5cHRlZCBieSBkZWZhdWx0IHdpdGggQVdTLW1hbmFnZWQgS01TIGtleSB3aGVuIG5vIG90aGVyIGVuY3J5cHRpb24gcHJvcGVydGllcyBhcmUgc2V0JywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBwcm9wczogU25zVG9MYW1iZGFQcm9wcyA9IHtcbiAgICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInXG4gICAgfSxcbiAgfTtcblxuICBuZXcgU25zVG9MYW1iZGEoc3RhY2ssICd0ZXN0LXNucy1sYW1iZGEnLCBwcm9wcyk7XG5cbiAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQVdTOjpTTlM6OlRvcGljJywge1xuICAgIEttc01hc3RlcktleUlkOiB7XG4gICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgXCJcIixcbiAgICAgICAgW1xuICAgICAgICAgIFwiYXJuOlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlZjogXCJBV1M6OlBhcnRpdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIjprbXM6XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6UmVnaW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiOlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlZjogXCJBV1M6OkFjY291bnRJZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIjphbGlhcy9hd3Mvc25zXCJcbiAgICAgICAgXVxuICAgICAgXVxuICAgIH1cbiAgfSk7XG59KTtcblxudGVzdCgnVG9waWMgaXMgZW5jcnlwdGVkIHdpdGggY3VzdG9tZXIgbWFuYWdlZCBLTVMgS2V5IHdoZW4gZW5hYmxlIGVuY3J5cHRpb24gZmxhZyBpcyB0cnVlJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBwcm9wczogU25zVG9MYW1iZGFQcm9wcyA9IHtcbiAgICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInXG4gICAgfSxcbiAgICBlbmFibGVFbmNyeXB0aW9uV2l0aEN1c3RvbWVyTWFuYWdlZEtleTogdHJ1ZVxuICB9O1xuXG4gIG5ldyBTbnNUb0xhbWJkYShzdGFjaywgJ3Rlc3Qtc25zLWxhbWJkYScsIHByb3BzKTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKCdBV1M6OlNOUzo6VG9waWMnLCB7XG4gICAgS21zTWFzdGVyS2V5SWQ6IHtcbiAgICAgICdGbjo6R2V0QXR0JzogW1xuICAgICAgICAndGVzdHNuc2xhbWJkYUVuY3J5cHRpb25LZXlERERGMDQwQicsXG4gICAgICAgICdBcm4nXG4gICAgICBdXG4gICAgfSxcbiAgfSk7XG59KTtcbiJdfQ==
|