

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

# 示例：为 Amazon SNS 主题创建 Amazon CodeCommit 触发器
<a name="how-to-notify-sns"></a>

您可以为存储库创建触发器，以便该 CodeCommit 存储库中的事件触发来自亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 主题的通知。您可能需要为 Amazon SNS 主题创建触发器，使用户能够订阅有关存储库事件（如删除分支）的通知。您还可以利用亚马逊 SNS 主题与其他服务的集成，例如亚马逊简单队列服务 (Amazon SQS) Simple Queue Service 和。 Amazon Lambda

**注意**  
您必须将触发器指向现有的 Amazon SNS 主题，后者将作为响应存储库事件所执行的操作。有关创建和订阅 Amazon SNS 主题的更多信息，请参阅[开始使用 Amazon Simple Notification Service](https://docs.amazonaws.cn/sns/latest/dg/GettingStarted.html)。
触发器不支持 Amazon SNS FIFO（先入先出）主题。 CodeCommit 

**Topics**
+ [为 CodeCommit 存储库的 Amazon SNS 主题创建触发器（控制台）](#how-to-notify-sns-console)
+ [为 CodeCommit 存储库的 Amazon SNS 主题创建触发器 ()Amazon CLI](#how-to-notify-sns-cli)

## 为 CodeCommit 存储库的 Amazon SNS 主题创建触发器（控制台）
<a name="how-to-notify-sns-console"></a>

1. 在 [https://console.aws.amazon.com/codesuite/codemmit](https://console.amazonaws.cn/codesuite/codecommit/home) /home 打开 CodeCommit 控制台。

1. 从**存储库** 中，选择要创建存储库事件触发器的存储库。

1. 在存储库的导航窗格中，选择**设置**，然后选择**触发器**。

1. 选择**创建触发器**，然后执行以下操作：
   + 在**触发器名称**中，输入触发器的名称（例如{{MyFirstTrigger}}）。
   + 在**事件**中，选择将触发 Amazon SNS 主题以发送通知的存储库事件。

     如果选择 **All repository events**，则无法选择任何其他事件。要选择事件的子集，请删除 **All repository events**，然后从列表中选择一个或多个事件。例如，如果希望触发器只在用户在 CodeCommit 存储库中创建分支或标签时运行，请删除**所有存储库事件**，然后选择**创建分支或标记**。
   + 如果希望触发器应用于存储库的所有分支，请在**分支**中，将选定内容保留为空，因为此默认选项会自动将触发器应用于所有分支。如果您希望此触发器仅应用于特定分支，请从存储库分支列表中选择最多 10 个分支名称。
   + 在**选择要使用的服务**中，选择 **Amazon SNS**。
   + 在 **Amazon SNS** 中，从列表中选择主题名称或输入主题的 ARN。
**注意**  
触发器不支持 Amazon SNS FIFO（先入先出）主题。 CodeCommit 您必须选择类型设置为“标准”的 Amazon SNS 主题。
   + 在**自定义数据**中，提供您希望包含在 Amazon SNS 主题发送的通知中的任何信息（例如，开发人员在讨论该存储库中的开发工作时使用的 IRC 通道名称）。该字段是一个字符串。它不能用于传递任何动态参数。

    

1. （可选）选择**测试触发器**。此步骤可帮助您确认是否正确配置了与 Amazon SNS 主题 CodeCommit 之间的访问权限。它通过 Amazon SNS 主题使用您存储库中的数据（如果可用）发送测试通知。如果没有真实数据可用，测试通知将包含示例数据。

1. 选择**创建触发器**以完成触发器的创建操作。

## 为 CodeCommit 存储库的 Amazon SNS 主题创建触发器 ()Amazon CLI
<a name="how-to-notify-sns-cli"></a>

您还可以使用命令行为 Amazon SNS 主题创建触发器，以响应 CodeCommit 存储库事件，例如有人向您的存储库推送提交时。

**为 Amazon SNS 主题创建触发器**

1. 打开纯文本编辑器，创建一个 JSON 文件，在其中指定：
   + Amazon SNS 主题名称。
**注意**  
触发器不支持 Amazon SNS FIFO（先入先出）主题。 CodeCommit 您必须选择类型设置为“标准”的 Amazon SNS 主题。
   + 要用该触发器监控的存储库和分支。（如果没有指定任何分支，触发器将应用到存储库中的所有分支。）
   + 激活该触发器的事件。

    保存该文件。

   例如，要为名为的存储库创建触发器{{MyDemoRepo}}，该存储库将所有存储库事件发布到名{{MySNSTopic}}为两个分支的 Amazon SNS 主题，{{main}}以及：{{preprod}}

   ```
   {
       "repositoryName": "{{MyDemoRepo}}",
       "triggers": [
           {
               "name": "{{MyFirstTrigger}}",
               "destinationArn": "arn:aws:sns:{{us-east-2}}:{{111122223333}}:{{MySNSTopic}}",
               "customData": "",
               "branches": [
                   "{{main}}", "{{preprod}}"
               ],
               "events": [
                   "all"
               ]
           }
       ]
   }
   ```

   存储库中的每个触发器在该 JSON 文件中都有一个对应的触发块。要为存储库创建多个触发器，请在 JSON 文件中包含多个触发块。请记住，在该文件中创建的所有触发器都用于指定的存储库。不能在一个 JSON 文件中为多个存储库创建触发器。例如，如果要为某个存储库创建两个触发器，您可以创建一个包含两个触发块的 JSON 文件。在下面的示例中，没有为第二个触发器指定任何分支，因此，该触发器将应用到所有分支：

    

   ```
   {
       "repositoryName": "{{MyDemoRepo}}",
       "triggers": [
           {
               "name": "{{MyFirstTrigger}}",
               "destinationArn": "arn:aws:sns:{{us-east-2}}:{{111122223333}}:{{MySNSTopic}}",
               "customData": "",
               "branches": [
                   "{{main}}", "{{preprod}}"
               ],
               "events": [
                   "all"
               ]
           },
           {
               "name": "{{MySecondTrigger}}",
               "destinationArn": "arn:aws:sns:{{us-east-2}}:{{111122223333}}:{{MySNSTopic2}}",
               "customData": "",
               "branches": [],
               "events": [
                   "updateReference", "deleteReference"
               ]
           }
       ]
   }
   ```

   您可以为指定的事件 (例如，向存储库推送提交时) 创建触发器。事件类型包括：
   + `all`：指定存储库和分支中的所有事件。
   + `updateReference`：向指定存储库和分支推送提交时。
   + `createReference`：在指定存储库中创建新的分支或标签时。
   + `deleteReference`：在指定存储库中删除分支或标签时。
**注意**  
您可以在触发器中使用多种事件类型。但如果指定 `all`，就无法再指定其他事件。

   要查看有效事件类型的完整列表，请在终端或命令提示符处输入 **aws codecommit put-repository-triggers help**。

   此外，您还可以在 `customData` 中包含一个字符串 (例如，开发人员在讨论该存储库的开发时使用的 IRC 通道的名称)。该字段是一个字符串。它不能用于传递任何动态参数。此字符串作为属性附加到为响应触发器而返回的 CodeCommit JSON 中。

1. （可选）在终端或命令提示符处，运行 **test-repository-triggers** 命令。该测试使用存储库中的示例数据（或者，如果没有数据可用，则生成示例数据）向该 Amazon SNS 主题的订阅用户发送通知。例如，以下内容用于测试名为的触发文件中的 JSON {{trigger.json}} 是否有效以及该文件是否 CodeCommit 可以发布到 Amazon SNS 主题：

   ```
   aws codecommit test-repository-triggers --cli-input-json file://{{trigger.json}}
   ```

   如果成功，该命令返回类似以下内容的信息：

   ```
   {
       "successfulExecutions": [
           "{{MyFirstTrigger}}"
       ],
       "failedExecutions": []
   }
   ```

1. 在终端或命令提示符中，运行 **put-repository-triggers** 命令在 CodeCommit 中创建触发器。例如，要使用名为的 JSON 文件{{trigger.json}}来创建触发器，请执行以下操作：

   `aws codecommit put-repository-triggers --cli-input-json file://{{trigger.json}}`

   该命令将返回与以下示例类似的[配置 ID](https://docs.amazonaws.cn/codecommit/latest/APIReference/API_PutRepositoryTriggers.html#-PutRepositoryTriggers-response-configurationId)：

   ```
   {
       "configurationId": "{{0123456-I-AM-AN-EXAMPLE}}"
   }
   ```

1. 要查看触发器的配置，请运行 **get-repository-triggers** 命令，并指定存储库的名称：

   `aws codecommit get-repository-triggers --repository-name {{MyDemoRepo}}`

   该命令返回为存储库配置的所有触发器的结构，类似于以下内容：

   ```
   {
       "configurationId": "{{0123456-I-AM-AN-EXAMPLE}}",
       "triggers": [
           {
               "events": [
                   "all"
               ],
               "destinationArn": "arn:aws:sns:{{us-east-2}}:{{111122223333}}:{{MySNSTopic}}",
               "branches": [
                   "{{main}}",
                   "{{preprod}}"
               ],
               "name": "{{MyFirstTrigger}}",
               "customData": "Project ID 12345"
           }
       ]
   }
   ```

1. 要测试触发器本身的功能，请生成并向配置该触发器的存储库推送一个提交。您应该会看到来自 Amazon SNS 主题的响应。例如，如果您将 Amazon SNS 主题配置为发送电子邮件，您应该会在订阅了该主题的电子邮件账户中看到来自 Amazon SNS 的电子邮件。

   以下是 Amazon SNS 为响应仓库推送而发送的电子邮件的输出示例： CodeCommit

   ```
   {  
     "Records":[  
        {  
           "awsRegion":"us-east-2",
           "codecommit":{
              "references" : [
                 {
                       "commit":"{{317f8570EXAMPLE}}",
                       "created":true,
                       "ref":"refs/heads/{{NewBranch}}"
                 },
                 {
                       "commit":"{{4c925148EXAMPLE}}",
                       "ref":"refs/heads/{{preprod}}",
                 }
               ]
             },
           "eventId":"{{11111-EXAMPLE-ID}}",
           "eventName":"ReferenceChange",
           "eventPartNumber":1,
           "eventSource":"aws:codecommit",
           "eventSourceARN":"arn:aws:codecommit:us-east-2:{{111122223333}}:{{MyDemoRepo}}",
           "eventTime":"2016-02-09T00:08:11.743+0000",
           "eventTotalParts":1,
           "eventTriggerConfigId":"{{0123456-I-AM-AN-EXAMPLE}}",
           "eventTriggerName":"{{MyFirstTrigger}}",
           "eventVersion":"1.0",
           "customData":"Project ID 12345", 
           "userIdentityARN":"arn:aws:iam::{{111122223333}}:user/{{JaneDoe-CodeCommit}}",
        }
     ]
   }
   ```