通过添加一些cfn-init来从S3存储桶请求数据。 我相信我有来自powershell的cfn-init.exe调用的语法问题,但似乎无法找到位置。这个结构取自Bootstrapping AWS CloudFormation Windows Stacks AWS Example。我也尝试过来自AWS cfn-init documentation的bash结构,但没有成功。
"UserData": {"Fn::Base64": {"Fn::Join": ["\n", [
"<powershell>",
...
"cfn-init.exe -v -s", { "Ref" : "AWS::StackName" },
" -r EC2Instance",
"</powershell>"
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config": {
"files" : {
"C:\\chef\\validator.pem" : {
"source" : "https://s3.amazonaws.com/dtcfstorage/validator.pem",
"authentication" : "s3creds"
}
}
},
"AWS::CloudFormation::Authentication" : {
"s3creds" : {
"type" : "S3",
"roleName" : "awss3chefkeyaccess"
}
}
}
}
正在运行cfn-init.exe,但是当参数传递给新行时出错:
2018/05/21 15:35:08Z:消息:来自用户脚本的错误:用法:cfn-init.exe [options] 或:cfn-init.exe [options] 或者:猫| cfn-init.exe [options] -
cfn-init.exe:错误:-s选项需要参数 cloudinittest:术语&#39; cloudinittest&#39;不被识别为cmdlet,函数,脚本文件或可操作的名称 程序。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。 在C:\ Windows \ TEMP \ UserScript.ps1:30 char:1 + cloudinittest + ~~~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:(cloudinittest:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
-r:术语&#39; -r&#39;不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查 拼写名称,或者如果包含路径,请验证路径是否正确,然后重试。 在C:\ Windows \ TEMP \ UserScript.ps1:31 char:2 + -r EC2Instance + ~~ + CategoryInfo:ObjectNotFound:( - r:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
答案 0 :(得分:0)
这是因为你已经在顶部使用\ n加入了。如果你在同一行输入一些参数函数,那么每个arg到join函数都会被换行事件分开! 因此,您的命令cfn-init已被解释为:
cfn-init.exe -v -s
stack-name
-r EC2Instance
...
由于线路断开,命令无法正常运行。 因此,您可以通过空格字符加入。您可以尝试用以下方法替换上述内容:
{"Fn::Join": [" ", ["cfn-init.exe -v -s", {"Ref":"AWS::StackName"},
"-r EC2Instance"]}