

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

# Amazon EC2 Auto Scaling 的 Amazon SNS 通知選項 Amazon EC2 Auto Scaling
<a name="ec2-auto-scaling-sns-notifications"></a>

您可以設定 Auto Scaling 群組，以通知您影響應用程式的重要事件。透過 通知，您也可以消除輪詢，而且不會遇到有時由輪詢引起的`RequestLimitExceeded`錯誤。

有兩種方式可以接收有關 Amazon EC2 Auto Scaling 的通知：
+ **Amazon Simple Notification Service** – Amazon SNS 可以在 Auto Scaling 群組啟動或終止執行個體時通知您。您只能開啟或關閉 Amazon SNS 通知。如需詳細資訊，請參閱[Amazon SNS 和 Amazon EC2 Auto Scaling](#amazon-sns-and-ec2-auto-scaling)。
+ **Amazon EventBridge** – EventBridge 提供更進階、符合指定條件的事件驅動通知，並傳送至各種目標，包括 Amazon SNS。EventBridge 也可以監控更廣泛的 Auto Scaling 事件，以進行更精確的監控。如需詳細資訊，請參閱[使用 EventBridge 處理 Auto Scaling 事件](automating-ec2-auto-scaling-with-eventbridge.md)。

您可以選擇使用具有生命週期掛鉤的通知，在啟動或終止期間對執行個體執行自訂動作。如需如何設定通知以搭配生命週期掛鉤使用的詳細資訊，請參閱 [Amazon EC2 Auto Scaling lifecycle hook](lifecycle-hooks.md)。

## Amazon SNS 和 Amazon EC2 Auto Scaling
<a name="amazon-sns-and-ec2-auto-scaling"></a>

本節說明如何使用 Amazon SNS 來監控 Auto Scaling 群組何時啟動或終止執行個體。

例如，如果您設定 Auto Scaling 群組使用 `autoscaling: EC2_INSTANCE_TERMINATE` 通知類型，當 Auto Scaling 群組終止執行個體時，它會傳送電子郵件通知。此電子信件包含終止執行個體的詳細資訊，如執行個體的 ID 和終止執行個體的原因。

請注意，當 Amazon EC2 Auto Scaling 從群組新增或移除執行個體時，這些變更的通知會傳送給您，每個執行個體都會傳送一個通知。不過，這些通知的交付是盡最大努力的，您的執行個體在初始通知之後仍可能會失敗，例如，如果稍後的運作狀態檢查失敗。如需運作狀態檢查程序的詳細資訊，請參閱 [Auto Scaling 群組中的執行個體運作狀態檢查](ec2-auto-scaling-health-checks.md)。

如需 Amazon SNS 一般的詳細資訊，請參閱 [Amazon Simple Notification Service 開發人員指南](https://docs.aws.amazon.com/sns/latest/dg/)。

**Contents**
+ [SNS 通知](#auto-scaling-sns-notifications)
+ [設定 Amazon EC2 Auto Scaling 的 Amazon SNS 通知](#as-configure-sns)
  + [建立 Amazon SNS 主題](#as-sns-create-topic)
  + [訂閱 Amazon SNS 主題](#as-sns-subscribe-topic)
  + [確認 Amazon SNS 訂閱](#as-sns-confirm-subscription)
  + [設定 Auto Scaling 群組以傳送通知](#as-configure-asg-for-sns)
  + [測試通知](#testing-hook-notifications)
  + [刪除通知組態](#delete-settingupnotifications)
+ [加密 Amazon SNS 主題的金鑰政策](#sns-kms-permissions)

### SNS 通知
<a name="auto-scaling-sns-notifications"></a>

Amazon EC2 Auto Scaling 支援在以下事件發生時傳送 Amazon SNS 通知。


| 事件 | Description | 
| --- | --- | 
| `autoscaling:EC2_INSTANCE_LAUNCH` | 執行個體成功啟動 | 
| `autoscaling:EC2_INSTANCE_LAUNCH_ERROR` | 執行個體啟動失敗 | 
| `autoscaling:EC2_INSTANCE_TERMINATE` | 執行個體成功終止 | 
| `autoscaling:EC2_INSTANCE_TERMINATE_ERROR` | 執行個體終止失敗 | 

訊息包括下列資訊：
+ `Event`：事件。
+ `AccountId`：Amazon Web Services 帳戶 ID。
+ `AutoScalingGroupName`：Auto Scaling 群組的名稱。
+ `AutoScalingGroupARN`：Auto Scaling 群組的 ARN。
+ `EC2InstanceId`：EC2 執行個體的 ID。

例如：

```
Service: AWS Auto Scaling
Time: 2016-09-30T19:00:36.414Z
RequestId: 4e6156f4-a9e2-4bda-a7fd-33f2ae528958
Event: autoscaling:EC2_INSTANCE_LAUNCH
AccountId: 123456789012
AutoScalingGroupName: my-asg
AutoScalingGroupARN: arn:aws:autoscaling:region:123456789012:autoScalingGroup...
ActivityId: 4e6156f4-a9e2-4bda-a7fd-33f2ae528958
Description: Launching a new EC2 instance: i-0598c7d356eba48d7
Cause: At 2016-09-30T18:59:38Z a user request update of AutoScalingGroup constraints to ...
StartTime: 2016-09-30T19:00:04.445Z
EndTime: 2016-09-30T19:00:36.414Z
StatusCode: InProgress
StatusMessage: 
Progress: 50
EC2InstanceId: i-0598c7d356eba48d7
Details: {"Subnet ID":"subnet-id","Availability Zone":"zone"}
Origin: AutoScalingGroup
Destination: EC2
```

### 設定 Amazon EC2 Auto Scaling 的 Amazon SNS 通知
<a name="as-configure-sns"></a>

若要使用 Amazon SNS 傳送電子郵件通知，您必須先建立*主題*，然後以您的電子郵件地址訂閱此主題。

#### 建立 Amazon SNS 主題
<a name="as-sns-create-topic"></a>

 SNS 主題是一種邏輯存取點，也是 Auto Scaling 群組用來傳送通知的通訊管道。您可以為您所建立的主題指定名稱。

在建立主題名稱時，名稱必須符合下列要求：
+ 長度介於 1 與 256 個字元之間
+ 包含大小寫 ASCII 字母、數字、底線或連字號 

如需詳細資訊，請參閱《Amazon Simple Notification Service 開發人員指南》**中的[建立 Amazon SNS 主題](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。

#### 訂閱 Amazon SNS 主題
<a name="as-sns-subscribe-topic"></a>

若要收到 Auto Scaling 群組傳送到該主題的通知，您必須訂閱連結至主題的端點。在此過程中，請於 **Endpoint** (端點) 指定要用來接收 Amazon EC2 Auto Scaling 通知的電子郵件地址。

如需詳細資訊，請參閱《Amazon Simple Notification Service 開發人員指南》**中的[訂閱 Amazon SNS 主題](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)。

#### 確認 Amazon SNS 訂閱
<a name="as-sns-confirm-subscription"></a>

Amazon SNS 會將確認電子郵件傳送到您在先前步驟中所指定的電子郵件地址。

請務必從  AWS 通知開啟電子郵件，並選擇連結確認訂閱後，再繼續進行下一個步驟。

您會收到來自 的確認訊息 AWS。Amazon SNS 現在已設定為採用您指定的電子郵件地址，以電子郵件方式接收和傳送通知。

#### 設定 Auto Scaling 群組以傳送通知
<a name="as-configure-asg-for-sns"></a>

您可以在啟動或終止執行個體等擴展事件發生時，設定 Auto Scaling 群組傳送通知給 Amazon SNS。Amazon SNS 會傳送執行個體的資訊通知到您所指定的電子信件地址。

**設定 Auto Scaling 群組的 Amazon SNS 通知 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格，顯示所選群組的相關資訊。

1. 在 **Activity** (活動) 索引標籤中，選擇 **Activity notifications** (活動通知)、**Create notification** (建立通知)。

1. 在 **Create notifications** (建立通知) 窗格，請執行下列動作：

   1. 對於 **SNS Topic** (SNS 主題)，選取您的 SNS 主題。

   1. 對於 **Event types** (事件類型)，選取要傳送通知的事件。

   1. 選擇**建立**。

**若要設定 Auto Scaling 群組的 Amazon SNS 通知 (AWS CLI)**  
請使用以下 [put-notification-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-notification-configuration.html) 命令。

```
aws autoscaling put-notification-configuration --auto-scaling-group-name {{my-asg}} --topic-arn {{arn}} --notification-types "autoscaling:EC2_INSTANCE_LAUNCH" "autoscaling:EC2_INSTANCE_TERMINATE"
```

#### 測試通知
<a name="testing-hook-notifications"></a>

若要產生啟動事件的通知，請將 Auto Scaling 群組所需的容量增加 1 來更新 Auto Scaling 群組。在執行個體啟動後的幾分鐘內，您會接收到通知。

**變更所需的容量 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   **Auto Scaling groups** (Auto Scaling 群組) 頁面底部會開啟一個分割窗格，顯示所選群組的相關資訊。

1. 在 **Details** (詳細資訊) 索引標籤上，選擇 **Group details** (群組詳細資訊)、**Edit** (編輯)。

1. 對於 **Desired capacity (所需容量)**，將目前值增加 1。如果此值超過 **Maximum capacity** (容量上限)，您必須也將 **Maximum capacity** (容量上限) 的值增加 1。

1. 選擇**更新**。

1. 幾分鐘之後，您會收到有關事件的通知。如果在此測試中，啟動了不需要的多餘執行個體，可以將 **Desired capacity** (所需容量) 減少 1。幾分鐘之後，您會收到有關事件的通知。

#### 刪除通知組態
<a name="delete-settingupnotifications"></a>

如果不再使用 Amazon EC2 Auto Scaling 通知組態，則可將其刪除。

**刪除 Amazon EC2 Auto Scaling 通知組態 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組。

1. 在 **Activity** (活動) 索引標籤上，選取要刪除的通知旁的核取方塊，然後選擇 **Actions** (動作)、**Delete** (刪除)。

**刪除 Amazon EC2 Auto Scaling 通知組態 (AWS CLI)**  
使用下列 **delete-notification-configuration** 命令。

```
aws autoscaling delete-notification-configuration --auto-scaling-group-name {{my-asg}} --topic-arn {{arn}}
```

如需刪除 Amazon SNS 主題以及所有與 Auto Scaling 群組相關聯訂閱的相關資訊，請參閱《Amazon Simple Notification Service 開發人員指南》**中的[刪除 Amazon SNS 訂閱和主題](https://docs.aws.amazon.com/sns/latest/dg/sns-delete-subscription-topic.html)。

### 加密 Amazon SNS 主題的金鑰政策
<a name="sns-kms-permissions"></a>

您指定的 Amazon SNS 主題可能會使用透過 AWS Key Management Service建立的客戶受管金鑰進行加密。若要授予 Amazon EC2 Auto Scaling 發佈到加密主題的許可，您必須先建立 KMS 金鑰，然後將下列陳述式新增至 KMS 金鑰的政策。請將範例 ARN 取代為允許存取金鑰的適當服務連結角色之 ARN。如需詳細資訊，請參閱《*Amazon Simple Notification Service 開發人員指南*》中的[設定 AWS KMS 許可](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html#sns-what-permissions-for-sse)。

在此範例中，政策陳述式會向名為 **AWSServiceRoleForAutoScaling** 的服務連結角色授予許可，使其能夠使用客戶受管金鑰。若要進一步了解 Amazon EC2 Auto Scaling 服務連結角色的詳細資訊，請參閱 [Amazon EC2 Auto Scaling 的服務連結角色](autoscaling-service-linked-role.md)。

```
{
  "Sid": "Allow service-linked role use of the customer managed key",
  "Effect": "Allow",
  "Principal": {
    "AWS": "{{arn:aws:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling}}"
  },
  "Action": [
    "kms:GenerateDataKey*",
    "kms:Decrypt"
  ],
  "Resource": "*"
}
```

允許 Amazon EC2 Auto Scaling 發佈到加密主題的金鑰政策中不支援 `aws:SourceArn` 和 `aws:SourceAccount` 條件金鑰。