

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

# 範例：建立 Amazon SNS 主題的 AWS CodeCommit 觸發條件
<a name="how-to-notify-sns"></a>

您可以為 CodeCommit 儲存庫建立觸發，讓該儲存庫中的事件觸發來自 Amazon Simple Notification Service (Amazon SNS) 主題的通知。您可能想要建立 Amazon SNS 主題的觸發條件，讓使用者訂閱有關儲存庫事件的通知，例如刪除分支。您也可以利用 Amazon SNS 主題與其他 服務的整合，例如 Amazon Simple Queue Service (Amazon SQS) 和 AWS Lambda。

**注意**  
您必須將觸發指向現有的 Amazon SNS 主題，該主題是回應儲存庫事件所採取的動作。如需建立和訂閱 Amazon SNS 主題的詳細資訊，請參閱 [Amazon Simple Notification Service 入門](https://docs.aws.amazon.com/sns/latest/dg/GettingStarted.html)。
CodeCommit 觸發程序不支援 Amazon SNS FIFO （先進先出） 主題。

**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：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇儲存庫以針對儲存庫事件建立觸發。

1. 在儲存庫的導覽窗格中，選擇 **Settings (設定)**，然後選擇 **Triggers (觸發)**。

1. 選擇 **Create trigger (建立觸發)**，然後執行下列動作：
   + 在 **Trigger name (觸發名稱)** 中，輸入觸發的名稱 (例如，*MyFirstTrigger*)。
   + 在**事件**中，選擇觸發 Amazon SNS 主題傳送通知的儲存庫事件。

     如果您選擇 **All repository events (所有儲存庫事件)**，則無法選擇其他任何事件。若要選擇事件子集，請移除 **All repository events (所有儲存庫事件)**，然後從清單中選擇一或多個事件。例如，如果您希望觸發僅在使用者在 CodeCommit 儲存庫中建立分支或標籤時執行，請移除**所有儲存庫事件**，然後選擇**建立分支或標籤**。
   + 如果您希望將觸發套用到儲存庫的所有分支，請在 **Branches (分支)** 中保持空白選擇，因為這個預設選項會自動將觸發套用到所有分支。如果您希望此觸發只套用到特定分支，請從儲存庫分支清單中選擇最多 10 個分支名稱。
   + 在**選擇要使用的服務中**，選擇 **Amazon SNS**。
   + 在 **Amazon SNS** 中，從清單中選擇主題名稱，或輸入主題的 ARN。
**注意**  
CodeCommit 觸發程序不支援 Amazon SNS FIFO （先進先出） 主題。您必須選擇類型設為 Standard 的 Amazon SNS 主題。
   + 在**自訂資料**中，提供您想要包含在 Amazon SNS 主題傳送通知中的任何選用資訊 （例如，開發人員在此儲存庫中討論開發時使用的 IRC 頻道名稱）。此欄位是字串。無法用於傳遞任何動態參數。

    

1. (選用) 選擇 **Test trigger (測試觸發)**。此步驟可協助您確認已正確設定 CodeCommit 與 Amazon SNS 主題之間的存取。如果可用，它會使用 Amazon SNS 主題，使用儲存庫中的資料傳送測試通知。如果沒有實際的資料可用，測試通知會包含範例資料。

1. 選擇 **Create trigger (建立觸發)**，以完成建立觸發。

## 為 CodeCommit 儲存庫建立 Amazon SNS 主題的觸發 (AWS CLI)
<a name="how-to-notify-sns-cli"></a>

您也可以使用命令列為 Amazon SNS 主題建立觸發，以回應 CodeCommit 儲存庫事件，例如當有人將遞交推送到您的儲存庫時。

**為 Amazon SNS 主題建立觸發**

1. 開啟純文字編輯器，並建立 JSON 檔案，在其中指定：
   + Amazon SNS 主題名稱。
**注意**  
CodeCommit 觸發程序不支援 Amazon SNS FIFO （先進先出） 主題。您必須選擇類型設為 Standard 的 Amazon SNS 主題。
   + 您要使用此觸發來監控的儲存庫和分支。(如果您不指定任何分支，則觸發會套用到儲存庫中的所有分支。)
   + 啟動此觸發的事件。

    儲存檔案。

   例如，若要為名為 *MyDemoRepo* 的儲存庫建立觸發，該儲存庫會將所有儲存庫事件發佈至名為 *MySNSTopic* 的 Amazon SNS 主題，適用於兩個分支，*主要*和*預先開發*：

   ```
   {
       "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 主題的訂閱者。例如，以下用於測試名為 *trigger.json* 的觸發檔案中的 JSON 是否有效，以及 CodeCommit 是否可以發佈到 Amazon SNS 主題：

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

   若成功，此命令會傳回類似如下的資訊：

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

1. 在終端機或命令提示字元中，執行 **put-repository-triggers**命令以在 CodeCommit 中建立觸發。例如，若要使用名為 *trigger.json* 的 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",
        }
     ]
   }
   ```