@mavogel/cdk-vscode-server 0.0.62 → 0.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +124 -178
- package/API.md +105 -200
- package/CLAUDE.md +288 -58
- package/README.md +40 -2
- package/assets/idle-monitor-enabler/idle-monitor-enabler.lambda/index.js +67 -0
- package/assets/installer/installer.lambda/index.js +67 -30
- package/awslint.json +5 -0
- package/examples/auto-stop/main.ts +1 -1
- package/examples/custom/main.ts +1 -1
- package/examples/git-repo/main.ts +30 -0
- package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +2 -2
- package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +1 -1
- package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +8 -8
- package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +257 -94
- package/integ-tests/{integ.stop-on-idle.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.al2023.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.al2023.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.al2023.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.al2023.ts.snapshot/manifest.json +19 -3
- package/integ-tests/integ.al2023.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.assets.json +2 -2
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.template.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.assets.json +8 -8
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.template.json +273 -97
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.custom-domain.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.al2023.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.custom-domain.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.custom-domain.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/manifest.json +25 -6
- package/integ-tests/integ.custom-domain.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.stop-on-idle.ts +1 -4
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.assets.json +2 -2
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.template.json +4 -4
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.assets.json +23 -9
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.template.json +758 -197
- package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.22c8a6c357b704e370bef317ae1b52c59f684aa7640422a3d1dfe813d1f77853.lambda/index.js +67 -0
- package/integ-tests/{integ.custom-domain.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.stop-on-idle.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/integ.stop-on-idle.ts.snapshot/manifest.json +363 -76
- package/integ-tests/integ.stop-on-idle.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +2 -2
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +8 -8
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +273 -97
- package/integ-tests/{integ.al2023.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.ubuntu.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.custom-domain.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.ubuntu.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +25 -6
- package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.ubuntu24.ts +69 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +33 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +337 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.assets.json +118 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.template.json +2725 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/integ.json +23 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/manifest.json +1473 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/tree.json +1 -0
- package/integ-tests/integ.ubuntu25.ts +69 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/IntegSetupVSCodeOnUbuntu25DefaultTestDeployAssert48DBCF35.assets.json +33 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/IntegSetupVSCodeOnUbuntu25DefaultTestDeployAssert48DBCF35.template.json +337 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/IntegTestStackUbuntu25.assets.json +118 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/IntegTestStackUbuntu25.template.json +2725 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/integ.json +23 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/manifest.json +1473 -0
- package/integ-tests/integ.ubuntu25.ts.snapshot/tree.json +1 -0
- package/lib/idle-monitor/idle-monitor-function.js +2 -2
- package/lib/idle-monitor/idle-monitor.js +5 -2
- package/lib/idle-monitor-enabler/idle-monitor-enabler-function.d.ts +13 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler-function.js +22 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.d.ts +25 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.js +76 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.d.ts +9 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.js +48 -0
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -2
- package/lib/installer/installer-function.js +2 -2
- package/lib/installer/installer.d.ts +105 -0
- package/lib/installer/installer.js +659 -301
- package/lib/installer/installer.lambda.js +64 -30
- package/lib/mappings.js +11 -3
- package/lib/secret-retriever/secret-retriever-function.js +2 -2
- package/lib/vscode-server.d.ts +45 -1
- package/lib/vscode-server.js +35 -5
- package/package.json +12 -12
- package/.claude/hooks/file_checker.sh +0 -178
- package/.qlty/.gitignore +0 -7
- package/.qlty/configs/.yamllint.yaml +0 -21
- package/.qlty/qlty.toml +0 -115
- package/assets/status-check/status-check.lambda/index.js +0 -123
- package/integ-tests/integ.al2023.ts.snapshot/cdk.out +0 -1
- package/integ-tests/integ.al2023.ts.snapshot/read.13497.1.lock +0 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/read.13497.1.lock +0 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/cdk.out +0 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/read.13497.1.lock +0 -1
- package/lib/status-check/status-check-function.d.ts +0 -13
- package/lib/status-check/status-check-function.js +0 -22
- package/lib/status-check/status-check.d.ts +0 -36
- package/lib/status-check/status-check.js +0 -109
- package/lib/status-check/status-check.lambda.d.ts +0 -2
- package/lib/status-check/status-check.lambda.js +0 -104
package/.jsii
CHANGED
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"node-html-parser": "^7.0.1"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@mavogel/mvc-projen": "^0.0.
|
|
14
|
+
"@mavogel/mvc-projen": "^0.0.12",
|
|
15
15
|
"aws-cdk-lib": "^2.190.0",
|
|
16
|
-
"cdk-nag": "^2.
|
|
16
|
+
"cdk-nag": "^2.37.55",
|
|
17
17
|
"constructs": "^10.0.5"
|
|
18
18
|
},
|
|
19
19
|
"dependencyClosure": {
|
|
@@ -4050,6 +4050,7 @@
|
|
|
4050
4050
|
"projen.gitlab": {},
|
|
4051
4051
|
"projen.java": {},
|
|
4052
4052
|
"projen.javascript": {},
|
|
4053
|
+
"projen.javascript.biome_config": {},
|
|
4053
4054
|
"projen.python": {},
|
|
4054
4055
|
"projen.release": {},
|
|
4055
4056
|
"projen.typescript": {},
|
|
@@ -4082,7 +4083,7 @@
|
|
|
4082
4083
|
"stability": "experimental"
|
|
4083
4084
|
},
|
|
4084
4085
|
"homepage": "https://github.com/MV-Consulting/cdk-vscode-server.git",
|
|
4085
|
-
"jsiiVersion": "5.
|
|
4086
|
+
"jsiiVersion": "5.9.11 (build e3d2007)",
|
|
4086
4087
|
"keywords": [
|
|
4087
4088
|
"aws",
|
|
4088
4089
|
"cdk",
|
|
@@ -4101,7 +4102,7 @@
|
|
|
4101
4102
|
},
|
|
4102
4103
|
"name": "@mavogel/cdk-vscode-server",
|
|
4103
4104
|
"readme": {
|
|
4104
|
-
"markdown": "\n[](https://github.com/MV-Consulting/cdk-vscode-server/actions/workflows/build.yml)\n[](https://eslint.org)\n[](https://github.com/MV-Consulting/cdk-vscode-server/releases)\n\n[](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)\n[](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)\n\n# cdk-vscode-server\n\nRunning your dev IDE vscode on AWS for development and workshop purposes.\n\n> [!Note]\n> This construct is designed for workshop purposes and does not fulfill all security and authentication best practices.\n\n**<br>This is an early version of the package. The API will change while I\nwe implement new features. Therefore make sure you use an exact version in your `package.json` before it reaches 1.0.0.**\n\n## Table of Contents\n\n- [Features](#features)\n- [Usage](#usage)\n - [Standard](#Standard)\n - [Custom Domain Configuration](#custom-domain-configuration)\n- [Solution Design](#solution-design)\n- [Inspiration](#inspiration)\n\n## Features\n\n- ⚡ **Quick Setup**: Spin up and configure your [vscode](https://code.visualstudio.com/) server in under 10 minutes in your AWS account\n- 📏 **Best Practice Setup**: Set up with [projen](https://projen.io/) and a [single configuration file](./.projenrc.ts) to keep your changes centralized.\n- 🤹♂️ **Pre-installed packages**: Besides the [vscode](https://code.visualstudio.com/) server, other tools and software packages such as `git`, `docker`, `awscli` `nodejs` and `python` are pre-installed on the EC2 instance.\n- 🌐 **Custom Domain Support**: Use your own domain name with automatic ACM certificate creation and Route53 DNS configuration, or bring your existing certificate.\n- 💰 **Auto-Stop**: Automatically stop EC2 instances after inactivity with Elastic IP retention - save up to 75% on costs for development environments\n- 🏗️ **Extensibility**: Pass in properties to the construct, which start with `additional*`. They allow you to extend the configuration to your needs. There are more to come...\n\n## Usage\nActually we supported 2 modes:\n\n### Standard\nThe following steps get you started:\n\n1. Create a new `awscdk-app` via\n```bash\nnpx projen new awscdk-app-ts --package-manager=npm\n```\n3. Add `@mavogel/cdk-vscode-server` as a dependency to your project in the `.projenrc.ts` file\n4. Run `npx projen` to install it\n5. Add the following to the `src/main.ts` file:\n```ts\nimport { App, Stack, StackProps } from 'aws-cdk-lib';\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\nimport { Construct } from 'constructs';\nimport {\n LinuxArchitectureType,\n LinuxFlavorType,\n VSCodeServer\n} from '@mavogel/cdk-vscode-server';\n\nexport class MyStack extends Stack {\n constructor(scope: Construct, id: string, props: StackProps = {}) {\n super(scope, id, props);\n\n new VSCodeServer(this, 'vscode', {\n // for example (or simply use the defaults by not setting the properties)\n instanceVolumeSize: 8,\n instanceClass: ec2.InstanceClass.M7G,\n instanceSize: ec2.InstanceSize.LARGE,\n instanceOperatingSystem: LinuxFlavorType.UBUNTU_22,\n instanceCpuArchitecture: LinuxArchitectureType.ARM,\n\n // 👇🏽 or if you want to give the InstanceRole more permissions\n additionalInstanceRolePolicies: [\n new iam.PolicyStatement({\n effect: iam.Effect.ALLOW,\n actions: [\n 'codebuild:*',\n ],\n resources: [\n `arn:aws:codebuild:*:${Stack.of(this).account}:*/*`,\n ],\n }),\n ]\n\n // and more... 💡\n });\n }\n}\n\nconst env = {\n account: '123456789912',\n region: 'eu-central-1',\n};\n\nconst app = new App();\nnew MyStack(app, 'vscode-server', { env });\napp.synth();\n```\n\nand deploy it\n```bash\nnpx projen build\nnpx projen deploy\n```\n\nwith the output\n```console\n✨ Deployment time: 509.87s\n\nOutputs:\ndev.vscodedomainName6729AA39 = https://d1foo65bar4baz.cloudfront.net/?folder=/Workshop\ndev.vscodepassword64FBCA12 = foobarbaz\n```\n\nSee the [examples](./examples) folder for more inspiration.\n\n### Custom Domain Configuration\n\nYou can configure your VS Code Server with a custom domain name instead of using the default CloudFront domain. The construct supports three different configuration options:\n\n#### Option 1: Auto-create Certificate with DNS Validation\n```ts\nnew VSCodeServer(this, 'vscode', {\n domainName: 'vscode.example.com',\n hostedZoneId: 'Z123EXAMPLE456', // optional - will auto-discover if not provided\n autoCreateCertificate: true,\n});\n```\n\nThis will:\n- Create an ACM certificate in us-east-1 (required for CloudFront)\n- Validate the certificate using DNS validation\n- Create a Route53 A record pointing to the CloudFront distribution\n- Configure the CloudFront distribution with the custom domain\n\n#### Option 2: Use Existing Certificate\n```ts\nnew VSCodeServer(this, 'vscode', {\n domainName: 'vscode.example.com',\n hostedZoneId: 'Z123EXAMPLE456',\n certificateArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',\n});\n```\n\n**Requirements:**\n- Certificate must be in us-east-1 region\n- Certificate must be validated and ready to use\n- Certificate must include the domain name\n\n#### Option 3: Default (No Custom Domain)\n```ts\nnew VSCodeServer(this, 'vscode', {\n // No domain configuration - uses CloudFront default domain\n});\n```\n\nFor complete examples, see [examples/custom-domain/main.ts](./examples/custom-domain/main.ts).\n\n6. Then open the domain name in your favorite browser and you'd see the following login screen:\n\n\n7. After entering the password, you are logged into VSCode and can start coding :tada:\n\n\n\n> [!Important]\n> There are issues with copy pasting into the VSCode terminal within the Firefox browser (2025-01-12)\n\n### Auto-Stop Configuration\n\nSave up to 75% on costs by automatically stopping EC2 instances when idle:\n\n```ts\nnew VSCodeServer(this, 'vscode', {\n enableAutoStop: true, // Enable auto-stop feature\n idleTimeoutMinutes: 30, // Stop after 30 minutes of no activity (default)\n idleCheckIntervalMinutes: 5, // Check for idle activity every 5 minutes (default)\n});\n```\n\n**How it works:**\n1. **Idle Detection**: Monitors CloudFront request metrics at configured intervals (default: every 5 minutes)\n2. **Auto-Stop**: Stops the EC2 instance after the configured idle timeout when no requests are detected\n3. **Static IP**: Allocates an Elastic IP to maintain a consistent public IP address across stop/start cycles\n4. **Manual Resume**: Users can manually start the instance via AWS Console or CLI when needed\n\n**Cost Savings Example:**\n- **Without auto-stop**: m7g.xlarge running 24/7 = ~$120/month\n- **With auto-stop** (8 hours/day, 5 days/week): ~$30/month\n- **Savings**: ~$90/month (75% reduction)\n\n**Additional costs:**\n- Elastic IP (allocated): ~$3.65/month\n- Lambda function (IdleMonitor): ~$0.10/month\n- EventBridge rule: Negligible\n- **Net savings**: ~$86/month per instance\n\n**Architecture Components:**\n- Elastic IP for consistent public addressing\n- EventBridge rule triggering idle monitoring at configured intervals\n- IdleMonitor Lambda function checking CloudWatch metrics for request activity\n- CloudWatch metrics from CloudFront distribution\n\n**Integration Testing:**\n\nThe stop-on-idle functionality includes comprehensive integration tests (`integ-tests/integ.stop-on-idle.ts`) that verify the complete workflow:\n\n1. **Phase 1 - Verify Auto-Stop**: Waits for the instance to automatically stop after the configured idle timeout\n2. **Phase 2 - Disable IdleMonitor**: Disables the EventBridge rule to prevent the instance from being stopped again during testing\n3. **Phase 3 - Start Instance**: Starts the stopped instance and waits for it to reach the running state\n4. **Phase 4 - Verify Login**: Confirms that VS Code Server is accessible through CloudFront after the instance has been restarted\n\nThis 4-phase test ensures that:\n- Idle detection works correctly based on CloudWatch metrics\n- Instance stops automatically when no activity is detected\n- Instance can be successfully restarted after being stopped\n- VS Code Server remains accessible after stop/start cycles\n- Elastic IP maintains connectivity across state changes\n\nRun integration tests with:\n```bash\nnpm run integ-test\n```\n\n## Solution Design\n\n<details>\n <summary>... if you're curious about click here for the details</summary>\n\n\n\n</details>\n\n## Inspiration\nThis project was created based on the following inspiration\n\n- [vscode-on-ec2-for-prototyping](https://github.com/aws-samples/vscode-on-ec2-for-prototyping): as baseline, which unfortunately was outdated\n- [aws-terraform-dev-container](https://github.com/awslabs/aws-terraform-dev-container): as baseline for terraform, but unfortunately also outdated\n- [java-on-aws-workshop-ide-only.yaml](https://github.com/aws-samples/java-on-aws/blob/main/labs/unicorn-store/infrastructure/cfn/java-on-aws-workshop-ide-only.yaml): an already synthesized cloudformation stack, which used mostly python as the custom resources\n- [fleet-workshop-team-stack-self.json](https://static.us-east-1.prod.workshops.aws/public/cc4aa67e-5b7a-4df1-abf7-c42502899a25/assets/fleet-workshop-team-stack-self.json): also an already synthesized cloudformation stack, which did much more as I currently implemented here.\n- [eks-workshop-vscode-cfn.yaml](https://github.com/aws-samples/eks-workshop-v2/blob/main/lab/cfn/eks-workshop-vscode-cfn.yaml): another great baseline\n\n\n## 🚀 Unlock the Full Potential of Your AWS Cloud Infrastructure\n\nHi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. With **MV Consulting**, I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.\n\n---\n\n### 🌟 Why Work With Me?\n\n✔️ **Tailored AWS Solutions:** Every business is unique, so I design custom solutions that fit your goals and challenges.\n✔️ **Well-Architected Designs:** From scalability to security, my solutions align with AWS Well-Architected Framework.\n✔️ **Cloud-Native Focus:** I specialize in modern, cloud-native systems that embrace the full potential of AWS.\n✔️ **Business-Driven Tech:** Technology should serve your business, not the other way around.\n\n---\n\n### 🛠 What I Bring to the Table\n\n🔑 **12x AWS Certifications**\nI’m **AWS Certified Solutions Architect and DevOps – Professional** and hold numerous additional certifications, so you can trust I’ll bring industry best practices to your projects. Feel free to explose by [badges](https://www.credly.com/users/manuel-vogel)\n\n⚙️ **Infrastructure as Code (IaC)**\nWith deep expertise in **AWS CDK** and **Terraform**, I ensure your infrastructure is automated, maintainable, and scalable.\n\n📦 **DevOps Expertise**\nFrom CI/CD pipelines with **GitHub Actions** and **GitLab CI** to container orchestration **Kubernetes** and others, I deliver workflows that are smooth and efficient.\n\n🌐 **Hands-On Experience**\nWith over **7 years of AWS experience** and a decade in the tech world, I’ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)\n\n---\n\n### 💼 Let’s Build Something Great Together\n\nI know that choosing the right partner is critical to your success. When you work with me, you’re not just contracting an engineer – you’re gaining a trusted advisor and hands-on expert who cares about your business as much as you do.\n\n✔️ **Direct Collaboration**: No middlemen or red tape – you work with me directly.\n✔️ **Transparent Process**: Expect open communication, clear timelines, and visible results.\n✔️ **Real Value**: My solutions focus on delivering measurable impact for your business.\n\n\n<a href=\"https://tinyurl.com/mvc-15min\"><img alt=\"Schedule your call\" src=\"https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge\"/></a>\n\n---\n\n## 🙌 Acknowledgements\n\nBig shoutout to the amazing team behind [Projen](https://github.com/projen/projen)!\nTheir groundbreaking work simplifies cloud infrastructure projects and inspires us every day. 💡\n\n## Author\n\n[Manuel Vogel](https://manuel-vogel.de/about/)\n\n[](https://www.linkedin.com/in/manuel-vogel)\n[](https://github.com/mavogel)"
|
|
4105
|
+
"markdown": "\n[](https://github.com/MV-Consulting/cdk-vscode-server/actions/workflows/build.yml)\n[](https://eslint.org)\n[](https://github.com/MV-Consulting/cdk-vscode-server/releases)\n\n[](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)\n[](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)\n\n# cdk-vscode-server\n\nRunning your dev IDE vscode on AWS for development and workshop purposes.\n\n> [!Note]\n> This construct is designed for workshop purposes and does not fulfill all security and authentication best practices.\n\n**<br>This is an early version of the package. The API will change while I\nwe implement new features. Therefore make sure you use an exact version in your `package.json` before it reaches 1.0.0.**\n\n## Table of Contents\n\n- [Features](#features)\n- [Usage](#usage)\n - [Standard](#Standard)\n - [Pre-populate with Git Repository](#pre-populate-with-git-repository)\n - [Custom Domain Configuration](#custom-domain-configuration)\n - [Auto-Stop Configuration](#auto-stop-configuration)\n- [Solution Design](#solution-design)\n- [Inspiration](#inspiration)\n\n## Features\n\n- ⚡ **Quick Setup**: Spin up and configure your [vscode](https://code.visualstudio.com/) server in under 10 minutes in your AWS account\n- 📏 **Best Practice Setup**: Set up with [projen](https://projen.io/) and a [single configuration file](./.projenrc.ts) to keep your changes centralized.\n- 🤹♂️ **Pre-installed packages**: Besides the [vscode](https://code.visualstudio.com/) server, other tools and software packages such as `git`, `docker`, `awscli` `nodejs` and `python` are pre-installed on the EC2 instance.\n- 🌐 **Custom Domain Support**: Use your own domain name with automatic ACM certificate creation and Route53 DNS configuration, or bring your existing certificate.\n- 💰 **Auto-Stop**: Automatically stop EC2 instances after inactivity with Elastic IP retention - save up to 75% on costs for development environments.\n- 🏗️ **Extensibility**: Pass in properties to the construct, which start with `additional*`. They allow you to extend the configuration to your needs. There are more to come...\n\n## Usage\nActually we supported 2 modes:\n\n### Standard\nThe following steps get you started:\n\n1. Create a new `awscdk-app` via\n```bash\nnpx projen new awscdk-app-ts --package-manager=npm\n```\n3. Add `@mavogel/cdk-vscode-server` as a dependency to your project in the `.projenrc.ts` file\n4. Run `npx projen` to install it\n5. Add the following to the `src/main.ts` file:\n```ts\nimport { App, Stack, StackProps } from 'aws-cdk-lib';\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\nimport { Construct } from 'constructs';\nimport {\n LinuxArchitectureType,\n LinuxFlavorType,\n VSCodeServer\n} from '@mavogel/cdk-vscode-server';\n\nexport class MyStack extends Stack {\n constructor(scope: Construct, id: string, props: StackProps = {}) {\n super(scope, id, props);\n\n new VSCodeServer(this, 'vscode', {\n // for example (or simply use the defaults by not setting the properties)\n instanceVolumeSize: 8,\n instanceClass: ec2.InstanceClass.M7G,\n instanceSize: ec2.InstanceSize.LARGE,\n instanceOperatingSystem: LinuxFlavorType.UBUNTU_24,\n instanceCpuArchitecture: LinuxArchitectureType.ARM,\n\n // 👇🏽 or if you want to give the InstanceRole more permissions\n additionalInstanceRolePolicies: [\n new iam.PolicyStatement({\n effect: iam.Effect.ALLOW,\n actions: [\n 'codebuild:*',\n ],\n resources: [\n `arn:aws:codebuild:*:${Stack.of(this).account}:*/*`,\n ],\n }),\n ]\n\n // and more... 💡\n });\n }\n}\n\nconst env = {\n account: '123456789912',\n region: 'eu-central-1',\n};\n\nconst app = new App();\nnew MyStack(app, 'vscode-server', { env });\napp.synth();\n```\n\nand deploy it\n```bash\nnpx projen build\nnpx projen deploy\n```\n\nwith the output\n```console\n✨ Deployment time: 509.87s\n\nOutputs:\ndev.vscodedomainName6729AA39 = https://d1foo65bar4baz.cloudfront.net/?folder=/Workshop\ndev.vscodepassword64FBCA12 = foobarbaz\n```\n\nSee the [examples](./examples) folder for more inspiration.\n\n### Pre-populate with Git Repository\n\nClone a git repository into the VS Code Server's home folder during instance setup - perfect for workshops or development environments with starter code:\n\n```ts\nnew VSCodeServer(this, 'vscode', {\n // Clone a git repository into the home folder\n repoUrl: 'https://github.com/aws-samples/my-workshop-repo.git',\n\n // Optional: customize the home folder path (default: /Workshop)\n homeFolder: '/MyWorkshop',\n\n // Optional: specify VS Code user (default: vscode-user)\n vscodeUser: 'workshop-user',\n});\n```\n\n**What happens:**\n1. During instance setup, the specified git repository is cloned into the user's home folder\n2. VS Code Server opens with the repository already loaded and ready to use\n3. Participants can start coding immediately without manual git clone steps\n\n**Use cases:**\n- Workshop environments with pre-configured starter code\n- Development environments with boilerplate projects\n- Training sessions with example applications\n- Code review sessions with pre-loaded repositories\n\n**Repository requirements:**\n- Must be publicly accessible (no authentication required)\n- HTTPS URLs only (SSH git URLs are not supported)\n- Repository will be cloned using `git clone` during instance initialization\n\nFor complete examples, see [examples/](./examples).\n\n### Custom Domain Configuration\n\nYou can configure your VS Code Server with a custom domain name instead of using the default CloudFront domain. The construct supports three different configuration options:\n\n#### Option 1: Auto-create Certificate with DNS Validation\n```ts\nnew VSCodeServer(this, 'vscode', {\n domainName: 'vscode.example.com',\n hostedZoneId: 'Z123EXAMPLE456', // optional - will auto-discover if not provided\n autoCreateCertificate: true,\n});\n```\n\nThis will:\n- Create an ACM certificate in us-east-1 (required for CloudFront)\n- Validate the certificate using DNS validation\n- Create a Route53 A record pointing to the CloudFront distribution\n- Configure the CloudFront distribution with the custom domain\n\n#### Option 2: Use Existing Certificate\n```ts\nnew VSCodeServer(this, 'vscode', {\n domainName: 'vscode.example.com',\n hostedZoneId: 'Z123EXAMPLE456',\n certificateArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',\n});\n```\n\n**Requirements:**\n- Certificate must be in us-east-1 region\n- Certificate must be validated and ready to use\n- Certificate must include the domain name\n\n#### Option 3: Default (No Custom Domain)\n```ts\nnew VSCodeServer(this, 'vscode', {\n // No domain configuration - uses CloudFront default domain\n});\n```\n\nFor complete examples, see [examples/custom-domain/main.ts](./examples/custom-domain/main.ts).\n\n6. Then open the domain name in your favorite browser and you'd see the following login screen:\n\n\n7. After entering the password, you are logged into VSCode and can start coding :tada:\n\n\n\n> [!Important]\n> There are issues with copy pasting into the VSCode terminal within the Firefox browser (2025-01-12)\n\n### Auto-Stop Configuration\n\nSave up to 75% on costs by automatically stopping EC2 instances when idle:\n\n```ts\nnew VSCodeServer(this, 'vscode', {\n enableAutoStop: true, // Enable auto-stop feature\n idleTimeoutMinutes: 30, // Stop after 30 minutes of no activity (default)\n idleCheckIntervalMinutes: 5, // Check for idle activity every 5 minutes (default)\n});\n```\n\n**How it works:**\n1. **Idle Detection**: Monitors CloudFront request metrics at configured intervals (default: every 5 minutes)\n2. **Auto-Stop**: Stops the EC2 instance after the configured idle timeout when no requests are detected\n3. **Static IP**: Allocates an Elastic IP to maintain a consistent public IP address across stop/start cycles\n4. **Manual Resume**: Users can manually start the instance via AWS Console or CLI when needed\n\n**Cost Savings Example:**\n- **Without auto-stop**: m7g.xlarge running 24/7 = ~$120/month\n- **With auto-stop** (8 hours/day, 5 days/week): ~$30/month\n- **Savings**: ~$90/month (75% reduction)\n\n**Additional costs:**\n- Elastic IP (allocated): ~$3.65/month\n- Lambda function (IdleMonitor): ~$0.10/month\n- EventBridge rule: Negligible\n- **Net savings**: ~$86/month per instance\n\n**Architecture Components:**\n- Elastic IP for consistent public addressing\n- EventBridge rule triggering idle monitoring at configured intervals\n- IdleMonitor Lambda function checking CloudWatch metrics for request activity\n- IdleMonitorEnabler custom resource ensuring monitoring only starts after installation completes\n- CloudWatch metrics from CloudFront distribution\n\n**Integration Testing:**\n\nThe stop-on-idle functionality includes comprehensive integration tests (`integ-tests/integ.stop-on-idle.ts`) that verify the complete workflow:\n\n1. **Phase 1 - Verify Auto-Stop**: Waits for the instance to automatically stop after the configured idle timeout\n2. **Phase 2 - Disable IdleMonitor**: Disables the EventBridge rule to prevent the instance from being stopped again during testing\n3. **Phase 3 - Start Instance**: Starts the stopped instance and waits for it to reach the running state\n4. **Phase 4 - Verify Login**: Confirms that VS Code Server is accessible through CloudFront after the instance has been restarted\n\nThis 4-phase test ensures that:\n- Idle detection works correctly based on CloudWatch metrics\n- Instance stops automatically when no activity is detected\n- Instance can be successfully restarted after being stopped\n- VS Code Server remains accessible after stop/start cycles\n- Elastic IP maintains connectivity across state changes\n\nRun integration tests with:\n```bash\nnpm run integ-test\n```\n\n## Solution Design\n\n<details>\n <summary>... if you're curious about click here for the details</summary>\n\n\n\n</details>\n\n## Inspiration\nThis project was created based on the following inspiration\n\n- [vscode-on-ec2-for-prototyping](https://github.com/aws-samples/vscode-on-ec2-for-prototyping): as baseline, which unfortunately was outdated\n- [aws-terraform-dev-container](https://github.com/awslabs/aws-terraform-dev-container): as baseline for terraform, but unfortunately also outdated\n- [java-on-aws-workshop-ide-only.yaml](https://github.com/aws-samples/java-on-aws/blob/main/labs/unicorn-store/infrastructure/cfn/java-on-aws-workshop-ide-only.yaml): an already synthesized cloudformation stack, which used mostly python as the custom resources\n- [fleet-workshop-team-stack-self.json](https://static.us-east-1.prod.workshops.aws/public/cc4aa67e-5b7a-4df1-abf7-c42502899a25/assets/fleet-workshop-team-stack-self.json): also an already synthesized cloudformation stack, which did much more as I currently implemented here.\n- [eks-workshop-vscode-cfn.yaml](https://github.com/aws-samples/eks-workshop-v2/blob/main/lab/cfn/eks-workshop-vscode-cfn.yaml): another great baseline\n\n\n## 🚀 Unlock the Full Potential of Your AWS Cloud Infrastructure\n\nHi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. With **MV Consulting**, I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.\n\n---\n\n### 🌟 Why Work With Me?\n\n✔️ **Tailored AWS Solutions:** Every business is unique, so I design custom solutions that fit your goals and challenges.\n✔️ **Well-Architected Designs:** From scalability to security, my solutions align with AWS Well-Architected Framework.\n✔️ **Cloud-Native Focus:** I specialize in modern, cloud-native systems that embrace the full potential of AWS.\n✔️ **Business-Driven Tech:** Technology should serve your business, not the other way around.\n\n---\n\n### 🛠 What I Bring to the Table\n\n🔑 **12x AWS Certifications**\nI’m **AWS Certified Solutions Architect and DevOps – Professional** and hold numerous additional certifications, so you can trust I’ll bring industry best practices to your projects. Feel free to explose by [badges](https://www.credly.com/users/manuel-vogel)\n\n⚙️ **Infrastructure as Code (IaC)**\nWith deep expertise in **AWS CDK** and **Terraform**, I ensure your infrastructure is automated, maintainable, and scalable.\n\n📦 **DevOps Expertise**\nFrom CI/CD pipelines with **GitHub Actions** and **GitLab CI** to container orchestration **Kubernetes** and others, I deliver workflows that are smooth and efficient.\n\n🌐 **Hands-On Experience**\nWith over **7 years of AWS experience** and a decade in the tech world, I’ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)\n\n---\n\n### 💼 Let’s Build Something Great Together\n\nI know that choosing the right partner is critical to your success. When you work with me, you’re not just contracting an engineer – you’re gaining a trusted advisor and hands-on expert who cares about your business as much as you do.\n\n✔️ **Direct Collaboration**: No middlemen or red tape – you work with me directly.\n✔️ **Transparent Process**: Expect open communication, clear timelines, and visible results.\n✔️ **Real Value**: My solutions focus on delivering measurable impact for your business.\n\n\n<a href=\"https://tinyurl.com/mvc-15min\"><img alt=\"Schedule your call\" src=\"https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge\"/></a>\n\n---\n\n## 🙌 Acknowledgements\n\nBig shoutout to the amazing team behind [Projen](https://github.com/projen/projen)!\nTheir groundbreaking work simplifies cloud infrastructure projects and inspires us every day. 💡\n\n## Author\n\n[Manuel Vogel](https://manuel-vogel.de/about/)\n\n[](https://www.linkedin.com/in/manuel-vogel)\n[](https://github.com/mavogel)"
|
|
4105
4106
|
},
|
|
4106
4107
|
"repository": {
|
|
4107
4108
|
"type": "git",
|
|
@@ -4308,7 +4309,7 @@
|
|
|
4308
4309
|
"kind": "enum",
|
|
4309
4310
|
"locationInModule": {
|
|
4310
4311
|
"filename": "src/vscode-server.ts",
|
|
4311
|
-
"line":
|
|
4312
|
+
"line": 269
|
|
4312
4313
|
},
|
|
4313
4314
|
"members": [
|
|
4314
4315
|
{
|
|
@@ -4339,7 +4340,7 @@
|
|
|
4339
4340
|
"kind": "enum",
|
|
4340
4341
|
"locationInModule": {
|
|
4341
4342
|
"filename": "src/vscode-server.ts",
|
|
4342
|
-
"line":
|
|
4343
|
+
"line": 244
|
|
4343
4344
|
},
|
|
4344
4345
|
"members": [
|
|
4345
4346
|
{
|
|
@@ -4359,155 +4360,20 @@
|
|
|
4359
4360
|
{
|
|
4360
4361
|
"docs": {
|
|
4361
4362
|
"stability": "experimental",
|
|
4362
|
-
"summary": "
|
|
4363
|
+
"summary": "Ubuntu 25."
|
|
4363
4364
|
},
|
|
4364
|
-
"name": "
|
|
4365
|
-
}
|
|
4366
|
-
],
|
|
4367
|
-
"name": "LinuxFlavorType",
|
|
4368
|
-
"symbolId": "src/vscode-server:LinuxFlavorType"
|
|
4369
|
-
},
|
|
4370
|
-
"@mavogel/cdk-vscode-server.StatusCheckApi": {
|
|
4371
|
-
"assembly": "@mavogel/cdk-vscode-server",
|
|
4372
|
-
"base": "constructs.Construct",
|
|
4373
|
-
"docs": {
|
|
4374
|
-
"stability": "experimental",
|
|
4375
|
-
"summary": "API Gateway endpoint for checking instance status, used by resume page for polling."
|
|
4376
|
-
},
|
|
4377
|
-
"fqn": "@mavogel/cdk-vscode-server.StatusCheckApi",
|
|
4378
|
-
"initializer": {
|
|
4379
|
-
"docs": {
|
|
4380
|
-
"stability": "experimental"
|
|
4381
|
-
},
|
|
4382
|
-
"locationInModule": {
|
|
4383
|
-
"filename": "src/status-check/status-check.ts",
|
|
4384
|
-
"line": 42
|
|
4365
|
+
"name": "UBUNTU_25"
|
|
4385
4366
|
},
|
|
4386
|
-
"parameters": [
|
|
4387
|
-
{
|
|
4388
|
-
"name": "scope",
|
|
4389
|
-
"type": {
|
|
4390
|
-
"fqn": "constructs.Construct"
|
|
4391
|
-
}
|
|
4392
|
-
},
|
|
4393
|
-
{
|
|
4394
|
-
"name": "id",
|
|
4395
|
-
"type": {
|
|
4396
|
-
"primitive": "string"
|
|
4397
|
-
}
|
|
4398
|
-
},
|
|
4399
|
-
{
|
|
4400
|
-
"name": "props",
|
|
4401
|
-
"type": {
|
|
4402
|
-
"fqn": "@mavogel/cdk-vscode-server.StatusCheckApiProps"
|
|
4403
|
-
}
|
|
4404
|
-
}
|
|
4405
|
-
]
|
|
4406
|
-
},
|
|
4407
|
-
"kind": "class",
|
|
4408
|
-
"locationInModule": {
|
|
4409
|
-
"filename": "src/status-check/status-check.ts",
|
|
4410
|
-
"line": 28
|
|
4411
|
-
},
|
|
4412
|
-
"name": "StatusCheckApi",
|
|
4413
|
-
"properties": [
|
|
4414
4367
|
{
|
|
4415
4368
|
"docs": {
|
|
4416
4369
|
"stability": "experimental",
|
|
4417
|
-
"summary": "
|
|
4418
|
-
},
|
|
4419
|
-
"immutable": true,
|
|
4420
|
-
"locationInModule": {
|
|
4421
|
-
"filename": "src/status-check/status-check.ts",
|
|
4422
|
-
"line": 32
|
|
4423
|
-
},
|
|
4424
|
-
"name": "api",
|
|
4425
|
-
"type": {
|
|
4426
|
-
"fqn": "aws-cdk-lib.aws_apigateway.RestApi"
|
|
4427
|
-
}
|
|
4428
|
-
},
|
|
4429
|
-
{
|
|
4430
|
-
"docs": {
|
|
4431
|
-
"stability": "experimental",
|
|
4432
|
-
"summary": "The URL of the status check API endpoint."
|
|
4433
|
-
},
|
|
4434
|
-
"immutable": true,
|
|
4435
|
-
"locationInModule": {
|
|
4436
|
-
"filename": "src/status-check/status-check.ts",
|
|
4437
|
-
"line": 36
|
|
4438
|
-
},
|
|
4439
|
-
"name": "apiUrl",
|
|
4440
|
-
"type": {
|
|
4441
|
-
"primitive": "string"
|
|
4442
|
-
}
|
|
4443
|
-
},
|
|
4444
|
-
{
|
|
4445
|
-
"docs": {
|
|
4446
|
-
"stability": "experimental",
|
|
4447
|
-
"summary": "The Lambda function that handles status check requests."
|
|
4448
|
-
},
|
|
4449
|
-
"immutable": true,
|
|
4450
|
-
"locationInModule": {
|
|
4451
|
-
"filename": "src/status-check/status-check.ts",
|
|
4452
|
-
"line": 40
|
|
4453
|
-
},
|
|
4454
|
-
"name": "function",
|
|
4455
|
-
"type": {
|
|
4456
|
-
"fqn": "aws-cdk-lib.aws_lambda.Function"
|
|
4457
|
-
}
|
|
4458
|
-
}
|
|
4459
|
-
],
|
|
4460
|
-
"symbolId": "src/status-check/status-check:StatusCheckApi"
|
|
4461
|
-
},
|
|
4462
|
-
"@mavogel/cdk-vscode-server.StatusCheckApiProps": {
|
|
4463
|
-
"assembly": "@mavogel/cdk-vscode-server",
|
|
4464
|
-
"datatype": true,
|
|
4465
|
-
"docs": {
|
|
4466
|
-
"stability": "experimental",
|
|
4467
|
-
"summary": "Props for StatusCheckApi construct."
|
|
4468
|
-
},
|
|
4469
|
-
"fqn": "@mavogel/cdk-vscode-server.StatusCheckApiProps",
|
|
4470
|
-
"kind": "interface",
|
|
4471
|
-
"locationInModule": {
|
|
4472
|
-
"filename": "src/status-check/status-check.ts",
|
|
4473
|
-
"line": 14
|
|
4474
|
-
},
|
|
4475
|
-
"name": "StatusCheckApiProps",
|
|
4476
|
-
"properties": [
|
|
4477
|
-
{
|
|
4478
|
-
"abstract": true,
|
|
4479
|
-
"docs": {
|
|
4480
|
-
"stability": "experimental",
|
|
4481
|
-
"summary": "The EC2 instance to check status for."
|
|
4482
|
-
},
|
|
4483
|
-
"immutable": true,
|
|
4484
|
-
"locationInModule": {
|
|
4485
|
-
"filename": "src/status-check/status-check.ts",
|
|
4486
|
-
"line": 18
|
|
4487
|
-
},
|
|
4488
|
-
"name": "instance",
|
|
4489
|
-
"type": {
|
|
4490
|
-
"fqn": "aws-cdk-lib.aws_ec2.IInstance"
|
|
4491
|
-
}
|
|
4492
|
-
},
|
|
4493
|
-
{
|
|
4494
|
-
"abstract": true,
|
|
4495
|
-
"docs": {
|
|
4496
|
-
"stability": "experimental",
|
|
4497
|
-
"summary": "DynamoDB table for tracking instance state."
|
|
4498
|
-
},
|
|
4499
|
-
"immutable": true,
|
|
4500
|
-
"locationInModule": {
|
|
4501
|
-
"filename": "src/status-check/status-check.ts",
|
|
4502
|
-
"line": 22
|
|
4370
|
+
"summary": "Amazon Linux 2023."
|
|
4503
4371
|
},
|
|
4504
|
-
"name": "
|
|
4505
|
-
"type": {
|
|
4506
|
-
"fqn": "aws-cdk-lib.aws_dynamodb.ITable"
|
|
4507
|
-
}
|
|
4372
|
+
"name": "AMAZON_LINUX_2023"
|
|
4508
4373
|
}
|
|
4509
4374
|
],
|
|
4510
|
-
"
|
|
4375
|
+
"name": "LinuxFlavorType",
|
|
4376
|
+
"symbolId": "src/vscode-server:LinuxFlavorType"
|
|
4511
4377
|
},
|
|
4512
4378
|
"@mavogel/cdk-vscode-server.VSCodeServer": {
|
|
4513
4379
|
"assembly": "@mavogel/cdk-vscode-server",
|
|
@@ -4523,7 +4389,7 @@
|
|
|
4523
4389
|
},
|
|
4524
4390
|
"locationInModule": {
|
|
4525
4391
|
"filename": "src/vscode-server.ts",
|
|
4526
|
-
"line":
|
|
4392
|
+
"line": 305
|
|
4527
4393
|
},
|
|
4528
4394
|
"parameters": [
|
|
4529
4395
|
{
|
|
@@ -4550,7 +4416,7 @@
|
|
|
4550
4416
|
"kind": "class",
|
|
4551
4417
|
"locationInModule": {
|
|
4552
4418
|
"filename": "src/vscode-server.ts",
|
|
4553
|
-
"line":
|
|
4419
|
+
"line": 284
|
|
4554
4420
|
},
|
|
4555
4421
|
"name": "VSCodeServer",
|
|
4556
4422
|
"properties": [
|
|
@@ -4562,7 +4428,7 @@
|
|
|
4562
4428
|
"immutable": true,
|
|
4563
4429
|
"locationInModule": {
|
|
4564
4430
|
"filename": "src/vscode-server.ts",
|
|
4565
|
-
"line":
|
|
4431
|
+
"line": 288
|
|
4566
4432
|
},
|
|
4567
4433
|
"name": "domainName",
|
|
4568
4434
|
"type": {
|
|
@@ -4577,7 +4443,7 @@
|
|
|
4577
4443
|
"immutable": true,
|
|
4578
4444
|
"locationInModule": {
|
|
4579
4445
|
"filename": "src/vscode-server.ts",
|
|
4580
|
-
"line":
|
|
4446
|
+
"line": 298
|
|
4581
4447
|
},
|
|
4582
4448
|
"name": "instance",
|
|
4583
4449
|
"type": {
|
|
@@ -4592,7 +4458,7 @@
|
|
|
4592
4458
|
"immutable": true,
|
|
4593
4459
|
"locationInModule": {
|
|
4594
4460
|
"filename": "src/vscode-server.ts",
|
|
4595
|
-
"line":
|
|
4461
|
+
"line": 293
|
|
4596
4462
|
},
|
|
4597
4463
|
"name": "password",
|
|
4598
4464
|
"type": {
|
|
@@ -4607,7 +4473,7 @@
|
|
|
4607
4473
|
"immutable": true,
|
|
4608
4474
|
"locationInModule": {
|
|
4609
4475
|
"filename": "src/vscode-server.ts",
|
|
4610
|
-
"line":
|
|
4476
|
+
"line": 303
|
|
4611
4477
|
},
|
|
4612
4478
|
"name": "idleMonitor",
|
|
4613
4479
|
"optional": true,
|
|
@@ -4629,7 +4495,7 @@
|
|
|
4629
4495
|
"kind": "interface",
|
|
4630
4496
|
"locationInModule": {
|
|
4631
4497
|
"filename": "src/vscode-server.ts",
|
|
4632
|
-
"line":
|
|
4498
|
+
"line": 30
|
|
4633
4499
|
},
|
|
4634
4500
|
"name": "VSCodeServerProps",
|
|
4635
4501
|
"properties": [
|
|
@@ -4643,7 +4509,7 @@
|
|
|
4643
4509
|
"immutable": true,
|
|
4644
4510
|
"locationInModule": {
|
|
4645
4511
|
"filename": "src/vscode-server.ts",
|
|
4646
|
-
"line":
|
|
4512
|
+
"line": 113
|
|
4647
4513
|
},
|
|
4648
4514
|
"name": "additionalInstanceRolePolicies",
|
|
4649
4515
|
"optional": true,
|
|
@@ -4666,7 +4532,7 @@
|
|
|
4666
4532
|
"immutable": true,
|
|
4667
4533
|
"locationInModule": {
|
|
4668
4534
|
"filename": "src/vscode-server.ts",
|
|
4669
|
-
"line":
|
|
4535
|
+
"line": 120
|
|
4670
4536
|
},
|
|
4671
4537
|
"name": "additionalTags",
|
|
4672
4538
|
"optional": true,
|
|
@@ -4679,6 +4545,26 @@
|
|
|
4679
4545
|
}
|
|
4680
4546
|
}
|
|
4681
4547
|
},
|
|
4548
|
+
{
|
|
4549
|
+
"abstract": true,
|
|
4550
|
+
"docs": {
|
|
4551
|
+
"default": "- no assets downloaded",
|
|
4552
|
+
"example": "'my-workshop-bucket/assets/workshop-materials.zip'",
|
|
4553
|
+
"remarks": "The zip contents will be extracted to the user's home folder and committed to git.\nUse this to provide workshop materials, sample data, or configuration files.",
|
|
4554
|
+
"stability": "experimental",
|
|
4555
|
+
"summary": "S3 path to a zip file containing assets to extract into the home folder."
|
|
4556
|
+
},
|
|
4557
|
+
"immutable": true,
|
|
4558
|
+
"locationInModule": {
|
|
4559
|
+
"filename": "src/vscode-server.ts",
|
|
4560
|
+
"line": 216
|
|
4561
|
+
},
|
|
4562
|
+
"name": "assetZipS3Path",
|
|
4563
|
+
"optional": true,
|
|
4564
|
+
"type": {
|
|
4565
|
+
"primitive": "string"
|
|
4566
|
+
}
|
|
4567
|
+
},
|
|
4682
4568
|
{
|
|
4683
4569
|
"abstract": true,
|
|
4684
4570
|
"docs": {
|
|
@@ -4689,7 +4575,7 @@
|
|
|
4689
4575
|
"immutable": true,
|
|
4690
4576
|
"locationInModule": {
|
|
4691
4577
|
"filename": "src/vscode-server.ts",
|
|
4692
|
-
"line":
|
|
4578
|
+
"line": 157
|
|
4693
4579
|
},
|
|
4694
4580
|
"name": "autoCreateCertificate",
|
|
4695
4581
|
"optional": true,
|
|
@@ -4697,6 +4583,26 @@
|
|
|
4697
4583
|
"primitive": "boolean"
|
|
4698
4584
|
}
|
|
4699
4585
|
},
|
|
4586
|
+
{
|
|
4587
|
+
"abstract": true,
|
|
4588
|
+
"docs": {
|
|
4589
|
+
"default": "- no branches created",
|
|
4590
|
+
"example": "'my-workshop-bucket/branches/lab-branches.zip' (containing folders: step-1/, step-2/, solution/)",
|
|
4591
|
+
"remarks": "Each top-level folder in the zip becomes a separate git branch with that folder's contents.\nIdeal for creating step-by-step workshop branches (e.g., step-1, step-2, solution).",
|
|
4592
|
+
"stability": "experimental",
|
|
4593
|
+
"summary": "S3 path to a zip file containing git branches to create in the home folder repository."
|
|
4594
|
+
},
|
|
4595
|
+
"immutable": true,
|
|
4596
|
+
"locationInModule": {
|
|
4597
|
+
"filename": "src/vscode-server.ts",
|
|
4598
|
+
"line": 227
|
|
4599
|
+
},
|
|
4600
|
+
"name": "branchZipS3Path",
|
|
4601
|
+
"optional": true,
|
|
4602
|
+
"type": {
|
|
4603
|
+
"primitive": "string"
|
|
4604
|
+
}
|
|
4605
|
+
},
|
|
4700
4606
|
{
|
|
4701
4607
|
"abstract": true,
|
|
4702
4608
|
"docs": {
|
|
@@ -4707,7 +4613,7 @@
|
|
|
4707
4613
|
"immutable": true,
|
|
4708
4614
|
"locationInModule": {
|
|
4709
4615
|
"filename": "src/vscode-server.ts",
|
|
4710
|
-
"line":
|
|
4616
|
+
"line": 147
|
|
4711
4617
|
},
|
|
4712
4618
|
"name": "certificateArn",
|
|
4713
4619
|
"optional": true,
|
|
@@ -4725,7 +4631,7 @@
|
|
|
4725
4631
|
"immutable": true,
|
|
4726
4632
|
"locationInModule": {
|
|
4727
4633
|
"filename": "src/vscode-server.ts",
|
|
4728
|
-
"line":
|
|
4634
|
+
"line": 99
|
|
4729
4635
|
},
|
|
4730
4636
|
"name": "devServerBasePath",
|
|
4731
4637
|
"optional": true,
|
|
@@ -4743,7 +4649,7 @@
|
|
|
4743
4649
|
"immutable": true,
|
|
4744
4650
|
"locationInModule": {
|
|
4745
4651
|
"filename": "src/vscode-server.ts",
|
|
4746
|
-
"line":
|
|
4652
|
+
"line": 106
|
|
4747
4653
|
},
|
|
4748
4654
|
"name": "devServerPort",
|
|
4749
4655
|
"optional": true,
|
|
@@ -4761,7 +4667,7 @@
|
|
|
4761
4667
|
"immutable": true,
|
|
4762
4668
|
"locationInModule": {
|
|
4763
4669
|
"filename": "src/vscode-server.ts",
|
|
4764
|
-
"line":
|
|
4670
|
+
"line": 129
|
|
4765
4671
|
},
|
|
4766
4672
|
"name": "domainName",
|
|
4767
4673
|
"optional": true,
|
|
@@ -4779,7 +4685,7 @@
|
|
|
4779
4685
|
"immutable": true,
|
|
4780
4686
|
"locationInModule": {
|
|
4781
4687
|
"filename": "src/vscode-server.ts",
|
|
4782
|
-
"line":
|
|
4688
|
+
"line": 165
|
|
4783
4689
|
},
|
|
4784
4690
|
"name": "enableAutoStop",
|
|
4785
4691
|
"optional": true,
|
|
@@ -4787,6 +4693,26 @@
|
|
|
4787
4693
|
"primitive": "boolean"
|
|
4788
4694
|
}
|
|
4789
4695
|
},
|
|
4696
|
+
{
|
|
4697
|
+
"abstract": true,
|
|
4698
|
+
"docs": {
|
|
4699
|
+
"default": "- no folders created",
|
|
4700
|
+
"example": "'my-workshop-bucket/folders/workshop-projects.zip' (containing folders: frontend/, backend/, infrastructure/)",
|
|
4701
|
+
"remarks": "Each top-level folder in the zip becomes a separate subfolder in the parent directory,\ninitialized as its own git repository. Useful for multi-project workshops.",
|
|
4702
|
+
"stability": "experimental",
|
|
4703
|
+
"summary": "S3 path to a zip file containing multiple folders to create as separate git repositories."
|
|
4704
|
+
},
|
|
4705
|
+
"immutable": true,
|
|
4706
|
+
"locationInModule": {
|
|
4707
|
+
"filename": "src/vscode-server.ts",
|
|
4708
|
+
"line": 238
|
|
4709
|
+
},
|
|
4710
|
+
"name": "folderZipS3Path",
|
|
4711
|
+
"optional": true,
|
|
4712
|
+
"type": {
|
|
4713
|
+
"primitive": "string"
|
|
4714
|
+
}
|
|
4715
|
+
},
|
|
4790
4716
|
{
|
|
4791
4717
|
"abstract": true,
|
|
4792
4718
|
"docs": {
|
|
@@ -4797,7 +4723,7 @@
|
|
|
4797
4723
|
"immutable": true,
|
|
4798
4724
|
"locationInModule": {
|
|
4799
4725
|
"filename": "src/vscode-server.ts",
|
|
4800
|
-
"line":
|
|
4726
|
+
"line": 92
|
|
4801
4727
|
},
|
|
4802
4728
|
"name": "homeFolder",
|
|
4803
4729
|
"optional": true,
|
|
@@ -4815,7 +4741,7 @@
|
|
|
4815
4741
|
"immutable": true,
|
|
4816
4742
|
"locationInModule": {
|
|
4817
4743
|
"filename": "src/vscode-server.ts",
|
|
4818
|
-
"line":
|
|
4744
|
+
"line": 138
|
|
4819
4745
|
},
|
|
4820
4746
|
"name": "hostedZoneId",
|
|
4821
4747
|
"optional": true,
|
|
@@ -4833,7 +4759,7 @@
|
|
|
4833
4759
|
"immutable": true,
|
|
4834
4760
|
"locationInModule": {
|
|
4835
4761
|
"filename": "src/vscode-server.ts",
|
|
4836
|
-
"line":
|
|
4762
|
+
"line": 181
|
|
4837
4763
|
},
|
|
4838
4764
|
"name": "idleCheckIntervalMinutes",
|
|
4839
4765
|
"optional": true,
|
|
@@ -4851,7 +4777,7 @@
|
|
|
4851
4777
|
"immutable": true,
|
|
4852
4778
|
"locationInModule": {
|
|
4853
4779
|
"filename": "src/vscode-server.ts",
|
|
4854
|
-
"line":
|
|
4780
|
+
"line": 173
|
|
4855
4781
|
},
|
|
4856
4782
|
"name": "idleTimeoutMinutes",
|
|
4857
4783
|
"optional": true,
|
|
@@ -4869,7 +4795,7 @@
|
|
|
4869
4795
|
"immutable": true,
|
|
4870
4796
|
"locationInModule": {
|
|
4871
4797
|
"filename": "src/vscode-server.ts",
|
|
4872
|
-
"line":
|
|
4798
|
+
"line": 64
|
|
4873
4799
|
},
|
|
4874
4800
|
"name": "instanceClass",
|
|
4875
4801
|
"optional": true,
|
|
@@ -4887,7 +4813,7 @@
|
|
|
4887
4813
|
"immutable": true,
|
|
4888
4814
|
"locationInModule": {
|
|
4889
4815
|
"filename": "src/vscode-server.ts",
|
|
4890
|
-
"line":
|
|
4816
|
+
"line": 85
|
|
4891
4817
|
},
|
|
4892
4818
|
"name": "instanceCpuArchitecture",
|
|
4893
4819
|
"optional": true,
|
|
@@ -4905,7 +4831,7 @@
|
|
|
4905
4831
|
"immutable": true,
|
|
4906
4832
|
"locationInModule": {
|
|
4907
4833
|
"filename": "src/vscode-server.ts",
|
|
4908
|
-
"line":
|
|
4834
|
+
"line": 50
|
|
4909
4835
|
},
|
|
4910
4836
|
"name": "instanceName",
|
|
4911
4837
|
"optional": true,
|
|
@@ -4916,14 +4842,14 @@
|
|
|
4916
4842
|
{
|
|
4917
4843
|
"abstract": true,
|
|
4918
4844
|
"docs": {
|
|
4919
|
-
"default": "- Ubuntu-
|
|
4845
|
+
"default": "- Ubuntu-24",
|
|
4920
4846
|
"stability": "experimental",
|
|
4921
4847
|
"summary": "VSCode Server EC2 operating system."
|
|
4922
4848
|
},
|
|
4923
4849
|
"immutable": true,
|
|
4924
4850
|
"locationInModule": {
|
|
4925
4851
|
"filename": "src/vscode-server.ts",
|
|
4926
|
-
"line":
|
|
4852
|
+
"line": 78
|
|
4927
4853
|
},
|
|
4928
4854
|
"name": "instanceOperatingSystem",
|
|
4929
4855
|
"optional": true,
|
|
@@ -4941,7 +4867,7 @@
|
|
|
4941
4867
|
"immutable": true,
|
|
4942
4868
|
"locationInModule": {
|
|
4943
4869
|
"filename": "src/vscode-server.ts",
|
|
4944
|
-
"line":
|
|
4870
|
+
"line": 71
|
|
4945
4871
|
},
|
|
4946
4872
|
"name": "instanceSize",
|
|
4947
4873
|
"optional": true,
|
|
@@ -4959,7 +4885,7 @@
|
|
|
4959
4885
|
"immutable": true,
|
|
4960
4886
|
"locationInModule": {
|
|
4961
4887
|
"filename": "src/vscode-server.ts",
|
|
4962
|
-
"line":
|
|
4888
|
+
"line": 57
|
|
4963
4889
|
},
|
|
4964
4890
|
"name": "instanceVolumeSize",
|
|
4965
4891
|
"optional": true,
|
|
@@ -4967,6 +4893,26 @@
|
|
|
4967
4893
|
"primitive": "number"
|
|
4968
4894
|
}
|
|
4969
4895
|
},
|
|
4896
|
+
{
|
|
4897
|
+
"abstract": true,
|
|
4898
|
+
"docs": {
|
|
4899
|
+
"default": "- no repo cloned",
|
|
4900
|
+
"example": "'https://github.com/aws-samples/my-workshop-repo.git'",
|
|
4901
|
+
"remarks": "If provided, the repository will be cloned into the user's home folder during instance setup.\nUseful for pre-populating workshop environments with starter code.",
|
|
4902
|
+
"stability": "experimental",
|
|
4903
|
+
"summary": "Remote git repository URL to clone into the home folder."
|
|
4904
|
+
},
|
|
4905
|
+
"immutable": true,
|
|
4906
|
+
"locationInModule": {
|
|
4907
|
+
"filename": "src/vscode-server.ts",
|
|
4908
|
+
"line": 205
|
|
4909
|
+
},
|
|
4910
|
+
"name": "repoUrl",
|
|
4911
|
+
"optional": true,
|
|
4912
|
+
"type": {
|
|
4913
|
+
"primitive": "string"
|
|
4914
|
+
}
|
|
4915
|
+
},
|
|
4970
4916
|
{
|
|
4971
4917
|
"abstract": true,
|
|
4972
4918
|
"docs": {
|
|
@@ -4978,7 +4924,7 @@
|
|
|
4978
4924
|
"immutable": true,
|
|
4979
4925
|
"locationInModule": {
|
|
4980
4926
|
"filename": "src/vscode-server.ts",
|
|
4981
|
-
"line":
|
|
4927
|
+
"line": 194
|
|
4982
4928
|
},
|
|
4983
4929
|
"name": "skipStatusChecks",
|
|
4984
4930
|
"optional": true,
|
|
@@ -4996,7 +4942,7 @@
|
|
|
4996
4942
|
"immutable": true,
|
|
4997
4943
|
"locationInModule": {
|
|
4998
4944
|
"filename": "src/vscode-server.ts",
|
|
4999
|
-
"line":
|
|
4945
|
+
"line": 43
|
|
5000
4946
|
},
|
|
5001
4947
|
"name": "vscodePassword",
|
|
5002
4948
|
"optional": true,
|
|
@@ -5014,7 +4960,7 @@
|
|
|
5014
4960
|
"immutable": true,
|
|
5015
4961
|
"locationInModule": {
|
|
5016
4962
|
"filename": "src/vscode-server.ts",
|
|
5017
|
-
"line":
|
|
4963
|
+
"line": 36
|
|
5018
4964
|
},
|
|
5019
4965
|
"name": "vscodeUser",
|
|
5020
4966
|
"optional": true,
|
|
@@ -5026,6 +4972,6 @@
|
|
|
5026
4972
|
"symbolId": "src/vscode-server:VSCodeServerProps"
|
|
5027
4973
|
}
|
|
5028
4974
|
},
|
|
5029
|
-
"version": "0.0.
|
|
5030
|
-
"fingerprint": "
|
|
4975
|
+
"version": "0.0.64",
|
|
4976
|
+
"fingerprint": "3BRi+GN6i44q+cFPoBqPuFqBcUPFx0g3BHIvuo4ciaM="
|
|
5031
4977
|
}
|