CloudFormation部署AWS Spot Fleet时元数据命令解析错误排查
问题诊断与修复方案
核心错误原因
你的CloudFormation模板中AWS::CloudFormation::Init的commands结构不符合规范,这是触发解析错误的直接原因:
- CFN Init要求
commands是键值对对象,而非数组; - 每个命令需要一个唯一标识作为键(自定义命令名称即可),对应的值是包含
command属性的对象,不能直接传入拼接后的命令字符串。
修正后的模板片段
将Metadata部分的commands修改为如下结构:
"Metadata": { "AWS::CloudFormation::Init" : { "commands": { "create_log_file": { "command": { "Fn::Join": [ "", [ "echo ls -l /var/log > /home/MyFile.txt" ] ] } }, "set_log_permissions": { "command": "chmod 777 /var/log" } } } }
额外必要配置
Spot Fleet实例不会自动执行CFN Init,你需要在UserData中添加触发脚本,确保元数据中的命令被执行。示例如下(补充到你的Fn::Join数组中):
#!/bin/bash # 安装CFN工具(若镜像未预装) yum install -y aws-cfn-bootstrap # 触发CFN Init执行 /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource MyServer --region ${AWS::Region}
其他注意事项
- 确保实例所在子网能访问AWS CloudFormation服务(私有子网需配置NAT网关或VPC端点);
- 实例IAM角色需具备执行CFN Init的权限(允许访问CloudFormation相关资源)。
内容的提问来源于stack exchange,提问作者Orly Orly
相关产品推荐
相关产品推荐

