使用 Amazon SNS 的 Elastic Beanstalk 環境通知 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon SNS 的 Elastic Beanstalk 環境通知

您可以將 AWS Elastic Beanstalk 環境設定為使用 Amazon Simple Notification Service (Amazon SNS) 來通知您影響應用程式的重要事件。若要在發生錯誤或環境運作狀態發生變更時接收 AWS 的電子郵件,請在建立環境或稍後建立環境時指定電子郵件地址。

注意

Elastic Beanstalk 使用 Amazon SNS 進行通知。如需 Amazon SNS 定價的相關資訊,請參閱 https://aws.amazon.com/sns/pricing/

當您為環境設定通知時,Elastic Beanstalk 會代表您為您的環境建立 Amazon SNS 主題。若要傳送訊息給 Amazon SNS 主題,Elastic Beanstalk 必須具有所需的許可。如需更多詳細資訊,請參閱 設定傳送通知的許可

當值得注意的事件發生時,Elastic Beanstalk 會傳送訊息到主題。然後,Amazon SNS 會將收到的訊息轉傳給該主題的訂閱者。值得注意的事件包括環境建立的錯誤,以及環境中和執行個體運作狀態的所有變更。Amazon EC2 Auto Scaling 操作的事件 (例如為環境新增和移除執行個體) 和其他資訊參考事件,則不會觸發通知。

Amazon SNS 通知電子郵件

您可以在建立環境或之後某個時候,在 Elastic Beanstalk 主控台中輸入電子郵件地址。這將會建立一個 Amazon SNS 主題並訂閱。Elastic Beanstalk 會管理主題的生命週期,並且在您的環境終止時,或是當您在環境管理主控台中移除電子郵件地址時,將主題刪除。

aws:elasticbeanstalk:sns:topics 命名空間提供了選項,可藉由使用組態檔案、CLI 或 SDK 來設定 Amazon SNS 主題。透過使用這些方法之一,您可以設定訂閱者和端點的類型。對於訂閱者類型,您可以選擇 Amazon SQS 佇列或 HTTP URL。

您只能開啟或關閉 Amazon SNS 通知。根據您環境的規模和組成,傳送至主題的通知頻率可能很高。若要設定在特定情況下傳送通知,您可以選擇其他選項。您可以使用 Amazon EventBridge 設定事件驅動的規則,以便在 Elastic Beanstalk 發出符合特定條件的事件時通知您。或者,您也可以設定環境發佈自訂指標,並設定 Amazon CloudWatch 警示,以便在這些指標達到狀況不良的臨界值時通知您。

使用 Elastic Beanstalk 主控台設定通知

您可以在 Elastic Beanstalk 主控台輸入電子郵件地址,以為您的環境建立 Amazon SNS 主題。

在 Elastic Beanstalk 主控台中設定通知
  1. 開啟 Elastic Beanstalk 主控台,然後在 Regions (區域) 清單中選取您的 AWS 區域。

  2. 在導覽窗格中,選擇 Environments (環境),然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇 Configuration (組態)

  4. 更新、監控和日誌記錄組態類別中,選擇編輯

  5. 向下捲動至電子郵件通知區段。

  6. 輸入電子郵件地址。

  7. 若要儲存變更,請選擇頁面底部的儲存變更

當您輸入通知用的電子郵件地址時,Elastic Beanstalk 會為您的環境建立 Amazon SNS 主題,並新增訂閱。Amazon SNS 會發送一封電子郵件到訂閱地址,來確認訂閱。您必須按一下確認電子郵件中的連結,來啟用訂閱和接收通知。

使用組態選項來設定通知

使用 aws:elasticbeanstalk:sns:topics 命名空間中的選項,來設定您環境的 Amazon SNS 通知。您可以使用組態檔案、CLI 或軟體開發套件來設定這些選項。

  • 通知端點 – 要作為通知傳送目的地的電子郵件地址、Amazon SQS 佇列或 URL。如果您設定此選項,則會建立指定端點的 SQS 佇列和訂閱。如果端點並非電子郵件地址,您也必須設定 Notification Protocol 選項。SNS 會根據 Notification Endpoint 的值來驗證 Notification Protocol 的值。設定此選項多次,會產生額外的主題訂閱。如果您移除此選項,則會刪除主題。

  • 通知通訊協定 – 用來傳送通知給 Notification Endpoint 的通訊協定。此選項的預設值為 email。將此選項設定為 email-json,會傳送 JSON 格式的電子郵件;設定為 httphttps,會將 JSON 格式的通知發佈到 HTTP 端點;設定為 sqs,則會傳送通知到 SQS 佇列。

    注意

    不支援 AWS Lambda 通知。

  • 通知主題 ARN - 在為您的環境設定通知端點之後,請讀取此設定,來取得 SNS 主題的 ARN。您也可以設定此選項,來使用現有的通知用 SNS 主題。當您變更此選項或終止環境時,您透過此選項連接到環境的主題不會遭到刪除。

    若要設定 Amazon SNS 通知,您需要擁有所需的許可。如果您的 IAM 使用者使用 Elastic Beanstalk AdministratorAccess-AWSElasticBeanstalk 受管使用者政策,則您應該已經擁有必要的許可,可設定 Elastic Beanstalk 為您的環境建立的預設 Amazon SNS 主題。但是,如果您設定了 Elastic Beanstalk 無法管理的 Amazon SNS 主題,則需要將下列政策新增至您的使用者角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:SetTopicAttributes", "sns:GetTopicAttributes", "sns:Subscribe", "sns:Unsubscribe", "sns:Publish" ], "Resource": [ "arn:aws:sns:us-east-2:123456789012:sns_topic_name" ] } ] }
  • 通知主題名稱 - 設定此選項,以自訂環境通知用的 Amazon SNS 主題的名稱。如果已存在具有相同名稱的主題,Elastic Beanstalk 會將該主題連接到環境。

    警告

    如果使用 Notification Topic Name 來將現有的 SNS 主題連接到環境,則當您在未來終止環境或變更此設定時,Elastic Beanstalk 將會刪除該主題。

    如果您變更此選項,則 Notification Topic ARN 也會變更。如果主題已連接到環境,則 Elastic Beanstalk 會刪除舊主題,然後建立新主題和訂閱。

    透過使用自訂主題名稱,您也必須提供在外部建立之自訂主題的 ARN。受管的使用者政策不會自動偵測具有自訂名稱的主題,因此您必須向 IAM 使用者提供自訂 Amazon SNS 許可。使用類似於用於自訂主題 ARN 的政策,但包括下列新增項目:

    • Actions 清單中包含另外兩個動作,特別是:sns:CreateTopicsns:DeleteTopic

    • 如果要將 Notification Topic Name 從一個自訂主題名稱變更為另一個自訂主題名稱,您也必須在 Resource 清單中包含這兩個主題的 ARN。或者,包括涵蓋兩個主題的常規表達式。通過這種方式,Elastic Beanstalk 有許可刪除舊主題並建立新主題。

EB CLI 和 Elastic Beanstalk 主控台會為前述選項套用建議的數值。若您想要使用組態檔進行相同的設定,您必須移除這些設定。如需詳細資訊,請參閱「建議值」。

設定傳送通知的許可

本節討論與使用 Amazon SNS 進行通知相關的安全性考量。有兩種不同的情況:

  • 使用 Elastic Beanstalk 為您的環境建立的預設 Amazon SNS 主題。

  • 透過組態選項提供外部 Amazon SNS 主題。

Amazon SNS 主題的預設存取政策只允許主題擁有者發佈或訂閱該主題。但是,透過適當的政策組態,可以授予 Elastic Beanstalk 發佈至 Amazon SNS 主題的許可,以本節所述兩種情況之一的方式進行。如需詳細資訊,請參閱以下子節。

預設主題的許可

當您為環境設定通知時,Elastic Beanstalk 會為您的環境建立 Amazon SNS 主題。若要傳送訊息給 Amazon SNS 主題,Elastic Beanstalk 必須具有所需的許可。如果您的環境使用 Elastic Beanstalk 主控台或 EB CLI 為其產生的服務角色,或使用帳戶的監控服務連結角色,那麼您就無需執行其他操作。這些受管角色包括必要的許可,允許 Elastic Beanstalk 將訊息傳送至 Amazon SNS 主題。

不過,如果您在建立環境時提供自訂服務角色,請確定這個自訂服務角色包含下列政策。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:us-east-2:123456789012:ElasticBeanstalkNotifications*" ] } ] }

外部主題的許可

使用組態選項來設定通知 會說明如何使用另一個 Amazon SNS 主題來取代 Elastic Beanstalk 提供的 Amazon SNS 主題。如果您取代了該主題,Elastic Beanstalk 必須確認您具有發佈至此 SNS 主題的許可,才能將 SNS 主題與環境相關聯。您應該具備 sns:Publish。服務角色會使用相同的許可。為了確認這一情形,Elastic Beanstalk 會傳送測試通知給 SNS,做為您建立或更新環境動作程序的一部分。如果此測試失敗,則您嘗試建立或更新環境也會失敗。Elastic Beanstalk 會顯示說明此次失敗原因的訊息。

如果您為環境提供自訂服務角色,請確定您的自訂服務角色包含下列政策,以允許 Elastic Beanstalk 將訊息傳送至 Amazon SNS 主題。在下列程式碼中,以您在組態選項中提供的 Amazon SNS 主題名稱取代 sns_topic_name

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:us-east-2:123456789012:sns_topic_name" ] } ] }

有關 Amazon SNS 存取控制的詳細資訊,請參閱《Amazon Simple Notification Service 開發人員指南》中的 Amazon SNS 存取控制範例