

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

# 使用 Amazon SNS 的 Elastic Beanstalk 環境通知
<a name="using-features.managing.sns"></a>

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

**注意**  
Elastic Beanstalk 使用 Amazon SNS 進行通知。如需 Amazon SNS 定價的相關資訊，請參閱 [https://aws.amazon.com/sns/pricing/](https://aws.amazon.com/sns/pricing/)。

當您為環境設定通知時，Elastic Beanstalk 會代表您為您的環境建立 Amazon SNS 主題。若要傳送訊息給 Amazon SNS 主題，Elastic Beanstalk 必須具有所需的許可。如需詳細資訊，請參閱[設定傳送通知的許可](#configuration-notifications-permissions)。

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

![Amazon SNS 通知電子郵件](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/sns-notification-email.png)


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

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

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

## 使用 Elastic Beanstalk 主控台設定通知
<a name="configuration-notifications-console"></a>

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

**在 Elastic Beanstalk 主控台中設定通知**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇**組態**。

1. 在**更新、監控和日誌記錄**組態類別中，選擇**編輯**。

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

1. 輸入電子郵件地址。

1. 若要儲存變更，請選擇頁面底部的**儲存變更**。

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

## 使用組態選項來設定通知
<a name="configuration-notifications-namespace"></a>

使用 [`aws:elasticbeanstalk:sns:topics` 命名空間](command-options-general.md#command-options-general-elasticbeanstalksnstopics)中的選項，來設定您環境的 Amazon SNS 通知。您可以使用[組態檔案](ebextensions.md)、CLI 或軟體開發套件來設定這些選項。
+ **通知端點** – 要作為通知傳送目的地的電子郵件地址、Amazon SQS 佇列或 URL。如果您設定此選項，則會建立指定端點的 SQS 佇列和訂閱。如果端點並非電子郵件地址，您也必須設定 `Notification Protocol` 選項。SNS 會根據 `Notification Endpoint` 的值來驗證 `Notification Protocol` 的值。設定此選項多次，會產生額外的主題訂閱。如果您移除此選項，則會刪除主題。
+ **通知通訊協定** – 用來傳送通知給 `Notification Endpoint` 的通訊協定。此選項的預設值為 `email`。將此選項設定為 `email-json`，會傳送 JSON 格式的電子郵件；設定為 `http` 或 `https`，會將 JSON 格式的通知發佈到 HTTP 端點；設定為 `sqs`，則會傳送通知到 SQS 佇列。
**注意**  
AWS Lambda 不支援 通知。
+ **通知主題 ARN** - 在為您的環境設定通知端點之後，請讀取此設定，來取得 SNS 主題的 ARN。您也可以設定此選項，來使用現有的通知用 SNS 主題。當您變更此選項或終止環境時，您透過此選項連接到環境的主題不會遭到刪除。

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

------
#### [ JSON ]

****  

  ```
  {
    "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:CreateTopic`、`sns:DeleteTopic`
  + 如果要將 `Notification Topic Name` 從一個自訂主題名稱變更為另一個自訂主題名稱，您也必須在 `Resource` 清單中包含這兩個主題的 ARN。或者，包括涵蓋兩個主題的常規表達式。通過這種方式，Elastic Beanstalk 有許可刪除舊主題並建立新主題。

EB CLI 和 Elastic Beanstalk 主控台會為前述選項套用建議的數值。若您想要使用組態檔進行相同的設定，您必須移除這些設定。如需詳細資訊，請參閱「[建議值](command-options.md#configuration-options-recommendedvalues)」。

## 設定傳送通知的許可
<a name="configuration-notifications-permissions"></a>

本節討論與使用 Amazon SNS 進行通知相關的安全性考量。有兩種不同的情況：
+ 使用 Elastic Beanstalk 為您的環境建立的預設 Amazon SNS 主題。
+ 透過組態選項提供外部 Amazon SNS 主題。

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

### 預設主題的許可
<a name="configuration-notifications-permissions-default"></a>

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

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

------
#### [ JSON ]

****  

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

------

### 外部主題的許可
<a name="configuration-notifications-permissions-external"></a>

[使用組態選項來設定通知](#configuration-notifications-namespace) 會說明如何使用另一個 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`}}。

------
#### [ JSON ]

****  

```
{
  "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 存取控制範例](https://docs.aws.amazon.com/sns/latest/dg/sns-access-policy-use-cases.html)。