mcpField
A
aws-cloudformation-ec2

aws-cloudformation-ec2

github.com/giuseppe-trisciuoglio云与 DevOps36565 次安装7 周前更新
代码仓库

关于 aws-cloudformation-ec2

此技能介绍使用 AWS CloudFormation 定义 EC2 基础设施,面向云工程师,涵盖实例、安全组、IAM 角色、负载均衡器及可复用堆栈模板。

主要功能

  1. 01EC2 实例与 SPOT 配置
  2. 02安全组与 IAM 角色
  3. 03ALB、目标组和监听器
  4. 04参数、条件与跨栈引用
  5. 05模板验证与变更集

适用场景

  1. 01使用 CloudFormation 创建 EC2 堆栈
  2. 02为实例配置安全组和 IAM 权限
  3. 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.md
constraints.md
ec2-instances.md
examples.md
load-balancers.md
reference.md
security-iam.md
template-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 — 资源限制、实例限制、成本考量、常见问题、监控
更多资源

限制和警告

资源限制
  • 每个 CloudFormation 堆栈最多包含 500 个资源
  • 每个 VPC 最多包含 500 个安全组
  • 实例类型因区域和可用性而异
成本考量
  • EC2 实例在运行期间会产生费用
  • EBS 卷按 GB 月计费,即使未挂载也会产生费用
  • ALB 会产生按小时计费的费用,以及 LCU 数据处理费用
  • 未关联的 Elastic IP 会产生按小时计费的费用
安全考量
  • 密钥对丢失后无法恢复
  • 创建实例配置文件后,无法更改其角色
  • IMDSv1 存在安全漏洞——请使用 IMDSv2
  • Spot 实例可能会在 2 分钟通知后终止

有关完整限制、故障排除指南和监控设置,请参阅 constraints.md。

评论

支持 Markdown