英文:
Error parsing metadata commands (server). Check JSON structure and network connectivity (NAT instance or Proxy)' for uniqueId
问题
I am trying to deploy AWS Spot Fleet via CloudFormation, and I want the commands in metadata to run after the instance is up, but I got this message:
"Error parsing metadata commands (server). Check JSON structure and network connectivity (NAT instance or Proxy)" for uniqueId: ip-10-28-6-6.
What is wrong with my JSON template file?
"MyServer": {
"Type": "AWS::EC2::SpotFleet",
"Properties": {
"SpotFleetRequestConfigData": {
"IamFleetRole": "arn:aws:iam::6******2:role/aws-ec2-spot-fleet-tagging-role",
"SpotPrice": "0.15",
"TargetCapacity": "1",
"LaunchSpecifications": [
{
"EbsOptimized": "false",
"InstanceType": {
"Ref": "myInstanceType"
},
"ImageId": ".....",
"SecurityGroups": [
......
],
"SubnetId": {
"Ref": "mySubnet"
},
"WeightedCapacity": "1",
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
.....
]
]
}
}
}
]
}
},
"Metadata": {
"AWS::CloudFormation::Init": {
"commands": [
{
"Fn::Join": [
"",
[
"echo ls -l /var/log > /home/MyFile.txt \n",
"chmod 777 /var/log \n"
]
]
}
]
}
}
}
Thanks for the help!
英文:
i am trying to deploy AWS spot::Fleet
via cloud formation
and i want the commands in metadata will run after the instance is up.
but got this msg:
> Error parsing metadata commands (server). Check JSON structure and
> network connectivity (NAT instance or Proxy)' for uniqueId:
> ip-10-28-6-6
what is wrong with my JSON template file?
"MyServer": {
"Type": "AWS::EC2::SpotFleet",
"Properties": {
"SpotFleetRequestConfigData": {
"IamFleetRole": "arn:aws:iam::6******2:role/aws-ec2-spot-fleet-tagging-role",
"SpotPrice": "0.15",
"TargetCapacity": "1",
"LaunchSpecifications": [{
"EbsOptimized": "false",
"InstanceType": {
"Ref": "myInstanceType"
},
"ImageId": ".....",
"SecurityGroups": [
......
],
"SubnetId": {
"Ref": "mySubnet"
},
"WeightedCapacity": "1",
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
....
]
]
}
}
}]
}
},
"Metadata": {
"AWS::CloudFormation::Init" : {
"commands": [
{
"Fn::Join":[
"",
[
"echo ls -l /var/log > /home/MyFile.txt \n",
"chmod 777 /var/log \n"
]
]
}
]
}
}
Thanks for the helpers!!!!
答案1
得分: 1
元数据块的结构不正确。AWS::CloudFormation::Init 部分应包括一个配置部分,其中提供命令或其他配置详细信息,命令本身应组织为键值对,而不是数组。
以下是您模板中已更正的元数据部分:
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"commands": {
"command1": {
"command": {
"Fn::Join": [
"",
[
"echo ls -l /var/log > /home/MyFile.txt"
]
]
}
},
"command2": {
"command": "chmod 777 /var/log"
}
}
}
}
}
用户数据脚本和元数据命令默认在 root 用户下运行。因此,您不需要为 /var/log 提供类似于 '777' 的高级权限。
最后,您的实例需要安装 AWS SSM Agent,以使 AWS::CloudFormation::Init 正常工作。
英文:
The Metadata block has an incorrect structure. The AWS::CloudFormation::Init section should include a config section where you provide commands or other configuration details, and the commands themselves should be organized as key-value pairs, not as an array.
Here's the corrected metadata section of your template:
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"commands": {
"command1": {
"command": {
"Fn::Join": [
"",
[
"echo ls -l /var/log > /home/MyFile.txt"
]
]
}
},
"command2": {
"command": "chmod 777 /var/log"
}
}
}
}
}
Userdata scripts and metadata commands run under the root by default. So you don't need to provide high-level permissions like '777' to /var/log.
Finally, your instance needs to have AWS SSM Agent installed for the AWS::CloudFormation::Init to work.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论