

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 CodeDeploy 事件创建触发器
<a name="monitoring-sns-event-notifications-create-trigger"></a>

您可以创建一个针对 AWS CodeDeploy 部署或实例事件发布 Amazon Simple Notification Service（Amazon SNS）主题的触发器。然后，当该事件发生时，关联主题的所有订阅者都通过主题中指定的终端节点（如短信或电子邮件）接收通知。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` 这样的格式。

您还必须向 CodeDeploy 服务角色授予 Amazon SNS 权限，然后才能为您的触发器发送通知。有关信息，请参阅[向服务角色授予 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://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 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-group-us-west-3-deploy-fail` 或 `Trigger-group-eu-central-instance-stop` 这样的格式。

   1. 在**事件**中，选择将触发 Amazon SNS 主题发送通知的事件类型。

   1. 在 **Amazon SNS 主题**中，选择您为发送此触发器的通知而创建的主题的名称。

   1.  选择**创建触发器**。 CodeDeploy 发送测试通知，确认您已正确配置与 Amazon SNS 主题 CodeDeploy 之间的访问权限。如果您已订阅该主题，您会收到通过 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 （仅适用于 blue/green 部署中的替换实例）
     + InstanceStart
     + InstanceSuccess
     + InstanceFailure
     + InstanceReady （仅适用于 blue/green 部署中的替换实例）

   以下配置示例将为一个名为 `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`选项，并将您的 JSON 文件名替换*filename*为：
**重要**  
务必在文件名前包含 `file://`。此命令中需要该项。

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

   在创建过程结束时，您会收到一条测试通知消息，指示权限和触发器详细信息均已正确设置。