簡體   English   中英

如何通過AWS自動縮放事件執行Shell腳本

[英]How to execute a shell script as a result of an aws auto-scale event

背景

我通過AWS代碼部署獲得了以下設置: 在此處輸入圖片說明

當前,我們已經將我們的EC2應用程序服務器連接到一個自動擴展組,但是缺少一個步驟:一旦啟動了新服務器,我們就不會自動從git repo上部署最新代碼

我正在閱讀教程:基本上,我想在實例啟動后立即運行一堆命令,但要先將其連接到負載均衡器。

上面的教程介紹了一般情況,但是我無法回答以下問題:

  1. 如何在ec2實例上保存腳本?
  2. 一旦實例被擴展但在其連接到負載均衡器之前,該腳本如何執行?

我認為您不需要生命周期掛鈎,當您想在不同的統計信息(例如停止,啟動和終止)中執行操作時,生命周期非常有用,而您只需提取最新的代碼和一些其他命令即可。

為了回答您的問題,我將建議采用以下方法,因為同一任務還有許多其他方法。

  1. 您無需保存腳本或命令,將它們放在s3上,也可以運行命令,只需將它們放在啟動配置中的user data中即可。 您可以將它們作為bash腳本運行,也可以從aws s3中提取腳本。

在此處輸入圖片說明

這可能是處理拉碼案例的最簡單示例。 因此,只要此自動伸縮組中有新實例啟動,此命令便會運行。 另一個示例可以是運行復雜的腳本,將它們放在s3上,然后在放大時拉出它們。

在此處輸入圖片說明

我假設您已經設置了s3和bitbucket的權限。 您可以在此期間運行任何復雜程序。

  1. 第二步有些棘手,您可以使用其他方法,該實例在運行正常之前永遠不會收到流量,因此一旦代碼更新且所有必需的腳本執行完畢,請啟動應用程序,然后再運行應用程序。

另一種方法可以是

a):健康檢查寬限期

通常,剛投入使用的Auto Scaling實例需要先進行預熱,然后才能通過運行狀況檢查。 Amazon EC2 Auto Scaling等待運行狀況檢查寬限期結束,然后再檢查實例的運行狀況。

b)自定義健康檢查

如果您擁有自己的運行狀況檢查系統,則可以將實例的運行狀況信息直接從系統發送到Amazon EC2 Auto Scaling。

使用以下set-instance-health命令將指定實例的健康狀態設置為“不健康”。

aws autoscaling set-instance-health --instance-id i-123abc45d --health-status healthy

您可以使用curl調用獲取實例ID,curl調用是我們放置在userdata中的腳本。

如果您具有自定義運行狀況檢查,則可以將運行狀況檢查中的信息發送到Amazon EC2 Auto Scaling,以便Amazon EC2 Auto Scaling可以使用此信息。 例如,如果您確定某個實例無法正常運行,則可以將該實例的運行狀況設置為“不正常”。 下次Amazon EC2 Auto Scaling對實例執行運行狀況檢查時,它將確定實例不正常,然后啟動替換實例。

c)實例熱身

使用逐步擴展策略,您可以指定新啟動的實例進行預熱所需的秒數。 在指定的預熱時間到期之前,不會將實例計入Auto Scaling組的聚合指標。 在向外擴展時,AWS也不會將正在預熱的實例視為該組當前容量的一部分。 因此,落入同一步長調整范圍內的多個警報違規將導致單個縮放活動。 這樣可以確保我們添加的實例不會超出您的需要。

再說一遍,第二步沒什么大不了的,您可以使用腳本來控制流程,最后啟動應用程序,這樣它將被標記為正常,

您也可以嘗試在進入/退出時保持待機狀態,但是我認為通過自定義健康檢查進行熱身可以完成此工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM