Topic 1 Question #1
云运维工程师正在检查以下 AWS CloudFormation 模板:
" target="_blank" rel="nofollow noopener">https://img.examtopics.com/aws-certified-cloudops-engineer-associate-soa-c03/image1.png">
为什么堆栈创建会失败?
答案: C
SOA-C03认证重点考察CloudOps工程师对基础设施即代码工具CloudFormation的排障能力,本题属于CloudFormation模板故障排查的核心考点范畴。本题中堆栈创建失败的核心原因是模板中尝试获取PrivateDnsName的方式不符合CloudFormation的语法规则,AWS::EC2::Instance资源的PrivateDnsName属于资源的返回属性,必须通过Fn::GetAtt内置函数引用,若模板错误使用Ref函数、拼写错误的属性名、或在非EC2实例资源上尝试获取该属性,都会触发模板验证错误,导致堆栈创建失败,因此选项C为正确答案。
各选项分析:
A. CloudFormation模板的Outputs(输出)部分属于可选配置段,仅用于定义堆栈创建完成后对外暴露的返回值,省略该部分不会对堆栈创建流程产生任何影响,因此A错误。
B. CloudFormation模板的Parameters(参数)部分属于可选配置段,用于在堆栈创建时动态传入配置值,模板可直接硬编码所有资源配置不需要定义参数,省略该部分不会导致堆栈创建失败,因此B错误。
C. AWS::EC2::Instance资源的PrivateDnsName不是Ref函数的返回值,仅能通过Fn::GetAtt函数指定正确的属性名获取,若模板中采用了错误的方式尝试获取PrivateDnsName,会触发CloudFormation模板验证失败,直接导致堆栈创建失败,因此C正确。
D. 若创建EC2实例时未指定VPC配置,CloudFormation会默认将实例部署到当前区域的默认VPC中,仅当账户当前区域不存在默认VPC时才会失败,属于特殊场景而非必然的失败原因,因此D错误。
关键知识点:
1. CloudFormation模板的必填段仅包括AWSTemplateFormatVersion和Resources,Parameters、Outputs、Mappings等均为可选配置段,省略可选段不会导致模板验证失败。
2. CloudFormation的Fn::GetAtt函数用于获取资源的指定返回属性,引用的属性必须是对应资源类型官方支持的返回属性,否则会触发模板验证错误。
3. AWS::EC2::Instance资源的Ref函数仅返回实例ID,私有DNS名称、公网IP等属性均需要通过Fn::GetAtt函数获取。
参考资料:
AWS CloudFormation AWS::EC2::Instance 资源参考, https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#aws-resource-ec2-instance-return-values
AWS CloudFormation 模板结构参考, https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/template-anatomy.html