@mavogel/cdk-vscode-server 0.0.61 → 0.0.63

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 (99) hide show
  1. package/.jsii +117 -178
  2. package/API.md +96 -199
  3. package/CLAUDE.md +214 -57
  4. package/README.md +39 -1
  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/git-repo/main.ts +30 -0
  9. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +2 -2
  10. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +1 -1
  11. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +8 -8
  12. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +257 -94
  13. package/integ-tests/{integ.stop-on-idle.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.al2023.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  14. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.al2023.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  15. package/integ-tests/integ.al2023.ts.snapshot/integ.json +1 -1
  16. package/integ-tests/integ.al2023.ts.snapshot/manifest.json +19 -3
  17. package/integ-tests/integ.al2023.ts.snapshot/tree.json +1 -1
  18. package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.assets.json +2 -2
  19. package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.template.json +1 -1
  20. package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.assets.json +8 -8
  21. package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.template.json +270 -94
  22. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.custom-domain.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  23. package/integ-tests/{integ.al2023.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.custom-domain.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  24. package/integ-tests/integ.custom-domain.ts.snapshot/integ.json +1 -1
  25. package/integ-tests/integ.custom-domain.ts.snapshot/manifest.json +19 -3
  26. package/integ-tests/integ.custom-domain.ts.snapshot/tree.json +1 -1
  27. package/integ-tests/integ.stop-on-idle.ts +1 -4
  28. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.assets.json +2 -2
  29. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.template.json +4 -4
  30. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.assets.json +23 -9
  31. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.template.json +755 -194
  32. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.22c8a6c357b704e370bef317ae1b52c59f684aa7640422a3d1dfe813d1f77853.lambda/index.js +67 -0
  33. package/integ-tests/{integ.custom-domain.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.stop-on-idle.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  34. package/integ-tests/integ.stop-on-idle.ts.snapshot/manifest.json +353 -72
  35. package/integ-tests/integ.stop-on-idle.ts.snapshot/tree.json +1 -1
  36. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +2 -2
  37. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +1 -1
  38. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +8 -8
  39. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +270 -94
  40. package/integ-tests/{integ.al2023.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.ubuntu.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  41. package/integ-tests/{integ.custom-domain.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.ubuntu.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  42. package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +1 -1
  43. package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +19 -3
  44. package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +1 -1
  45. package/integ-tests/integ.ubuntu24.ts +69 -0
  46. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +33 -0
  47. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +337 -0
  48. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.assets.json +118 -0
  49. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.template.json +2725 -0
  50. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
  51. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
  52. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
  53. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
  54. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
  55. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
  56. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
  57. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
  58. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
  59. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
  60. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
  61. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
  62. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
  63. package/integ-tests/integ.ubuntu24.ts.snapshot/integ.json +23 -0
  64. package/integ-tests/integ.ubuntu24.ts.snapshot/manifest.json +1473 -0
  65. package/integ-tests/integ.ubuntu24.ts.snapshot/tree.json +1 -0
  66. package/lib/idle-monitor/idle-monitor-function.js +2 -2
  67. package/lib/idle-monitor/idle-monitor.js +5 -2
  68. package/lib/idle-monitor-enabler/idle-monitor-enabler-function.d.ts +13 -0
  69. package/lib/idle-monitor-enabler/idle-monitor-enabler-function.js +22 -0
  70. package/lib/idle-monitor-enabler/idle-monitor-enabler.d.ts +25 -0
  71. package/lib/idle-monitor-enabler/idle-monitor-enabler.js +76 -0
  72. package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.d.ts +9 -0
  73. package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.js +48 -0
  74. package/lib/index.d.ts +0 -1
  75. package/lib/index.js +1 -2
  76. package/lib/installer/installer-function.js +2 -2
  77. package/lib/installer/installer.d.ts +100 -0
  78. package/lib/installer/installer.js +658 -301
  79. package/lib/installer/installer.lambda.js +64 -30
  80. package/lib/secret-retriever/secret-retriever-function.js +2 -2
  81. package/lib/vscode-server.d.ts +40 -0
  82. package/lib/vscode-server.js +27 -4
  83. package/package.json +12 -12
  84. package/.claude/hooks/file_checker.sh +0 -178
  85. package/.qlty/.gitignore +0 -7
  86. package/.qlty/configs/.yamllint.yaml +0 -21
  87. package/.qlty/qlty.toml +0 -115
  88. package/assets/status-check/status-check.lambda/index.js +0 -123
  89. package/integ-tests/integ.al2023.ts.snapshot/cdk.out +0 -1
  90. package/integ-tests/integ.al2023.ts.snapshot/read.13497.1.lock +0 -1
  91. package/integ-tests/integ.custom-domain.ts.snapshot/read.13497.1.lock +0 -1
  92. package/integ-tests/integ.ubuntu.ts.snapshot/cdk.out +0 -1
  93. package/integ-tests/integ.ubuntu.ts.snapshot/read.13497.1.lock +0 -1
  94. package/lib/status-check/status-check-function.d.ts +0 -13
  95. package/lib/status-check/status-check-function.js +0 -22
  96. package/lib/status-check/status-check.d.ts +0 -36
  97. package/lib/status-check/status-check.js +0 -109
  98. package/lib/status-check/status-check.lambda.d.ts +0 -2
  99. package/lib/status-check/status-check.lambda.js +0 -104
@@ -71,30 +71,30 @@
71
71
  }
72
72
  }
73
73
  },
74
- "33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f": {
74
+ "2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df": {
75
75
  "displayName": "IntegVSCodeServer/InstallerOnEventHandler/Code",
76
76
  "source": {
77
- "path": "asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda",
77
+ "path": "asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda",
78
78
  "packaging": "zip"
79
79
  },
80
80
  "destinations": {
81
81
  "current_account-current_region": {
82
82
  "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
83
- "objectKey": "33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.zip",
83
+ "objectKey": "2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.zip",
84
84
  "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
85
85
  }
86
86
  }
87
87
  },
88
- "0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4": {
88
+ "efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9": {
89
89
  "displayName": "login-handler/Code",
90
90
  "source": {
91
- "path": "asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4",
91
+ "path": "asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9",
92
92
  "packaging": "zip"
93
93
  },
94
94
  "destinations": {
95
95
  "current_account-current_region": {
96
96
  "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
97
- "objectKey": "0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4.zip",
97
+ "objectKey": "efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9.zip",
98
98
  "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
99
99
  }
100
100
  }
@@ -113,7 +113,7 @@
113
113
  }
114
114
  }
115
115
  },
116
- "5a265e84c609e126bf964e62660b0e6648bd50fa188b1cdc2ccce0a0f81eeea0": {
116
+ "0d21ebe148c0168a894b38d8db4c34b6ac5b9a016612b7493c323c5d1dc23b7d": {
117
117
  "displayName": "IntegTestStackCustomDomain Template",
118
118
  "source": {
119
119
  "path": "IntegTestStackCustomDomain.template.json",
@@ -122,7 +122,7 @@
122
122
  "destinations": {
123
123
  "current_account-current_region": {
124
124
  "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
125
- "objectKey": "5a265e84c609e126bf964e62660b0e6648bd50fa188b1cdc2ccce0a0f81eeea0.json",
125
+ "objectKey": "0d21ebe148c0168a894b38d8db4c34b6ac5b9a016612b7493c323c5d1dc23b7d.json",
126
126
  "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
127
127
  }
128
128
  }
@@ -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": [
@@ -1704,20 +1704,29 @@
1704
1704
  },
1705
1705
  "NodeVersion": {
1706
1706
  "type": "String",
1707
- "default": "20",
1707
+ "default": "22",
1708
1708
  "allowedValues": [
1709
+ "24",
1709
1710
  "22",
1710
1711
  "20",
1711
1712
  "18"
1712
1713
  ]
1713
1714
  },
1714
- "DotNetVersion": {
1715
+ "RepoUrl": {
1715
1716
  "type": "String",
1716
- "default": "8.0",
1717
- "allowedValues": [
1718
- "8.0",
1719
- "7.0"
1720
- ]
1717
+ "default": ""
1718
+ },
1719
+ "AssetZipS3Path": {
1720
+ "type": "String",
1721
+ "default": ""
1722
+ },
1723
+ "BranchZipS3Path": {
1724
+ "type": "String",
1725
+ "default": ""
1726
+ },
1727
+ "FolderZipS3Path": {
1728
+ "type": "String",
1729
+ "default": ""
1721
1730
  }
1722
1731
  },
1723
1732
  "mainSteps": [
@@ -1749,6 +1758,7 @@
1749
1758
  "inputs": {
1750
1759
  "runCommand": [
1751
1760
  "#!/bin/bash",
1761
+ "dpkg --configure -a",
1752
1762
  "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q apt-utils",
1753
1763
  "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q needrestart unattended-upgrades",
1754
1764
  "sed -i 's/#$nrconf{kernelhints} = -1;/$nrconf{kernelhints} = 0;/' /etc/needrestart/needrestart.conf",
@@ -1765,7 +1775,8 @@
1765
1775
  "inputs": {
1766
1776
  "runCommand": [
1767
1777
  "#!/bin/bash",
1768
- "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"
1778
+ "dpkg --configure -a",
1779
+ "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"
1769
1780
  ]
1770
1781
  }
1771
1782
  },
@@ -1775,12 +1786,11 @@
1775
1786
  "inputs": {
1776
1787
  "runCommand": [
1777
1788
  "#!/bin/bash",
1778
- "echo 'Adding user: ${VSCodeUser}'",
1779
- "adduser --disabled-password --gecos '' participant",
1780
- "echo \"participant:{{ VSCodePassword }}\" | chpasswd",
1781
- "usermod -aG sudo participant",
1789
+ "dpkg --configure -a",
1790
+ "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",
1782
1791
  "tee /etc/sudoers.d/91-vscode-user <<EOF\nparticipant ALL=(ALL) NOPASSWD:ALL\nEOF",
1783
1792
  "mkdir -p /home/participant && chown -R participant:participant /home/participant",
1793
+ "mkdir -p /home/participant/.local/bin && chown -R participant:participant /home/participant",
1784
1794
  "echo \"User added. Checking configuration\"",
1785
1795
  "getent passwd participant"
1786
1796
  ]
@@ -1788,34 +1798,58 @@
1788
1798
  },
1789
1799
  {
1790
1800
  "action": "aws:runShellScript",
1791
- "name": "InstallNodeApt",
1801
+ "name": "UpdateProfile",
1792
1802
  "inputs": {
1793
1803
  "runCommand": [
1794
1804
  "#!/bin/bash",
1795
- "curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg",
1796
- "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",
1797
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q nodejs",
1798
- "npm install -g npm@latest",
1799
- "echo \"Node and npm installed. Checking configuration\"",
1800
- "node -v",
1801
- "npm -v"
1805
+ "echo LANG=en_US.utf-8 >> /etc/environment",
1806
+ "echo LC_ALL=en_US.UTF-8 >> /etc/environment",
1807
+ "echo 'PATH=$PATH:/home/participant/.local/bin' >> /home/participant/.bashrc",
1808
+ "echo 'export PATH' >> /home/participant/.bashrc",
1809
+ {
1810
+ "Fn::Join": [
1811
+ "",
1812
+ [
1813
+ "echo 'export AWS_REGION=",
1814
+ {
1815
+ "Ref": "AWS::Region"
1816
+ },
1817
+ "' >> /home/participant/.bashrc"
1818
+ ]
1819
+ ]
1820
+ },
1821
+ {
1822
+ "Fn::Join": [
1823
+ "",
1824
+ [
1825
+ "echo 'export AWS_ACCOUNTID=",
1826
+ {
1827
+ "Ref": "AWS::AccountId"
1828
+ },
1829
+ "' >> /home/participant/.bashrc"
1830
+ ]
1831
+ ]
1832
+ },
1833
+ "echo 'export NEXT_TELEMETRY_DISABLED=1' >> /home/participant/.bashrc",
1834
+ "echo \"export PS1='\\[\\033[01;32m\\]\\u:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '\" >> /home/participant/.bashrc",
1835
+ "chown -R participant:participant /home/participant"
1802
1836
  ]
1803
1837
  }
1804
1838
  },
1805
1839
  {
1806
1840
  "action": "aws:runShellScript",
1807
- "name": "InstallDockerApt",
1841
+ "name": "InstallAWSCLI",
1808
1842
  "inputs": {
1809
1843
  "runCommand": [
1810
1844
  "#!/bin/bash",
1811
- "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg",
1812
- "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",
1813
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q docker-ce docker-ce-cli containerd.io",
1814
- "systemctl restart code-server@participant.service",
1815
- "systemctl start docker.service",
1816
- "echo \"Docker installed. Checking configuration\"",
1817
- "docker --version",
1818
- "systemctl status docker.service"
1845
+ "mkdir -p /tmp",
1846
+ "curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip",
1847
+ "chown -R participant:participant /tmp/aws-cli.zip",
1848
+ "unzip -q -d /tmp /tmp/aws-cli.zip",
1849
+ "sudo /tmp/aws/install",
1850
+ "rm -rf /tmp/aws",
1851
+ "echo \"AWS CLI installed. Checking configuration\"",
1852
+ "aws --version"
1819
1853
  ]
1820
1854
  }
1821
1855
  },
@@ -1825,10 +1859,11 @@
1825
1859
  "inputs": {
1826
1860
  "runCommand": [
1827
1861
  "#!/bin/bash",
1862
+ "dpkg --configure -a",
1828
1863
  "add-apt-repository ppa:git-core/ppa",
1829
1864
  "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q git",
1830
1865
  "sudo -u participant git config --global user.email \"participant@example.com\"",
1831
- "sudo -u participant git config --global user.name \"Workshop participant\"",
1866
+ "sudo -u participant git config --global user.name \"Workshop Participant\"",
1832
1867
  "sudo -u participant git config --global init.defaultBranch \"main\"",
1833
1868
  "echo \"Git installed. Checking configuration\"",
1834
1869
  "git --version"
@@ -1837,33 +1872,41 @@
1837
1872
  },
1838
1873
  {
1839
1874
  "action": "aws:runShellScript",
1840
- "name": "InstallPythonApt",
1875
+ "name": "CloneRepo",
1841
1876
  "inputs": {
1842
1877
  "runCommand": [
1843
1878
  "#!/bin/bash",
1844
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q python3-pip python3-venv python3-boto3 python3-pytest",
1845
- "echo 'alias pytest=pytest-3' >> /home/participant/.bashrc",
1846
- "systemctl restart code-server@participant.service",
1847
- "systemctl start multipathd.service packagekit.service",
1848
- "systemctl restart unattended-upgrades.service",
1849
- "echo \"Python and Pip installed. Checking configuration\"",
1850
- "python3 --version",
1851
- "pip3 --version"
1879
+ "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"
1852
1880
  ]
1853
1881
  }
1854
1882
  },
1855
1883
  {
1856
1884
  "action": "aws:runShellScript",
1857
- "name": "InstallAWSCLI",
1885
+ "name": "DownloadAssets",
1858
1886
  "inputs": {
1859
1887
  "runCommand": [
1860
1888
  "#!/bin/bash",
1861
- "curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip",
1862
- "unzip -q -d /tmp /tmp/aws-cli.zip",
1863
- "sudo /tmp/aws/install",
1864
- "rm -rf /tmp/aws",
1865
- "echo \"AWS CLI installed. Checking configuration\"",
1866
- "aws --version"
1889
+ "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"
1890
+ ]
1891
+ }
1892
+ },
1893
+ {
1894
+ "action": "aws:runShellScript",
1895
+ "name": "DownloadFolders",
1896
+ "inputs": {
1897
+ "runCommand": [
1898
+ "#!/bin/bash",
1899
+ "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"
1900
+ ]
1901
+ }
1902
+ },
1903
+ {
1904
+ "action": "aws:runShellScript",
1905
+ "name": "DownloadBranches",
1906
+ "inputs": {
1907
+ "runCommand": [
1908
+ "#!/bin/bash",
1909
+ "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"
1867
1910
  ]
1868
1911
  }
1869
1912
  },
@@ -1874,23 +1917,22 @@
1874
1917
  "runCommand": [
1875
1918
  "#!/bin/bash",
1876
1919
  "export HOME=/home/participant",
1877
- "curl -fsSL https://code-server.dev/install.sh | bash -s -- 2>&1",
1920
+ "curl -fsSL https://code-server.dev/install.sh | sh -s -- --version 4.100.3",
1878
1921
  "systemctl enable --now code-server@participant 2>&1",
1879
- "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 vscode-server-test.mavogel.xyz;\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",
1922
+ "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 vscode-server-test.mavogel.xyz;\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",
1880
1923
  "mkdir -p /home/participant/.config/code-server",
1881
1924
  "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",
1882
1925
  "mkdir -p /home/participant/.local/share/code-server/User/",
1883
1926
  "touch /home/participant/.hushlogin",
1884
1927
  "mkdir -p /Workshop && chown -R participant:participant /Workshop",
1885
- "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",
1928
+ "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",
1886
1929
  "chown -R participant:participant /home/participant",
1887
1930
  "systemctl restart code-server@participant",
1888
1931
  "systemctl restart nginx",
1889
1932
  "sudo -u participant --login code-server --install-extension AmazonWebServices.aws-toolkit-vscode --force",
1890
1933
  "sudo -u participant --login code-server --install-extension AmazonWebServices.amazon-q-vscode --force",
1891
- "sudo -u participant --login code-server --install-extension synedra.auto-run-command --force",
1892
- "sudo -u participant --login code-server --install-extension vscjava.vscode-java-pack --force",
1893
1934
  "sudo -u participant --login code-server --install-extension ms-vscode.live-server --force",
1935
+ "sudo -u participant --login code-server --install-extension synedra.auto-run-command --force",
1894
1936
  "chown -R participant:participant /home/participant",
1895
1937
  "echo \"Nginx installed. Checking configuration\"",
1896
1938
  "nginx -t 2>&1",
@@ -1903,41 +1945,17 @@
1903
1945
  },
1904
1946
  {
1905
1947
  "action": "aws:runShellScript",
1906
- "name": "UpdateProfile",
1948
+ "name": "InstallNodeApt",
1907
1949
  "inputs": {
1908
1950
  "runCommand": [
1909
1951
  "#!/bin/bash",
1910
- "echo LANG=en_US.utf-8 >> /etc/environment",
1911
- "echo LC_ALL=en_US.UTF-8 >> /etc/environment",
1912
- "echo 'PATH=$PATH:/home/participant/.local/bin' >> /home/participant/.bashrc",
1913
- "echo 'export PATH' >> /home/participant/.bashrc",
1914
- {
1915
- "Fn::Join": [
1916
- "",
1917
- [
1918
- "echo 'export AWS_REGION=",
1919
- {
1920
- "Ref": "AWS::Region"
1921
- },
1922
- "' >> /home/participant/.bashrc"
1923
- ]
1924
- ]
1925
- },
1926
- {
1927
- "Fn::Join": [
1928
- "",
1929
- [
1930
- "echo 'export AWS_ACCOUNTID=",
1931
- {
1932
- "Ref": "AWS::AccountId"
1933
- },
1934
- "' >> /home/participant/.bashrc"
1935
- ]
1936
- ]
1937
- },
1938
- "echo 'export NEXT_TELEMETRY_DISABLED=1' >> /home/participant/.bashrc",
1939
- "echo \"export PS1='\\[\\033[01;32m\\]\\u:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '\" >> /home/participant/.bashrc",
1940
- "chown -R participant:participant /home/participant"
1952
+ "curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg",
1953
+ "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",
1954
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q nodejs",
1955
+ "npm install -g npm@latest",
1956
+ "echo \"Node and npm installed. Checking configuration\"",
1957
+ "node -v",
1958
+ "npm -v"
1941
1959
  ]
1942
1960
  }
1943
1961
  },
@@ -1952,6 +1970,133 @@
1952
1970
  "cdk --version"
1953
1971
  ]
1954
1972
  }
1973
+ },
1974
+ {
1975
+ "action": "aws:runShellScript",
1976
+ "name": "InstallQCLI",
1977
+ "inputs": {
1978
+ "runCommand": [
1979
+ "#!/bin/bash",
1980
+ "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",
1981
+ "chown -R participant:participant /tmp/q.zip",
1982
+ "unzip -q -d /tmp /tmp/q.zip",
1983
+ "chown -R participant:participant /tmp/q",
1984
+ "chmod +x /tmp/q/install.sh",
1985
+ "sudo -u participant /tmp/q/install.sh --no-confirm",
1986
+ "rm -rf /tmp/q",
1987
+ "q --version",
1988
+ "echo \"Amazon Q CLI installed\""
1989
+ ]
1990
+ }
1991
+ },
1992
+ {
1993
+ "action": "aws:runShellScript",
1994
+ "name": "Installuv",
1995
+ "inputs": {
1996
+ "runCommand": [
1997
+ "#!/bin/bash",
1998
+ "sudo -u participant --login curl -fsSL https://astral.sh/uv/install.sh -o /tmp/uv_install.sh",
1999
+ "sudo -u participant --login bash /tmp/uv_install.sh",
2000
+ "if uv generate-shell-completion bash &>/dev/null; then\n echo 'eval \"$(uv generate-shell-completion bash)\"' >> /home/participant/.bashrc\nfi",
2001
+ "if uvx generate-shell-completion bash &>/dev/null; then\n echo 'eval \"$(uvx generate-shell-completion bash)\"' >> /home/participant/.bashrc\nfi",
2002
+ "echo \"uv installed. Checking configuration\"",
2003
+ "sudo -u participant --login uv --version"
2004
+ ]
2005
+ }
2006
+ },
2007
+ {
2008
+ "action": "aws:runShellScript",
2009
+ "name": "InstallPythonApt",
2010
+ "inputs": {
2011
+ "runCommand": [
2012
+ "#!/bin/bash",
2013
+ "dpkg --configure -a",
2014
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q python3-pip python3-venv python3-boto3 python3-pytest",
2015
+ "echo 'alias pytest=pytest-3' >> /home/participant/.bashrc",
2016
+ "systemctl start multipathd.service packagekit.service",
2017
+ "systemctl restart unattended-upgrades.service",
2018
+ "systemctl restart networkd-dispatcher.service",
2019
+ "sudo -u participant --login code-server --install-extension ms-python.python --force",
2020
+ "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",
2021
+ "echo \"Python and Pip installed. Checking configuration\"",
2022
+ "python3 --version",
2023
+ "pip3 --version"
2024
+ ]
2025
+ }
2026
+ },
2027
+ {
2028
+ "action": "aws:runShellScript",
2029
+ "name": "InstallJavaApt",
2030
+ "inputs": {
2031
+ "runCommand": [
2032
+ "#!/bin/bash",
2033
+ "dpkg --configure -a",
2034
+ "curl -fsSL https://apt.corretto.aws/corretto.key | gpg --dearmor -o /usr/share/keyrings/corretto-keyring.gpg",
2035
+ "echo \"deb [signed-by=/usr/share/keyrings/corretto-keyring.gpg] https://apt.corretto.aws stable main\" > /etc/apt/sources.list.d/corretto.list",
2036
+ "DEBIAN_FRONTEND=noninteractive apt-get update",
2037
+ "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",
2038
+ "echo 'export JAVA_8_HOME=$(update-alternatives --list java | grep \"java-1.8.0-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
2039
+ "echo 'export JAVA_8_PATH=$(update-alternatives --list java | grep \"java-1.8.0-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
2040
+ "echo 'export JAVA_17_PATH=$(update-alternatives --list java | grep \"java-17-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
2041
+ "echo 'export JAVA_17_HOME=$(update-alternatives --list java | grep \"java-17-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
2042
+ "echo 'export JAVA_21_PATH=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
2043
+ "echo 'export JAVA_21_HOME=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
2044
+ "echo 'export JAVA_HOME=$(update-alternatives --list java | grep \"java-21-amazon-corretto\" | head -1)' >> /home/participant/.bashrc",
2045
+ "echo 'export PATH=$PATH:$JAVA_HOME/bin:/usr/share/maven/bin' >> /home/participant/.bashrc",
2046
+ "sudo -u participant --login code-server --install-extension vscjava.vscode-java-pack --force",
2047
+ "echo \"Java and Maven installed. Checking configuration\"",
2048
+ "java -version 2>&1",
2049
+ "mvn --version",
2050
+ "update-alternatives --list java"
2051
+ ]
2052
+ }
2053
+ },
2054
+ {
2055
+ "action": "aws:runShellScript",
2056
+ "name": "InstallDotnetApt",
2057
+ "inputs": {
2058
+ "runCommand": [
2059
+ "#!/bin/bash",
2060
+ "dpkg --configure -a",
2061
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q dotnet-sdk-8.0",
2062
+ "dotnet tool install -g Microsoft.Web.LibraryManager.Cli",
2063
+ "echo 'PATH=$PATH:/home/participant/.dotnet/tools' >> /home/participant/.bashrc",
2064
+ "chown -R participant:participant /home/participant",
2065
+ "echo \"Dotnet installed. Checking configuration\"",
2066
+ "dotnet --list-sdks"
2067
+ ]
2068
+ }
2069
+ },
2070
+ {
2071
+ "action": "aws:runShellScript",
2072
+ "name": "InstallDockerApt",
2073
+ "inputs": {
2074
+ "runCommand": [
2075
+ "#!/bin/bash",
2076
+ "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg",
2077
+ "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",
2078
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q docker-ce docker-ce-cli containerd.io",
2079
+ "usermod -aG docker participant",
2080
+ "systemctl restart code-server@participant.service",
2081
+ "systemctl start docker.service",
2082
+ "echo \"Docker installed. Checking configuration\"",
2083
+ "docker --version",
2084
+ "systemctl status docker.service"
2085
+ ]
2086
+ }
2087
+ },
2088
+ {
2089
+ "action": "aws:runShellScript",
2090
+ "name": "InstallGolangApt",
2091
+ "inputs": {
2092
+ "runCommand": [
2093
+ "#!/bin/bash",
2094
+ "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q golang",
2095
+ "echo 'PATH=$PATH:/home/participant/go/bin' >> /home/participant/.bashrc",
2096
+ "echo \"Golang installed. Checking configuration\"",
2097
+ "go version"
2098
+ ]
2099
+ }
1955
2100
  }
1956
2101
  ]
1957
2102
  },
@@ -2013,6 +2158,13 @@
2013
2158
  {
2014
2159
  "reason": "For this lambda the latest runtime is not needed",
2015
2160
  "id": "AwsSolutions-L1"
2161
+ },
2162
+ {
2163
+ "reason": "ssm:GetCommandInvocation and ssm:ListCommandInvocations do not support resource-level permissions and require wildcard resources",
2164
+ "id": "AwsSolutions-IAM5",
2165
+ "applies_to": [
2166
+ "Resource::*"
2167
+ ]
2016
2168
  }
2017
2169
  ]
2018
2170
  }
@@ -2024,11 +2176,7 @@
2024
2176
  "PolicyDocument": {
2025
2177
  "Statement": [
2026
2178
  {
2027
- "Action": [
2028
- "ssm:GetCommandInvocation",
2029
- "ssm:ListCommandInvocations",
2030
- "ssm:SendCommand"
2031
- ],
2179
+ "Action": "ssm:SendCommand",
2032
2180
  "Effect": "Allow",
2033
2181
  "Resource": [
2034
2182
  {
@@ -2095,6 +2243,14 @@
2095
2243
  ]
2096
2244
  }
2097
2245
  ]
2246
+ },
2247
+ {
2248
+ "Action": [
2249
+ "ssm:GetCommandInvocation",
2250
+ "ssm:ListCommandInvocations"
2251
+ ],
2252
+ "Effect": "Allow",
2253
+ "Resource": "*"
2098
2254
  }
2099
2255
  ],
2100
2256
  "Version": "2012-10-17"
@@ -2105,6 +2261,19 @@
2105
2261
  "Ref": "IntegVSCodeServerInstallerOnEventHandlerServiceRole59651FEF"
2106
2262
  }
2107
2263
  ]
2264
+ },
2265
+ "Metadata": {
2266
+ "cdk_nag": {
2267
+ "rules_to_suppress": [
2268
+ {
2269
+ "reason": "ssm:GetCommandInvocation and ssm:ListCommandInvocations do not support resource-level permissions and require wildcard resources",
2270
+ "id": "AwsSolutions-IAM5",
2271
+ "applies_to": [
2272
+ "Resource::*"
2273
+ ]
2274
+ }
2275
+ ]
2276
+ }
2108
2277
  }
2109
2278
  },
2110
2279
  "IntegVSCodeServerInstallerOnEventHandler6FF91542": {
@@ -2114,7 +2283,7 @@
2114
2283
  "S3Bucket": {
2115
2284
  "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
2116
2285
  },
2117
- "S3Key": "33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.zip"
2286
+ "S3Key": "2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.zip"
2118
2287
  },
2119
2288
  "Description": "src/installer/installer.lambda.ts",
2120
2289
  "Handler": "index.handler",
@@ -2125,8 +2294,8 @@
2125
2294
  "Arn"
2126
2295
  ]
2127
2296
  },
2128
- "Runtime": "nodejs20.x",
2129
- "Timeout": 300
2297
+ "Runtime": "nodejs22.x",
2298
+ "Timeout": 900
2130
2299
  },
2131
2300
  "DependsOn": [
2132
2301
  "IntegVSCodeServerInstallerOnEventHandlerServiceRoleDefaultPolicy1CAD86C2",
@@ -2142,6 +2311,13 @@
2142
2311
  {
2143
2312
  "reason": "For this lambda the latest runtime is not needed",
2144
2313
  "id": "AwsSolutions-L1"
2314
+ },
2315
+ {
2316
+ "reason": "ssm:GetCommandInvocation and ssm:ListCommandInvocations do not support resource-level permissions and require wildcard resources",
2317
+ "id": "AwsSolutions-IAM5",
2318
+ "applies_to": [
2319
+ "Resource::*"
2320
+ ]
2145
2321
  }
2146
2322
  ]
2147
2323
  }
@@ -2336,7 +2512,7 @@
2336
2512
  "Arn"
2337
2513
  ]
2338
2514
  },
2339
- "ServiceTimeout": 305,
2515
+ "ServiceTimeout": 905,
2340
2516
  "InstanceId": {
2341
2517
  "Ref": "IntegVSCodeServerserverinstance0A3D62D7"
2342
2518
  },
@@ -2528,7 +2704,7 @@
2528
2704
  "S3Bucket": {
2529
2705
  "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
2530
2706
  },
2531
- "S3Key": "0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4.zip"
2707
+ "S3Key": "efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9.zip"
2532
2708
  },
2533
2709
  "Handler": "index.handler",
2534
2710
  "Role": {