cloudformation windows userdata cfn-init.exe行尾问题

时间:2018-05-21 16:35:25

标签: amazon-web-services amazon-cloudformation

通过添加一些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

1 个答案:

答案 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"]}