关于 aws-cloudformation-ec2
此技能介绍使用 AWS CloudFormation 定义 EC2 基础设施,面向云工程师,涵盖实例、安全组、IAM 角色、负载均衡器及可复用堆栈模板。
主要功能
- 01EC2 实例与 SPOT 配置
- 02安全组与 IAM 角色
- 03ALB、目标组和监听器
- 04参数、条件与跨栈引用
- 05模板验证与变更集
适用场景
- 01使用 CloudFormation 创建 EC2 堆栈
- 02为实例配置安全组和 IAM 权限
- 03通过 ALB 分发应用流量
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill aws-cloudformation-ec2安装后在 Claude Code 中输入/aws-cloudformation-ec2确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/best-practices.mdconstraints.mdec2-instances.mdexamples.mdload-balancers.mdreference.mdsecurity-iam.mdtemplate-structure.md详细介绍
AWS CloudFormation EC2 基础设施
概述
使用 AWS CloudFormation 模板创建可用于生产环境的 EC2 基础设施。涵盖 EC2 实例(按需和 SPOT)、安全组、IAM 角色、应用程序负载均衡器(ALB)、模板结构、参数、输出和跨堆栈引用。
适用场景
- 创建配有安全组和 IAM 角色的 EC2 实例(按需或 SPOT)
- 设置带目标组的应用程序负载均衡器
- 实现模板参数、映射、条件和跨堆栈引用
说明
步骤 1 — 定义模板参数
使用 AWS 专用参数类型进行验证,并在控制台中提供下拉选项。
Parameters:
LatestAmiId:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
InstanceType:
Type: AWS::EC2::InstanceType
Default: t3.micro
AllowedValues: [t3.micro, t3.small, t3.medium]
KeyName:
Type: AWS::EC2::KeyPair::KeyName
高级参数模式、映射、条件和跨堆栈引用请参阅 template-structure.md。
步骤 2 — 创建安全组
定义网络访问的入站/出站规则。
InstanceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Security group for EC2 instance
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 10.0.0.0/16
高级安全组模式、自引用和 IAM 角色请参阅 security-iam.md。
步骤 3 — 配置 IAM 角色
定义具有最小权限的实例配置文件。
Ec2Role:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: ec2.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
Ec2InstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Roles: [!Ref Ec2Role]
最小权限策略、SSM 角色和信任策略请参阅 security-iam.md。
步骤 4 — 启动 EC2 实例
配置实例的安全组、IAM 角色和用户数据。
Ec2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref LatestAmiId
InstanceType: !Ref InstanceType
KeyName: !Ref KeyName
SecurityGroupIds: [!Ref InstanceSecurityGroup]
IamInstanceProfile: !Ref Ec2InstanceProfile
SubnetId: !Ref SubnetId
UserData:
Fn::Base64: |
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-instance
多卷配置、详细监控、SPOT 实例和完整堆栈示例请参阅 ec2-instances.md。
验证模板: aws cloudformation validate-template --template-body file://template.yaml
步骤 5 — 添加应用程序负载均衡器
创建带目标组和侦听器的 ALB,以分配流量。
ApplicationLoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: !Sub ${AWS::StackName}-alb
Scheme: internet-facing
SecurityGroups: [!Ref AlbSecurityGroup]
Subnets: [!Ref PublicSubnet1, !Ref PublicSubnet2]
ApplicationTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Port: 80
Protocol: HTTP
VpcId: !Ref VpcId
HealthCheckPath: /health
ApplicationListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: forward
TargetGroupArn: !Ref ApplicationTargetGroup
LoadBalancerArn: !Ref ApplicationLoadBalancer
Port: 80
Protocol: HTTP
HTTPS 配置、基于路径的路由、基于主机的路由、侦听器规则和 ALB 属性请参阅 load-balancers.md。
步骤 6 — 定义输出
导出值以供跨堆栈引用。
Outputs:
InstanceId:
Description: EC2 Instance ID
Value: !Ref Ec2Instance
Export:
Name: !Sub ${AWS::StackName}-InstanceId
SecurityGroupId:
Description: Security Group ID
Value: !Ref InstanceSecurityGroup
Export:
Name: !Sub ${AWS::StackName}-SecurityGroupId
LoadBalancerDnsName:
Description: ALB DNS Name
Value: !GetAtt ApplicationLoadBalancer.DNSName
跨堆栈引用模式和导入/导出策略请参阅 template-structure.md。
示例
最简 EC2 与 ALB 模板
AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 instance with ALB
Parameters:
LatestAmiId:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
InstanceType:
Type: AWS::EC2::InstanceType
Default: t3.micro
Resources:
InstanceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable HTTP and SSH
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
Ec2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref LatestAmiId
InstanceType: !Ref InstanceType
SecurityGroupIds: [!Ref InstanceSecurityGroup]
LoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Scheme: internet-facing
SecurityGroups: [!Ref InstanceSecurityGroup]
Subnets: [subnet-12345678, subnet-87654321]
Outputs:
InstanceId:
Value: !Ref Ec2Instance
LoadBalancerDns:
Value: !GetAtt LoadBalancer.DNSName
使用更改集进行部署
# Create change set
aws cloudformation create-change-set \
--stack-name my-ec2-stack \
--template-body file://template.yaml \
--change-set-type CREATE
# Execute after review
aws cloudformation execute-change-set \
--change-set-name <change-set-name>
完整的生产就绪模板请参阅 examples.md。
最佳实践
模板结构
- 使用 AWS 专用参数类型进行验证(
AWS::EC2::VPC::Id、AWS::EC2::InstanceType) - 按生命周期组织——将网络、安全和应用程序堆栈分开
- 使用有意义的名称,并以
AWS::StackName为前缀 - 为生产堆栈启用终止保护
安全
- 为 IAM 角色应用最小权限原则——仅授予所需的最低权限
- 尽可能使用安全组引用,而非 IP 地址
- 在所有 EC2 实例上启用 IMDSv2
- 将安全组规则限制为特定 CIDR 块
成本与可用性
- 对可容错、可中断的工作负载使用 SPOT 实例
- 跨多个 AZ 部署以实现高可用性
- 设置 CloudWatch 警报,监控 CPU 和状态检查
- 使用 EBS gp3 卷以实现经济高效的存储
运维
- 生产堆栈更新始终使用更改集
- 启用漂移检测以确保符合模板定义
- 应用堆栈策略以保护关键资源
- 部署前使用
aws cloudformation validate-template验证模板
堆栈策略、终止保护、漂移检测、更改集自动化和验证脚本的详细指南请参阅 best-practices.md。
参考资料
核心配置
- template-structure.md — 模板章节、参数、映射、条件、输出、跨栈引用
- ec2-instances.md — EC2 实例、SPOT 队列、多卷配置、完整堆栈示例
- security-iam.md — 安全组、IAM 角色、实例配置文件、最小权限策略
- load-balancers.md — ALB 配置、目标组、侦听器、基于路径的路由、HTTPS
运维指南
- best-practices.md — 堆栈策略、终止保护、偏差检测、变更集、验证
- constraints.md — 资源限制、实例限制、成本考量、常见问题、监控
更多资源
- examples.md — 完整的生产就绪示例和用例
- reference.md — CloudFormation EC2 资源参考文档
限制和警告
资源限制
- 每个 CloudFormation 堆栈最多包含 500 个资源
- 每个 VPC 最多包含 500 个安全组
- 实例类型因区域和可用性而异
成本考量
- EC2 实例在运行期间会产生费用
- EBS 卷按 GB 月计费,即使未挂载也会产生费用
- ALB 会产生按小时计费的费用,以及 LCU 数据处理费用
- 未关联的 Elastic IP 会产生按小时计费的费用
安全考量
- 密钥对丢失后无法恢复
- 创建实例配置文件后,无法更改其角色
- IMDSv1 存在安全漏洞——请使用 IMDSv2
- Spot 实例可能会在 2 分钟通知后终止
有关完整限制、故障排除指南和监控设置,请参阅 constraints.md。