This solution deploys a complete browser-based development environment with VS Code, version control, and automated deployments using a single AWS CloudFormation template.
.
├── dev/ # Development workspace
│ └── README.md # Development guide
├── release/ # Sample Terraform application
│ ├── main.tf # Core infrastructure
│ ├── provider.tf # AWS provider configuration
│ ├── variables.tf # Input variables
│ ├── versions.tf # Provider versions and backend
│ ├── website.tf # Sample static website
│ └── terraform.tfvars # Variable defaults
└── sample-developer-environment.yml # Main CloudFormation template
- Browser-based VS Code using code-server accessed through Amazon CloudFront
- Git version control using git-remote-s3 with Amazon S3 storage
- Automated deployments using AWS CodePipeline and AWS CodeBuild
- Password rotation using AWS Secrets Manager (30-day automatic rotation)
- Pre-configured AWS development environment:
- AWS Toolkit for VS Code
- Terraform infrastructure deployment
- Docker support
- Git integration
- Launch the AWS CloudFormation template
sample-developer-environment.yml
- Choose your initial workspace content:
- Provide a GitHub repository URL in
GitHubRepo
parameter, OR - Provide S3 bucket name
S3AssetBucket
andS3AssetPrefix
parameters
- Provide a GitHub repository URL in
- Access VS Code through the provided CloudFormation output URL
- Get your password from AWS Secrets Manager (link in outputs)
- Click File > Open Folder and navigate to
/home/ec2-user/my-workspace
. This is the git/S3 initialized project directory - Test code in
dev
, copy torelease
, commit and push to trigger deployment
Parameter | Description |
---|---|
CodeServerVersion |
Version of code-server to install |
GitHubRepo |
Public repository to clone as initial workspace. Note: Using a custom repository will not include the sample application |
S3AssetBucket |
(Optional) S3 bucket containing initial workspace content. Overwrites GitHubRepo if provided |
S3AssetPrefix |
(Optional) S3 bucket asset prefix path. Only required when S3AssetBucket is specified. Needs to end with / |
DeployPipeline |
Enable AWS CodePipeline deployments |
RotateSecret |
Enable AWS Secrets Manager rotation |
AutoSetDeveloperProfile |
Automatically set Developer profile as default in code-server terminal sessions without requiring manual elevation |
InstanceType |
Supports both ARM and x86 Amazon EC2 instances |
The environment is configured with two IAM roles:
- EC2 instance role - Basic permissions for the instance
- Developer role - Elevated permissions for AWS operations
The developer role has the permissions needed to deploy the sample application. To view or modify these permissions, search for "iamroledeveloper" in the CloudFormation template.
This separation ensures the EC2 instance runs with minimal permissions by default, while allowing controlled elevation of privileges when needed.
ℹ️ Tip: Run echo 'export AWS_PROFILE=developer' >> ~/.bashrc && source ~/.bashrc
to make the developer profile default for all terminal sessions.
If you wish to have elevated AWS permissions automatically enabled in all new terminal sessions without requiring manual profile switching, set AutoSetDeveloperProfile
to true. While convenient, this bypasses the security practice of explicit privilege elevation.
The environment runs in a private subnet with CloudFront access, using S3 for git storage and CodePipeline for automated deployments.
ℹ️ Note: The sample application is only available when using the default value for GitHubRepo
. If you specify either a custom GitHubRepo
or S3AssetBucket
, you will need to provide your own Terraform application code.
The repository includes a Terraform application that deploys:
- Static website hosted on Amazon S3
- Amazon CloudFront distribution with AWS WAF protection
- Security headers and AWS KMS encryption
- Amazon CloudWatch logging
The application deploys automatically when you set the CloudFormation parameter DeployPipeline
to true. Once deployment completes, you can locate the website URL in the final output of the CodeBuild job.
- Run the 'terraform-destroy' pipeline in CodePipeline
- Approve the manual approval step when prompted
- Wait for pipeline completion
Failing to run and approve the destroy pipeline will leave orphaned infrastructure resources in your AWS account that were created by Terraform and will need to be cleaned up manually.
- Configure end-to-end HTTPS using custom SSL certificates on the ALB
- Update ALB listener and target group to use HTTPS/443
- Use a custom domain name with AWS Certificate Manager (ACM) certificates
See CONTRIBUTING for more information.
This library is licensed under the MIT-0 License. See the LICENSE file.
This repository is intended for demonstration and learning purposes only. It is not intended for production use. The code provided here is for educational purposes and should not be used in a live environment without proper testing, validation, and modifications. Use at your own risk. The authors are not responsible for any issues, damages, or losses that may result from using this code in production.