运行aws ec2 run-instances
命令时,我的base64编码用户数据被忽略.
这是我的用户数据:
$ cat user-data.sh #!/bin/bash cat >> /var/tmp/user-data-testing <这是上面脚本的base64 blob:
IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg==现在,我的下面命令确实读取了用户数据:
aws ec2 run-instances --image-id ami-8635a9b6 --instance-type t1.micro --placement AvailabilityZone=us-west-2a --security-groups quicklaunch-1 --key-name devops --user-data file://user-data.sh我确实看到该文件
/var/tmp/user-data-testing
已创建.但是,当我尝试将用户数据作为base64编码的blob传递如下时,它会被忽略:
aws ec2 run-instances --image-id ami-8635a9b6 --instance-type t1.micro --placement AvailabilityZone=us-west-2a --security-groups quicklaunch-1 --key-name devops --user-data IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg==现在,我没有看到
/var/tmp/user-data-testing
创建的文件.另外,我知道我的base64 blob是健康的,因为我可以解码它:
$ base64 --decode <<< IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg== #!/bin/bash cat >> /var/tmp/user-data-testing <但是,我确实看到实例元数据具有base64格式的用户数据:
$ curl -L http://169.254.169.254/latest/user-data/ IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg==那么,在使用base64用户数据blob时我做错了什么?
我的实例元数据意识到它,但似乎在实例启动时它并没有真正被执行(或解码和执行).
更新:
如果我在启动实例时通过AWS控制台传递相同的base64 blob,它可以工作.因此,我使用它的方式似乎有些不对劲
AWS-CLI
.更新:
我刚刚使用我的ruby代码尝试了相同的base64 blob,如下所示,它也运行良好:
ec2 = Aws::EC2.new resp = ec2.run_instances( min_count: 1, max_count: 1, image_id: 'ami-8635a9b6', instance_type: 't1.micro', placement: { availability_zone: 'us-west-2a' }, security_groups: ['quicklaunch-1'], key_name: 'devops', user_data: 'IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg==' )那么,WTF对我的执行是错误的
AWS-CLI
吗?
似乎awscli为您执行base64编码,因此您应该将未编码的文本传递给--user-data.
显然文档对此并不十分清楚.检查此链接.
那么这个语法应该是:
aws ec2 run-instances --image-id ami-8635a9b6 --user-data "echo TEST"
要么
aws ec2 run-instances --image-id ami-8635a9b6 --user-data file://path/to/file