将用户数据传递给 AWS 客户端

将用户数据传递给 AWS 客户端

有人成功将用户数据传递给 AWS CLI 吗?

我尝试过以下各种咒语,但都没有效果。

文档说字符串必须采用 base64 编码:http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html

实例日志从未表明脚本已执行且 chef 已安装。

aws ec2 run-instances --image-id ami-a73264ce --count 1 --instance-type t1.micro       --key-name scrubbed --iam-instance-profile Arn=arn:aws:iam::scrubbed:instance-profile/scrubbed --user-data $(base64 chef_user_data.sh --wrap=0)

chef_用户_数据.sh

#!/bin/bash
curl -L https://www.opscode.com/chef/install.sh | sudo bash

答案1

该文档在 aws 网站、该工具的 git repo 和该工具本身的输出之间不一致。

看来最新的信息是在 repo 页面中:https://github.com/aws/aws-cli

答案是使用类似的东西:--user-data file://chef_user_data.sh

答案2

是的,我们有。该参数按定义工作,但问题是 ec2 将用户数据视为不透明的数据类型 - 它按原样传递它,没有具体表示它是什么真的是 - 这留给实例上的消费应用程序进程。 CLI 的命令行特性需要这种编码,但接收进程现在有义务对其进行解码。 Chef 不需要。 CloudINIT.net 也不需要。 您可以通过检查实例元数据来确认这一点

    http://169.254.169.254/latest/user-data

似乎 CLI 应该对 base64 用户数据有效负载进行编码。

编辑:事实证明文档很糟糕,-user-data 参数实际上接受文件参数,并进行编码。--user-data file:///path/to/the/file。请参阅https://github.com/aws/aws-cli/issues/366

相关内容