

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

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

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

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

**Topics**
+ [为 CodeCommit 存储库的 Amazon SNS 主题创建触发器（控制台）](#how-to-notify-sns-console)
+ [为 CodeCommit 存储库的 Amazon SNS 主题创建触发器 ()AWS 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.aws.amazon.com/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 主题创建触发器 ()AWS 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.aws.amazon.com/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",
        }
     ]
   }
   ```