代码:
#!/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)
该实例以正确的设置启动(它是公共(public) 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 和 cloud-init.log 的内容)。我错过了什么?
最佳答案
这可能不再相关,但是。
我刚刚将 boto 与 ubuntu 和用户数据一起使用,尽管文档说用户数据必须是 base64 编码的,但只有当我将 64 位参数作为常规字符串传递时,它才对我有用。
我从文件中读取用户数据的内容(使用 fh.read()),然后将其作为 user_data 参数传递给 run_instances。
关于python-2.7 - EC2 实例加载我的用户数据脚本但不运行它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21149144/