代码:

#!/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/

10-10 18:08