@mavogel/cdk-vscode-server 0.0.62 → 0.0.64
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 +124 -178
- package/API.md +105 -200
- package/CLAUDE.md +288 -58
- package/README.md +40 -2
- package/assets/idle-monitor-enabler/idle-monitor-enabler.lambda/index.js +67 -0
- package/assets/installer/installer.lambda/index.js +67 -30
- package/awslint.json +5 -0
- package/examples/auto-stop/main.ts +1 -1
- package/examples/custom/main.ts +1 -1
- package/examples/git-repo/main.ts +30 -0
- package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +2 -2
- package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +1 -1
- package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +8 -8
- package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +257 -94
- package/integ-tests/{integ.stop-on-idle.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.al2023.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.al2023.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.al2023.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.al2023.ts.snapshot/manifest.json +19 -3
- package/integ-tests/integ.al2023.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.assets.json +2 -2
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.template.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.assets.json +8 -8
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.template.json +273 -97
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.custom-domain.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.al2023.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.custom-domain.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.custom-domain.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/manifest.json +25 -6
- package/integ-tests/integ.custom-domain.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.stop-on-idle.ts +1 -4
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.assets.json +2 -2
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.template.json +4 -4
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.assets.json +23 -9
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.template.json +758 -197
- package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.22c8a6c357b704e370bef317ae1b52c59f684aa7640422a3d1dfe813d1f77853.lambda/index.js +67 -0
- package/integ-tests/{integ.custom-domain.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.stop-on-idle.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/integ.stop-on-idle.ts.snapshot/manifest.json +363 -76
- package/integ-tests/integ.stop-on-idle.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +2 -2
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +8 -8
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +273 -97
- package/integ-tests/{integ.al2023.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.ubuntu.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.custom-domain.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.ubuntu.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +25 -6
- package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.ubuntu24.ts +69 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +33 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +337 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.assets.json +118 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.template.json +2725 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/integ.json +23 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/manifest.json +1473 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/tree.json +1 -0
- package/integ-tests/integ.ubuntu25.ts +69 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/IntegSetupVSCodeOnUbuntu25DefaultTestDeployAssert48DBCF35.assets.json +33 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/IntegSetupVSCodeOnUbuntu25DefaultTestDeployAssert48DBCF35.template.json +337 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/IntegTestStackUbuntu25.assets.json +118 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/IntegTestStackUbuntu25.template.json +2725 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/integ.json +23 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/manifest.json +1473 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/tree.json +1 -0
- package/lib/idle-monitor/idle-monitor-function.js +2 -2
- package/lib/idle-monitor/idle-monitor.js +5 -2
- package/lib/idle-monitor-enabler/idle-monitor-enabler-function.d.ts +13 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler-function.js +22 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.d.ts +25 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.js +76 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.d.ts +9 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.js +48 -0
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -2
- package/lib/installer/installer-function.js +2 -2
- package/lib/installer/installer.d.ts +105 -0
- package/lib/installer/installer.js +659 -301
- package/lib/installer/installer.lambda.js +64 -30
- package/lib/mappings.js +11 -3
- package/lib/secret-retriever/secret-retriever-function.js +2 -2
- package/lib/vscode-server.d.ts +45 -1
- package/lib/vscode-server.js +35 -5
- package/package.json +12 -12
- package/.claude/hooks/file_checker.sh +0 -178
- package/.qlty/.gitignore +0 -7
- package/.qlty/configs/.yamllint.yaml +0 -21
- package/.qlty/qlty.toml +0 -115
- package/assets/status-check/status-check.lambda/index.js +0 -123
- package/integ-tests/integ.al2023.ts.snapshot/cdk.out +0 -1
- package/integ-tests/integ.al2023.ts.snapshot/read.13497.1.lock +0 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/read.13497.1.lock +0 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/cdk.out +0 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/read.13497.1.lock +0 -1
- package/lib/status-check/status-check-function.d.ts +0 -13
- package/lib/status-check/status-check-function.js +0 -22
- package/lib/status-check/status-check.d.ts +0 -36
- package/lib/status-check/status-check.js +0 -109
- package/lib/status-check/status-check.lambda.d.ts +0 -2
- package/lib/status-check/status-check.lambda.js +0 -104
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"tree-0.1","tree":{"id":"App","path":"","children":{"IntegTestStackUbuntu25":{"id":"IntegTestStackUbuntu25","path":"IntegTestStackUbuntu25","children":{"IntegVSCodeServer":{"id":"IntegVSCodeServer","path":"IntegTestStackUbuntu25/IntegVSCodeServer","children":{"password-secret":{"id":"password-secret","path":"IntegTestStackUbuntu25/IntegVSCodeServer/password-secret","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/password-secret/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"generateSecretString":{"passwordLength":16,"secretStringTemplate":"{\"username\":\"participant\"}","excludePunctuation":true,"includeSpace":false,"generateStringKey":"password"},"tags":[{"key":"app","value":"vscode-server"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.Secret","version":"2.190.0","metadata":[{"generateSecretString":{"passwordLength":"*","secretStringTemplate":"*","excludePunctuation":true,"includeSpace":false,"generateStringKey":"*"}}]}},"SecretRetrieverOnEventHandler":{"id":"SecretRetrieverOnEventHandler","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"secretsmanager:GetSecretValue","Effect":"Allow","Resource":{"Ref":"IntegVSCodeServerpasswordsecret202A5DB3"}}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerSecretRetrieverOnEventHandlerServiceRoleDefaultPolicy2641E2C6","roles":[{"Ref":"IntegVSCodeServerSecretRetrieverOnEventHandlerServiceRoleBEF8D4D2"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverOnEventHandler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.zip"},"description":"src/secret-retriever/secret-retriever.lambda.ts","handler":"index.handler","memorySize":128,"role":{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerServiceRoleBEF8D4D2","Arn"]},"runtime":"nodejs22.x","timeout":10}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"description":"*","timeout":"*","memorySize":"*","runtime":"*","handler":"*","code":"*"}]}},"SecretRetrieveProvider":{"id":"SecretRetrieveProvider","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerDD084AE3","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerDD084AE3","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerDD084AE3","Arn"]}}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerSecretRetrieveProviderframeworkonEventServiceRoleDefaultPolicyEC4DCEA0","roles":[{"Ref":"IntegVSCodeServerSecretRetrieveProviderframeworkonEventServiceRole0F156B64"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"},"description":"AWS CDK resource provider framework - onEvent (IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieveProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerDD084AE3","Arn"]}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieveProviderframeworkonEventServiceRole0F156B64","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.Provider","version":"2.190.0"}},"SecretRetrieverCustomResource":{"id":"SecretRetrieverCustomResource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverCustomResource","children":{"Default":{"id":"Default","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SecretRetrieverCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*","*"]}},"vpc":{"id":"vpc","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPC","aws:cdk:cloudformation:props":{"cidrBlock":"10.0.0.0/16","enableDnsHostnames":true,"enableDnsSupport":true,"instanceTenancy":"default","tags":[{"key":"app","value":"vscode-server"},{"key":"Name","value":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPC","version":"2.190.0"}},"publicSubnet1":{"id":"publicSubnet1","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet1","children":{"Subnet":{"id":"Subnet","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet1/Subnet","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.0.0/17","mapPublicIpOnLaunch":true,"tags":[{"key":"app","value":"vscode-server"},{"key":"aws-cdk:subnet-name","value":"public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"Name","value":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet1"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"2.190.0"}},"Acl":{"id":"Acl","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"app","value":"vscode-server"},{"key":"Name","value":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet1"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"2.190.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet1/RouteTableAssociation","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"IntegVSCodeServervpcpublicSubnet1RouteTableFD418D0B"},"subnetId":{"Ref":"IntegVSCodeServervpcpublicSubnet1Subnet928029A1"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"2.190.0"}},"DefaultRoute":{"id":"DefaultRoute","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet1/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"IntegVSCodeServervpcIGW960F6D83"},"routeTableId":{"Ref":"IntegVSCodeServervpcpublicSubnet1RouteTableFD418D0B"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"2.190.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]}},"publicSubnet2":{"id":"publicSubnet2","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet2","children":{"Subnet":{"id":"Subnet","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet2/Subnet","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[1,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.128.0/17","mapPublicIpOnLaunch":true,"tags":[{"key":"app","value":"vscode-server"},{"key":"aws-cdk:subnet-name","value":"public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"Name","value":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet2"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"2.190.0"}},"Acl":{"id":"Acl","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"app","value":"vscode-server"},{"key":"Name","value":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet2"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"2.190.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet2/RouteTableAssociation","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"IntegVSCodeServervpcpublicSubnet2RouteTableC264EFB4"},"subnetId":{"Ref":"IntegVSCodeServervpcpublicSubnet2SubnetE381654D"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"2.190.0"}},"DefaultRoute":{"id":"DefaultRoute","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/publicSubnet2/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"IntegVSCodeServervpcIGW960F6D83"},"routeTableId":{"Ref":"IntegVSCodeServervpcpublicSubnet2RouteTableC264EFB4"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"2.190.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]}},"IGW":{"id":"IGW","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/IGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::InternetGateway","aws:cdk:cloudformation:props":{"tags":[{"key":"app","value":"vscode-server"},{"key":"Name","value":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInternetGateway","version":"2.190.0"}},"VPCGW":{"id":"VPCGW","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/VPCGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPCGatewayAttachment","aws:cdk:cloudformation:props":{"internetGatewayId":{"Ref":"IntegVSCodeServervpcIGW960F6D83"},"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment","version":"2.190.0"}},"RestrictDefaultSecurityGroupCustomResource":{"id":"RestrictDefaultSecurityGroupCustomResource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/RestrictDefaultSecurityGroupCustomResource","children":{"Default":{"id":"Default","path":"IntegTestStackUbuntu25/IntegVSCodeServer/vpc/RestrictDefaultSecurityGroupCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Vpc","version":"2.190.0","metadata":[{"maxAzs":"*","createInternetGateway":true,"subnetConfiguration":[{"name":"*","subnetType":"Public"}],"enableDnsHostnames":true,"enableDnsSupport":true}]}},"cf-to-server-sg":{"id":"cf-to-server-sg","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-to-server-sg","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-to-server-sg/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"SG for VSCodeServer - only allow CloudFront ingress","groupName":"cloudfront-to-vscode-server","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"tags":[{"key":"app","value":"vscode-server"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"2.190.0"}},"from {IndirectPeer}:80":{"id":"from {IndirectPeer}:80","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-to-server-sg/from {IndirectPeer}:80","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroupIngress","aws:cdk:cloudformation:props":{"description":"Allow HTTP from com.amazonaws.global.cloudfront.origin-facing","fromPort":80,"groupId":{"Fn::GetAtt":["IntegVSCodeServercftoserversgFFE586B0","GroupId"]},"ipProtocol":"tcp","sourcePrefixListId":{"Fn::GetAtt":["IntegVSCodeServercfprefixlistIdGetPrefixListIdF0821FFC","PrefixLists.0.PrefixListId"]},"toPort":80}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroupIngress","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"2.190.0","metadata":[{"vpc":"*","description":"*","securityGroupName":"*"},{"addIngressRule":[{"canInlineRule":false,"connections":"*","uniqueId":"*"},{},"*"]}]}},"cf-prefixlistId":{"id":"cf-prefixlistId","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId","children":{"GetPrefixListIdLogGroup":{"id":"GetPrefixListIdLogGroup","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdLogGroup","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdLogGroup/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"retentionInDays":1,"tags":[{"key":"app","value":"vscode-server"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.190.0","metadata":[{"removalPolicy":"destroy","retention":1}]}},"GetPrefixListIdRole":{"id":"GetPrefixListIdRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdRole","children":{"ImportGetPrefixListIdRole":{"id":"ImportGetPrefixListIdRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdRole/ImportGetPrefixListIdRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"}},{"attachInlinePolicy":["*"]}]}},"GetPrefixListId":{"id":"GetPrefixListId","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId","children":{"Provider":{"id":"Provider","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/Provider","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.SingletonFunction","version":"2.190.0","metadata":[{"uuid":"*","lambdaPurpose":"*","memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"},{"addMetadata":["*",true]},{"addMetadata":["*","*"]}]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/Resource","children":{"Default":{"id":"Default","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/Resource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*"]}},"CustomResourcePolicy":{"id":"CustomResourcePolicy","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/CustomResourcePolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/CustomResourcePolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"ec2:DescribeManagedPrefixLists","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServercfprefixlistIdGetPrefixListIdCustomResourcePolicyAB3F4958","roles":[{"Ref":"IntegVSCodeServercfprefixlistIdGetPrefixListIdRole1302B3E1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.AwsCustomResource","version":"2.190.0"}},"PrefixList":{"id":"PrefixList","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-prefixlistId/PrefixList","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"server-instance-role":{"id":"server-instance-role","path":"IntegTestStackUbuntu25/IntegVSCodeServer/server-instance-role","children":{"Importserver-instance-role":{"id":"Importserver-instance-role","path":"IntegTestStackUbuntu25/IntegVSCodeServer/server-instance-role/Importserver-instance-role","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/server-instance-role/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":["ec2.amazonaws.com","ssm.amazonaws.com"]}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/AmazonSSMManagedInstanceCore"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/CloudWatchAgentServerPolicy"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/AmazonQDeveloperAccess"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/ReadOnlyAccess"]]}],"policies":[{"policyName":"VSCodeInstanceInlinePolicy","policyDocument":{"Statement":[{"Action":["iam:AddRoleToInstanceProfile","iam:AttachRolePolicy","iam:CreateRole","iam:CreateServiceLinkedRole","iam:DeleteRole","iam:DeleteRolePermissionsBoundary","iam:DeleteRolePolicy","iam:DeleteServiceLinkedRole","iam:DetachRolePolicy","iam:GetRole","iam:GetRolePolicy","iam:GetServiceLinkedRoleDeletionStatus","iam:ListAttachedRolePolicies","iam:ListInstanceProfilesForRole","iam:ListRolePolicies","iam:ListRoleTags","iam:ListRoles","iam:PutRolePermissionsBoundary","iam:PutRolePolicy","iam:RemoveRoleFromInstanceProfile","iam:TagRole","iam:UntagRole","iam:UpdateAssumeRolePolicy","iam:UpdateRole","iam:UpdateRoleDescription","sts:AssumeRole"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:iam::",{"Ref":"AWS::AccountId"},":role/cdk-*"]]},"Sid":"StsAccess"},{"Action":"iam:PassRole","Condition":{"StringLike":{"iam:PassedToService":"cloudformation.amazonaws.com"}},"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:iam::",{"Ref":"AWS::AccountId"},":role/cdk-*"]]}},{"Action":"cloudformation:*","Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:cloudformation:*:",{"Ref":"AWS::AccountId"},":stack/CDKToolkit/*"]]}},{"Action":["cloudformation:CreateChangeSet","cloudformation:DeleteChangeSet","cloudformation:ExecuteChangeSet","ec2:DescribeInstances","ec2:DescribeVolumesModifications*","ec2:ModifyVolume"],"Effect":"Allow","Resource":"*"},{"Action":"s3:*","Effect":"Allow","Resource":"*","Sid":"S3Access"},{"Action":["ecr:CreateRepository","ecr:DeleteRepository","ecr:DescribeRepositories","ecr:GetLifecyclePolicy","ecr:PutImageScanningConfiguration","ecr:PutLifecyclePolicy","ecr:SetRepositoryPolicy"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:ecr:*:",{"Ref":"AWS::AccountId"},":repository/cdk-*"]]},"Sid":"ECRAccess"},{"Action":["ssm:DeleteParameter*","ssm:GetParameter*","ssm:PutParameter*"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:ssm:*:",{"Ref":"AWS::AccountId"},":parameter/cdk-bootstrap/*"]]}},{"Action":["codepipeline:DisableStageTransition","codepipeline:EnableStageTransition","codepipeline:StartPipelineExecution","codepipeline:StopPipelineExecution","codepipeline:UpdatePipeline"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:codepipeline:*:",{"Ref":"AWS::AccountId"},":*/*"]]}},{"Action":"kms:Decrypt","Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:kms:*:",{"Ref":"AWS::AccountId"},":key/*"]]}}],"Version":"2012-10-17"}}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"inlinePolicies":"*","managedPolicies":[{"managedPolicyArn":"*"},{"managedPolicyArn":"*"},{"managedPolicyArn":"*"},{"managedPolicyArn":"*"}]}]}},"server-instance":{"id":"server-instance","path":"IntegTestStackUbuntu25/IntegVSCodeServer/server-instance","children":{"InstanceProfile":{"id":"InstanceProfile","path":"IntegTestStackUbuntu25/IntegVSCodeServer/server-instance/InstanceProfile","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::InstanceProfile","aws:cdk:cloudformation:props":{"roles":[{"Ref":"IntegVSCodeServerserverinstancerole7745B5BB"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnInstanceProfile","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/server-instance/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Instance","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"blockDeviceMappings":[{"deviceName":"/dev/sda1","ebs":{"encrypted":true,"deleteOnTermination":true,"volumeSize":40,"volumeType":"gp3"}}],"iamInstanceProfile":{"Ref":"IntegVSCodeServerserverinstanceInstanceProfile6130979E"},"imageId":{"Ref":"SsmParameterValueawsservicecanonicalubuntuserverpluckystablecurrentarm64hvmebsgp3amiidC96584B6F00A464EAD1953AFF4B05118Parameter"},"instanceType":"m7g.xlarge","launchTemplate":{"launchTemplateName":"IntegTestStackUbuntu25IntegVSCodeServerserverinstanceLaunchTemplate66C42E18","version":{"Fn::GetAtt":["IntegVSCodeServerserverinstanceLaunchTemplate43932ED3","LatestVersionNumber"]}},"monitoring":true,"networkInterfaces":[{"deviceIndex":"0","associatePublicIpAddress":true,"subnetId":{"Ref":"IntegVSCodeServervpcpublicSubnet1Subnet928029A1"},"groupSet":[{"Fn::GetAtt":["IntegVSCodeServercftoserversgFFE586B0","GroupId"]}]}],"tags":[{"key":"app","value":"vscode-server"},{"key":"Name","value":"VSCodeServer"}],"userData":{"Fn::Base64":"\n #cloud-config\n hostname: VSCodeServer\n runcmd:\n - mkdir -p /Workshop && chown -R participant:participant /Workshop\n "}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInstance","version":"2.190.0"}},"LaunchTemplate":{"id":"LaunchTemplate","path":"IntegTestStackUbuntu25/IntegVSCodeServer/server-instance/LaunchTemplate","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::LaunchTemplate","aws:cdk:cloudformation:props":{"launchTemplateData":{"metadataOptions":{"httpTokens":"required"}},"launchTemplateName":"IntegTestStackUbuntu25IntegVSCodeServerserverinstanceLaunchTemplate66C42E18"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnLaunchTemplate","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Instance","version":"2.190.0","metadata":[{"vpc":"*","instanceName":"*","instanceType":"*","machineImage":"*","requireImdsv2":true,"vpcSubnets":{"subnetType":"Public"},"associatePublicIpAddress":true,"detailedMonitoring":true,"blockDevices":[{"deviceName":"*","volume":"*"}],"role":"*","securityGroup":"*","userData":"*"}]}},"cf-cache-policy":{"id":"cf-cache-policy","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-cache-policy","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-cache-policy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::CloudFront::CachePolicy","aws:cdk:cloudformation:props":{"cachePolicyConfig":{"name":"cf-cache-policy-vscodeserver-IntegTestStackUbuntu25","comment":"Cache policy for VSCodeServer","minTtl":1,"maxTtl":31536000,"defaultTtl":86400,"parametersInCacheKeyAndForwardedToOrigin":{"cookiesConfig":{"cookieBehavior":"all"},"headersConfig":{"headerBehavior":"whitelist","headers":["Accept-Charset","Authorization","Origin","Accept","Referer","Host","Accept-Language","Accept-Encoding","Accept-Datetime"]},"enableAcceptEncodingGzip":false,"enableAcceptEncodingBrotli":false,"queryStringsConfig":{"queryStringBehavior":"all"}}}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cloudfront.CfnCachePolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cloudfront.CachePolicy","version":"2.190.0","metadata":[{"cachePolicyName":"*","comment":"*","minTtl":"*","maxTtl":"*","defaultTtl":"*","cookieBehavior":"*","enableAcceptEncodingGzip":false,"headerBehavior":"*","queryStringBehavior":"*"}]}},"cf-distribution":{"id":"cf-distribution","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-distribution","children":{"Origin1":{"id":"Origin1","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-distribution/Origin1","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/cf-distribution/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::CloudFront::Distribution","aws:cdk:cloudformation:props":{"distributionConfig":{"enabled":true,"origins":[{"domainName":{"Fn::GetAtt":["IntegVSCodeServerserverinstance0A3D62D7","PublicDnsName"]},"id":"Cloudfront-IntegTestStackUbuntu25-IntegTestStackUbuntu25","customOriginConfig":{"originSslProtocols":["TLSv1.2"],"originProtocolPolicy":"http-only"}}],"defaultCacheBehavior":{"pathPattern":"*","targetOriginId":"Cloudfront-IntegTestStackUbuntu25-IntegTestStackUbuntu25","allowedMethods":["GET","HEAD","OPTIONS","PUT","PATCH","POST","DELETE"],"cachePolicyId":{"Ref":"IntegVSCodeServercfcachepolicy8F5F1F69"},"compress":true,"originRequestPolicyId":"216adef6-5c7f-47e4-b989-5492eafa07d3","viewerProtocolPolicy":"allow-all"},"cacheBehaviors":[{"pathPattern":"/proxy/*","targetOriginId":"Cloudfront-IntegTestStackUbuntu25-IntegTestStackUbuntu25","allowedMethods":["GET","HEAD","OPTIONS","PUT","PATCH","POST","DELETE"],"cachePolicyId":"4135ea2d-6df8-44a3-9df3-4b5a84be39ad","compress":false,"originRequestPolicyId":"216adef6-5c7f-47e4-b989-5492eafa07d3","viewerProtocolPolicy":"allow-all"}],"comment":"Distribution for VSCodeServer","httpVersion":"http2and3","ipv6Enabled":true,"priceClass":"PriceClass_All"},"tags":[{"key":"app","value":"vscode-server"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cloudfront.CfnDistribution","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cloudfront.Distribution","version":"2.190.0","metadata":[{"enabled":true,"httpVersion":"http2and3","comment":"*","priceClass":"PriceClass_All","defaultBehavior":{"allowedMethods":"*","cachePolicy":"*","originRequestPolicy":{"originRequestPolicyId":"*"},"viewerProtocolPolicy":"allow-all","origin":"*"},"additionalBehaviors":"*"},{"addBehavior":["*",{},{"allowedMethods":"*","compress":false,"cachePolicy":{"cachePolicyId":"*"},"originRequestPolicy":{"originRequestPolicyId":"*"},"viewerProtocolPolicy":"allow-all"}]}]}},"ssm-document-ubuntu":{"id":"ssm-document-ubuntu","path":"IntegTestStackUbuntu25/IntegVSCodeServer/ssm-document-ubuntu","attributes":{"aws:cdk:cloudformation:type":"AWS::SSM::Document","aws:cdk:cloudformation:props":{"content":{"schemaVersion":"2.2","description":"Bootstrap VSCode code-server instance","parameters":{"VSCodePassword":{"type":"String","default":{"Ref":"AWS::StackId"}},"NodeVersion":{"type":"String","default":"22","allowedValues":["24","22","20","18"]},"RepoUrl":{"type":"String","default":"https://github.com/aws-samples/fleet-management-on-amazon-eks-workshop.git"},"AssetZipS3Path":{"type":"String","default":""},"BranchZipS3Path":{"type":"String","default":""},"FolderZipS3Path":{"type":"String","default":""}},"mainSteps":[{"action":"aws:configurePackage","name":"InstallCloudWatchAgent","inputs":{"name":"AmazonCloudWatchAgent","action":"Install"}},{"action":"aws:runDocument","name":"ConfigureCloudWatchAgent","inputs":{"documentType":"SSMDocument","documentPath":"AmazonCloudWatch-ManageAgent","documentParameters":{"action":"configure","mode":"ec2","optionalConfigurationSource":"default","optionalRestart":"yes"}}},{"action":"aws:runShellScript","name":"InstallAptPackagesApt","inputs":{"runCommand":["#!/bin/bash","dpkg --configure -a","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q apt-utils","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q needrestart unattended-upgrades","sed -i 's/#$nrconf{kernelhints} = -1;/$nrconf{kernelhints} = 0;/' /etc/needrestart/needrestart.conf","sed -i 's/#$nrconf{verbosity} = 2;/$nrconf{verbosity} = 0;/' /etc/needrestart/needrestart.conf","sed -i \"s/#$nrconf{restart} = 'i';/$nrconf{restart} = 'a';/\" /etc/needrestart/needrestart.conf","echo \"Apt helper packages added. Checking configuration\"","cat /etc/needrestart/needrestart.conf"]}},{"action":"aws:runShellScript","name":"InstallBasePackagesApt","inputs":{"runCommand":["#!/bin/bash","dpkg --configure -a","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl gnupg whois argon2 unzip nginx openssl locales locales-all apt-transport-https ca-certificates software-properties-common"]}},{"action":"aws:runShellScript","name":"AddUserApt","inputs":{"runCommand":["#!/bin/bash","dpkg --configure -a","if [[ \"participant\" == \"ubuntu\" ]]\nthen\n echo 'Using existing user: participant'\nelse\n echo 'Adding user: participant'\n adduser --disabled-password --gecos '' participant\n echo \"participant:{{ VSCodePassword }}\" | chpasswd\n usermod -aG sudo participant\nfi","tee /etc/sudoers.d/91-vscode-user <<EOF\nparticipant ALL=(ALL) NOPASSWD:ALL\nEOF","mkdir -p /home/participant && chown -R participant:participant /home/participant","mkdir -p /home/participant/.local/bin && chown -R participant:participant /home/participant","echo \"User added. Checking configuration\"","getent passwd participant"]}},{"action":"aws:runShellScript","name":"UpdateProfile","inputs":{"runCommand":["#!/bin/bash","echo LANG=en_US.utf-8 >> /etc/environment","echo LC_ALL=en_US.UTF-8 >> /etc/environment","echo 'PATH=$PATH:/home/participant/.local/bin' >> /home/participant/.bashrc","echo 'export PATH' >> /home/participant/.bashrc",{"Fn::Join":["",["echo 'export AWS_REGION=",{"Ref":"AWS::Region"},"' >> /home/participant/.bashrc"]]},{"Fn::Join":["",["echo 'export AWS_ACCOUNTID=",{"Ref":"AWS::AccountId"},"' >> /home/participant/.bashrc"]]},"echo 'export NEXT_TELEMETRY_DISABLED=1' >> /home/participant/.bashrc","echo \"export PS1='\\[\\033[01;32m\\]\\u:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '\" >> /home/participant/.bashrc","chown -R participant:participant /home/participant"]}},{"action":"aws:runShellScript","name":"InstallAWSCLI","inputs":{"runCommand":["#!/bin/bash","mkdir -p /tmp","curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip","chown -R participant:participant /tmp/aws-cli.zip","unzip -q -d /tmp /tmp/aws-cli.zip","sudo /tmp/aws/install","rm -rf /tmp/aws","echo \"AWS CLI installed. Checking configuration\"","aws --version"]}},{"action":"aws:runShellScript","name":"InstallGitApt","inputs":{"runCommand":["#!/bin/bash","dpkg --configure -a","add-apt-repository ppa:git-core/ppa","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q git","sudo -u participant git config --global user.email \"participant@example.com\"","sudo -u participant git config --global user.name \"Workshop Participant\"","sudo -u participant git config --global init.defaultBranch \"main\"","echo \"Git installed. Checking configuration\"","git --version"]}},{"action":"aws:runShellScript","name":"CloneRepo","inputs":{"runCommand":["#!/bin/bash","if [[ -z \"{{ RepoUrl }}\" ]]\nthen\n echo \"No Repo\"\nelse\n mkdir -p /Workshop && chown -R participant:participant /Workshop\n sudo -u participant git clone {{ RepoUrl }} /Workshop\n echo \"Repo {{ RepoUrl }} cloned. Checking configuration\"\n ls -la /Workshop\n sudo -u participant git -C /Workshop remote -v\nfi"]}},{"action":"aws:runShellScript","name":"DownloadAssets","inputs":{"runCommand":["#!/bin/bash","if [[ -z \"{{ AssetZipS3Path }}\" ]]\nthen\n echo \"No assets\"\nelse\n mkdir -p /Workshop && chown -R participant:participant /Workshop\n mkdir -p /tmp\n aws s3 cp s3://{{ AssetZipS3Path }} /tmp/asset.zip\n chown -R participant:participant /tmp/asset.zip\n unzip -o /tmp/asset.zip -d /Workshop\n chown -R participant:participant /Workshop\n if [[ -d /Workshop/.git ]]\n then\n sudo -u participant git -C /Workshop add .\n sudo -u participant git -C /Workshop commit -m 'chore: workshop commit'\n else\n sudo -u participant git -C /Workshop init\n sudo -u participant git -C /Workshop add .\n sudo -u participant git -C /Workshop commit -m 'chore: initial commit'\n fi\n echo \"Assets downloaded. Checking configuration: /Workshop\"\n ls -la /Workshop\n sudo -u participant git -C /Workshop branch\nfi"]}},{"action":"aws:runShellScript","name":"DownloadFolders","inputs":{"runCommand":["#!/bin/bash","if [[ -z \"{{ FolderZipS3Path }}\" ]]\nthen\n echo \"No folders\"\nelse\n rm -rf /tmp/folder\n mkdir -p /tmp/folder && chown -R participant:participant /tmp/folder\n aws s3 cp s3://{{ FolderZipS3Path }} /tmp/asset-folder.zip\n chown -R participant:participant /tmp/asset-folder.zip\n unzip -o /tmp/asset-folder.zip -d /tmp/folder\n chown -R participant:participant /tmp/folder\n mkdir -p /Workshop && chown -R participant:participant /Workshop\n cd \"/Workshop\" && cd ..\n if [[ $(pwd) == \"/\" ]]\n then\n targetRootFolder=\"\"\n else\n targetRootFolder=$(pwd)\n chown -R participant:participant .\n fi\n find \"/tmp/folder\" -maxdepth 1 -mindepth 1 -type d | while read sourceFolder; do\n folder=\"$(basename $sourceFolder)\"\n echo \"Processing folder: $folder\"\n targetFolder=$targetRootFolder/$folder\n if [[ $targetRootFolder == \"\" ]]\n then\n mv $sourceFolder /\n else\n mv $sourceFolder $targetRootFolder\n fi\n chown -R participant:participant $targetFolder\n sudo -u participant git -C $targetFolder init\n sudo -u participant git -C $targetFolder add .\n sudo -u participant git -C $targetFolder commit -m \"chore: initial commit\"\n echo \"Folder downloaded. Checking configuration: $targetFolder\"\n ls -la $targetFolder\n done\n rm -rf /tmp/folder\nfi"]}},{"action":"aws:runShellScript","name":"DownloadBranches","inputs":{"runCommand":["#!/bin/bash","if [[ -z \"{{ BranchZipS3Path }}\" ]]\nthen\n echo \"No branches\"\nelse\n rm -rf /tmp/branch\n rm -rf /tmp/git\n mkdir -p /tmp/branch && chown -R participant:participant /tmp/branch\n mkdir -p /tmp/git && chown -R participant:participant /tmp/git\n aws s3 cp s3://{{ BranchZipS3Path }} /tmp/asset-branch.zip\n chown -R participant:participant /tmp/asset-branch.zip\n unzip -o /tmp/asset-branch.zip -d /tmp/branch\n chown -R participant:participant /tmp/branch\n mkdir -p /Workshop && chown -R participant:participant /Workshop\n sudo -u participant git -C /Workshop init\n mv /Workshop/.git /tmp/git\n rm -rf /Workshop\n mkdir -p /Workshop && chown -R participant:participant /Workshop\n mv /tmp/git/.git /Workshop\n find /tmp/branch -maxdepth 1 -mindepth 1 -type d | while read sourceFolder; do\n branch=\"$(basename $sourceFolder)\"\n echo \"Processing branch: $branch\"\n sudo -u participant git -C /Workshop checkout -b $branch 2>&1\n cp -a $sourceFolder/. /Workshop\n sudo -u participant git -C /Workshop add .\n sudo -u participant git -C /Workshop commit -m \"chore: initial commit $branch\"\n mv /Workshop/.git /tmp/git\n rm -rf /Workshop\n mkdir /Workshop && chown -R participant:participant /Workshop\n mv /tmp/git/.git /Workshop\n done\n sudo -u participant git -C /Workshop checkout main 2>&1\n sudo -u participant git -C /Workshop restore .\n rm -rf /tmp/branch\n rm -rf /tmp/git\n echo \"Branches downloaded. Checking configuration: /Workshop\"\n sudo -u participant git -C /Workshop branch\n ls -la /Workshop\nfi"]}},{"action":"aws:runShellScript","name":"ConfigureCodeServer","inputs":{"runCommand":["#!/bin/bash","export HOME=/home/participant","curl -fsSL https://code-server.dev/install.sh | sh -s -- --version 4.100.3","systemctl enable --now code-server@participant 2>&1","tee /etc/nginx/conf.d/code-server.conf <<EOF\nserver {\n listen 80;\n listen [::]:80;\n # server_name \\$\\{CloudFrontDistribution.DomainName\\};\n server_name *.cloudfront.net;\n location / {\n proxy_pass http://localhost:8080/;\n proxy_set_header Host \\$host;\n proxy_set_header Upgrade \\$http_upgrade;\n proxy_set_header Connection upgrade;\n proxy_set_header Accept-Encoding gzip;\n }\n location /app {\n proxy_pass http://localhost:8081/app;\n proxy_set_header Host \\$host;\n proxy_set_header Upgrade \\$http_upgrade;\n proxy_set_header Connection upgrade;\n proxy_set_header Accept-Encoding gzip;\n }\n}\nEOF","mkdir -p /home/participant/.config/code-server","tee /home/participant/.config/code-server/config.yaml <<EOF\ncert: false\nauth: password\nhashed-password: \"$(echo -n {{ VSCodePassword }} | argon2 $(openssl rand -base64 12) -e)\"\nEOF","mkdir -p /home/participant/.local/share/code-server/User/","touch /home/participant/.hushlogin","mkdir -p /Workshop && chown -R participant:participant /Workshop","tee /home/participant/.local/share/code-server/User/settings.json <<EOF\n{\n \"extensions.autoUpdate\": false,\n \"extensions.autoCheckUpdates\": false,\n \"telemetry.telemetryLevel\": \"off\",\n \"security.workspace.trust.startupPrompt\": \"never\",\n \"security.workspace.trust.enabled\": false,\n \"security.workspace.trust.banner\": \"never\",\n \"security.workspace.trust.emptyWindow\": false,\n \"auto-run-command.rules\": [\n {\n \"command\": \"workbench.action.terminal.new\"\n }\n ]\n}\nEOF","chown -R participant:participant /home/participant","systemctl restart code-server@participant","systemctl restart nginx","sudo -u participant --login code-server --install-extension AmazonWebServices.aws-toolkit-vscode --force","sudo -u participant --login code-server --install-extension AmazonWebServices.amazon-q-vscode --force","sudo -u participant --login code-server --install-extension ms-vscode.live-server --force","sudo -u participant --login code-server --install-extension synedra.auto-run-command --force","chown -R participant:participant /home/participant","echo \"Nginx installed. Checking configuration\"","nginx -t 2>&1","systemctl status nginx","echo \"CodeServer installed. Checking configuration\"","code-server -v","systemctl status code-server@participant"]}},{"action":"aws:runShellScript","name":"InstallNodeApt","inputs":{"runCommand":["#!/bin/bash","curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg","echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_{{ NodeVersion }}.x nodistro main\" > /etc/apt/sources.list.d/nodesource.list","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q nodejs","npm install -g npm@latest","echo \"Node and npm installed. Checking configuration\"","node -v","npm -v"]}},{"action":"aws:runShellScript","name":"InstallCDK","inputs":{"runCommand":["#!/bin/bash","npm install -g aws-cdk","echo \"AWS CDK installed. Checking configuration\"","cdk --version"]}},{"action":"aws:runShellScript","name":"InstallQCLI","inputs":{"runCommand":["#!/bin/bash","curl --proto '=https' --tlsv1.2 -sSf \"https://desktop-release.q.us-east-1.amazonaws.com/latest/q-$(uname -m)-linux.zip\" -o /tmp/q.zip","chown -R participant:participant /tmp/q.zip","unzip -q -d /tmp /tmp/q.zip","chown -R participant:participant /tmp/q","chmod +x /tmp/q/install.sh","sudo -u participant /tmp/q/install.sh --no-confirm","rm -rf /tmp/q","q --version","echo \"Amazon Q CLI installed\""]}},{"action":"aws:runShellScript","name":"Installuv","inputs":{"runCommand":["#!/bin/bash","sudo -u participant --login curl -fsSL https://astral.sh/uv/install.sh -o /tmp/uv_install.sh","sudo -u participant --login bash /tmp/uv_install.sh","if uv generate-shell-completion bash &>/dev/null; then\n echo 'eval \"$(uv generate-shell-completion bash)\"' >> /home/participant/.bashrc\nfi","if uvx generate-shell-completion bash &>/dev/null; then\n echo 'eval \"$(uvx generate-shell-completion bash)\"' >> /home/participant/.bashrc\nfi","echo \"uv installed. Checking configuration\"","sudo -u participant --login uv --version"]}},{"action":"aws:runShellScript","name":"InstallPythonApt","inputs":{"runCommand":["#!/bin/bash","dpkg --configure -a","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q python3-pip python3-venv python3-boto3 python3-pytest","echo 'alias pytest=pytest-3' >> /home/participant/.bashrc","systemctl start multipathd.service packagekit.service","systemctl restart unattended-upgrades.service","systemctl restart networkd-dispatcher.service","sudo -u participant --login code-server --install-extension ms-python.python --force","if [ -f /home/participant/.local/share/code-server/User/settings.json ]; then\n sed -i \"2i\\\\ \\\"python.testing.pytestEnabled\\\": true,\" /home/participant/.local/share/code-server/User/settings.json\nelse\n echo '{\n \"python.testing.pytestEnabled\": true\n }' > /home/participant/.local/share/code-server/User/settings.json\nfi","echo \"Python and Pip installed. Checking configuration\"","python3 --version","pip3 --version"]}},{"action":"aws:runShellScript","name":"InstallJavaApt","inputs":{"runCommand":["#!/bin/bash","dpkg --configure -a","curl -fsSL https://apt.corretto.aws/corretto.key | gpg --dearmor -o /usr/share/keyrings/corretto-keyring.gpg","echo \"deb [signed-by=/usr/share/keyrings/corretto-keyring.gpg] https://apt.corretto.aws stable main\" > /etc/apt/sources.list.d/corretto.list","DEBIAN_FRONTEND=noninteractive apt-get update","DEBIAN_FRONTEND=noninteractive apt-get install -y -q java-21-amazon-corretto-jdk java-17-amazon-corretto-jdk java-1.8.0-amazon-corretto-jdk maven","echo 'export JAVA_8_HOME=$(update-alternatives --list java | grep \"java-1.8.0-amazon-corretto\" | head -1)' >> /home/participant/.bashrc","echo 'export JAVA_8_PATH=$(update-alternatives --list java | grep \"java-1.8.0-amazon-corretto\" | head -1)' >> /home/participant/.bashrc","echo 'export JAVA_17_PATH=$(update-alternatives --list java | grep \"java-17-amazon-corretto\" | head -1)' >> /home/participant/.bashrc","echo 'export JAVA_17_HOME=$(update-alternatives --list java | grep \"java-17-amazon-corretto\" | head -1)' >> /home/participant/.bashrc","echo 'export JAVA_21_PATH=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc","echo 'export JAVA_21_HOME=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc","echo 'export JAVA_HOME=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc","echo 'export PATH=$PATH:$JAVA_HOME/bin:/usr/share/maven/bin' >> /home/participant/.bashrc","sudo -u participant --login code-server --install-extension vscjava.vscode-java-pack --force","echo \"Java and Maven installed. Checking configuration\"","java -version 2>&1","mvn --version","update-alternatives --list java"]}},{"action":"aws:runShellScript","name":"InstallDotnetApt","inputs":{"runCommand":["#!/bin/bash","dpkg --configure -a","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q dotnet-sdk-8.0","dotnet tool install -g Microsoft.Web.LibraryManager.Cli","echo 'PATH=$PATH:/home/participant/.dotnet/tools' >> /home/participant/.bashrc","chown -R participant:participant /home/participant","echo \"Dotnet installed. Checking configuration\"","dotnet --list-sdks"]}},{"action":"aws:runShellScript","name":"InstallDockerApt","inputs":{"runCommand":["#!/bin/bash","curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg","echo \"deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release --codename --short) stable\" > /etc/apt/sources.list.d/docker.list","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q docker-ce docker-ce-cli containerd.io","usermod -aG docker participant","systemctl restart code-server@participant.service","systemctl start docker.service","echo \"Docker installed. Checking configuration\"","docker --version","systemctl status docker.service"]}},{"action":"aws:runShellScript","name":"InstallGolangApt","inputs":{"runCommand":["#!/bin/bash","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q golang","echo 'PATH=$PATH:/home/participant/go/bin' >> /home/participant/.bashrc","echo \"Golang installed. Checking configuration\"","go version"]}}]},"documentType":"Command","name":"vscode-server-ubuntu-IntegTestStackUbuntu25","tags":[{"key":"app","value":"vscode-server"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ssm.CfnDocument","version":"2.190.0"}},"InstallerOnEventHandler":{"id":"InstallerOnEventHandler","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"ssm:SendCommand","Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":ec2:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":instance/",{"Ref":"IntegVSCodeServerserverinstance0A3D62D7"}]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":ssm:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":document/AmazonCloudWatch-ManageAgent"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":ssm:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":document/vscode-server-ubuntu-IntegTestStackUbuntu25"]]}]},{"Action":["ssm:GetCommandInvocation","ssm:ListCommandInvocations"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerInstallerOnEventHandlerServiceRoleDefaultPolicy1CAD86C2","roles":[{"Ref":"IntegVSCodeServerInstallerOnEventHandlerServiceRole59651FEF"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerOnEventHandler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.zip"},"description":"src/installer/installer.lambda.ts","handler":"index.handler","memorySize":512,"role":{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandlerServiceRole59651FEF","Arn"]},"runtime":"nodejs22.x","timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"description":"*","timeout":"*","memorySize":"*","runtime":"*","handler":"*","code":"*"}]}},"InstallerProvider":{"id":"InstallerProvider","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandler6FF91542","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandler6FF91542","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandler6FF91542","Arn"]}}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerInstallerProviderframeworkonEventServiceRoleDefaultPolicy3E54FC3A","roles":[{"Ref":"IntegVSCodeServerInstallerProviderframeworkonEventServiceRoleA509851F"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider/framework-onEvent/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"},"description":"AWS CDK resource provider framework - onEvent (IntegTestStackUbuntu25/IntegVSCodeServer/InstallerProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandler6FF91542","Arn"]}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["IntegVSCodeServerInstallerProviderframeworkonEventServiceRoleA509851F","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.Provider","version":"2.190.0"}},"SSMInstallerCustomResource":{"id":"SSMInstallerCustomResource","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SSMInstallerCustomResource","children":{"Default":{"id":"Default","path":"IntegTestStackUbuntu25/IntegVSCodeServer/SSMInstallerCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*"]}},"domainName":{"id":"domainName","path":"IntegTestStackUbuntu25/IntegVSCodeServer/domainName","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"password":{"id":"password","path":"IntegTestStackUbuntu25/IntegVSCodeServer/password","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"IntegTestStackUbuntu25/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"2.190.0"}},"Custom::VpcRestrictDefaultSGCustomResourceProvider":{"id":"Custom::VpcRestrictDefaultSGCustomResourceProvider","path":"IntegTestStackUbuntu25/Custom::VpcRestrictDefaultSGCustomResourceProvider","children":{"Staging":{"id":"Staging","path":"IntegTestStackUbuntu25/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"Role":{"id":"Role","path":"IntegTestStackUbuntu25/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"Handler":{"id":"Handler","path":"IntegTestStackUbuntu25/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResourceProviderBase","version":"2.190.0"}},"AWS679f53fac002430cb0da5b7982bd2287":{"id":"AWS679f53fac002430cb0da5b7982bd2287","path":"IntegTestStackUbuntu25/AWS679f53fac002430cb0da5b7982bd2287","children":{"Code":{"id":"Code","path":"IntegTestStackUbuntu25/AWS679f53fac002430cb0da5b7982bd2287/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackUbuntu25/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackUbuntu25/AWS679f53fac002430cb0da5b7982bd2287/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/AWS679f53fac002430cb0da5b7982bd2287/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00.zip"},"handler":"index.handler","loggingConfig":{"logGroup":{"Ref":"IntegVSCodeServercfprefixlistIdGetPrefixListIdLogGroup171C2803"}},"role":{"Fn::GetAtt":["IntegVSCodeServercfprefixlistIdGetPrefixListIdRole1302B3E1","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":120}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"}]}},"SsmParameterValue:--aws--service--canonical--ubuntu--server--plucky--stable--current--arm64--hvm--ebs-gp3--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter":{"id":"SsmParameterValue:--aws--service--canonical--ubuntu--server--plucky--stable--current--arm64--hvm--ebs-gp3--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter","path":"IntegTestStackUbuntu25/SsmParameterValue:--aws--service--canonical--ubuntu--server--plucky--stable--current--arm64--hvm--ebs-gp3--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.190.0"}},"SsmParameterValue:--aws--service--canonical--ubuntu--server--plucky--stable--current--arm64--hvm--ebs-gp3--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118":{"id":"SsmParameterValue:--aws--service--canonical--ubuntu--server--plucky--stable--current--arm64--hvm--ebs-gp3--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118","path":"IntegTestStackUbuntu25/SsmParameterValue:--aws--service--canonical--ubuntu--server--plucky--stable--current--arm64--hvm--ebs-gp3--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}},"login-handler":{"id":"login-handler","path":"IntegTestStackUbuntu25/login-handler","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackUbuntu25/login-handler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackUbuntu25/login-handler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/login-handler/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]}]}},"Code":{"id":"Code","path":"IntegTestStackUbuntu25/login-handler/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackUbuntu25/login-handler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackUbuntu25/login-handler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/login-handler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["loginhandlerServiceRole330B0B32","Arn"]},"runtime":"nodejs20.x","timeout":30}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}},"LogRetention":{"id":"LogRetention","path":"IntegTestStackUbuntu25/login-handler/LogRetention","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/login-handler/LogRetention/Resource","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogRetention","version":"2.190.0"}},"LogGroup":{"id":"LogGroup","path":"IntegTestStackUbuntu25/login-handler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.190.0","metadata":[{"functionName":"*","entry":"*","runtime":"*","logRetention":1,"timeout":"*","bundling":{"esbuildArgs":"*"},"code":"*","handler":"*"},{"functionName":"*","entry":"*","runtime":"*","logRetention":1,"timeout":"*","bundling":{"esbuildArgs":"*"}}]}},"LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a":{"id":"LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a","children":{"Code":{"id":"Code","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["logs:DeleteRetentionPolicy","logs:PutRetentionPolicy"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB","roles":[{"Ref":"LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Resource":{"id":"Resource","path":"IntegTestStackUbuntu25/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"Exports":{"id":"Exports","path":"IntegTestStackUbuntu25/Exports","children":{"Output{\"Ref\":\"loginhandler99CCCCFD\"}":{"id":"Output{\"Ref\":\"loginhandler99CCCCFD\"}","path":"IntegTestStackUbuntu25/Exports/Output{\"Ref\":\"loginhandler99CCCCFD\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"Output{\"Fn::GetAtt\":[\"IntegVSCodeServercfdistributionFDBE873F\",\"DomainName\"]}":{"id":"Output{\"Fn::GetAtt\":[\"IntegVSCodeServercfdistributionFDBE873F\",\"DomainName\"]}","path":"IntegTestStackUbuntu25/Exports/Output{\"Fn::GetAtt\":[\"IntegVSCodeServercfdistributionFDBE873F\",\"DomainName\"]}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"Output{\"Fn::GetAtt\":[\"IntegVSCodeServerSecretRetrieverCustomResource2F3DB8BD\",\"secretPasswordValue\"]}":{"id":"Output{\"Fn::GetAtt\":[\"IntegVSCodeServerSecretRetrieverCustomResource2F3DB8BD\",\"secretPasswordValue\"]}","path":"IntegTestStackUbuntu25/Exports/Output{\"Fn::GetAtt\":[\"IntegVSCodeServerSecretRetrieverCustomResource2F3DB8BD\",\"secretPasswordValue\"]}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"IntegTestStackUbuntu25/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.190.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"IntegTestStackUbuntu25/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.190.0"}},"IntegSetupVSCodeOnUbuntu25":{"id":"IntegSetupVSCodeOnUbuntu25","path":"IntegSetupVSCodeOnUbuntu25","children":{"DefaultTest":{"id":"DefaultTest","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest","children":{"Default":{"id":"Default","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert","children":{"LambdaInvoke493987f824f978002013a8ed7c9980f4":{"id":"LambdaInvoke493987f824f978002013a8ed7c9980f4","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4","children":{"SdkProvider":{"id":"SdkProvider","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/SdkProvider","children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.190.0-alpha.0"}},"Default":{"id":"Default","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/Default","children":{"Default":{"id":"Default","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*"]}},"Invoke":{"id":"Invoke","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"AssertionResults":{"id":"AssertionResults","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.190.0-alpha.0"}},"SingletonFunction1488541a7b23466481b69b4408076b81":{"id":"SingletonFunction1488541a7b23466481b69b4408076b81","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81","children":{"Staging":{"id":"Staging","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"Role":{"id":"Role","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"Handler":{"id":"Handler","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"2.190.0"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.190.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"IntegSetupVSCodeOnUbuntu25/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.190.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"2.190.0-alpha.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"2.190.0-alpha.0"}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"aws-cdk-lib.App","version":"2.190.0"}}}
|
|
@@ -12,11 +12,11 @@ class IdleMonitorFunction extends lambda.Function {
|
|
|
12
12
|
super(scope, id, {
|
|
13
13
|
description: 'src/idle-monitor/idle-monitor.lambda.ts',
|
|
14
14
|
...props,
|
|
15
|
-
runtime: new lambda.Runtime('
|
|
15
|
+
runtime: new lambda.Runtime('nodejs22.x', lambda.RuntimeFamily.NODEJS),
|
|
16
16
|
handler: 'index.handler',
|
|
17
17
|
code: lambda.Code.fromAsset(path.join(__dirname, '../../assets/idle-monitor/idle-monitor.lambda')),
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
exports.IdleMonitorFunction = IdleMonitorFunction;
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3ItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUseUNBQXlDO1lBQ3RELEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFDO1NBQ25HLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGtEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvckZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRsZU1vbml0b3JGdW5jdGlvblByb3BzIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uT3B0aW9ucyB7XG59XG5cbi8qKlxuICogQW4gQVdTIExhbWJkYSBmdW5jdGlvbiB3aGljaCBleGVjdXRlcyBzcmMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yRnVuY3Rpb24gZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IElkbGVNb25pdG9yRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzcmMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lOiBuZXcgbGFtYmRhLlJ1bnRpbWUoJ25vZGVqczIyLngnLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9hc3NldHMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5sYW1iZGEnKSksXG4gICAgfSk7XG4gIH1cbn0iXX0=
|
|
@@ -56,9 +56,12 @@ class IdleMonitor extends constructs_1.Construct {
|
|
|
56
56
|
],
|
|
57
57
|
}));
|
|
58
58
|
// Create EventBridge rule to trigger at specified interval
|
|
59
|
+
// NOTE: Rule is created in DISABLED state and must be explicitly enabled
|
|
60
|
+
// after installation completes to prevent stopping the instance during setup
|
|
59
61
|
const checkInterval = props.checkIntervalMinutes ?? 5;
|
|
60
62
|
this.scheduleRule = new aws_events_1.Rule(this, 'ScheduleRule', {
|
|
61
63
|
schedule: aws_events_1.Schedule.rate(aws_cdk_lib_1.Duration.minutes(checkInterval)),
|
|
64
|
+
enabled: false, // Start disabled, will be enabled after installation
|
|
62
65
|
});
|
|
63
66
|
this.scheduleRule.addTarget(new aws_events_targets_1.LambdaFunction(this.function));
|
|
64
67
|
// CDK-nag suppressions
|
|
@@ -80,5 +83,5 @@ class IdleMonitor extends constructs_1.Construct {
|
|
|
80
83
|
}
|
|
81
84
|
exports.IdleMonitor = IdleMonitor;
|
|
82
85
|
_a = JSII_RTTI_SYMBOL_1;
|
|
83
|
-
IdleMonitor[_a] = { fqn: "@mavogel/cdk-vscode-server.IdleMonitor", version: "0.0.
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
IdleMonitor[_a] = { fqn: "@mavogel/cdk-vscode-server.IdleMonitor", version: "0.0.64" };
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsNkNBQThDO0FBRzlDLHVEQUF3RDtBQUN4RCx1RUFBd0Y7QUFDeEYsaURBQXNEO0FBQ3RELHVEQUFtRjtBQUNuRixxQ0FBMEM7QUFDMUMsMkNBQXVDO0FBcUN2Qzs7R0FFRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBV3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ25ELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLCtDQUErQyxDQUFDLENBQUM7WUFDM0YsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixVQUFVLEVBQUUsR0FBRztZQUNmLFdBQVcsRUFBRTtnQkFDWCxXQUFXLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVO2dCQUN0QyxlQUFlLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjO2dCQUNsRCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO2dCQUN6RCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTzthQUM5RDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMzQixJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLGdDQUFnQztnQkFDaEMsMEJBQTBCO2FBQzNCO1lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBRUYsd0ZBQXdGO1FBQ3hGLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCx1QkFBdUI7Z0JBQ3ZCLDRCQUE0QjthQUM3QjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCxtQkFBbUI7YUFDcEI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsZUFBZSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxhQUFhLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2FBQ3ZHO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFFRiwyREFBMkQ7UUFDM0QseUVBQXlFO1FBQ3pFLDZFQUE2RTtRQUM3RSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxpQkFBSSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDakQsUUFBUSxFQUFFLHFCQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUscURBQXFEO1NBQ3RFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksbUNBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFckUsdUJBQXVCO1FBQ3ZCLHlCQUFlLENBQUMsdUJBQXVCLENBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQ2I7WUFDRTtnQkFDRSxFQUFFLEVBQUUsbUJBQW1CO2dCQUN2QixNQUFNLEVBQUUsMkRBQTJEO2FBQ3BFO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsTUFBTSxFQUFFLGlEQUFpRDthQUMxRDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxpQkFBaUI7Z0JBQ3JCLE1BQU0sRUFBRSwrQ0FBK0M7YUFDeEQ7U0FDRixFQUNELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQzs7QUE1Rkgsa0NBNkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElEaXN0cmlidXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBJSW5zdGFuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFJ1bGUsIFNjaGVkdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvblRhcmdldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIENvZGUsIEZ1bmN0aW9uIGFzIExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBOYWdTdXBwcmVzc2lvbnMgfSBmcm9tICdjZGstbmFnJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvciBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGxlTW9uaXRvclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBFQzIgaW5zdGFuY2UgdG8gbW9uaXRvclxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2U6IElJbnN0YW5jZTtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byBtb25pdG9yIGZvciBhY3Rpdml0eVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBJRGlzdHJpYnV0aW9uO1xuICAvKipcbiAgICogTnVtYmVyIG9mIG1pbnV0ZXMgb2YgaW5hY3Rpdml0eSBiZWZvcmUgc3RvcHBpbmcgdGhlIGluc3RhbmNlXG4gICAqL1xuICByZWFkb25seSBpZGxlVGltZW91dE1pbnV0ZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvdyBvZnRlbiB0byBjaGVjayBmb3IgaWRsZSBhY3Rpdml0eSAoaW4gbWludXRlcylcbiAgICogQGRlZmF1bHQgNSAtIENoZWNrIGV2ZXJ5IDUgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tJbnRlcnZhbE1pbnV0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTa2lwIGluc3RhbmNlIHN0YXR1cyBjaGVja3MgYmVmb3JlIHN0b3BwaW5nXG4gICAqIFdoZW4gdHJ1ZSwgSWRsZU1vbml0b3Igd2lsbCBzdG9wIGlkbGUgaW5zdGFuY2VzIGV2ZW4gaWYgc3RhdHVzIGNoZWNrcyBoYXZlbid0IHBhc3NlZFxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW50ZWdyYXRpb24gdGVzdHMgd2hlcmUgc3RhdHVzIGNoZWNrIGluaXRpYWxpemF0aW9uIHRpbWVcbiAgICogZXhjZWVkcyB0ZXN0IHRpbWVvdXQgbGltaXRzXG4gICAqXG4gICAqIFdBUk5JTkc6IEZvciB0ZXN0aW5nIG9ubHkgLSBpbiBwcm9kdWN0aW9uLCB5b3Ugc2hvdWxkIHdhaXQgZm9yIHN0YXR1cyBjaGVja3NcbiAgICogdG8gcGFzcyBiZWZvcmUgc3RvcHBpbmcgaW5zdGFuY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwU3RhdHVzQ2hlY2tzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhhdCBtb25pdG9ycyBDbG91ZEZyb250IHJlcXVlc3QgbWV0cmljcyBhbmQgc3RvcHMgdGhlIEVDMiBpbnN0YW5jZSB3aGVuIGlkbGVcbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBpZGxlIG1vbml0b3JpbmdcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbjogTGFtYmRhRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBFdmVudEJyaWRnZSBydWxlIHRoYXQgdHJpZ2dlcnMgaWRsZSBtb25pdG9yaW5nIGNoZWNrc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjaGVkdWxlUnVsZTogUnVsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSWRsZU1vbml0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdGdW5jdGlvbicsIHtcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vYXNzZXRzL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3IubGFtYmRhJykpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiAyNTYsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBJTlNUQU5DRV9JRDogcHJvcHMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgRElTVFJJQlVUSU9OX0lEOiBwcm9wcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQsXG4gICAgICAgIElETEVfVElNRU9VVF9NSU5VVEVTOiBwcm9wcy5pZGxlVGltZW91dE1pbnV0ZXMudG9TdHJpbmcoKSxcbiAgICAgICAgU0tJUF9TVEFUVVNfQ0hFQ0tTOiBwcm9wcy5za2lwU3RhdHVzQ2hlY2tzID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6R2V0TWV0cmljU3RhdGlzdGljcycsXG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6R2V0TWV0cmljRGF0YScsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gRGVzY3JpYmVJbnN0YW5jZXMgYW5kIERlc2NyaWJlSW5zdGFuY2VTdGF0dXMgZG9uJ3Qgc3VwcG9ydCByZXNvdXJjZS1sZXZlbCBwZXJtaXNzaW9uc1xuICAgIC8vIFRoZXkgcmVxdWlyZSB3aWxkY2FyZCByZXNvdXJjZXNcbiAgICB0aGlzLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlcycsXG4gICAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlU3RhdHVzJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBTdG9wSW5zdGFuY2VzIHN1cHBvcnRzIHJlc291cmNlLWxldmVsIHBlcm1pc3Npb25zLCBzbyB3ZSBjYW4gcmVzdHJpY3QgaXRcbiAgICB0aGlzLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjMjpTdG9wSW5zdGFuY2VzJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6ZWMyOiR7U3RhY2sub2YodGhpcykucmVnaW9ufToke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9Omluc3RhbmNlLyR7cHJvcHMuaW5zdGFuY2UuaW5zdGFuY2VJZH1gLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBFdmVudEJyaWRnZSBydWxlIHRvIHRyaWdnZXIgYXQgc3BlY2lmaWVkIGludGVydmFsXG4gICAgLy8gTk9URTogUnVsZSBpcyBjcmVhdGVkIGluIERJU0FCTEVEIHN0YXRlIGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgIC8vIGFmdGVyIGluc3RhbGxhdGlvbiBjb21wbGV0ZXMgdG8gcHJldmVudCBzdG9wcGluZyB0aGUgaW5zdGFuY2UgZHVyaW5nIHNldHVwXG4gICAgY29uc3QgY2hlY2tJbnRlcnZhbCA9IHByb3BzLmNoZWNrSW50ZXJ2YWxNaW51dGVzID8/IDU7XG4gICAgdGhpcy5zY2hlZHVsZVJ1bGUgPSBuZXcgUnVsZSh0aGlzLCAnU2NoZWR1bGVSdWxlJywge1xuICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLnJhdGUoRHVyYXRpb24ubWludXRlcyhjaGVja0ludGVydmFsKSksXG4gICAgICBlbmFibGVkOiBmYWxzZSwgLy8gU3RhcnQgZGlzYWJsZWQsIHdpbGwgYmUgZW5hYmxlZCBhZnRlciBpbnN0YWxsYXRpb25cbiAgICB9KTtcblxuICAgIHRoaXMuc2NoZWR1bGVSdWxlLmFkZFRhcmdldChuZXcgTGFtYmRhRnVuY3Rpb25UYXJnZXQodGhpcy5mdW5jdGlvbikpO1xuXG4gICAgLy8gQ0RLLW5hZyBzdXBwcmVzc2lvbnNcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICB0aGlzLmZ1bmN0aW9uLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOiAnTWFuYWdlZCBwb2xpY2llcyBhY2NlcHRhYmxlIGZvciB3b3Jrc2hvcCBMYW1iZGEgZnVuY3Rpb25zJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICAgIHJlYXNvbjogJ0Nsb3VkV2F0Y2ggbWV0cmljcyByZXF1aXJlIHdpbGRjYXJkIHBlcm1pc3Npb25zJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUwxJyxcbiAgICAgICAgICByZWFzb246ICdMYXRlc3QgcnVudGltZSBub3QgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb24nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
/**
|
|
4
|
+
* Props for IdleMonitorEnablerFunction
|
|
5
|
+
*/
|
|
6
|
+
export interface IdleMonitorEnablerFunctionProps extends lambda.FunctionOptions {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* An AWS Lambda function which executes src/idle-monitor-enabler/idle-monitor-enabler.
|
|
10
|
+
*/
|
|
11
|
+
export declare class IdleMonitorEnablerFunction extends lambda.Function {
|
|
12
|
+
constructor(scope: Construct, id: string, props?: IdleMonitorEnablerFunctionProps);
|
|
13
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IdleMonitorEnablerFunction = void 0;
|
|
4
|
+
// ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
7
|
+
/**
|
|
8
|
+
* An AWS Lambda function which executes src/idle-monitor-enabler/idle-monitor-enabler.
|
|
9
|
+
*/
|
|
10
|
+
class IdleMonitorEnablerFunction extends lambda.Function {
|
|
11
|
+
constructor(scope, id, props) {
|
|
12
|
+
super(scope, id, {
|
|
13
|
+
description: 'src/idle-monitor-enabler/idle-monitor-enabler.lambda.ts',
|
|
14
|
+
...props,
|
|
15
|
+
runtime: new lambda.Runtime('nodejs22.x', lambda.RuntimeFamily.NODEJS),
|
|
16
|
+
handler: 'index.handler',
|
|
17
|
+
code: lambda.Code.fromAsset(path.join(__dirname, '../../assets/idle-monitor-enabler/idle-monitor-enabler.lambda')),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.IdleMonitorEnablerFunction = IdleMonitorEnablerFunction;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWVuYWJsZXItZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLDBCQUEyQixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQzdELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUM7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUseURBQXlEO1lBQ3RFLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1NBQ25ILENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGdFQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvckVuYWJsZXJGdW5jdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkbGVNb25pdG9yRW5hYmxlckZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb25PcHRpb25zIHtcbn1cblxuLyoqXG4gKiBBbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIHNyYy9pZGxlLW1vbml0b3ItZW5hYmxlci9pZGxlLW1vbml0b3ItZW5hYmxlci5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yRW5hYmxlckZ1bmN0aW9uIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBJZGxlTW9uaXRvckVuYWJsZXJGdW5jdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3NyYy9pZGxlLW1vbml0b3ItZW5hYmxlci9pZGxlLW1vbml0b3ItZW5hYmxlci5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lOiBuZXcgbGFtYmRhLlJ1bnRpbWUoJ25vZGVqczIyLngnLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9hc3NldHMvaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXIubGFtYmRhJykpLFxuICAgIH0pO1xuICB9XG59Il19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Rule } from 'aws-cdk-lib/aws-events';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
/**
|
|
4
|
+
* Props for IdleMonitorEnabler construct
|
|
5
|
+
*/
|
|
6
|
+
export interface IdleMonitorEnablerProps {
|
|
7
|
+
/**
|
|
8
|
+
* The EventBridge rule to enable after installation completes
|
|
9
|
+
*/
|
|
10
|
+
readonly scheduleRule: Rule;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Custom Resource that enables the IdleMonitor EventBridge rule
|
|
14
|
+
* after the installer custom resource has completed.
|
|
15
|
+
*
|
|
16
|
+
* This prevents the race condition where IdleMonitor stops the instance
|
|
17
|
+
* while VS Code Server is still being installed.
|
|
18
|
+
*/
|
|
19
|
+
export declare class IdleMonitorEnabler extends Construct {
|
|
20
|
+
/**
|
|
21
|
+
* The custom resource that triggers the enabler Lambda
|
|
22
|
+
*/
|
|
23
|
+
readonly customResource: any;
|
|
24
|
+
constructor(scope: Construct, id: string, props: IdleMonitorEnablerProps);
|
|
25
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IdleMonitorEnabler = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
6
|
+
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
|
|
7
|
+
const cdk_nag_1 = require("cdk-nag");
|
|
8
|
+
const constructs_1 = require("constructs");
|
|
9
|
+
const idle_monitor_enabler_function_1 = require("./idle-monitor-enabler-function");
|
|
10
|
+
/**
|
|
11
|
+
* Custom Resource that enables the IdleMonitor EventBridge rule
|
|
12
|
+
* after the installer custom resource has completed.
|
|
13
|
+
*
|
|
14
|
+
* This prevents the race condition where IdleMonitor stops the instance
|
|
15
|
+
* while VS Code Server is still being installed.
|
|
16
|
+
*/
|
|
17
|
+
class IdleMonitorEnabler extends constructs_1.Construct {
|
|
18
|
+
constructor(scope, id, props) {
|
|
19
|
+
super(scope, id);
|
|
20
|
+
// Create the Lambda function that enables the rule
|
|
21
|
+
const enablerFunction = new idle_monitor_enabler_function_1.IdleMonitorEnablerFunction(this, 'Function', {
|
|
22
|
+
timeout: aws_cdk_lib_1.Duration.seconds(30),
|
|
23
|
+
memorySize: 128,
|
|
24
|
+
});
|
|
25
|
+
// Grant permissions to enable/disable the EventBridge rule
|
|
26
|
+
enablerFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
|
27
|
+
actions: [
|
|
28
|
+
'events:EnableRule',
|
|
29
|
+
'events:DisableRule',
|
|
30
|
+
'events:DescribeRule',
|
|
31
|
+
],
|
|
32
|
+
resources: [
|
|
33
|
+
`arn:aws:events:${aws_cdk_lib_1.Stack.of(this).region}:${aws_cdk_lib_1.Stack.of(this).account}:rule/${props.scheduleRule.ruleName}`,
|
|
34
|
+
],
|
|
35
|
+
}));
|
|
36
|
+
// Create the custom resource provider
|
|
37
|
+
const provider = new custom_resources_1.Provider(this, 'Provider', {
|
|
38
|
+
onEventHandler: enablerFunction,
|
|
39
|
+
logRetention: 1, // 1 day retention for logs
|
|
40
|
+
});
|
|
41
|
+
// Create the custom resource
|
|
42
|
+
this.customResource = new constructs_1.Construct(this, 'Resource');
|
|
43
|
+
const cfnResource = new aws_cdk_lib_1.CustomResource(this.customResource, 'Default', {
|
|
44
|
+
serviceToken: provider.serviceToken,
|
|
45
|
+
properties: {
|
|
46
|
+
RuleName: props.scheduleRule.ruleName,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
// Ensure the custom resource depends on the rule existing
|
|
50
|
+
cfnResource.node.addDependency(props.scheduleRule);
|
|
51
|
+
// CDK-nag suppressions
|
|
52
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions(enablerFunction, [
|
|
53
|
+
{
|
|
54
|
+
id: 'AwsSolutions-IAM4',
|
|
55
|
+
reason: 'Managed policies acceptable for custom resource Lambda functions',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: 'AwsSolutions-L1',
|
|
59
|
+
reason: 'Latest runtime not required for this function',
|
|
60
|
+
},
|
|
61
|
+
], true);
|
|
62
|
+
// Suppress for the provider framework
|
|
63
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions(provider, [
|
|
64
|
+
{
|
|
65
|
+
id: 'AwsSolutions-IAM4',
|
|
66
|
+
reason: 'Provider framework uses managed policies',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'AwsSolutions-L1',
|
|
70
|
+
reason: 'Provider framework runtime managed by CDK',
|
|
71
|
+
},
|
|
72
|
+
], true);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.IdleMonitorEnabler = IdleMonitorEnabler;
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWVuYWJsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQThEO0FBRTlELGlEQUFzRDtBQUN0RCxtRUFBd0Q7QUFDeEQscUNBQTBDO0FBQzFDLDJDQUF1QztBQUN2QyxtRkFBNkU7QUFZN0U7Ozs7OztHQU1HO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxzQkFBUztJQU0vQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsbURBQW1EO1FBQ25ELE1BQU0sZUFBZSxHQUFHLElBQUksMERBQTBCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN2RSxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxHQUFHO1NBQ2hCLENBQUMsQ0FBQztRQUVILDJEQUEyRDtRQUMzRCxlQUFlLENBQUMsZUFBZSxDQUM3QixJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLG1CQUFtQjtnQkFDbkIsb0JBQW9CO2dCQUNwQixxQkFBcUI7YUFDdEI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1Qsa0JBQWtCLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLFNBQVMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUU7YUFDeEc7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLDJCQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM5QyxjQUFjLEVBQUUsZUFBZTtZQUMvQixZQUFZLEVBQUUsQ0FBQyxFQUFFLDJCQUEyQjtTQUM3QyxDQUFDLENBQUM7UUFFSCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sV0FBVyxHQUFHLElBQUksNEJBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRTtZQUNyRSxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDbkMsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVE7YUFDdEM7U0FDRixDQUFDLENBQUM7UUFFSCwwREFBMEQ7UUFDMUQsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5ELHVCQUF1QjtRQUN2Qix5QkFBZSxDQUFDLHVCQUF1QixDQUNyQyxlQUFlLEVBQ2Y7WUFDRTtnQkFDRSxFQUFFLEVBQUUsbUJBQW1CO2dCQUN2QixNQUFNLEVBQUUsa0VBQWtFO2FBQzNFO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLGlCQUFpQjtnQkFDckIsTUFBTSxFQUFFLCtDQUErQzthQUN4RDtTQUNGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFFRixzQ0FBc0M7UUFDdEMseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDckMsUUFBUSxFQUNSO1lBQ0U7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsTUFBTSxFQUFFLDBDQUEwQzthQUNuRDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxpQkFBaUI7Z0JBQ3JCLE1BQU0sRUFBRSwyQ0FBMkM7YUFDcEQ7U0FDRixFQUNELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBL0VELGdEQStFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBTdGFjaywgQ3VzdG9tUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBSdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBOYWdTdXBwcmVzc2lvbnMgfSBmcm9tICdjZGstbmFnJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSWRsZU1vbml0b3JFbmFibGVyRnVuY3Rpb24gfSBmcm9tICcuL2lkbGUtbW9uaXRvci1lbmFibGVyLWZ1bmN0aW9uJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgSWRsZU1vbml0b3JFbmFibGVyIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkbGVNb25pdG9yRW5hYmxlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBFdmVudEJyaWRnZSBydWxlIHRvIGVuYWJsZSBhZnRlciBpbnN0YWxsYXRpb24gY29tcGxldGVzXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZVJ1bGU6IFJ1bGU7XG59XG5cbi8qKlxuICogQ3VzdG9tIFJlc291cmNlIHRoYXQgZW5hYmxlcyB0aGUgSWRsZU1vbml0b3IgRXZlbnRCcmlkZ2UgcnVsZVxuICogYWZ0ZXIgdGhlIGluc3RhbGxlciBjdXN0b20gcmVzb3VyY2UgaGFzIGNvbXBsZXRlZC5cbiAqXG4gKiBUaGlzIHByZXZlbnRzIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBJZGxlTW9uaXRvciBzdG9wcyB0aGUgaW5zdGFuY2VcbiAqIHdoaWxlIFZTIENvZGUgU2VydmVyIGlzIHN0aWxsIGJlaW5nIGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yRW5hYmxlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHJlc291cmNlIHRoYXQgdHJpZ2dlcnMgdGhlIGVuYWJsZXIgTGFtYmRhXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2U6IGFueTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSWRsZU1vbml0b3JFbmFibGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBlbmFibGVzIHRoZSBydWxlXG4gICAgY29uc3QgZW5hYmxlckZ1bmN0aW9uID0gbmV3IElkbGVNb25pdG9yRW5hYmxlckZ1bmN0aW9uKHRoaXMsICdGdW5jdGlvbicsIHtcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIEV2ZW50QnJpZGdlIHJ1bGVcbiAgICBlbmFibGVyRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnZXZlbnRzOkVuYWJsZVJ1bGUnLFxuICAgICAgICAgICdldmVudHM6RGlzYWJsZVJ1bGUnLFxuICAgICAgICAgICdldmVudHM6RGVzY3JpYmVSdWxlJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6ZXZlbnRzOiR7U3RhY2sub2YodGhpcykucmVnaW9ufToke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OnJ1bGUvJHtwcm9wcy5zY2hlZHVsZVJ1bGUucnVsZU5hbWV9YCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsICdQcm92aWRlcicsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBlbmFibGVyRnVuY3Rpb24sXG4gICAgICBsb2dSZXRlbnRpb246IDEsIC8vIDEgZGF5IHJldGVudGlvbiBmb3IgbG9nc1xuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICB0aGlzLmN1c3RvbVJlc291cmNlID0gbmV3IENvbnN0cnVjdCh0aGlzLCAnUmVzb3VyY2UnKTtcbiAgICBjb25zdCBjZm5SZXNvdXJjZSA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLmN1c3RvbVJlc291cmNlLCAnRGVmYXVsdCcsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBSdWxlTmFtZTogcHJvcHMuc2NoZWR1bGVSdWxlLnJ1bGVOYW1lLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEVuc3VyZSB0aGUgY3VzdG9tIHJlc291cmNlIGRlcGVuZHMgb24gdGhlIHJ1bGUgZXhpc3RpbmdcbiAgICBjZm5SZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuc2NoZWR1bGVSdWxlKTtcblxuICAgIC8vIENESy1uYWcgc3VwcHJlc3Npb25zXG4gICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgZW5hYmxlckZ1bmN0aW9uLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOiAnTWFuYWdlZCBwb2xpY2llcyBhY2NlcHRhYmxlIGZvciBjdXN0b20gcmVzb3VyY2UgTGFtYmRhIGZ1bmN0aW9ucycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgICAgcmVhc29uOiAnTGF0ZXN0IHJ1bnRpbWUgbm90IHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICAvLyBTdXBwcmVzcyBmb3IgdGhlIHByb3ZpZGVyIGZyYW1ld29ya1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIHByb3ZpZGVyLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOiAnUHJvdmlkZXIgZnJhbWV3b3JrIHVzZXMgbWFuYWdlZCBwb2xpY2llcycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgICAgcmVhc29uOiAnUHJvdmlkZXIgZnJhbWV3b3JrIHJ1bnRpbWUgbWFuYWdlZCBieSBDREsnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OnEventRequest, OnEventResponse } from 'aws-cdk-lib/custom-resources/lib/provider-framework/types';
|
|
2
|
+
/**
|
|
3
|
+
* Custom Resource handler that enables the IdleMonitor EventBridge rule
|
|
4
|
+
* after the installer custom resource has completed successfully.
|
|
5
|
+
*
|
|
6
|
+
* This prevents the IdleMonitor from stopping the EC2 instance while
|
|
7
|
+
* VS Code Server is still being installed.
|
|
8
|
+
*/
|
|
9
|
+
export declare const handler: (event: OnEventRequest) => Promise<OnEventResponse>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handler = void 0;
|
|
4
|
+
const client_eventbridge_1 = require("@aws-sdk/client-eventbridge");
|
|
5
|
+
const eventBridge = new client_eventbridge_1.EventBridge();
|
|
6
|
+
/**
|
|
7
|
+
* Custom Resource handler that enables the IdleMonitor EventBridge rule
|
|
8
|
+
* after the installer custom resource has completed successfully.
|
|
9
|
+
*
|
|
10
|
+
* This prevents the IdleMonitor from stopping the EC2 instance while
|
|
11
|
+
* VS Code Server is still being installed.
|
|
12
|
+
*/
|
|
13
|
+
const handler = async (event) => {
|
|
14
|
+
console.log('Event: %j', { ...event, ResponseURL: '...' });
|
|
15
|
+
const ruleName = event.ResourceProperties.RuleName;
|
|
16
|
+
if (!ruleName) {
|
|
17
|
+
throw new Error('RuleName is required in ResourceProperties');
|
|
18
|
+
}
|
|
19
|
+
switch (event.RequestType) {
|
|
20
|
+
case 'Create':
|
|
21
|
+
case 'Update':
|
|
22
|
+
console.log(`Enabling EventBridge rule: ${ruleName}`);
|
|
23
|
+
await eventBridge.send(new client_eventbridge_1.EnableRuleCommand({
|
|
24
|
+
Name: ruleName,
|
|
25
|
+
}));
|
|
26
|
+
console.log(`Successfully enabled rule: ${ruleName}`);
|
|
27
|
+
return {
|
|
28
|
+
PhysicalResourceId: `idle-monitor-enabler-${ruleName}`,
|
|
29
|
+
};
|
|
30
|
+
case 'Delete':
|
|
31
|
+
console.log(`Disabling EventBridge rule on deletion: ${ruleName}`);
|
|
32
|
+
try {
|
|
33
|
+
await eventBridge.send(new client_eventbridge_1.DisableRuleCommand({
|
|
34
|
+
Name: ruleName,
|
|
35
|
+
}));
|
|
36
|
+
console.log(`Successfully disabled rule: ${ruleName}`);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// Ignore errors on delete - rule might already be deleted
|
|
40
|
+
console.log(`Error disabling rule (ignoring): ${error.message}`);
|
|
41
|
+
}
|
|
42
|
+
return {};
|
|
43
|
+
default:
|
|
44
|
+
throw new Error(`Unsupported RequestType: ${event.RequestType}`);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.handler = handler;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWVuYWJsZXIubGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci1lbmFibGVyL2lkbGUtbW9uaXRvci1lbmFibGVyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvRUFJcUM7QUFPckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxnQ0FBVyxFQUFFLENBQUM7QUFFdEM7Ozs7OztHQU1HO0FBQ0ksTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUMxQixLQUFxQixFQUNLLEVBQUU7SUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUUzRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDO0lBRW5ELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsUUFBUSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFFBQVE7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sV0FBVyxDQUFDLElBQUksQ0FDcEIsSUFBSSxzQ0FBaUIsQ0FBQztnQkFDcEIsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQ0gsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdEQsT0FBTztnQkFDTCxrQkFBa0IsRUFBRSx3QkFBd0IsUUFBUSxFQUFFO2FBQ3ZELENBQUM7UUFFSixLQUFLLFFBQVE7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQztnQkFDSCxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQ3BCLElBQUksdUNBQWtCLENBQUM7b0JBQ3JCLElBQUksRUFBRSxRQUFRO2lCQUNmLENBQUMsQ0FDSCxDQUFDO2dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7Z0JBQ3BCLDBEQUEwRDtnQkFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBRVo7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBM0NXLFFBQUEsT0FBTyxXQTJDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFdmVudEJyaWRnZSxcbiAgRW5hYmxlUnVsZUNvbW1hbmQsXG4gIERpc2FibGVSdWxlQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWV2ZW50YnJpZGdlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB0eXBlIHtcbiAgT25FdmVudFJlcXVlc3QsXG4gIE9uRXZlbnRSZXNwb25zZSxcbn0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcy9saWIvcHJvdmlkZXItZnJhbWV3b3JrL3R5cGVzJztcblxuY29uc3QgZXZlbnRCcmlkZ2UgPSBuZXcgRXZlbnRCcmlkZ2UoKTtcblxuLyoqXG4gKiBDdXN0b20gUmVzb3VyY2UgaGFuZGxlciB0aGF0IGVuYWJsZXMgdGhlIElkbGVNb25pdG9yIEV2ZW50QnJpZGdlIHJ1bGVcbiAqIGFmdGVyIHRoZSBpbnN0YWxsZXIgY3VzdG9tIHJlc291cmNlIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICpcbiAqIFRoaXMgcHJldmVudHMgdGhlIElkbGVNb25pdG9yIGZyb20gc3RvcHBpbmcgdGhlIEVDMiBpbnN0YW5jZSB3aGlsZVxuICogVlMgQ29kZSBTZXJ2ZXIgaXMgc3RpbGwgYmVpbmcgaW5zdGFsbGVkLlxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6IE9uRXZlbnRSZXF1ZXN0LFxuKTogUHJvbWlzZTxPbkV2ZW50UmVzcG9uc2U+ID0+IHtcbiAgY29uc29sZS5sb2coJ0V2ZW50OiAlaicsIHsgLi4uZXZlbnQsIFJlc3BvbnNlVVJMOiAnLi4uJyB9KTtcblxuICBjb25zdCBydWxlTmFtZSA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5SdWxlTmFtZTtcblxuICBpZiAoIXJ1bGVOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdWxlTmFtZSBpcyByZXF1aXJlZCBpbiBSZXNvdXJjZVByb3BlcnRpZXMnKTtcbiAgfVxuXG4gIHN3aXRjaCAoZXZlbnQuUmVxdWVzdFR5cGUpIHtcbiAgICBjYXNlICdDcmVhdGUnOlxuICAgIGNhc2UgJ1VwZGF0ZSc6XG4gICAgICBjb25zb2xlLmxvZyhgRW5hYmxpbmcgRXZlbnRCcmlkZ2UgcnVsZTogJHtydWxlTmFtZX1gKTtcbiAgICAgIGF3YWl0IGV2ZW50QnJpZGdlLnNlbmQoXG4gICAgICAgIG5ldyBFbmFibGVSdWxlQ29tbWFuZCh7XG4gICAgICAgICAgTmFtZTogcnVsZU5hbWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgZW5hYmxlZCBydWxlOiAke3J1bGVOYW1lfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBgaWRsZS1tb25pdG9yLWVuYWJsZXItJHtydWxlTmFtZX1gLFxuICAgICAgfTtcblxuICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICBjb25zb2xlLmxvZyhgRGlzYWJsaW5nIEV2ZW50QnJpZGdlIHJ1bGUgb24gZGVsZXRpb246ICR7cnVsZU5hbWV9YCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldmVudEJyaWRnZS5zZW5kKFxuICAgICAgICAgIG5ldyBEaXNhYmxlUnVsZUNvbW1hbmQoe1xuICAgICAgICAgICAgTmFtZTogcnVsZU5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgZGlzYWJsZWQgcnVsZTogJHtydWxlTmFtZX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgLy8gSWdub3JlIGVycm9ycyBvbiBkZWxldGUgLSBydWxlIG1pZ2h0IGFscmVhZHkgYmUgZGVsZXRlZFxuICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3IgZGlzYWJsaW5nIHJ1bGUgKGlnbm9yaW5nKTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgUmVxdWVzdFR5cGU6ICR7ZXZlbnQuUmVxdWVzdFR5cGV9YCk7XG4gIH1cbn07XG4iXX0=
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -16,5 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./vscode-server"), exports);
|
|
18
18
|
__exportStar(require("./idle-monitor/idle-monitor"), exports);
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyw4REFBNEM7QUFDNUMsOERBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi92c2NvZGUtc2VydmVyJztcbmV4cG9ydCAqIGZyb20gJy4vaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1jaGVjay9zdGF0dXMtY2hlY2snO1xuIl19
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyw4REFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3ZzY29kZS1zZXJ2ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pZGxlLW1vbml0b3IvaWRsZS1tb25pdG9yJztcbiJdfQ==
|