CloudFormation部署EC2报错Invalid availability zone: [ap-southeast-2]咨询
报错根因
- 你出现的错误是区域和可用区的概念混淆导致的参数非法:
ap-southeast-2是AWS悉尼区域的唯一标识,而AvailabilityZone字段要求填入的是区域下的可用区标识,格式为区域名加字母后缀,例如ap-southeast-2a、ap-southeast-2b、ap-southeast-2c,硬填入区域名无法通过EC2的参数校验,因此抛出400错误。 - 第二个模板可以正常运行和你使用SSM获取AMI的操作没有关联,本质原因是你删除了错误的
AvailabilityZone配置,CloudFormation会默认在你部署模板的当前区域下自动分配合法可用区,因此避开了参数错误。
解决方法
你可以根据实际需求选择以下任意一种方案修复:
- 方案1:修正硬编码的可用区值
将AvailabilityZone的取值替换为ap-southeast-2区域下的合法可用区即可,示例配置:
Resources: Instance: Type: 'AWS::EC2::Instance' Properties: AvailabilityZone: ap-southeast-2a # 可替换为你需要的ap-southeast-2b/ap-southeast-2c ImageId: ami-0210560cedcb09f07 InstanceType: t2.micro
- 方案2:删除显式可用区配置
如果没有要求实例必须调度到指定可用区,直接删除AvailabilityZone配置项即可,AWS会自动为实例分配可用区,无需额外配置。 - 方案3:参数化可用区配置(推荐)
如果需要模板支持跨区域复用,可将可用区设为模板参数,避免硬编码导致的部署错误:
Parameters: LatestAmiId: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' TargetAZ: Type: AWS::EC2::AvailabilityZone::Name Default: ap-southeast-2a Resources: Instance: Type: 'AWS::EC2::Instance' Properties: AvailabilityZone: !Ref TargetAZ ImageId: !Ref LatestAmiId InstanceType: t2.micro
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

