如何在CloudFormation模板中通过名称引用现有安全组
解决方案
方法1:通过参数类型自动匹配(通用所有场景,支持跨账号部署)
在模板的Parameters段定义安全组参数,指定类型为AWS::EC2::SecurityGroup::Id,CloudFormation在部署时会自动拉取当前账号当前区域下的所有安全组,你可以直接选择名为default的安全组,无需硬编码ID:
Parameters: DefaultSecurityGroup: Type: AWS::EC2::SecurityGroup::Id Description: 当前区域下名为default的安全组,部署时系统会自动枚举可选值 AllowedPattern: "^sg-[a-f0-9]+$" ConstraintDescription: 必须为当前区域存在的有效安全组ID LambdaFunction: Type: AWS::Lambda::Function Properties: # 其余Lambda配置保持不变 VpcConfig: SecurityGroupIds: - !Ref DefaultSecurityGroup
方法2:调用AWS预置SSM参数自动获取(全自动无需人工干预)
如果你要关联的是当前区域默认VPC下的default安全组,可以直接调用AWS预置的SSM公共参数自动获取ID,完全不需要硬编码任何值,跨账号跨区域都可以直接使用:
LambdaFunction: Type: AWS::Lambda::Function Properties: # 其余Lambda配置保持不变 VpcConfig: SecurityGroupIds: - "{{resolve:ssm:/aws/service/ec2/vpc/default-security-group:1}}"
补充说明
如果你的default安全组部署在自定义VPC而非默认VPC中,你可以提前在对应VPC的CloudFormation栈中将安全组ID设置为栈输出并导出,再在当前模板通过!ImportValue引用导出值即可,同样不需要硬编码ID。
内容的提问来源于stack exchange,提问作者pavan
相关产品推荐
相关产品推荐

