0

我們有幾個AWS EC2實例,我們爲其設置掛鉤到Cloudwatch事件的Lambda函數。一個Lambda函數在上午8:00啓動實例,並在下午6:00關閉它們。我想要的是一種方式來通知用戶,實例將在計劃執行前15分鐘關閉。是否有任何方法遍歷實例並創建一條消息告訴用戶instance1和instance2即將關閉?我們的Lambda功能代碼直接來自示例:如何設置關於即將關閉的實例的AWS通知?

import boto3 

# Enter the region your instances are in, e.g. 'us-east-1' 
region = 'us-east-1' 

# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']# 
instances = ['X-XXXXXXXX', 'X-XXXXXXXX'] 

def lambda_handler(event, context): 
    ec2 = boto3.client('ec2', region_name=region) 
    ec2.start_instances(InstanceIds=instances) 
    print 'started your instances: ' + str(instances) 

任何輸入都會有很大的幫助。

+0

你所說的「通知用戶」是什麼意思?用戶是登錄到實例還是正在運行應用程序?您希望如何通知用戶(電子郵件,彈出消息,電擊)? –

+0

對不起,我應該更清楚。電擊已經結束,但電子郵件很好...... – TortillaCurtain

+0

我只是想知道爲什麼不輕鬆使用Autoscaling組?你也可以安排它。 –

回答

0

除非我誤解了問題,代碼就幾乎等同於你已經擁有的代碼。

讓您的lambda函數的副本關閉您的實例。修改此版本以發送電子郵件(通過SES)而不是實際關閉服務器。安排這個新的Lambda函數在關閉函數運行前15分鐘運行。

+1

我希望避免創造另一個功能;我不確定是否有辦法設置自動發送通知。我會嘗試你的解決方案,我相信它會起作用。 – TortillaCurtain

+0

如果您想多開一點,可以將消息發佈到SNS主題而不是SES。那麼你可以有一些靈活的通知選項。 – Mikelax

1

默認情況下在EC2,從內停止的情況下(如sudo haltsudo poweroff)是完全一樣通過API阻止他們 - 他們在控制檯過渡到Stopped狀態,你不必爲他們付費,就好像你已經通過要求API阻止他們來阻止他們。

命令shutdown -h +15將要求系統自行關閉15分鐘,將播出一個警告所有t​​ty。

因此......您可以設想在每個實例中提前15分鐘從Lambda調用EC2 RunCommand,而不是關閉功能,在每個系統上遠程運行關機命令。

或者,如果這些系統每天都這樣,只是把目前的crontab關機。