

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

# 監控 CodeDeploy 中的部署
<a name="monitoring"></a>

監控是維護 CodeDeploy 和 AWS 解決方案可靠性、可用性和效能的重要部分。您應該從 AWS 解決方案的所有部分收集監控資料，以便在發生多點失敗時更輕鬆地偵錯。不過，在開始監控 CodeDeploy 之前，您應該建立監控計畫，其中包含下列問題的答案：
+ 監控目標是什麼？
+ 要監控哪些資源？
+ 監控這些資源的頻率為何？
+ 要使用哪些監控工具？
+ 誰將執行監控任務？
+ 發生問題時應該通知誰？

下一個步驟是為環境中的正常 CodeDeploy 效能建立基準，方法是在各種時間和不同的負載條件下測量效能。當您監控 CodeDeploy 時，請存放歷史監控資料，以便與目前的效能資料進行比較，識別正常效能模式和效能異常，並設計方法來解決問題。

例如，如果您使用的是 CodeDeploy，您可以監控部署和目標執行個體的狀態。部署或執行個體失敗時，您可能需要重新設定應用程式規格檔案、重新安裝或更新 CodeDeploy 代理程式、更新應用程式或部署群組中的設定，或變更執行個體設定或 AppSpec 檔案。

若要建立基準，您至少必須監控下列項目：
+ 部署事件和狀態
+ 執行個體事件和狀態

## 自動化監控工具
<a name="monitoring_automated_tools"></a>

AWS 提供各種工具，您可以用來監控 CodeDeploy。您可以設定其中一些工具來進行監控，但有些工具需要手動介入。建議您盡可能自動化監控任務。

您可以使用下列自動化監控工具來監看 CodeDeploy，並在發生錯誤時回報：
+ **Amazon CloudWatch 警示**：監看指定時段內的單一指標，並根據與多個時段內給定之閾值相對的指標值來執行一或多個動作。此動作是傳送到 Amazon Simple Notification Service (Amazon SNS) 主題或 Amazon EC2 Auto Scaling 政策的通知。CloudWatch 警示不會只因處於特定狀態就調用動作，狀態必須已變更並已維持一段指定的時間。如需詳細資訊，請參閱[使用 Amazon CloudWatch 工具監控部署](monitoring-cloudwatch.md)。

  如需更新服務角色以使用 CloudWatch 警示監控的詳細資訊，請參閱 [將 CloudWatch 許可授予 CodeDeploy 服務角色](monitoring-create-alarms-grant-permissions.md)。如需將 CloudWatch 警示監控新增至 CodeDeploy 操作的詳細資訊，請參閱 [使用 CodeDeploy 建立應用程式](applications-create.md)、 [使用 CodeDeploy 建立部署群組](deployment-groups-create.md)或 [使用 CodeDeploy 變更部署群組設定](deployment-groups-edit.md)。

  
+ **Amazon CloudWatch Logs**：監控、存放及存取來自 AWS CloudTrail 或其他來源的日誌檔案。如需詳細資訊，請參閱《*Amazon CloudWatch 使用者指南*》中的[監控日誌檔案](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html)。

  如需有關使用 CloudWatch 主控台檢視 CodeDeploy 日誌的資訊，請參閱 [ CloudWatch Logs 主控台中的檢視 CodeDeploy 日誌](https://aws.amazon.com/blogs/devops/view-aws-codedeploy-logs-in-amazon-cloudwatch-console/)。
+ **Amazon CloudWatch Events**：匹配事件並將它們路由至一或多個目標函式或串流以進行變更、擷取狀態資訊，以及採取修正動作。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[什麼是 Amazon CloudWatch Events？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchEvents.html)。

  如需在 CodeDeploy 操作中使用 CloudWatch Events 的詳細資訊，請參閱 [使用 Amazon CloudWatch Events 監控部署](monitoring-cloudwatch-events.md)。
+ **AWS CloudTrail 日誌監控** – 在帳戶之間共用日誌檔案、透過將日誌檔案傳送到 CloudWatch Logs 來即時監控 CloudTrail 日誌檔案、在 Java 中寫入日誌處理應用程式，以及驗證您的日誌檔案在 CloudTrail 交付後並未變更。如需詳細資訊，請參閱《AWS CloudTrail 使用者指南》**中的[使用 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-working-with-log-files.html)。

  如需搭配 CodeDeploy 使用 CloudTrail 的詳細資訊，請參閱 [使用 監控部署 AWS CloudTrail](monitoring-cloudtrail.md)。
+ **Amazon Simple Notification Service** — 設定事件驅動的觸發條件，以接收有關部署和執行個體事件的簡訊或電子郵件通知，例如成功或失敗。如需詳細資訊，請參閱[建立主題](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)和[什麼是 Amazon Simple Notification Service](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)。

  如需為 CodeDeploy 設定 Amazon SNS 通知的詳細資訊，請參閱 [使用 Amazon SNS 事件通知監控部署](monitoring-sns-event-notifications.md)。

## 手動監控工具
<a name="monitoring_manual_tools"></a>

監控 CodeDeploy 的另一個重要部分是手動監控 CloudWatch 警示未涵蓋的項目。CodeDeploy、CloudWatch 和其他 AWS 主控台儀表板可讓您at-a-glance檢視 AWS 環境的狀態。我們建議您也檢查 CodeDeploy 部署上的日誌檔案。
+ CodeDeploy 主控台會顯示：
  + 部署的狀態
  + 最近一次嘗試和最後一次成功部署修訂版的日期和時間。
  + 執行個體成功、失敗、略過，或部署中的數量。
  + 現場部署執行個體的狀態
  + 現場部署執行個體註冊或撤銷註冊的日期和時間。
+ CloudWatch 首頁顯示：
  + 目前警示與狀態
  + 警示與資源的圖表
  + 服務運作狀態

  此外，您可以使用 CloudWatch 執行下列動作：
  + 建立[自定儀表板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CloudWatch_Dashboards.html)來監控您注重的服務
  + 用於疑難排解問題以及探索驅勢的圖形指標資料。
  + 搜尋和瀏覽您的所有 AWS 資源指標
  + 建立與編輯要通知發生問題的警示

**主題**
+ [Monitoring Deployments with Amazon CloudWatch Tools](monitoring-cloudwatch.md)
+ [Monitoring Deployments](monitoring-cloudtrail.md)
+ [Monitoring Deployments with Amazon SNS Event Notifications](monitoring-sns-event-notifications.md)

# 使用 Amazon CloudWatch 工具監控部署
<a name="monitoring-cloudwatch"></a>

您可以使用下列 CloudWatch 工具監控 CodeDeploy 部署：Amazon CloudWatch Events、CloudWatch 警示和 Amazon CloudWatch Logs。

檢閱 CodeDeploy 代理程式和部署建立的日誌可協助您疑難排解部署失敗的原因。除了一次檢閱一個執行個體上的 CodeDeploy 日誌，您也可以使用 CloudWatch Logs 來監控中央位置的所有日誌。

如需有關使用 CloudWatch 警示和 CloudWatch Events 監控 CodeDeploy 部署的資訊，請參閱下列主題。

**Topics**
+ [在 CodeDeploy 中使用 CloudWatch 警示監控部署](monitoring-create-alarms.md)
+ [使用 Amazon CloudWatch Events 監控部署](monitoring-cloudwatch-events.md)

# 在 CodeDeploy 中使用 CloudWatch 警示監控部署
<a name="monitoring-create-alarms"></a>

您可以為您在 CodeDeploy 操作中使用的執行個體或 Amazon EC2 Auto Scaling 群組建立 CloudWatch 警示。警示會監看所指定時段內的單一指標，並根據與多個時段內給定閾值相對的指標值來執行一或多個動作。CloudWatch 警示會在狀態變更時叫用動作 （例如，從 `OK`變更為 `ALARM`)。

使用原生 CloudWatch 警示功能，您可以在部署中使用的執行個體失敗時指定 CloudWatch 支援的任何動作，例如傳送 Amazon SNS 通知或停止、終止、重新啟動或復原執行個體。對於 CodeDeploy 操作，您可以設定部署群組，以便在啟用與部署群組建立關聯的任何 CloudWatch 警示時停止部署。

您最多可以將十個 CloudWatch 警示與 CodeDeploy 部署群組建立關聯。如果任何指定的警示已啟動、部署停止、且狀態已更新為停用。若要使用此選項，您必須將 CloudWatch 許可授予 CodeDeploy 服務角色。

如需有關在 CloudWatch 主控台中設定 CloudWatch 警示的資訊，請參閱《[Amazon CloudWatch 使用者指南》中的建立 Amazon CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/AlarmThatSendsEmail.html)。 *Amazon CloudWatch *

如需有關將 CloudWatch 警示與 CodeDeploy 中的部署群組建立關聯的資訊，請參閱 [使用 CodeDeploy 建立部署群組](deployment-groups-create.md)和 [使用 CodeDeploy 變更部署群組設定](deployment-groups-edit.md)。

**Topics**
+ [將 CloudWatch 許可授予 CodeDeploy 服務角色](monitoring-create-alarms-grant-permissions.md)

# 將 CloudWatch 許可授予 CodeDeploy 服務角色
<a name="monitoring-create-alarms-grant-permissions"></a>

在您可以將 CloudWatch 警示監控與部署搭配使用之前，必須先授予您在 CodeDeploy 操作中使用的服務角色存取 CloudWatch 資源的許可。

**將 CloudWatch 許可授予服務角色**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在 IAM 主控台的導覽窗格中，選擇**角色**。

1. 選擇您在 AWS CodeDeploy 操作中使用的服務角色名稱。

1. 在 **​Permissions (許可)** 標籤的 **​Inline Policies (內嵌政策)** 區域中，選擇 **​Create Role Policy (建立角色政策)**。

   –或–

   若 **​Create Role Policy (建立角色政策)** 按鈕無法使用，請展開 **​Inline Policies (內嵌政策)** 區域，然後選擇 **​click here (按一下這裡)**。

1. 在 **Set Permissions** (設定許可) 頁面上，選擇 **Custom Policy** (自訂政策)，然後選擇 **Select** (選取)。

1. 在 **​Review Policy (檢閱政策)** 頁面的 **​Policy Name (政策名稱)** 欄位中，輸入用以識別此政策的名稱，例如 `CWAlarms`。

1. 將下列內容貼入至 **​Policy Document (政策文件)** 欄位：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "cloudwatch:DescribeAlarms",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 選擇 **Apply Policy** (套用政策) 

# 使用 Amazon CloudWatch Events 監控部署
<a name="monitoring-cloudwatch-events"></a>

您可以使用 Amazon CloudWatch Events 來偵測和回應 CodeDeploy 操作中執行個體或部署 (「事件」) 狀態的變更。然後，根據您建立的規則，當部署或執行個體進入您在規則中指定的狀態時，CloudWatch Events 會叫用一或多個目標動作。根據狀態變更的類型，建議您傳送通知、擷取狀態資訊、採取修正動作、啟動事件，或採取其他動作。使用 CloudWatch Events 做為 CodeDeploy 操作的一部分時，您可以選取下列類型的目標：
+ AWS Lambda 函數
+  Kinesis 串流
+ Amazon SQS 佇列
+ 內建目標 (`EC2 CreateSnapshot API call`、、 `EC2 RebootInstances API call` `EC2 StopInstances API call` 和 `EC2 TerminateInstances API call`)
+ Amazon SNS 主題

下列為若干使用案例：
+ 當部署失敗時，使用 Lambda 函數傳送通知到 Slack 通道。
+ 推送部署或執行個體的資料到 Kinesis 串流以支援完整且即時的狀態監控。
+ 使用 CloudWatch 警示動作，在您指定的部署或執行個體事件發生時，自動停止、終止、重新啟動或復原 Amazon EC2 執行個體。

本主題的其餘部分說明為 CodeDeploy 建立 CloudWatch Events 規則的基本程序。不過，在建立事件規則以用於 CodeDeploy 操作之前，您應該執行下列動作：
+ 完成 CloudWatch Events 先決條件。如需詳細資訊，請參閱 [Amazon CloudWatch Events 先決條件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CWE_Prerequisites.html)。
+ 熟悉 CloudWatch Events 中的事件、規則和目標。如需詳細資訊，請參閱[什麼是 Amazon CloudWatch Events？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html)和[新的 CloudWatch Events – 追蹤和回應 AWS 資源的變更](https://aws.amazon.com/blogs/aws/new-cloudwatch-events-track-and-respond-to-changes-to-your-aws-resources/)。
+ 建立您將在事件規則中使用的一或多個目標。

**若要為 CodeDeploy 建立 CloudWatch Events 規則：**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 **Events (事件)**。

1. 選擇 **Create rule (建立規則)**，然後在 **Event selector (事件選擇器)** 下，選擇 **AWS CodeDeploy**。

1. 指定一種詳細資訊類型：
   + 若要建立應用在執行個體與部署的所有變更狀態的規則，請選擇 **Any detail type (任何詳細資訊型態)**，然後跳到步驟六。
   + 若要建立僅應用在執行個體的規則，請選擇 **Specific detail type (特定詳細資訊類型)**，然後選擇 **CodeDeploy Instance State-change Notification (CodeDeploy 執行個體狀態改變通知)**。
   + 若要建立僅應用在部署的規則，請選擇 **Specific detail type (特定詳細資訊類型)**，然後選擇**CodeDeploy Instance State-change Notification (CodeDeploy 執行個體狀態改變通知)**。

1. 指定規則套用至的狀態變更：
   + 若要建立應用至所有狀態變更的規則，請選擇 **Any state (任何狀態)**。
   + 若要建立僅應用至部分狀態變更的規則，請選擇 **Specific state(s) (特定狀態)**，然後從清單中選擇一個或多個狀態值。您可以選擇下表列出的狀態值，：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/monitoring-cloudwatch-events.html)

1. 指定套用規則的 CodeDeploy 應用程式：
   + 若要建立應用至所有應用程式的規則，請選擇 **Any application (任何應用程式)**，然後跳至步驟八。
   + 若要建立僅套用到單一個應用程式的規則，請選擇 **Specific application (指定應用程式)**，然後從清單中選擇此應用程式。

1. 指定部署群組的規則應用在：
   + 若要建立應用在與選定的應用程式相關之所有部署群組的規則，請選擇 **Any deployment group (任何部署群組)**。
   + 若要建立僅應用在與選定的應用程式相關的單一部署群組，請選擇 **Specific deployment group(s) (特定部署群組)**，然後從清單選擇此部署群組。

1. 檢閱您的規則設定，確定其符合您的事件監控要求。

1. 在 **Targets (目標)** 區域中選擇 **Add target\$1 (新增目標\$1)**。

1. 在 **Select target type** (選擇目標類型) 清單中，選擇您準備好使用此規則的目標類型，然後設定此類型所需的任何其他選項。

1. 選擇**設定詳細資訊**。

1. 在 **Configure rule details (設定規則詳細資訊)** 頁面上，輸入規則的名稱和描述，然後選取 **State (狀態)** 方塊啟用規則。

1. 如果您對此規則感到滿意，請選擇 **Create rule (建立規則)**。

# 使用 監控部署 AWS CloudTrail
<a name="monitoring-cloudtrail"></a>

CodeDeploy 已與 CloudTrail 整合，CloudTrail 是一種服務，可擷取 AWS 您帳戶中由 CodeDeploy 發出或代表其發出的 API 呼叫，並將日誌檔案交付至您指定的 Amazon S3 儲存貯體。CloudTrail 會從 CodeDeploy 主控台、透過 CodeDeploy 命令 AWS CLI，或直接從 CodeDeploy APIs 擷取 API 呼叫。使用 CloudTrail 收集的資訊，您可以判斷向 CodeDeploy 提出的請求、提出請求的來源 IP 地址、提出請求的人員、提出請求的時間等。若要進一步了解 CloudTrail，包括如何設定和啟用它，請參閱 [AWS CloudTrail 使用者指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

## CloudTrail 中的 CodeDeploy 資訊
<a name="service-name-info-in-cloudtrail"></a>

當 AWS 您的帳戶中啟用 CloudTrail 記錄時，對 CodeDeploy 動作發出的 API 呼叫會在日誌檔案中追蹤。CodeDeploy 記錄會與其他 AWS 服務記錄一起寫入日誌檔案中。CloudTrail 會根據期間與檔案大小，決定何時建立與寫入新檔案。

所有 CodeDeploy 動作都會記錄並記錄在[AWS CodeDeploy 命令列參考](https://docs.aws.amazon.com/cli/latest/reference/deploy/index.html)和 [AWS CodeDeploy API 參考](https://docs.aws.amazon.com/codedeploy/latest/APIReference/)中。例如，建立部署、刪除應用程式和註冊應用程式修訂的呼叫會在 CloudTrail 日誌檔案中產生項目。

每個日誌項目都會包含產生要求之人員的資訊。日誌中的使用者身分資訊可協助您判斷請求是使用根或使用者登入資料、角色或聯合身分使用者的臨時安全登入 AWS 資料，還是由其他服務提出。如需詳細資訊，請參閱 **CloudTrail 事件參考**中的 [userIdentity](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/event_reference_top_level.html) 欄位。

日誌檔案可存放於儲存貯體任意長時間，但您也可以定義 Amazon S3 生命週期規則，自動封存或刪除日誌檔案。根據預設，Amazon S3 伺服器端加密 (SSE) 用於加密您的日誌檔案。

您可以讓 CloudTrail 在交付新日誌檔案時發佈 Amazon SNS 通知。如需詳細資訊，請參閱[為 CloudTrail 設定 Amazon SNS 通知](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)。

您也可以將來自多個 AWS 區域和多個 AWS 帳戶的 CodeDeploy 日誌檔案彙總至單一 Amazon S3 儲存貯體。如需詳細資訊，請參閱[從多個區域接收 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/aggregating_logs_top_level.html)。

## 了解 CodeDeploy 日誌檔案項目
<a name="understanding-service-name-entries"></a>

CloudTrail 日誌檔案可以包含一或多個日誌項目，其中每個項目是由多個 JSON 格式的事件組成。日誌項目代表任何來源提出的單一要求，並且包含所要求動作、任何參數、動作日期和時間等等的資訊。日誌項目並不保證按照任何特定的順序。也就是，日誌項目並非公用 API 呼叫的已排序堆疊追蹤。

下列範例顯示示範 CodeDeploy 建立部署群組動作的 CloudTrail 日誌項目：

```
{
	"Records": [{
		"eventVersion": "1.02",
		"userIdentity": {
			"type": "AssumedRole",
			"principalId": "AKIAI44QH8DHBEXAMPLE:203.0.113.11",
			"arn": "arn:aws:sts::123456789012:assumed-role/example-role/203.0.113.11",
			"accountId": "123456789012",
			"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
			"sessionContext": {
				"attributes": {
					"mfaAuthenticated": "false",
					"creationDate": "2014-11-27T03:57:36Z"
				},
				"sessionIssuer": {
					"type": "Role",
					"principalId": "AKIAI44QH8DHBEXAMPLE",
					"arn": "arn:aws:iam::123456789012:role/example-role",
					"accountId": "123456789012",
					"userName": "example-role"
				}
			}
		},
		"eventTime": "2014-11-27T03:57:36Z",
		"eventSource": "codedeploy.amazonaws.com",
		"eventName": "CreateDeploymentGroup",
		"awsRegion": "us-west-2",
		"sourceIPAddress": "203.0.113.11",
		"userAgent": "example-user-agent-string",
		"requestParameters": {
			"applicationName": "ExampleApplication",
			"serviceRoleArn": "arn:aws:iam::123456789012:role/example-instance-group-role",
			"deploymentGroupName": "ExampleDeploymentGroup",
			"ec2TagFilters": [{
                "value": "CodeDeployDemo",
				"type": "KEY_AND_VALUE",
				"key": "Name"
            }],
            "deploymentConfigName": "CodeDeployDefault.HalfAtATime"
		},
		"responseElements": {
			"deploymentGroupId": "7d64e680-e6f4-4c07-b10a-9e117EXAMPLE"
		},
		"requestID": "86168559-75e9-11e4-8cf8-75d18EXAMPLE",
		"eventID": "832b82d5-d474-44e8-a51d-093ccEXAMPLE",
		"eventType": "AwsApiCall",
		"recipientAccountId": "123456789012"
	},
    ... additional entries ...
    ]
}
```

# 使用 Amazon SNS 事件通知監控部署
<a name="monitoring-sns-event-notifications"></a>

您可以將觸發新增至 CodeDeploy 部署群組，以接收與該部署群組中部署或執行個體相關的事件通知。這些通知會傳送給訂閱您已作為觸發動作一部分的 Amazon SNS 主題的收件人。

您可以在 SMS 訊息或電子郵件訊息中接收 CodeDeploy 事件的通知。您也可以使用指定事件以其他方式發生的 JSON 資料，例如傳送訊息至 Amazon SQS 佇列或叫用函數 AWS Lambda。如需查看 JSON 資料的結構以用於部署和執行個體觸發的詳細資訊，請參閱 [CodeDeploy 觸發條件的 JSON 資料格式](monitoring-sns-event-notifications-json-format.md)。

您也可選擇使用觸發程序來接收通知：
+ 您是開發人員需要知道部署發生故障或停止，才能以此進行故障診斷。
+ 您是系統管理員，需要知道有多少執行個體失敗，才能監控 Amazon EC2 機群的運作狀態。
+ 您是經理想要簡明計數部署和執行個體事件，以透過篩選規則獲得不同類型的通知，篩選規則在您的桌面電子郵件用戶端裡的檔案夾中路由至不同的通知類型。

您可以針對下列任何事件類型，為每個 CodeDeploy 部署群組建立最多 10 個觸發。


| 部署事件 | 執行個體事件 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/monitoring-sns-event-notifications.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/monitoring-sns-event-notifications.html)  | 
| 1僅適用於藍/綠部署。指出最新的應用程式修訂版以安裝在取代環境的執行個體上，並從原始環境中分出流量，現在可在負載平衡器後方重新路由。如需更多資訊，請參閱[在 CodeDeploy 中使用部署](deployments.md)。 | 

**Topics**
+ [將 Amazon SNS 許可授予服務角色](monitoring-sns-event-notifications-permisssions.md)
+ [建立 CodeDeploy 事件的觸發](monitoring-sns-event-notifications-create-trigger.md)
+ [編輯部署群組中的觸發條件](monitoring-sns-event-notifications-edit-trigger.md)
+ [從部署群組刪除觸發](monitoring-sns-event-notifications-delete-trigger.md)
+ [觸發條件的 JSON 資料格式](monitoring-sns-event-notifications-json-format.md)

# 將 Amazon SNS 許可授予 CodeDeploy 服務角色
<a name="monitoring-sns-event-notifications-permisssions"></a>

在觸發產生通知之前，您在 CodeDeploy 操作中使用的服務角色必須獲得存取 Amazon SNS 資源的許可。

**將 Amazon SNS 許可授予服務角色**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在 IAM 主控台的導覽窗格中，選擇**角色**。

1. 選擇您在 AWS CodeDeploy 操作中使用的服務角色名稱。

1. 在 **​Permissions (許可)** 標籤的 **​Inline Policies (內嵌政策)** 區域中，選擇 **​Create Role Policy (建立角色政策)**。

   –或–

   若 **​Create Role Policy (建立角色政策)** 按鈕無法使用，請展開 **​Inline Policies (內嵌政策)** 區域，然後選擇 **​click here (按一下這裡)**。

1. 在 **Set Permissions** (設定許可) 頁面上，選擇 **Custom Policy** (自訂政策)，然後選擇 **Select** (選取)。

1. 在 **Review Policy (檢閱政策)** 頁面上，**Policy Name (政策名稱)** 欄中輸入識別此政策的名稱，例如 `SNSPublish`。

1. 將下列內容貼入至 **​Policy Document (政策文件)** 欄位：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "sns:Publish",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 選擇 **Apply Policy** (套用政策) 

# 建立 CodeDeploy 事件的觸發
<a name="monitoring-sns-event-notifications-create-trigger"></a>

您可以建立針對部署或執行個體事件發佈 Amazon Simple Notification Service (Amazon SNS) 主題的 AWS CodeDeploy 觸發。然後，當該事件發生時，關聯主題的所有訂閱者都會透過主題中指定的端點接收通知，例如簡訊或電子郵件訊息。Amazon SNS 提供多種訂閱主題的方法。

建立觸發條件之前，您必須設定觸發條件指向的 Amazon SNS 主題。如需詳細資訊，請參閱[建立主題](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)。當您建立主題時，建議您以 `Topic-group-us-west-3-deploy-fail`或 等格式提供可識別其用途的名稱`Topic-group-project-2-instance-stop`。

您還必須將 Amazon SNS 許可授予 CodeDeploy 服務角色，才能傳送觸發條件的通知。如需相關資訊，請參閱[將 Amazon SNS 許可授予 CodeDeploy 服務角色](monitoring-sns-event-notifications-permisssions.md)。

在您建立主題後，可以開始新增訂閱者。如需有關建立、管理和訂閱主題的資訊，請參閱[什麼是 Amazon Simple Notification Service](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)。



## 建立觸發以傳送 CodeDeploy 事件的通知 （主控台）
<a name="monitoring-sns-event-notifications-create-trigger-console"></a>

您可以使用 CodeDeploy 主控台為 CodeDeploy 事件建立觸發。在設定程序結束時，系統會傳送測試通知訊息，藉此確認是否正確設定許可與觸發條件的詳細資訊。

**為 CodeDeploy 事件建立觸發**

1. 在 中 AWS 管理主控台，開啟 AWS CodeDeploy 主控台。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) 開啟 CodeDeploy 主控台。
**注意**  
使用您在 中設定的相同使用者登入[CodeDeploy 入門](getting-started-codedeploy.md)。

1. 在導覽窗格中，展開**部署**，然後選擇**應用程式**。

1. 在 **Applications (應用程式)** 頁面上，選擇與您要新增觸發之部署群組建立關聯的應用程式名稱。

1. 在 **Application details (應用程式詳細資訊)** 頁面上，選擇您要新增觸發的部署群組。

1.  選擇**編輯**。

1.  展開 **Advanced - optional (進階 - 選用)**。

1.  在 **Triggers (觸發)** 區域中，選擇 **Create trigger (建立觸發)**。

1. 在 **Create deployment trigger (建立部署觸發)** 窗格中，執行下列動作：

   1. 在 **Trigger name (觸發名稱)** 中，輸入可輕鬆識別用途的觸發名稱。建議使用 `Trigger-group-us-west-3-deploy-fail` 或 `Trigger-group-eu-central-instance-stop` 這類格式。

   1. 在**事件**中，選擇要觸發 Amazon SNS 主題傳送通知的事件類型。

   1. 在 **Amazon SNS 主題**中，選擇您為傳送此觸發條件通知而建立的主題名稱。

   1.  選擇 **Create trigger (建立觸發)**。CodeDeploy 會傳送測試通知，以確認您已正確設定 CodeDeploy 與 Amazon SNS 主題之間的存取權。根據您針對主題所選取的端點類型，且您已訂閱該主題時，會在 SMS 訊息或電子郵件訊息中收到確認訊息。

1.  選擇**儲存變更**。

## 建立觸發以傳送 CodeDeploy 事件 (CLI) 的通知
<a name="monitoring-sns-event-notifications-create-trigger-cli"></a>

您可以使用 CLI，在建立部署群組時包含觸發，也可以將觸發新增至現有部署群組。

### 建立觸發以傳送新部署群組的通知
<a name="monitoring-sns-event-notifications-create-trigger-cli-new"></a>

建立 JSON 檔案來設定部署群組，然後使用 `--cli-input-json`選項執行 [create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) 命令。

建立 JSON 檔案的最簡單方法是使用 `--generate-cli-skeleton` 選項取得 JSON 格式的複本，然後使用純文字編輯器提供必要值。

1. 執行下列命令，然後將結果複製至純文字編輯器。

   ```
   aws deploy create-deployment-group --generate-cli-skeleton
   ```

1. 將現有 CodeDeploy 應用程式的名稱新增至輸出：

   ```
   {
       "applicationName": "TestApp-us-east-2",
       "deploymentGroupName": "",
       "deploymentConfigName": "",
       "ec2TagFilters": [
           {
               "Key": "",
               "Value": "",
               "Type": ""
           }
       ],
       "onPremisesInstanceTagFilters": [
           {
               "Key": "",
               "Value": "",
               "Type": ""
           }
       ],
       "autoScalingGroups": [
           ""
       ],
       "serviceRoleArn": "",
       "triggerConfigurations": [
           {
               "triggerName": "",
               "triggerTargetArn": "",
               "triggerEvents": [
                   ""
               ]
           }
       ]
   }
   ```

1. 提供您要設定之參數的值。

   當您使用 [create-deployment-group](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeploymentGroup.html) 命令時，必須至少提供下列參數的值：
   + `applicationName`：已在您帳戶中建立的應用程式名稱。
   + `deploymentGroupName`：您將建立的部署群組名稱。
   + `serviceRoleArn`：您帳戶中為 CodeDeploy 設定的現有服務角色的 ARN。如需相關資訊，請參閱[步驟 2：建立 CodeDeploy 的服務角色](getting-started-create-service-role.md)。

   在 `triggerConfigurations` 區段中，提供下列參數的值：
   + `triggerName`：為您的觸發名稱命名，方便您識別。建議使用 `Trigger-group-us-west-3-deploy-fail` 或 `Trigger-group-eu-central-instance-stop` 這類格式。
   + `triggerTargetArn`：您建立以與觸發關聯之 Amazon SNS 主題的 ARN，格式如下：`arn:aws:sns:us-east-2:444455556666:NewTestTopic`。
   + `triggerEvents`：您要觸發通知的一或多種事件類型。您可以指定一或多種事件類型，以逗號分隔多個事件類型名稱 (例如，`"triggerEvents":["DeploymentSuccess","DeploymentFailure","InstanceFailure"]`)。當您新增多種事件類型時，所有這些類型的通知都會傳送至您指定的主題，而不是每種類型的不同主題。您可以從下列事件類型來選擇：
     + DeploymentStart
     + DeploymentSuccess
     + DeploymentFailure
     + DeploymentStop
     + DeploymentRollback
     + DeploymentReady (僅適用於藍/綠部署中的替換執行個體)
     + InstanceStart
     + InstanceSuccess
     + InstanceFailure
     + InstanceReady (僅適用於藍/綠部署中的替換執行個體)

   下列組態範例會針對名為 `TestApp-us-east-2` 的應用程式建立名為 `dep-group-ghi-789-2` 的部署群組，以及只要部署開始、成功或失敗就提示傳送通知的觸發：

   ```
   {
       "applicationName": "TestApp-us-east-2",
       "deploymentConfigName": "CodeDeployDefault.OneAtATime",
       "deploymentGroupName": "dep-group-ghi-789-2",
       "ec2TagFilters": [
           {
               "Key": "Name",
               "Value": "Project-ABC",
               "Type": "KEY_AND_VALUE"
           }
       ],
       "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role",
       "triggerConfigurations": [
           {
               "triggerName": "Trigger-group-us-east-2",
               "triggerTargetArn": "arn:aws:sns:us-east-2:444455556666:us-east-deployments",
               "triggerEvents": [
                   "DeploymentStart",
                   "DeploymentSuccess",
                   "DeploymentFailure"
               ]
           }
       ]
   }
   ```

1. 將更新儲存為 JSON 檔案，然後在您執行 **create-deployment-group** 命令時，使用 `--cli-input-json` 選項呼叫該檔案：
**重要**  
請確認在檔案名稱之前包含 `file://`。這是此命令必要項目。

   ```
   aws deploy create-deployment-group --cli-input-json file://filename.json
   ```

   在建立程序結束時，您會收到測試通知訊息，指出同時正確設定許可和觸發詳細資訊。

### 建立觸發以傳送現有部署群組的通知
<a name="monitoring-sns-event-notifications-create-trigger-cli-existing"></a>

若要使用 AWS CLI 將 CodeDeploy 事件的觸發條件新增至現有的部署群組，請建立 JSON 檔案來更新部署群組，然後使用 `--cli-input-json`選項執行 [update-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) 命令。

建立 JSON 檔案的最簡單方法是執行 **get-deployment-group** 命令，取得 JSON 格式的部署群組組態複本，然後使用純文字編輯器更新參數值。

1.  執行下列命令，然後將結果複製至純文字編輯器。

   ```
   aws deploy get-deployment-group --application-name application --deployment-group-name deployment-group
   ```

1. 刪除輸出中的下列內容：
   + 在輸出的開頭，刪除 `{ "deploymentGroupInfo":`。
   + 在輸出的結尾，刪除 `}`。
   + 刪除含有 `deploymentGroupId` 的資料列。
   + 刪除含有 `deploymentGroupName` 的資料列。

   文字檔案的內容現在應該與下面類似：

   ```
   {
       "applicationName": "TestApp-us-east-2",
       "deploymentConfigName": "CodeDeployDefault.OneAtATime",
       "autoScalingGroups": [],
       "ec2TagFilters": [
           {
               "Type": "KEY_AND_VALUE",
               "Value": "Project-ABC",
               "Key": "Name"
           }
       ],
       "triggerConfigurations": [],
       "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role",
       "onPremisesInstanceTagFilters": []
   }
   ```

1. 在 `triggerConfigurations` 區段中，新增 `triggerEvents`、`triggerTargetArn` 和 `triggerName` 參數的資料。如需觸發組態參數的資訊，請參閱 [TriggerConfig](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_TriggerConfig.html)。

   文字檔案的內容現在應該與下面類似。只要部署開始、成功或失敗，此程式碼就會提示傳送通知。

   ```
   {
       "applicationName": "TestApp-us-east-2",
       "deploymentConfigName": "CodeDeployDefault.OneAtATime",
       "autoScalingGroups": [],
       "ec2TagFilters": [
           {
               "Type": "KEY_AND_VALUE",
               "Value": "Project-ABC",
               "Key": "Name"
           }
       ],
       "triggerConfigurations": [
           {
               "triggerEvents": [
                   "DeploymentStart",
                   "DeploymentSuccess",
                   "DeploymentFailure"
               ],
               "triggerTargetArn": "arn:aws:sns:us-east-2:444455556666:us-east-deployments",
               "triggerName": "Trigger-group-us-east-2"
           }
       ],
       "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role",
       "onPremisesInstanceTagFilters": []
   }
   ```

1. 將您的更新儲存為 JSON 檔案，然後使用 `--cli-input-json`選項執行 [update-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) 命令。請務必包含 `--current-deployment-group-name` 選項，並將 *filename* 替代為您 JSON 檔案的名稱：
**重要**  
請確認在檔案名稱之前包含 `file://`。這是此命令必要項目。

   ```
   aws deploy update-deployment-group --current-deployment-group-name deployment-group-name --cli-input-json file://filename.json
   ```

   在建立程序結束時，您會收到測試通知訊息，指出同時正確設定許可和觸發詳細資訊。

# 編輯 CodeDeploy 部署群組中的觸發條件
<a name="monitoring-sns-event-notifications-edit-trigger"></a>

如果您的通知需求有變動，您可以修改觸發，不用建立新的觸發。

## 修改 CodeDeploy 觸發程序 (CLI)
<a name="monitoring-sns-event-notifications-edit-trigger-cli"></a>

 若要在更新部署群組時，使用 AWS CLI 變更 CodeDeploy 事件的觸發條件詳細資訊，請建立 JSON 檔案來定義部署群組屬性的變更，然後使用 `--cli-input-json`選項執行 [update-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/update-deployment-group.html) 命令。

建立 JSON 檔案的最簡單方法是執行 **get-deployment-group** 命令，取得 JSON 格式的目前部署群組詳細資訊，然後使用純文字編輯器編輯必要值。

1. 執行下列命令，並將 *application* 和 *deployment-group* 替代為您應用程式和部署群組的名稱：

   ```
   aws deploy get-deployment-group --application-name application --deployment-group-name deployment-group
   ```

1. 將命令的結果複製至純文字編輯器，然後刪除下列內容：
   + 在輸出的開頭，刪除 `{ "deploymentGroupInfo":`。
   + 在輸出的結尾，刪除 `}`。
   + 刪除含有 `deploymentGroupId` 的資料列。
   + 刪除含有 `deploymentGroupName` 的資料列。

   文字檔案的內容現在應該與下面類似：

   ```
   {
       "applicationName": "TestApp-us-east-2",
       "deploymentConfigName": "CodeDeployDefault.OneAtATime",
       "autoScalingGroups": [],
       "ec2TagFilters": [
           {
               "Type": "KEY_AND_VALUE",
               "Value": "East-1-Instances",
               "Key": "Name"
           }
       ],
       "triggerConfigurations": [
           {
               "triggerEvents": [
                   "DeploymentStart",
                   "DeploymentSuccess",
                   "DeploymentFailure",
                   "DeploymentStop"
               ],
               "triggerTargetArn": "arn:aws:sns:us-east-2:111222333444:Trigger-group-us-east-2",
               "triggerName": "Trigger-group-us-east-2"
           }
       ],
       "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role",
       "onPremisesInstanceTagFilters": []
   }
   ```

1. 視需要變更任意參數。如需觸發組態參數的資訊，請參閱 [TriggerConfig](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_TriggerConfig.html)。

1. 將您的更新儲存為 JSON 檔案，然後使用 `--cli-input-json`選項執行 [update-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/update-deployment-group.html) 命令。請務必包含 `--current-deployment-group-name` 選項，並將 *filename* 替代為您 JSON 檔案的名稱：
**重要**  
請確認在檔案名稱之前包含 `file://`。這是此命令必要項目。

   ```
   aws deploy update-deployment-group --current-deployment-group-name deployment-group-name --cli-input-json file://filename.json
   ```

在建立程序結束時，您會收到測試通知訊息，指出同時正確設定許可和觸發詳細資訊。

# 從 CodeDeploy 部署群組刪除觸發
<a name="monitoring-sns-event-notifications-delete-trigger"></a>

因為每個部署群組都有 10 個觸發的限制，所以不再使用觸發時，建議您予以刪除。刪除觸發之後就無法復原，但您可以重新建立觸發。

## 從部署群組刪除觸發 （主控台）
<a name="monitoring-sns-event-notifications-delete-trigger-console"></a>

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) 開啟 CodeDeploy 主控台。
**注意**  
使用您在 中設定的相同使用者登入[CodeDeploy 入門](getting-started-codedeploy.md)。

1. 在導覽窗格中，展開**部署**，然後選擇**應用程式**。

1. 在 **Applications (應用程式)** 頁面上，選擇與您要刪除觸發之部署群組建立關聯的應用程式名稱。

1. 在 **Application details (應用程式詳細資訊)** 頁面上，選擇您要刪除觸發的部署群組。

1.  選擇**編輯**。

1.  展開 **Advanced - optional (進階 - 選用)**。

1. 在 **Triggers (觸發)** 區域中選擇您要刪除的觸發，然後選擇 **Delete trigger (刪除觸發)**。

1.  選擇**儲存變更**。

## 從部署群組刪除觸發 (CLI)
<a name="monitoring-sns-event-notifications-delete-trigger-cli"></a>

若要使用 CLI 刪除觸發，請呼叫 [update-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/update-deployment-group.html) 命令，並指定空白觸發組態參數：
+ 與部署群組建立關聯的應用程式名稱。若要檢視應用程式名稱清單，請呼叫 [list-applications](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-applications.html) 命令。
+ 與應用程式建立關聯的部署群組名稱。若要檢視部署群組名稱的清單，請呼叫 [list-deployment-groups](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-groups.html) 命令。

例如：

```
aws deploy update-deployment-group --application-name application-name --current-deployment-group-name deployment-group-name --trigger-configurations
```

# CodeDeploy 觸發條件的 JSON 資料格式
<a name="monitoring-sns-event-notifications-json-format"></a>

您可以使用在自訂通知工作流程中啟動部署或執行個體的觸發條件時建立的 JSON 輸出，例如傳送訊息至 Amazon SQS 佇列或叫用函數 AWS Lambda。

**注意**  
本指南不會談論如何使用 JSON 設定通知。如需使用 Amazon SNS 傳送訊息至 Amazon SQS 佇列的資訊，請參閱[將 Amazon SNS 訊息傳送至 Amazon SQS 佇列](https://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html)。如需有關使用 Amazon SNS 叫用 Lambda 函數的資訊，請參閱[使用 Amazon SNS 通知叫用 Lambda 函數](https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html)。

下列範例顯示 CodeDeploy 觸發器可用的 JSON 輸出結構。

**執行個體類型觸發的範例 JSON 輸出**

```
{
    "region": "us-east-2",
    "accountId": "111222333444",
    "eventTriggerName": "trigger-group-us-east-instance-succeeded",
    "deploymentId": "d-75I7MBT7C",
    "instanceId": "arn:aws:ec2:us-east-2:444455556666:instance/i-496589f7",
    "lastUpdatedAt": "1446744207.564",
    "instanceStatus": "Succeeded",
    "lifecycleEvents": [
        {
            "LifecycleEvent": "ApplicationStop",
            "LifecycleEventStatus": "Succeeded",
            "StartTime": "1446744188.595",
            "EndTime": "1446744188.711"
        },
        {
            "LifecycleEvent": "BeforeInstall",
            "LifecycleEventStatus": "Succeeded",
            "StartTime": "1446744189.827",
            "EndTime": "1446744190.402"
        }
//More lifecycle events might be listed here
    ]
}
```

**部署類型觸發的範例 JSON 輸出**

```
{
    "region": "us-west-1",
    "accountId": "111222333444",
    "eventTriggerName": "Trigger-group-us-west-3-deploy-failed",
    "applicationName": "ProductionApp-us-west-3",
    "deploymentId": "d-75I7MBT7C",
    "deploymentGroupName": "dep-group-def-456",
    "createTime": "1446744188.595",
    "completeTime": "1446744190.402",
    "deploymentOverview": {
        "Failed": "10",
        "InProgress": "0",
        "Pending": "0",
        "Skipped": "0",
        "Succeeded": "0"
    },
    "status": "Failed",
    "errorInformation": {
        "ErrorCode": "IAM_ROLE_MISSING",
        "ErrorMessage": "IAM Role is missing for deployment group: dep-group-def-456"
    }
}
```