CloudFormation中如何在ECS服务里引用自定义创建的子网ID?
解决方法
不需要使用!GetAtt,直接用!Ref引用模板内创建的PublicSubnetOne即可——CloudFormation中AWS::EC2::Subnet资源的逻辑ID通过!Ref就能直接返回子网ID。具体操作分两步:
1. 修改CloudFormation模板
- 移除多余的
SubnetID参数(不再需要外部传入子网ID) - 在
Service的Subnets配置中,把!Ref SubnetID替换为!Ref PublicSubnetOne
修改后的模板核心部分如下:
AWSTemplateFormatVersion: "2010-09-09" # 移除原有的SubnetID参数 Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: '10.0.0.0/16' PublicSubnetOne: Type: AWS::EC2::Subnet Properties: AvailabilityZone: Fn::Select: - 0 - Fn::GetAZs: { Ref: 'AWS::Region' } VpcId: !Ref 'VPC' CidrBlock: '10.0.1.0/24' MapPublicIpOnLaunch: true ... Service: Type: AWS::ECS::Service Properties: ServiceName: tui-task-service Cluster: !Ref Cluster TaskDefinition: !Ref TaskDefinition DesiredCount: 1 LaunchType: FARGATE NetworkConfiguration: AwsvpcConfiguration: AssignPublicIp: ENABLED Subnets: - !Ref PublicSubnetOne # 改为引用模板内创建的子网 SecurityGroups: - !GetAtt ContainerSecurityGroup.GroupId
2. 修改部署命令
无需再传入SubnetID参数,命令简化为:
aws cloudformation create-stack --stack-name my-deployment --template-body file://ecs.yml \ --capabilities CAPABILITY_NAMED_IAM
内容的提问来源于stack exchange,提问作者Vitaly Chura
相关产品推荐
相关产品推荐

