亚马逊AWS官方博客

从 0 到可开发环境:一键部署 EC2、负载均衡与开发环境

引言

对于刚接触 AWS 的开发者或希望快速启动云上项目的用户来说,从创建 VPC、配置子网、安全组,到部署 EC2、配置负载均衡和安装开发环境,整个过程往往需要几个小时,且对 AWS 服务有一定的理解门槛。

在本篇博客中,我将介绍如何通过一个可复用的 AWS CloudFormation 模板,一键部署 HAQM Elastic Compute Cloud (HAQM EC2) 实例、Application Load Balancer(ALB)、Auto Scaling Group(ASG),并自动安装包括Node.js、Python、Docker、MySQL、Redis、Flask 在内的开发环境。该方案面向 Level 100–200 的入门和进阶用户,旨在大幅降低上云部署门槛,将原本数小时的部署压缩至 10 分钟以内。

场景背景

本方案适用于以下典型场景:

  • 个人开发者或学生:希望快速搭建云上 Web 应用环境,无需手动配置本地开发环境。
  • 企业或创业团队:构建统一的团队开发环境,实现成员之间的代码调试和部署一致性。
  • 技术演示或培训平台:为技术讲座、入门培训、Workshop 提供快速部署的示范环境。
  • 临时测试环境:进行短期功能验证或 DevOps 测试实验。

很多用户在这些场景中会面临:

  • 不熟悉基础设施配置流程(VPC、子网、安全组)
  • 不清楚如何配置负载均衡实现高可用访问
  • 希望将常见开发环境预装到云端,提高部署效率
  • 需要支持中国区网络环境下的软件源设置

为什么使用 ALB 和 ASG?

  • Application Load Balancer (ALB) 允许我们将公网请求自动分发给多台 EC2 实例,提高系统的可用性和扩展能力。
  • Auto Scaling Group (ASG) 则可根据负载变化动态调整 EC2 实例数量,提升资源利用率并节省成本。
  • 两者结合构建出具备 “弹性” 和 “高可用性” 的系统架构,是现代云原生架构的核心要素之一。

解决方案架构概览

该解决方案使用 AWS CDK 编写,并最终导出为 CloudFormation 模板,包含以下资源和配置:

  • 一个基础 VPC(包含公共和私有子网,支持 NAT 网关)
  • 一组 Auto Scaling Group,部署于私有子网
  • 一个公网 Application Load Balancer(ALB),负责请求转发
  • 安全组配置实现最小权限访问控制
  • EC2 实例通过 UserData 安装开发环境
  • EC2 绑定 IAM 角色,具备 Systems Manager(SSM)连接能力

用户可通过传参选择要安装的环境模块,例如 Node.js、Python、Docker、MySQL、Redis、Flask 等。

模板下载链接:点击获取模板,或您可以访问:http://aws-cn-blog.s3.cn-north-1.amazonaws.com.cn/ec2deploy/ec2DeployTemplate.yaml (模版来自 S3 链接)

安全组配置说明

  • ALB 安全组:允许来自 0.0.0.0/0 的 HTTP 请求(默认 80 端口)
  • ASG 安全组:只允许来自 ALB 安全组的请求,确保仅有 ALB 能访问 EC2,避免暴露到公网

IAM 最小权限配置建议

我们建议您在控制台中手动为用于部署的 IAM 角色分配以下策略:

  • HAQMEC2FullAccess
  • AutoScalingFullAccess
  • ElasticLoadBalancingFullAccess
  • AWSCloudFormationFullAccess
  • HAQMVPCFullAccess
  • HAQMSSMFullAccess(或仅 HAQMSSMManagedInstanceCore + ssm:GetParameter 权限)

但为符合最小权限原则,推荐替换如下策略:

  • HAQMEC2FullAccess → HAQMEC2ReadOnlyAccess + 允许 ec2:RunInstances、ec2:Describe* 等所需操作
  • HAQMSSMFullAccess → HAQMSSMManagedInstanceCore + 自定义策略授予 ssm:GetParameter
  • 移除 IAMFullAccess,避免不必要的敏感权限泄露

这类配置在初期可以保留全权限策略以便调试,部署验证无误后再逐步收紧权限。

实现细节与关键配置

参数化模板设计

为了提升模板复用性,我们将以下内容设为可自定义参数:

  • 可用区数量、实例类型
  • ASG 最小/最大容量
  • ALB 监听端口与健康检查路径
  • 安装环境(Node.js、Python、Docker、MySQL、Redis、Nginx、Flask)

EC2 启动脚本(UserData)

EC2 实例启动时,将根据传入参数判断安装哪些环境。以下为示例配置:

# 安装 Node.js
if [ "$InstallNode" == "true" ]; then
sudo curl -o nodesource-release.rpm http://rpm.nodesource.com/pub_16.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm
sudo rpm -i nodesource-release.rpm
 sudo yum install -y nodejs
fi

中国区用户使用的是 amazon-linux-extras 或稳定 Yum 源,确保可联网安装。

使用步骤

前提条件

  • 拥有有效的 AWS 账户
  • 在 AWS IAM 控制台创建角色,并授予适当的权限(见上文)
  • 可访问 S3 中上传的 CloudFormation 模板

部署流程

  1. 登录 AWS 控制台,进入Identity and Access Management (IAM),创建角色并授予适当权限
  2. 进入 CloudFormation 页面
  3. 选择“使用现有模板”,上传或引用该模板的 S3 地址
  4. 按需填写参数(可选开发环境、端口等),并添加第一步创建的 IAM 角色
  5. 等待堆栈创建完成,连接实例查看环境是否成功安装

示例截图:

  • IAM 角色创建

创建 IAM 角色并选择 CloudFormation

添加适当 policy(部署验证无误后再逐步收紧权限)

  • CloudFormation 部署

可通过 S3 链接或者本地上传

参数填写(仅供参考)

添加创建的IAM角色

  • 资源创建结果

下一步可以做什么?

部署完成后,您可以:

  • 在 EC2 实例中部署 Web 应用(如 Flask、Node.js Express、PHP 页面等)
  • 使用 AWS Systems Manager 直接登录实例,远程调试代码
  • 绑定自定义域名,将 ALB 替换为 HTTPS 访问(需配置 ACM)
  • 扩展模板:引入 RDS、EFS、CloudWatch 等增强生产能力

例如,若选择安装了 Node.js,您可以上传一个简单的 Express 应用并运行:

npx express-generator
cd myapp
npm install
npm start

即可通过 ALB 域名访问您的应用。

成本优化建议

  • 使用免费套餐中的 EC2 实例类型(如 t2.micro)进行测试
  • 使用自动伸缩组最小实例数设为 1
  • 清理不再使用的资源,避免长期费用

清理资源

若您不再需要部署的资源,可直接在 CloudFormation 控制台中删除堆栈,AWS 将自动清理所有关联资源。

结语

在本文中,我分享了一个用于快速部署 EC2 + ALB + Auto Scaling Group 的 CloudFormation 模板,并支持安装常用开发环境。

该方案适合初学者、教育环境、Demo 快速演示场景,也可以作为企业自建平台的通用模板起点。

您可以扩展此模板,集成数据库、EFS 文件系统、HTTPS(配置 ACM 证书)等更多组件,打造更完整的开发或生产环境。

如果您对这个项目感兴趣,欢迎联系讨论,也欢迎参考官方文档进一步探索:

联系方式:

官方文档:

本篇作者

胡鸿博

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案架构的设计和技术咨询。

张志远

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案和架构咨询,致力于亚马逊云科技云服务在创新增长客户群体中的推广,具有丰富的解决客户实际问题的经验。