@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.
Files changed (123) hide show
  1. package/.jsii +124 -178
  2. package/API.md +105 -200
  3. package/CLAUDE.md +288 -58
  4. package/README.md +40 -2
  5. package/assets/idle-monitor-enabler/idle-monitor-enabler.lambda/index.js +67 -0
  6. package/assets/installer/installer.lambda/index.js +67 -30
  7. package/awslint.json +5 -0
  8. package/examples/auto-stop/main.ts +1 -1
  9. package/examples/custom/main.ts +1 -1
  10. package/examples/git-repo/main.ts +30 -0
  11. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +2 -2
  12. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +1 -1
  13. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +8 -8
  14. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +257 -94
  15. package/integ-tests/{integ.stop-on-idle.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.al2023.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  16. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.al2023.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  17. package/integ-tests/integ.al2023.ts.snapshot/integ.json +1 -1
  18. package/integ-tests/integ.al2023.ts.snapshot/manifest.json +19 -3
  19. package/integ-tests/integ.al2023.ts.snapshot/tree.json +1 -1
  20. package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.assets.json +2 -2
  21. package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.template.json +1 -1
  22. package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.assets.json +8 -8
  23. package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.template.json +273 -97
  24. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.custom-domain.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  25. package/integ-tests/{integ.al2023.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.custom-domain.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  26. package/integ-tests/integ.custom-domain.ts.snapshot/integ.json +1 -1
  27. package/integ-tests/integ.custom-domain.ts.snapshot/manifest.json +25 -6
  28. package/integ-tests/integ.custom-domain.ts.snapshot/tree.json +1 -1
  29. package/integ-tests/integ.stop-on-idle.ts +1 -4
  30. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.assets.json +2 -2
  31. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.template.json +4 -4
  32. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.assets.json +23 -9
  33. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.template.json +758 -197
  34. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.22c8a6c357b704e370bef317ae1b52c59f684aa7640422a3d1dfe813d1f77853.lambda/index.js +67 -0
  35. package/integ-tests/{integ.custom-domain.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.stop-on-idle.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  36. package/integ-tests/integ.stop-on-idle.ts.snapshot/manifest.json +363 -76
  37. package/integ-tests/integ.stop-on-idle.ts.snapshot/tree.json +1 -1
  38. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +2 -2
  39. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +1 -1
  40. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +8 -8
  41. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +273 -97
  42. package/integ-tests/{integ.al2023.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.ubuntu.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  43. package/integ-tests/{integ.custom-domain.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.ubuntu.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  44. package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +1 -1
  45. package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +25 -6
  46. package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +1 -1
  47. package/integ-tests/integ.ubuntu24.ts +69 -0
  48. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +33 -0
  49. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +337 -0
  50. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.assets.json +118 -0
  51. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.template.json +2725 -0
  52. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
  53. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
  54. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
  55. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
  56. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
  57. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
  58. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
  59. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
  60. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
  61. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
  62. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
  63. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
  64. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
  65. package/integ-tests/integ.ubuntu24.ts.snapshot/integ.json +23 -0
  66. package/integ-tests/integ.ubuntu24.ts.snapshot/manifest.json +1473 -0
  67. package/integ-tests/integ.ubuntu24.ts.snapshot/tree.json +1 -0
  68. package/integ-tests/integ.ubuntu25.ts +69 -0
  69. package/integ-tests/integ.ubuntu25.ts.snapshot/IntegSetupVSCodeOnUbuntu25DefaultTestDeployAssert48DBCF35.assets.json +33 -0
  70. package/integ-tests/integ.ubuntu25.ts.snapshot/IntegSetupVSCodeOnUbuntu25DefaultTestDeployAssert48DBCF35.template.json +337 -0
  71. package/integ-tests/integ.ubuntu25.ts.snapshot/IntegTestStackUbuntu25.assets.json +118 -0
  72. package/integ-tests/integ.ubuntu25.ts.snapshot/IntegTestStackUbuntu25.template.json +2725 -0
  73. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
  74. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
  75. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
  76. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
  77. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
  78. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
  79. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
  80. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
  81. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
  82. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
  83. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
  84. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
  85. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
  86. package/integ-tests/integ.ubuntu25.ts.snapshot/integ.json +23 -0
  87. package/integ-tests/integ.ubuntu25.ts.snapshot/manifest.json +1473 -0
  88. package/integ-tests/integ.ubuntu25.ts.snapshot/tree.json +1 -0
  89. package/lib/idle-monitor/idle-monitor-function.js +2 -2
  90. package/lib/idle-monitor/idle-monitor.js +5 -2
  91. package/lib/idle-monitor-enabler/idle-monitor-enabler-function.d.ts +13 -0
  92. package/lib/idle-monitor-enabler/idle-monitor-enabler-function.js +22 -0
  93. package/lib/idle-monitor-enabler/idle-monitor-enabler.d.ts +25 -0
  94. package/lib/idle-monitor-enabler/idle-monitor-enabler.js +76 -0
  95. package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.d.ts +9 -0
  96. package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.js +48 -0
  97. package/lib/index.d.ts +0 -1
  98. package/lib/index.js +1 -2
  99. package/lib/installer/installer-function.js +2 -2
  100. package/lib/installer/installer.d.ts +105 -0
  101. package/lib/installer/installer.js +659 -301
  102. package/lib/installer/installer.lambda.js +64 -30
  103. package/lib/mappings.js +11 -3
  104. package/lib/secret-retriever/secret-retriever-function.js +2 -2
  105. package/lib/vscode-server.d.ts +45 -1
  106. package/lib/vscode-server.js +35 -5
  107. package/package.json +12 -12
  108. package/.claude/hooks/file_checker.sh +0 -178
  109. package/.qlty/.gitignore +0 -7
  110. package/.qlty/configs/.yamllint.yaml +0 -21
  111. package/.qlty/qlty.toml +0 -115
  112. package/assets/status-check/status-check.lambda/index.js +0 -123
  113. package/integ-tests/integ.al2023.ts.snapshot/cdk.out +0 -1
  114. package/integ-tests/integ.al2023.ts.snapshot/read.13497.1.lock +0 -1
  115. package/integ-tests/integ.custom-domain.ts.snapshot/read.13497.1.lock +0 -1
  116. package/integ-tests/integ.ubuntu.ts.snapshot/cdk.out +0 -1
  117. package/integ-tests/integ.ubuntu.ts.snapshot/read.13497.1.lock +0 -1
  118. package/lib/status-check/status-check-function.d.ts +0 -13
  119. package/lib/status-check/status-check-function.js +0 -22
  120. package/lib/status-check/status-check.d.ts +0 -36
  121. package/lib/status-check/status-check.js +0 -109
  122. package/lib/status-check/status-check.lambda.d.ts +0 -2
  123. package/lib/status-check/status-check.lambda.js +0 -104
@@ -125,7 +125,7 @@
125
125
  "Arn"
126
126
  ]
127
127
  },
128
- "Runtime": "nodejs20.x",
128
+ "Runtime": "nodejs22.x",
129
129
  "Timeout": 10
130
130
  },
131
131
  "DependsOn": [
@@ -1223,7 +1223,7 @@
1223
1223
  "Ebs": {
1224
1224
  "DeleteOnTermination": true,
1225
1225
  "Encrypted": true,
1226
- "VolumeSize": 8,
1226
+ "VolumeSize": 20,
1227
1227
  "VolumeType": "gp3"
1228
1228
  }
1229
1229
  }
@@ -1232,9 +1232,9 @@
1232
1232
  "Ref": "IntegVSCodeServerserverinstanceInstanceProfile6130979E"
1233
1233
  },
1234
1234
  "ImageId": {
1235
- "Ref": "SsmParameterValueawsservicecanonicalubuntuserverjammystablecurrentarm64hvmebsgp2amiidC96584B6F00A464EAD1953AFF4B05118Parameter"
1235
+ "Ref": "SsmParameterValueawsservicecanonicalubuntuservernoblestablecurrentarm64hvmebsgp3amiidC96584B6F00A464EAD1953AFF4B05118Parameter"
1236
1236
  },
1237
- "InstanceType": "t4g.large",
1237
+ "InstanceType": "m7g.xlarge",
1238
1238
  "LaunchTemplate": {
1239
1239
  "LaunchTemplateName": "IntegTestStackStopOnIdleIntegVSCodeServerserverinstanceLaunchTemplateD9ABA365",
1240
1240
  "Version": {
@@ -1538,20 +1538,29 @@
1538
1538
  },
1539
1539
  "NodeVersion": {
1540
1540
  "type": "String",
1541
- "default": "20",
1541
+ "default": "22",
1542
1542
  "allowedValues": [
1543
+ "24",
1543
1544
  "22",
1544
1545
  "20",
1545
1546
  "18"
1546
1547
  ]
1547
1548
  },
1548
- "DotNetVersion": {
1549
+ "RepoUrl": {
1549
1550
  "type": "String",
1550
- "default": "8.0",
1551
- "allowedValues": [
1552
- "8.0",
1553
- "7.0"
1554
- ]
1551
+ "default": ""
1552
+ },
1553
+ "AssetZipS3Path": {
1554
+ "type": "String",
1555
+ "default": ""
1556
+ },
1557
+ "BranchZipS3Path": {
1558
+ "type": "String",
1559
+ "default": ""
1560
+ },
1561
+ "FolderZipS3Path": {
1562
+ "type": "String",
1563
+ "default": ""
1555
1564
  }
1556
1565
  },
1557
1566
  "mainSteps": [
@@ -1583,6 +1592,7 @@
1583
1592
  "inputs": {
1584
1593
  "runCommand": [
1585
1594
  "#!/bin/bash",
1595
+ "dpkg --configure -a",
1586
1596
  "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q apt-utils",
1587
1597
  "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q needrestart unattended-upgrades",
1588
1598
  "sed -i 's/#$nrconf{kernelhints} = -1;/$nrconf{kernelhints} = 0;/' /etc/needrestart/needrestart.conf",
@@ -1599,7 +1609,8 @@
1599
1609
  "inputs": {
1600
1610
  "runCommand": [
1601
1611
  "#!/bin/bash",
1602
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl gnupg whois argon2 openssl locales locales-all unzip apt-transport-https ca-certificates software-properties-common nginx"
1612
+ "dpkg --configure -a",
1613
+ "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"
1603
1614
  ]
1604
1615
  }
1605
1616
  },
@@ -1609,12 +1620,11 @@
1609
1620
  "inputs": {
1610
1621
  "runCommand": [
1611
1622
  "#!/bin/bash",
1612
- "echo 'Adding user: ${VSCodeUser}'",
1613
- "adduser --disabled-password --gecos '' participant",
1614
- "echo \"participant:{{ VSCodePassword }}\" | chpasswd",
1615
- "usermod -aG sudo participant",
1623
+ "dpkg --configure -a",
1624
+ "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",
1616
1625
  "tee /etc/sudoers.d/91-vscode-user <<EOF\nparticipant ALL=(ALL) NOPASSWD:ALL\nEOF",
1617
1626
  "mkdir -p /home/participant && chown -R participant:participant /home/participant",
1627
+ "mkdir -p /home/participant/.local/bin && chown -R participant:participant /home/participant",
1618
1628
  "echo \"User added. Checking configuration\"",
1619
1629
  "getent passwd participant"
1620
1630
  ]
@@ -1622,34 +1632,58 @@
1622
1632
  },
1623
1633
  {
1624
1634
  "action": "aws:runShellScript",
1625
- "name": "InstallNodeApt",
1635
+ "name": "UpdateProfile",
1626
1636
  "inputs": {
1627
1637
  "runCommand": [
1628
1638
  "#!/bin/bash",
1629
- "curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg",
1630
- "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",
1631
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q nodejs",
1632
- "npm install -g npm@latest",
1633
- "echo \"Node and npm installed. Checking configuration\"",
1634
- "node -v",
1635
- "npm -v"
1639
+ "echo LANG=en_US.utf-8 >> /etc/environment",
1640
+ "echo LC_ALL=en_US.UTF-8 >> /etc/environment",
1641
+ "echo 'PATH=$PATH:/home/participant/.local/bin' >> /home/participant/.bashrc",
1642
+ "echo 'export PATH' >> /home/participant/.bashrc",
1643
+ {
1644
+ "Fn::Join": [
1645
+ "",
1646
+ [
1647
+ "echo 'export AWS_REGION=",
1648
+ {
1649
+ "Ref": "AWS::Region"
1650
+ },
1651
+ "' >> /home/participant/.bashrc"
1652
+ ]
1653
+ ]
1654
+ },
1655
+ {
1656
+ "Fn::Join": [
1657
+ "",
1658
+ [
1659
+ "echo 'export AWS_ACCOUNTID=",
1660
+ {
1661
+ "Ref": "AWS::AccountId"
1662
+ },
1663
+ "' >> /home/participant/.bashrc"
1664
+ ]
1665
+ ]
1666
+ },
1667
+ "echo 'export NEXT_TELEMETRY_DISABLED=1' >> /home/participant/.bashrc",
1668
+ "echo \"export PS1='\\[\\033[01;32m\\]\\u:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '\" >> /home/participant/.bashrc",
1669
+ "chown -R participant:participant /home/participant"
1636
1670
  ]
1637
1671
  }
1638
1672
  },
1639
1673
  {
1640
1674
  "action": "aws:runShellScript",
1641
- "name": "InstallDockerApt",
1675
+ "name": "InstallAWSCLI",
1642
1676
  "inputs": {
1643
1677
  "runCommand": [
1644
1678
  "#!/bin/bash",
1645
- "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg",
1646
- "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",
1647
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q docker-ce docker-ce-cli containerd.io",
1648
- "systemctl restart code-server@participant.service",
1649
- "systemctl start docker.service",
1650
- "echo \"Docker installed. Checking configuration\"",
1651
- "docker --version",
1652
- "systemctl status docker.service"
1679
+ "mkdir -p /tmp",
1680
+ "curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip",
1681
+ "chown -R participant:participant /tmp/aws-cli.zip",
1682
+ "unzip -q -d /tmp /tmp/aws-cli.zip",
1683
+ "sudo /tmp/aws/install",
1684
+ "rm -rf /tmp/aws",
1685
+ "echo \"AWS CLI installed. Checking configuration\"",
1686
+ "aws --version"
1653
1687
  ]
1654
1688
  }
1655
1689
  },
@@ -1659,10 +1693,11 @@
1659
1693
  "inputs": {
1660
1694
  "runCommand": [
1661
1695
  "#!/bin/bash",
1696
+ "dpkg --configure -a",
1662
1697
  "add-apt-repository ppa:git-core/ppa",
1663
1698
  "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q git",
1664
1699
  "sudo -u participant git config --global user.email \"participant@example.com\"",
1665
- "sudo -u participant git config --global user.name \"Workshop participant\"",
1700
+ "sudo -u participant git config --global user.name \"Workshop Participant\"",
1666
1701
  "sudo -u participant git config --global init.defaultBranch \"main\"",
1667
1702
  "echo \"Git installed. Checking configuration\"",
1668
1703
  "git --version"
@@ -1671,33 +1706,41 @@
1671
1706
  },
1672
1707
  {
1673
1708
  "action": "aws:runShellScript",
1674
- "name": "InstallPythonApt",
1709
+ "name": "CloneRepo",
1675
1710
  "inputs": {
1676
1711
  "runCommand": [
1677
1712
  "#!/bin/bash",
1678
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q python3-pip python3-venv python3-boto3 python3-pytest",
1679
- "echo 'alias pytest=pytest-3' >> /home/participant/.bashrc",
1680
- "systemctl restart code-server@participant.service",
1681
- "systemctl start multipathd.service packagekit.service",
1682
- "systemctl restart unattended-upgrades.service",
1683
- "echo \"Python and Pip installed. Checking configuration\"",
1684
- "python3 --version",
1685
- "pip3 --version"
1713
+ "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"
1686
1714
  ]
1687
1715
  }
1688
1716
  },
1689
1717
  {
1690
1718
  "action": "aws:runShellScript",
1691
- "name": "InstallAWSCLI",
1719
+ "name": "DownloadAssets",
1692
1720
  "inputs": {
1693
1721
  "runCommand": [
1694
1722
  "#!/bin/bash",
1695
- "curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip",
1696
- "unzip -q -d /tmp /tmp/aws-cli.zip",
1697
- "sudo /tmp/aws/install",
1698
- "rm -rf /tmp/aws",
1699
- "echo \"AWS CLI installed. Checking configuration\"",
1700
- "aws --version"
1723
+ "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"
1724
+ ]
1725
+ }
1726
+ },
1727
+ {
1728
+ "action": "aws:runShellScript",
1729
+ "name": "DownloadFolders",
1730
+ "inputs": {
1731
+ "runCommand": [
1732
+ "#!/bin/bash",
1733
+ "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"
1734
+ ]
1735
+ }
1736
+ },
1737
+ {
1738
+ "action": "aws:runShellScript",
1739
+ "name": "DownloadBranches",
1740
+ "inputs": {
1741
+ "runCommand": [
1742
+ "#!/bin/bash",
1743
+ "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"
1701
1744
  ]
1702
1745
  }
1703
1746
  },
@@ -1708,23 +1751,22 @@
1708
1751
  "runCommand": [
1709
1752
  "#!/bin/bash",
1710
1753
  "export HOME=/home/participant",
1711
- "curl -fsSL https://code-server.dev/install.sh | bash -s -- 2>&1",
1754
+ "curl -fsSL https://code-server.dev/install.sh | sh -s -- --version 4.100.3",
1712
1755
  "systemctl enable --now code-server@participant 2>&1",
1713
- "tee /etc/nginx/conf.d/code-server.conf <<EOF\nserver {\n listen 80;\n listen [::]:80;\n # server_name distribution.distributionDomainName;\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",
1756
+ "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",
1714
1757
  "mkdir -p /home/participant/.config/code-server",
1715
1758
  "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",
1716
1759
  "mkdir -p /home/participant/.local/share/code-server/User/",
1717
1760
  "touch /home/participant/.hushlogin",
1718
1761
  "mkdir -p /Workshop && chown -R participant:participant /Workshop",
1719
- "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 \"python.testing.pytestEnabled\": true,\n \"auto-run-command.rules\": [\n {\n \"command\": \"workbench.action.terminal.new\"\n }\n ]\n}\nEOF",
1762
+ "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",
1720
1763
  "chown -R participant:participant /home/participant",
1721
1764
  "systemctl restart code-server@participant",
1722
1765
  "systemctl restart nginx",
1723
1766
  "sudo -u participant --login code-server --install-extension AmazonWebServices.aws-toolkit-vscode --force",
1724
1767
  "sudo -u participant --login code-server --install-extension AmazonWebServices.amazon-q-vscode --force",
1725
- "sudo -u participant --login code-server --install-extension synedra.auto-run-command --force",
1726
- "sudo -u participant --login code-server --install-extension vscjava.vscode-java-pack --force",
1727
1768
  "sudo -u participant --login code-server --install-extension ms-vscode.live-server --force",
1769
+ "sudo -u participant --login code-server --install-extension synedra.auto-run-command --force",
1728
1770
  "chown -R participant:participant /home/participant",
1729
1771
  "echo \"Nginx installed. Checking configuration\"",
1730
1772
  "nginx -t 2>&1",
@@ -1737,41 +1779,17 @@
1737
1779
  },
1738
1780
  {
1739
1781
  "action": "aws:runShellScript",
1740
- "name": "UpdateProfile",
1782
+ "name": "InstallNodeApt",
1741
1783
  "inputs": {
1742
1784
  "runCommand": [
1743
1785
  "#!/bin/bash",
1744
- "echo LANG=en_US.utf-8 >> /etc/environment",
1745
- "echo LC_ALL=en_US.UTF-8 >> /etc/environment",
1746
- "echo 'PATH=$PATH:/home/participant/.local/bin' >> /home/participant/.bashrc",
1747
- "echo 'export PATH' >> /home/participant/.bashrc",
1748
- {
1749
- "Fn::Join": [
1750
- "",
1751
- [
1752
- "echo 'export AWS_REGION=",
1753
- {
1754
- "Ref": "AWS::Region"
1755
- },
1756
- "' >> /home/participant/.bashrc"
1757
- ]
1758
- ]
1759
- },
1760
- {
1761
- "Fn::Join": [
1762
- "",
1763
- [
1764
- "echo 'export AWS_ACCOUNTID=",
1765
- {
1766
- "Ref": "AWS::AccountId"
1767
- },
1768
- "' >> /home/participant/.bashrc"
1769
- ]
1770
- ]
1771
- },
1772
- "echo 'export NEXT_TELEMETRY_DISABLED=1' >> /home/participant/.bashrc",
1773
- "echo \"export PS1='\\[\\033[01;32m\\]\\u:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '\" >> /home/participant/.bashrc",
1774
- "chown -R participant:participant /home/participant"
1786
+ "curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg",
1787
+ "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",
1788
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q nodejs",
1789
+ "npm install -g npm@latest",
1790
+ "echo \"Node and npm installed. Checking configuration\"",
1791
+ "node -v",
1792
+ "npm -v"
1775
1793
  ]
1776
1794
  }
1777
1795
  },
@@ -1786,6 +1804,133 @@
1786
1804
  "cdk --version"
1787
1805
  ]
1788
1806
  }
1807
+ },
1808
+ {
1809
+ "action": "aws:runShellScript",
1810
+ "name": "InstallQCLI",
1811
+ "inputs": {
1812
+ "runCommand": [
1813
+ "#!/bin/bash",
1814
+ "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",
1815
+ "chown -R participant:participant /tmp/q.zip",
1816
+ "unzip -q -d /tmp /tmp/q.zip",
1817
+ "chown -R participant:participant /tmp/q",
1818
+ "chmod +x /tmp/q/install.sh",
1819
+ "sudo -u participant /tmp/q/install.sh --no-confirm",
1820
+ "rm -rf /tmp/q",
1821
+ "q --version",
1822
+ "echo \"Amazon Q CLI installed\""
1823
+ ]
1824
+ }
1825
+ },
1826
+ {
1827
+ "action": "aws:runShellScript",
1828
+ "name": "Installuv",
1829
+ "inputs": {
1830
+ "runCommand": [
1831
+ "#!/bin/bash",
1832
+ "sudo -u participant --login curl -fsSL https://astral.sh/uv/install.sh -o /tmp/uv_install.sh",
1833
+ "sudo -u participant --login bash /tmp/uv_install.sh",
1834
+ "if uv generate-shell-completion bash &>/dev/null; then\n echo 'eval \"$(uv generate-shell-completion bash)\"' >> /home/participant/.bashrc\nfi",
1835
+ "if uvx generate-shell-completion bash &>/dev/null; then\n echo 'eval \"$(uvx generate-shell-completion bash)\"' >> /home/participant/.bashrc\nfi",
1836
+ "echo \"uv installed. Checking configuration\"",
1837
+ "sudo -u participant --login uv --version"
1838
+ ]
1839
+ }
1840
+ },
1841
+ {
1842
+ "action": "aws:runShellScript",
1843
+ "name": "InstallPythonApt",
1844
+ "inputs": {
1845
+ "runCommand": [
1846
+ "#!/bin/bash",
1847
+ "dpkg --configure -a",
1848
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q python3-pip python3-venv python3-boto3 python3-pytest",
1849
+ "echo 'alias pytest=pytest-3' >> /home/participant/.bashrc",
1850
+ "systemctl start multipathd.service packagekit.service",
1851
+ "systemctl restart unattended-upgrades.service",
1852
+ "systemctl restart networkd-dispatcher.service",
1853
+ "sudo -u participant --login code-server --install-extension ms-python.python --force",
1854
+ "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",
1855
+ "echo \"Python and Pip installed. Checking configuration\"",
1856
+ "python3 --version",
1857
+ "pip3 --version"
1858
+ ]
1859
+ }
1860
+ },
1861
+ {
1862
+ "action": "aws:runShellScript",
1863
+ "name": "InstallJavaApt",
1864
+ "inputs": {
1865
+ "runCommand": [
1866
+ "#!/bin/bash",
1867
+ "dpkg --configure -a",
1868
+ "curl -fsSL https://apt.corretto.aws/corretto.key | gpg --dearmor -o /usr/share/keyrings/corretto-keyring.gpg",
1869
+ "echo \"deb [signed-by=/usr/share/keyrings/corretto-keyring.gpg] https://apt.corretto.aws stable main\" > /etc/apt/sources.list.d/corretto.list",
1870
+ "DEBIAN_FRONTEND=noninteractive apt-get update",
1871
+ "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",
1872
+ "echo 'export JAVA_8_HOME=$(update-alternatives --list java | grep \"java-1.8.0-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
1873
+ "echo 'export JAVA_8_PATH=$(update-alternatives --list java | grep \"java-1.8.0-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
1874
+ "echo 'export JAVA_17_PATH=$(update-alternatives --list java | grep \"java-17-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
1875
+ "echo 'export JAVA_17_HOME=$(update-alternatives --list java | grep \"java-17-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
1876
+ "echo 'export JAVA_21_PATH=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
1877
+ "echo 'export JAVA_21_HOME=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
1878
+ "echo 'export JAVA_HOME=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
1879
+ "echo 'export PATH=$PATH:$JAVA_HOME/bin:/usr/share/maven/bin' >> /home/participant/.bashrc",
1880
+ "sudo -u participant --login code-server --install-extension vscjava.vscode-java-pack --force",
1881
+ "echo \"Java and Maven installed. Checking configuration\"",
1882
+ "java -version 2>&1",
1883
+ "mvn --version",
1884
+ "update-alternatives --list java"
1885
+ ]
1886
+ }
1887
+ },
1888
+ {
1889
+ "action": "aws:runShellScript",
1890
+ "name": "InstallDotnetApt",
1891
+ "inputs": {
1892
+ "runCommand": [
1893
+ "#!/bin/bash",
1894
+ "dpkg --configure -a",
1895
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q dotnet-sdk-8.0",
1896
+ "dotnet tool install -g Microsoft.Web.LibraryManager.Cli",
1897
+ "echo 'PATH=$PATH:/home/participant/.dotnet/tools' >> /home/participant/.bashrc",
1898
+ "chown -R participant:participant /home/participant",
1899
+ "echo \"Dotnet installed. Checking configuration\"",
1900
+ "dotnet --list-sdks"
1901
+ ]
1902
+ }
1903
+ },
1904
+ {
1905
+ "action": "aws:runShellScript",
1906
+ "name": "InstallDockerApt",
1907
+ "inputs": {
1908
+ "runCommand": [
1909
+ "#!/bin/bash",
1910
+ "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg",
1911
+ "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",
1912
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q docker-ce docker-ce-cli containerd.io",
1913
+ "usermod -aG docker participant",
1914
+ "systemctl restart code-server@participant.service",
1915
+ "systemctl start docker.service",
1916
+ "echo \"Docker installed. Checking configuration\"",
1917
+ "docker --version",
1918
+ "systemctl status docker.service"
1919
+ ]
1920
+ }
1921
+ },
1922
+ {
1923
+ "action": "aws:runShellScript",
1924
+ "name": "InstallGolangApt",
1925
+ "inputs": {
1926
+ "runCommand": [
1927
+ "#!/bin/bash",
1928
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q golang",
1929
+ "echo 'PATH=$PATH:/home/participant/go/bin' >> /home/participant/.bashrc",
1930
+ "echo \"Golang installed. Checking configuration\"",
1931
+ "go version"
1932
+ ]
1933
+ }
1789
1934
  }
1790
1935
  ]
1791
1936
  },
@@ -1847,6 +1992,13 @@
1847
1992
  {
1848
1993
  "reason": "For this lambda the latest runtime is not needed",
1849
1994
  "id": "AwsSolutions-L1"
1995
+ },
1996
+ {
1997
+ "reason": "ssm:GetCommandInvocation and ssm:ListCommandInvocations do not support resource-level permissions and require wildcard resources",
1998
+ "id": "AwsSolutions-IAM5",
1999
+ "applies_to": [
2000
+ "Resource::*"
2001
+ ]
1850
2002
  }
1851
2003
  ]
1852
2004
  }
@@ -1858,11 +2010,7 @@
1858
2010
  "PolicyDocument": {
1859
2011
  "Statement": [
1860
2012
  {
1861
- "Action": [
1862
- "ssm:GetCommandInvocation",
1863
- "ssm:ListCommandInvocations",
1864
- "ssm:SendCommand"
1865
- ],
2013
+ "Action": "ssm:SendCommand",
1866
2014
  "Effect": "Allow",
1867
2015
  "Resource": [
1868
2016
  {
@@ -1929,6 +2077,14 @@
1929
2077
  ]
1930
2078
  }
1931
2079
  ]
2080
+ },
2081
+ {
2082
+ "Action": [
2083
+ "ssm:GetCommandInvocation",
2084
+ "ssm:ListCommandInvocations"
2085
+ ],
2086
+ "Effect": "Allow",
2087
+ "Resource": "*"
1932
2088
  }
1933
2089
  ],
1934
2090
  "Version": "2012-10-17"
@@ -1939,6 +2095,19 @@
1939
2095
  "Ref": "IntegVSCodeServerInstallerOnEventHandlerServiceRole59651FEF"
1940
2096
  }
1941
2097
  ]
2098
+ },
2099
+ "Metadata": {
2100
+ "cdk_nag": {
2101
+ "rules_to_suppress": [
2102
+ {
2103
+ "reason": "ssm:GetCommandInvocation and ssm:ListCommandInvocations do not support resource-level permissions and require wildcard resources",
2104
+ "id": "AwsSolutions-IAM5",
2105
+ "applies_to": [
2106
+ "Resource::*"
2107
+ ]
2108
+ }
2109
+ ]
2110
+ }
1942
2111
  }
1943
2112
  },
1944
2113
  "IntegVSCodeServerInstallerOnEventHandler6FF91542": {
@@ -1948,7 +2117,7 @@
1948
2117
  "S3Bucket": {
1949
2118
  "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
1950
2119
  },
1951
- "S3Key": "33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.zip"
2120
+ "S3Key": "2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.zip"
1952
2121
  },
1953
2122
  "Description": "src/installer/installer.lambda.ts",
1954
2123
  "Handler": "index.handler",
@@ -1959,8 +2128,8 @@
1959
2128
  "Arn"
1960
2129
  ]
1961
2130
  },
1962
- "Runtime": "nodejs20.x",
1963
- "Timeout": 300
2131
+ "Runtime": "nodejs22.x",
2132
+ "Timeout": 900
1964
2133
  },
1965
2134
  "DependsOn": [
1966
2135
  "IntegVSCodeServerInstallerOnEventHandlerServiceRoleDefaultPolicy1CAD86C2",
@@ -1976,6 +2145,13 @@
1976
2145
  {
1977
2146
  "reason": "For this lambda the latest runtime is not needed",
1978
2147
  "id": "AwsSolutions-L1"
2148
+ },
2149
+ {
2150
+ "reason": "ssm:GetCommandInvocation and ssm:ListCommandInvocations do not support resource-level permissions and require wildcard resources",
2151
+ "id": "AwsSolutions-IAM5",
2152
+ "applies_to": [
2153
+ "Resource::*"
2154
+ ]
1979
2155
  }
1980
2156
  ]
1981
2157
  }
@@ -2170,7 +2346,7 @@
2170
2346
  "Arn"
2171
2347
  ]
2172
2348
  },
2173
- "ServiceTimeout": 305,
2349
+ "ServiceTimeout": 905,
2174
2350
  "InstanceId": {
2175
2351
  "Ref": "IntegVSCodeServerserverinstance0A3D62D7"
2176
2352
  },
@@ -2361,7 +2537,7 @@
2361
2537
  "Type": "AWS::Events::Rule",
2362
2538
  "Properties": {
2363
2539
  "ScheduleExpression": "rate(1 minute)",
2364
- "State": "ENABLED",
2540
+ "State": "DISABLED",
2365
2541
  "Targets": [
2366
2542
  {
2367
2543
  "Arn": {
@@ -2394,11 +2570,10 @@
2394
2570
  }
2395
2571
  }
2396
2572
  },
2397
- "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0": {
2573
+ "IntegVSCodeServerIdleMonitorEnablerFunctionServiceRole71DD1E5D": {
2398
2574
  "Type": "AWS::IAM::Role",
2399
2575
  "Properties": {
2400
2576
  "AssumeRolePolicyDocument": {
2401
- "Version": "2012-10-17",
2402
2577
  "Statement": [
2403
2578
  {
2404
2579
  "Action": "sts:AssumeRole",
@@ -2407,18 +2582,404 @@
2407
2582
  "Service": "lambda.amazonaws.com"
2408
2583
  }
2409
2584
  }
2410
- ]
2585
+ ],
2586
+ "Version": "2012-10-17"
2411
2587
  },
2412
2588
  "ManagedPolicyArns": [
2413
2589
  {
2414
- "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
2415
- }
2416
- ],
2417
- "Policies": [
2418
- {
2419
- "PolicyName": "Inline",
2420
- "PolicyDocument": {
2421
- "Version": "2012-10-17",
2590
+ "Fn::Join": [
2591
+ "",
2592
+ [
2593
+ "arn:",
2594
+ {
2595
+ "Ref": "AWS::Partition"
2596
+ },
2597
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
2598
+ ]
2599
+ ]
2600
+ }
2601
+ ]
2602
+ },
2603
+ "DependsOn": [
2604
+ "IntegVSCodeServerSSMInstallerCustomResource9F9AFE68"
2605
+ ],
2606
+ "Metadata": {
2607
+ "cdk_nag": {
2608
+ "rules_to_suppress": [
2609
+ {
2610
+ "reason": "Managed policies acceptable for custom resource Lambda functions",
2611
+ "id": "AwsSolutions-IAM4"
2612
+ },
2613
+ {
2614
+ "reason": "Latest runtime not required for this function",
2615
+ "id": "AwsSolutions-L1"
2616
+ }
2617
+ ]
2618
+ }
2619
+ }
2620
+ },
2621
+ "IntegVSCodeServerIdleMonitorEnablerFunctionServiceRoleDefaultPolicyCDD8B46F": {
2622
+ "Type": "AWS::IAM::Policy",
2623
+ "Properties": {
2624
+ "PolicyDocument": {
2625
+ "Statement": [
2626
+ {
2627
+ "Action": [
2628
+ "events:DescribeRule",
2629
+ "events:DisableRule",
2630
+ "events:EnableRule"
2631
+ ],
2632
+ "Effect": "Allow",
2633
+ "Resource": {
2634
+ "Fn::Join": [
2635
+ "",
2636
+ [
2637
+ "arn:aws:events:",
2638
+ {
2639
+ "Ref": "AWS::Region"
2640
+ },
2641
+ ":",
2642
+ {
2643
+ "Ref": "AWS::AccountId"
2644
+ },
2645
+ ":rule/",
2646
+ {
2647
+ "Ref": "IntegVSCodeServerIdleMonitorScheduleRuleCF2E60F5"
2648
+ }
2649
+ ]
2650
+ ]
2651
+ }
2652
+ }
2653
+ ],
2654
+ "Version": "2012-10-17"
2655
+ },
2656
+ "PolicyName": "IntegVSCodeServerIdleMonitorEnablerFunctionServiceRoleDefaultPolicyCDD8B46F",
2657
+ "Roles": [
2658
+ {
2659
+ "Ref": "IntegVSCodeServerIdleMonitorEnablerFunctionServiceRole71DD1E5D"
2660
+ }
2661
+ ]
2662
+ },
2663
+ "DependsOn": [
2664
+ "IntegVSCodeServerSSMInstallerCustomResource9F9AFE68"
2665
+ ],
2666
+ "Metadata": {
2667
+ "cdk_nag": {
2668
+ "rules_to_suppress": [
2669
+ {
2670
+ "reason": "Managed policies acceptable for custom resource Lambda functions",
2671
+ "id": "AwsSolutions-IAM4"
2672
+ },
2673
+ {
2674
+ "reason": "Latest runtime not required for this function",
2675
+ "id": "AwsSolutions-L1"
2676
+ }
2677
+ ]
2678
+ }
2679
+ }
2680
+ },
2681
+ "IntegVSCodeServerIdleMonitorEnablerFunction32DA729B": {
2682
+ "Type": "AWS::Lambda::Function",
2683
+ "Properties": {
2684
+ "Code": {
2685
+ "S3Bucket": {
2686
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
2687
+ },
2688
+ "S3Key": "22c8a6c357b704e370bef317ae1b52c59f684aa7640422a3d1dfe813d1f77853.zip"
2689
+ },
2690
+ "Description": "src/idle-monitor-enabler/idle-monitor-enabler.lambda.ts",
2691
+ "Handler": "index.handler",
2692
+ "MemorySize": 128,
2693
+ "Role": {
2694
+ "Fn::GetAtt": [
2695
+ "IntegVSCodeServerIdleMonitorEnablerFunctionServiceRole71DD1E5D",
2696
+ "Arn"
2697
+ ]
2698
+ },
2699
+ "Runtime": "nodejs22.x",
2700
+ "Timeout": 30
2701
+ },
2702
+ "DependsOn": [
2703
+ "IntegVSCodeServerIdleMonitorEnablerFunctionServiceRoleDefaultPolicyCDD8B46F",
2704
+ "IntegVSCodeServerIdleMonitorEnablerFunctionServiceRole71DD1E5D",
2705
+ "IntegVSCodeServerSSMInstallerCustomResource9F9AFE68"
2706
+ ],
2707
+ "Metadata": {
2708
+ "cdk_nag": {
2709
+ "rules_to_suppress": [
2710
+ {
2711
+ "reason": "Managed policies acceptable for custom resource Lambda functions",
2712
+ "id": "AwsSolutions-IAM4"
2713
+ },
2714
+ {
2715
+ "reason": "Latest runtime not required for this function",
2716
+ "id": "AwsSolutions-L1"
2717
+ }
2718
+ ]
2719
+ }
2720
+ }
2721
+ },
2722
+ "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEventServiceRole941AC96C": {
2723
+ "Type": "AWS::IAM::Role",
2724
+ "Properties": {
2725
+ "AssumeRolePolicyDocument": {
2726
+ "Statement": [
2727
+ {
2728
+ "Action": "sts:AssumeRole",
2729
+ "Effect": "Allow",
2730
+ "Principal": {
2731
+ "Service": "lambda.amazonaws.com"
2732
+ }
2733
+ }
2734
+ ],
2735
+ "Version": "2012-10-17"
2736
+ },
2737
+ "ManagedPolicyArns": [
2738
+ {
2739
+ "Fn::Join": [
2740
+ "",
2741
+ [
2742
+ "arn:",
2743
+ {
2744
+ "Ref": "AWS::Partition"
2745
+ },
2746
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
2747
+ ]
2748
+ ]
2749
+ }
2750
+ ]
2751
+ },
2752
+ "DependsOn": [
2753
+ "IntegVSCodeServerSSMInstallerCustomResource9F9AFE68"
2754
+ ],
2755
+ "Metadata": {
2756
+ "cdk_nag": {
2757
+ "rules_to_suppress": [
2758
+ {
2759
+ "reason": "Provider framework uses managed policies",
2760
+ "id": "AwsSolutions-IAM4"
2761
+ },
2762
+ {
2763
+ "reason": "Provider framework runtime managed by CDK",
2764
+ "id": "AwsSolutions-L1"
2765
+ }
2766
+ ]
2767
+ }
2768
+ }
2769
+ },
2770
+ "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEventServiceRoleDefaultPolicy995CAD91": {
2771
+ "Type": "AWS::IAM::Policy",
2772
+ "Properties": {
2773
+ "PolicyDocument": {
2774
+ "Statement": [
2775
+ {
2776
+ "Action": "lambda:InvokeFunction",
2777
+ "Effect": "Allow",
2778
+ "Resource": [
2779
+ {
2780
+ "Fn::GetAtt": [
2781
+ "IntegVSCodeServerIdleMonitorEnablerFunction32DA729B",
2782
+ "Arn"
2783
+ ]
2784
+ },
2785
+ {
2786
+ "Fn::Join": [
2787
+ "",
2788
+ [
2789
+ {
2790
+ "Fn::GetAtt": [
2791
+ "IntegVSCodeServerIdleMonitorEnablerFunction32DA729B",
2792
+ "Arn"
2793
+ ]
2794
+ },
2795
+ ":*"
2796
+ ]
2797
+ ]
2798
+ }
2799
+ ]
2800
+ },
2801
+ {
2802
+ "Action": "lambda:GetFunction",
2803
+ "Effect": "Allow",
2804
+ "Resource": {
2805
+ "Fn::GetAtt": [
2806
+ "IntegVSCodeServerIdleMonitorEnablerFunction32DA729B",
2807
+ "Arn"
2808
+ ]
2809
+ }
2810
+ }
2811
+ ],
2812
+ "Version": "2012-10-17"
2813
+ },
2814
+ "PolicyName": "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEventServiceRoleDefaultPolicy995CAD91",
2815
+ "Roles": [
2816
+ {
2817
+ "Ref": "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEventServiceRole941AC96C"
2818
+ }
2819
+ ]
2820
+ },
2821
+ "DependsOn": [
2822
+ "IntegVSCodeServerSSMInstallerCustomResource9F9AFE68"
2823
+ ],
2824
+ "Metadata": {
2825
+ "cdk_nag": {
2826
+ "rules_to_suppress": [
2827
+ {
2828
+ "reason": "Provider framework uses managed policies",
2829
+ "id": "AwsSolutions-IAM4"
2830
+ },
2831
+ {
2832
+ "reason": "Provider framework runtime managed by CDK",
2833
+ "id": "AwsSolutions-L1"
2834
+ }
2835
+ ]
2836
+ }
2837
+ }
2838
+ },
2839
+ "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEvent3B68F506": {
2840
+ "Type": "AWS::Lambda::Function",
2841
+ "Properties": {
2842
+ "Code": {
2843
+ "S3Bucket": {
2844
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
2845
+ },
2846
+ "S3Key": "bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
2847
+ },
2848
+ "Description": "AWS CDK resource provider framework - onEvent (IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitorEnabler/Provider)",
2849
+ "Environment": {
2850
+ "Variables": {
2851
+ "USER_ON_EVENT_FUNCTION_ARN": {
2852
+ "Fn::GetAtt": [
2853
+ "IntegVSCodeServerIdleMonitorEnablerFunction32DA729B",
2854
+ "Arn"
2855
+ ]
2856
+ }
2857
+ }
2858
+ },
2859
+ "Handler": "framework.onEvent",
2860
+ "Role": {
2861
+ "Fn::GetAtt": [
2862
+ "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEventServiceRole941AC96C",
2863
+ "Arn"
2864
+ ]
2865
+ },
2866
+ "Runtime": {
2867
+ "Fn::FindInMap": [
2868
+ "LatestNodeRuntimeMap",
2869
+ {
2870
+ "Ref": "AWS::Region"
2871
+ },
2872
+ "value"
2873
+ ]
2874
+ },
2875
+ "Timeout": 900
2876
+ },
2877
+ "DependsOn": [
2878
+ "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEventServiceRoleDefaultPolicy995CAD91",
2879
+ "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEventServiceRole941AC96C",
2880
+ "IntegVSCodeServerSSMInstallerCustomResource9F9AFE68"
2881
+ ],
2882
+ "Metadata": {
2883
+ "cdk_nag": {
2884
+ "rules_to_suppress": [
2885
+ {
2886
+ "reason": "Provider framework uses managed policies",
2887
+ "id": "AwsSolutions-IAM4"
2888
+ },
2889
+ {
2890
+ "reason": "Provider framework runtime managed by CDK",
2891
+ "id": "AwsSolutions-L1"
2892
+ }
2893
+ ]
2894
+ }
2895
+ }
2896
+ },
2897
+ "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEventLogRetentionE879C0C0": {
2898
+ "Type": "Custom::LogRetention",
2899
+ "Properties": {
2900
+ "ServiceToken": {
2901
+ "Fn::GetAtt": [
2902
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
2903
+ "Arn"
2904
+ ]
2905
+ },
2906
+ "LogGroupName": {
2907
+ "Fn::Join": [
2908
+ "",
2909
+ [
2910
+ "/aws/lambda/",
2911
+ {
2912
+ "Ref": "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEvent3B68F506"
2913
+ }
2914
+ ]
2915
+ ]
2916
+ },
2917
+ "RetentionInDays": 1
2918
+ },
2919
+ "DependsOn": [
2920
+ "IntegVSCodeServerSSMInstallerCustomResource9F9AFE68"
2921
+ ],
2922
+ "Metadata": {
2923
+ "cdk_nag": {
2924
+ "rules_to_suppress": [
2925
+ {
2926
+ "reason": "Provider framework uses managed policies",
2927
+ "id": "AwsSolutions-IAM4"
2928
+ },
2929
+ {
2930
+ "reason": "Provider framework runtime managed by CDK",
2931
+ "id": "AwsSolutions-L1"
2932
+ }
2933
+ ]
2934
+ }
2935
+ }
2936
+ },
2937
+ "IntegVSCodeServerIdleMonitorEnablerF25B6C6F": {
2938
+ "Type": "AWS::CloudFormation::CustomResource",
2939
+ "Properties": {
2940
+ "ServiceToken": {
2941
+ "Fn::GetAtt": [
2942
+ "IntegVSCodeServerIdleMonitorEnablerProviderframeworkonEvent3B68F506",
2943
+ "Arn"
2944
+ ]
2945
+ },
2946
+ "RuleName": {
2947
+ "Ref": "IntegVSCodeServerIdleMonitorScheduleRuleCF2E60F5"
2948
+ }
2949
+ },
2950
+ "DependsOn": [
2951
+ "IntegVSCodeServerIdleMonitorScheduleRuleAllowEventRuleIntegTestStackStopOnIdleIntegVSCodeServerIdleMonitorFunction8C52CC5D407CFD6D",
2952
+ "IntegVSCodeServerIdleMonitorScheduleRuleCF2E60F5",
2953
+ "IntegVSCodeServerSSMInstallerCustomResource9F9AFE68"
2954
+ ],
2955
+ "UpdateReplacePolicy": "Delete",
2956
+ "DeletionPolicy": "Delete"
2957
+ },
2958
+ "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0": {
2959
+ "Type": "AWS::IAM::Role",
2960
+ "Properties": {
2961
+ "AssumeRolePolicyDocument": {
2962
+ "Version": "2012-10-17",
2963
+ "Statement": [
2964
+ {
2965
+ "Action": "sts:AssumeRole",
2966
+ "Effect": "Allow",
2967
+ "Principal": {
2968
+ "Service": "lambda.amazonaws.com"
2969
+ }
2970
+ }
2971
+ ]
2972
+ },
2973
+ "ManagedPolicyArns": [
2974
+ {
2975
+ "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
2976
+ }
2977
+ ],
2978
+ "Policies": [
2979
+ {
2980
+ "PolicyName": "Inline",
2981
+ "PolicyDocument": {
2982
+ "Version": "2012-10-17",
2422
2983
  "Statement": [
2423
2984
  {
2424
2985
  "Effect": "Allow",
@@ -2532,6 +3093,93 @@
2532
3093
  "IntegVSCodeServercfprefixlistIdGetPrefixListIdRole1302B3E1"
2533
3094
  ]
2534
3095
  },
3096
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": {
3097
+ "Type": "AWS::IAM::Role",
3098
+ "Properties": {
3099
+ "AssumeRolePolicyDocument": {
3100
+ "Statement": [
3101
+ {
3102
+ "Action": "sts:AssumeRole",
3103
+ "Effect": "Allow",
3104
+ "Principal": {
3105
+ "Service": "lambda.amazonaws.com"
3106
+ }
3107
+ }
3108
+ ],
3109
+ "Version": "2012-10-17"
3110
+ },
3111
+ "ManagedPolicyArns": [
3112
+ {
3113
+ "Fn::Join": [
3114
+ "",
3115
+ [
3116
+ "arn:",
3117
+ {
3118
+ "Ref": "AWS::Partition"
3119
+ },
3120
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
3121
+ ]
3122
+ ]
3123
+ }
3124
+ ]
3125
+ }
3126
+ },
3127
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": {
3128
+ "Type": "AWS::IAM::Policy",
3129
+ "Properties": {
3130
+ "PolicyDocument": {
3131
+ "Statement": [
3132
+ {
3133
+ "Action": [
3134
+ "logs:DeleteRetentionPolicy",
3135
+ "logs:PutRetentionPolicy"
3136
+ ],
3137
+ "Effect": "Allow",
3138
+ "Resource": "*"
3139
+ }
3140
+ ],
3141
+ "Version": "2012-10-17"
3142
+ },
3143
+ "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
3144
+ "Roles": [
3145
+ {
3146
+ "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB"
3147
+ }
3148
+ ]
3149
+ }
3150
+ },
3151
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": {
3152
+ "Type": "AWS::Lambda::Function",
3153
+ "Properties": {
3154
+ "Handler": "index.handler",
3155
+ "Runtime": {
3156
+ "Fn::FindInMap": [
3157
+ "LatestNodeRuntimeMap",
3158
+ {
3159
+ "Ref": "AWS::Region"
3160
+ },
3161
+ "value"
3162
+ ]
3163
+ },
3164
+ "Timeout": 900,
3165
+ "Code": {
3166
+ "S3Bucket": {
3167
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
3168
+ },
3169
+ "S3Key": "2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d.zip"
3170
+ },
3171
+ "Role": {
3172
+ "Fn::GetAtt": [
3173
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
3174
+ "Arn"
3175
+ ]
3176
+ }
3177
+ },
3178
+ "DependsOn": [
3179
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
3180
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB"
3181
+ ]
3182
+ },
2535
3183
  "idletesthandlerServiceRoleBB9B4624": {
2536
3184
  "Type": "AWS::IAM::Role",
2537
3185
  "Properties": {
@@ -2664,93 +3312,6 @@
2664
3312
  "RetentionInDays": 1
2665
3313
  }
2666
3314
  },
2667
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": {
2668
- "Type": "AWS::IAM::Role",
2669
- "Properties": {
2670
- "AssumeRolePolicyDocument": {
2671
- "Statement": [
2672
- {
2673
- "Action": "sts:AssumeRole",
2674
- "Effect": "Allow",
2675
- "Principal": {
2676
- "Service": "lambda.amazonaws.com"
2677
- }
2678
- }
2679
- ],
2680
- "Version": "2012-10-17"
2681
- },
2682
- "ManagedPolicyArns": [
2683
- {
2684
- "Fn::Join": [
2685
- "",
2686
- [
2687
- "arn:",
2688
- {
2689
- "Ref": "AWS::Partition"
2690
- },
2691
- ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
2692
- ]
2693
- ]
2694
- }
2695
- ]
2696
- }
2697
- },
2698
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": {
2699
- "Type": "AWS::IAM::Policy",
2700
- "Properties": {
2701
- "PolicyDocument": {
2702
- "Statement": [
2703
- {
2704
- "Action": [
2705
- "logs:DeleteRetentionPolicy",
2706
- "logs:PutRetentionPolicy"
2707
- ],
2708
- "Effect": "Allow",
2709
- "Resource": "*"
2710
- }
2711
- ],
2712
- "Version": "2012-10-17"
2713
- },
2714
- "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
2715
- "Roles": [
2716
- {
2717
- "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB"
2718
- }
2719
- ]
2720
- }
2721
- },
2722
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": {
2723
- "Type": "AWS::Lambda::Function",
2724
- "Properties": {
2725
- "Handler": "index.handler",
2726
- "Runtime": {
2727
- "Fn::FindInMap": [
2728
- "LatestNodeRuntimeMap",
2729
- {
2730
- "Ref": "AWS::Region"
2731
- },
2732
- "value"
2733
- ]
2734
- },
2735
- "Timeout": 900,
2736
- "Code": {
2737
- "S3Bucket": {
2738
- "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
2739
- },
2740
- "S3Key": "2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d.zip"
2741
- },
2742
- "Role": {
2743
- "Fn::GetAtt": [
2744
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
2745
- "Arn"
2746
- ]
2747
- }
2748
- },
2749
- "DependsOn": [
2750
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
2751
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB"
2752
- ]
2753
- },
2754
3315
  "loginhandlerServiceRole330B0B32": {
2755
3316
  "Type": "AWS::IAM::Role",
2756
3317
  "Properties": {
@@ -3037,9 +3598,9 @@
3037
3598
  }
3038
3599
  },
3039
3600
  "Parameters": {
3040
- "SsmParameterValueawsservicecanonicalubuntuserverjammystablecurrentarm64hvmebsgp2amiidC96584B6F00A464EAD1953AFF4B05118Parameter": {
3601
+ "SsmParameterValueawsservicecanonicalubuntuservernoblestablecurrentarm64hvmebsgp3amiidC96584B6F00A464EAD1953AFF4B05118Parameter": {
3041
3602
  "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>",
3042
- "Default": "/aws/service/canonical/ubuntu/server/jammy/stable/current/arm64/hvm/ebs-gp2/ami-id"
3603
+ "Default": "/aws/service/canonical/ubuntu/server/noble/stable/current/arm64/hvm/ebs-gp3/ami-id"
3043
3604
  },
3044
3605
  "BootstrapVersion": {
3045
3606
  "Type": "AWS::SSM::Parameter::Value<String>",