代码:
#!/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)。
我错过了什么?
答案 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适合我。