2016-02-19 154 views
1

我想在創建新EC2實例的事件中使用Lambda運行一些代碼。尋找藍圖config-rule-change-triggered我有能力根據各種配置更改運行代碼,但不能在創建代碼時運行代碼。有沒有辦法做我想要的?或者我誤解了Lambda的用例?創建新的AWS EC2實例時運行AWS Lambda代碼

回答

3

您可以通過在EC2實例啓動用戶數據中插入代碼並讓該代碼明確調用Lambda函數來完成此操作,但這不是最好的方法。

更好的方法是使用CloudTrail和Lambda的組合。如果您啓用CloudTrail日誌記錄(每個a/c應始終在所有地區啓用此功能),則CloudTrail將登錄到您賬戶中所有API調用的S3。然後通過配置S3將事件發佈到Lambda來將其連接到Lambda。您的Lambda函數將收到一個S3事件,然後可以檢索API日誌,查找RunInstances API調用,然後執行您需要的任何工作,作爲新實例啓動的結果。

一些有用的參考herehere

+1

謝謝,我定製了您提供的重新實現我想要的代碼。 – TimothyBuktu

2

我沒有看到實例啓動的通知觸發器,但是您可以執行的操作是編寫一個啓動腳本並通過userdata傳遞該腳本。該啓動腳本需要下載並安裝AWS CLI,然後對SNS進行身份驗證並將消息發佈到預先配置的主題。啓動腳本將向SNS進行身份驗證,並且通過您的IAM角色需要其他任何AWS服務,因此您需要爲IAM角色授予權限,以執行您希望腳本執行的任何操作。這可以在IAM控制檯中完成。

該主題然後將您的Lambda函數訂閱到它,它將執行。類似於下面的文章(雖然作者正在做類似的關機,而不是啓動)。

http://rogueleaderr.com/post/48795010760/how-to-notifyemail-yourself-when-an-ec2-instance

如果你把EC2實例爲自動縮放組,我相信是有當自動縮放集團推出一個新的實例被炒魷魚,所以你可以利用它的觸發器。

我希望有幫助。

2

如果您啓用了CloudTrail,那麼您可以讓S3 PutObject/TrailBucket觸發Lambda函數。 Lambda函數解析傳遞給它的對象,如果它找到RunInstances事件,則運行您的代碼。

我做了完全相同的事情,以便在啓動新實例時通知某些用戶。使用Lambda/Python,它是~20行代碼。

1

我們也有類似的要求,兩天回來的(用戶應該給電子郵件每當一個新的實例被推出)

1)進入CloudWatch的,然後選擇規則
2)選擇服務名(其EC2爲你的案例),然後選擇「Ec2實例狀態更改通知」 3)然後在「特定狀態」下拉列表中選擇未決
4)單擊添加目標選項並選擇您的lambda函數。

就是這樣,無論何時啓動新實例,Cloudwatch都會觸發您的lambda函數。

希望它有幫助!