EC2实例加载我的用户数据脚本但不运行它

时间:2014-01-15 22:00:27

标签: python-2.7 amazon-web-services amazon-ec2 boto

代码:

#!/usr/bin/env python

import boto.ec2

conn_ec2 = boto.ec2.connect_to_region('us-east-1') # access keys are environment vars

my_code = """#!/usr/bin/env python

import sys

sys.stdout = open('file', 'w')
print 'test'
"""
reservation = conn_ec2.run_instances(image_id = 'ami-a73264ce',
                                     key_name = 'backendkey',
                                     instance_type = 't1.micro',
                                     security_groups = ['backend'],
                                     instance_initiated_shutdown_behavior = 'terminate',
                                     user_data = my_code)

使用正确的设置(它是公共Ubuntu 12.04,64位图像)启动实例,我可以正常SSH。用户数据脚本似乎正确加载:我可以在/var/lib/cloud/instance/user-data.txt(以及/var/lib/cloud/instance/scripts/part-001)和EC2控制台中看到它。

但就是这样,脚本似乎没有被执行。在this answer之后我检查了/var/log/cloud-init.log文件,但它似乎没有包含与我的脚本相关的任何错误消息(好吧,也许我遗漏了一些东西 - here is a gist包含云的内容-init.log)。

我错过了什么?

2 个答案:

答案 0 :(得分:4)

这可能不再相关了,但是。 我刚刚使用了boto和ubuntu以及用户数据,虽然文档中说用户数据必须是base64编码的,但只有当我将64位参数作为常规字符串传递时,它才对我有效。

我从文件中读取用户数据的内容(使用fh.read()),然后将其作为user_data参数传递给run_instances。

答案 1 :(得分:2)

我认为它不适合你,因为用户数据不能像你使用的那样使用任何shebang“#!/ usr / bin / env python” 在帮助页面http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html上有两个例子,一个是标准的“#!/ bin / bash”,另一个看起来是人为的“#cloud-config”。可能只有2个可用的shebangs。 bash one适合我。