簡體   English   中英

當 AWS SSM RunCommand 腳本在我的 EC2 實例上完成執行時,如何觸發事件或通知?

[英]How can I trigger an event or notification when an AWS SSM RunCommand Script completes executing on my EC2 Instance?

一些背景:

我正在編寫一個應用程序(使用 AWS Ruby SDK/API)在 AWS EC2 實例上部署另一個應用程序。 具體來說,我將它部署為 4 個 ec2 實例的 ECS 集群,然后啟動 ECS 任務(不是服務),每個 ec2 實例上一個並運行這些 docker 映像。 這一切正常。 問題是在某些時候我需要在我的 ECR 存儲庫中保存這些 docker 圖像之一。 我通過使用簡單系統管理器 (SSM) 的 aws:runShellScript 在 ECS 容器實例上運行命令來做到這一點。 該命令可能需要 1-4 分鍾,我無法確定命令何時完成。 現在我做了一個睡眠,然后從存儲庫中獲取標記的容器圖像,這很容易出錯。

問題:

有沒有什么辦法:

  1. 等待 SSM 運行命令完成? 或者
  2. 我的部署應用程序是否通過 AWS Lambda 或類似方式得到通知? 或者
  3. 監聽事件?

以下是我能想到的一些選項:

  • 您可以向 SSM 命令添加最后一步,該命令將發送電子郵件或發布到 SNS 主題或類似內容。
  • AWS SSM send_command API 采用notification_config參數,您可以配置該參數以在命令處於某些狀態(例如“成功”狀態)時向 SNS 主題發送通知。 這可能是監視命令狀態的最佳選擇。

完成發布到 SNS 主題的操作后,您可以將 Lambda 函數配置為由該 SNS 主題中的消息觸發。

我通過定期檢查命令的狀態是否不再是“InProgress”來解決這個問題。 代碼在 bash 中,但邏輯也應該適用於其他地方。

ID="instance_id"
COMMAND_ID=$(aws ssm send-command --instance-ids $ID --document-name "AWS-RunShellScript" 
             --parameters commands="python" --output text --query "Command.CommandId")
STATUS=$(aws ssm list-commands --instance-id $ID --command-id $COMMAND_ID 
         --query "Commands[0].Status")

while [ $STATUS "==" '"InProgress"' ]; do
    sleep 30;
    STATUS=$(aws ssm list-commands --instance-id $ID --command-id $COMMAND_ID
             --query "Commands[0].Status"); 
done

暫無
暫無

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

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