2014-01-15 88 views
4

代碼:EC2實例加載我的用戶數據的腳本,但不運行它

#!/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與cloud-init.log的內容)。

我錯過了什麼?

+1

是你的'文件'被創建?您是否嘗試了完整路徑'/ tmp/file'來檢查是否正在創建文件。 – Rico

+0

不,不會創建'file'。甚至沒有完整的路徑(感謝提醒,順便說一句)。 – Parzival

+1

您是否嘗試運行bash腳本?或者您可以嘗試從AWS控制檯創建實例(從AWS控制檯傳遞用戶數據)並查看腳本是否有問題。 – Rico

回答

4

這可能不再相關,但是呢。 我剛剛使用boto與Ubuntu和用戶數據,雖然文檔說用戶數據必須是base64編碼,它只適用於我,如果我將64位參數作爲常規字符串傳遞。

我從文件(使用fh.read())讀取用戶數據的內容,然後將其作爲user_data參數傳遞給run_instances。

+1

你是對的。同樣的事情也發生在我身上。當我用base64字符串嘗試時,它不適合我。但是,當我通過普通的字符串,它工作正常。最後感謝我知道如何去做。 – kishore

2

我認爲它不爲你工作,因爲用戶數據不能使用任何家當像你用「#!的/ usr /斌/包膜蟒蛇」 在幫助頁面http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html有兩個例子一個是標準的「# !/ bin/bash「,另外一個看起來很人造」#cloud-config「。可能它只有2個可用的shebang。 bash爲我工作。

相關問題