使用CloudFormation为Elastic Beanstalk配置ElastiCache时如何指定自定义VPC
部署场景与报错说明
- 触发报错:AWS CloudFormation提示安全组
sg-在默认VPCvpc-中不存在 - 部署背景:将自定义CloudFormation模板部署到Elastic Beanstalk应用时,模板自动关联账户默认VPC,无法指定关联自建VPC,目标是明确模板中正确引用自定义VPC ID的配置方法
- 已尝试的无效配置:此前单独参考AWS文档尝试配置零散嵌入资源块、未正确组合使用,且存在缩进格式错误,均未生效,配置片段如下:
# 格式错误的尝试片段,未被CloudFormation正确解析 Type: 'AWS::EC2::VPC::Id' VpcId: String Vpc: Default: "vpc-" Type: String VpcCidr: Default: "10.0.0.0/16" Type: String
原始模板的核心配置缺口
- 模板中定义的
MyCacheSecurityGroup安全组资源未显式指定VpcId属性,创建时默认关联账户下的默认VPC - 模板缺少顶层
Parameters节点,没有预留传入自定义VPC ID的合法通道 - 安全组入站规则使用
SourceSecurityGroupName按名称引用AWSEBSecurityGroup,在跨VPC、重名安全组场景下会出现匹配失效,无法校验跨网络的归属关系
可落地的配置修正方案
- 第一步:在模板顶层新增
Parameters节点,定义可传入的自定义VPC参数,使用AWS内置的VPC类型做合法性校验:
Parameters: CustomVpcId: Type: 'AWS::EC2::VPC::Id' Description: 选择需要关联的自建VPC
- 第二步:修改
MyCacheSecurityGroup资源的配置,显式绑定上面定义的自定义VPC参数,同时将原入站规则的名称引用替换为ID精确匹配,避免解析异常:
MyCacheSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: "Lock cache down to webserver access only" VpcId: !Ref CustomVpcId # 新增配置,将安全组绑定到指定自建VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: Fn::GetOptionSetting: OptionName: CachePort DefaultValue: 11211 ToPort: Fn::GetOptionSetting: OptionName: CachePort DefaultValue: 11211 SourceSecurityGroupId: !Ref AWSEBSecurityGroup # 原SourceSecurityGroupName替换为ID引用,避免跨VPC场景匹配失败
- 部署前置校验:创建或更新Elastic Beanstalk环境时,需要在环境的网络配置步骤指定关联的自建VPC、私有/公有子网组,确保环境自动创建的
AWSEBSecurityGroup和自定义安全组属于同一个VPC,从根源上避免跨VPC引用安全组的报错。
内容的提问来源于stack exchange,提问作者Rami
相关产品推荐
相关产品推荐

