

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

# 範例：在 中 AWS CodeCommit 為現有 AWS Lambda 函數建立觸發
<a name="how-to-notify-lambda-cc"></a>

建立觸發以叫用 Lambda 函數的最簡單方法是在 Lambda 主控台中建立該觸發。此內建整合可確保 CodeCommit 具有執行 函數所需的許可。若要新增現有 Lambda 函數的觸發條件，請前往 Lambda 主控台，然後選擇函數。在函數的 **Triggers (觸發)** 標籤上，依照 **Add trigger (新增觸發)** 中的步驟。這些步驟類似於[建立 Lambda 函式](how-to-notify-lambda.md#how-to-notify-lambda-create-function)中的步驟。

您也可以在 CodeCommit 儲存庫中建立 Lambda 函數的觸發。這樣做需要您選擇要叫用的現有 Lambda 函數。它還要求您手動設定 CodeCommit 執行函數所需的許可。

**Topics**
+ [手動設定許可以允許 CodeCommit 執行 Lambda 函數](#how-to-notify-lam-perm)
+ [在 CodeCommit 儲存庫中建立 Lambda 函數的觸發條件 （主控台）](#how-to-notify-lam-console)
+ [為 CodeCommit 儲存庫建立 Lambda 函數的觸發 (AWS CLI)](#how-to-notify-lam-cli)

## 手動設定許可以允許 CodeCommit 執行 Lambda 函數
<a name="how-to-notify-lam-perm"></a>

如果您在 CodeCommit 中建立叫用 Lambda 函數的觸發，您必須手動設定允許 CodeCommit 執行 Lambda 函數的許可。若要避免此手動組態，請考慮改為在 Lambda 主控台中建立 函數的觸發。<a name="how-to-notify-lambda-create-function-perm"></a>

**允許 CodeCommit 執行 Lambda 函數**

1. 開啟純文字編輯器並建立 JSON 檔案，指定 Lambda 函數名稱、CodeCommit 儲存庫的詳細資訊，以及您想要在 Lambda 中允許的動作，如下所示：

   ```
   {
       "FunctionName": "MyCodeCommitFunction", 
       "StatementId": "1", 
       "Action": "lambda:InvokeFunction", 
       "Principal": "codecommit.amazonaws.com", 
       "SourceArn": "arn:aws:codecommit:us-east-1:111122223333:MyDemoRepo", 
       "SourceAccount": "111122223333"
   }
   ```

1. 以容易記住的名稱將檔案儲存為 JSON 檔案 (例如，*AllowAccessfromMyDemoRepo*.json)。

1. 使用您剛建立的 JSON 檔案，在終端機 (Linux、macOS 或 Unix) 或命令列 (Windows) 執行 **aws lambda add-permissions**命令，將許可新增至與您的 Lambda 函數相關聯的資源政策：

   ```
   aws lambda add-permission --cli-input-json file://AllowAccessfromMyDemoRepo.json
   ```

   此命令會傳回您剛新增的政策陳述式的 JSON，類似如下：

   ```
   {
       "Statement": "{\"Condition\":{\"StringEquals\":{\"AWS:SourceAccount\":\"111122223333\"},\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:codecommit:us-east-1:111122223333:MyDemoRepo\"}},\"Action\":[\"lambda:InvokeFunction\"],\"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:MyCodeCommitFunction\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"codecommit.amazonaws.com\"},\"Sid\":\"1\"}"
   }
   ```

   如需 Lambda 函數資源政策的詳細資訊，請參閱*AWS Lambda 《 使用者指南*》中的 [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) [和提取/推送事件模型](https://docs.aws.amazon.com/lambda/latest/dg/intro-invocation-modes.html)。

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

1. 在 **Dashboard (儀表板)** 導覽窗格中，選擇 **Roles (角色)**，然後在角色清單中，選取 *lambda\$1basic\$1execution*。

1. 在角色的摘要頁面上，選擇 **Permissions (許可)** 標籤，然後在 **Inline Policies (內嵌政策)** 中，選擇 **Create Role Policy (建立角色政策)**。

1. 在 **Set Permissions (設定許可)** 頁面上，選擇 **Policy Generator (政策產生器)**，然後選擇 **Select (選取)**。

1. 在 **Edit Permissions (編輯許可)** 頁面上，執行下列動作：
   + 在 **Effect (效果)** 中，選擇 **Allow (允許)**。
   + 在**AWS 服務**中，選擇 **AWS CodeCommit**。
   + 在 **Actions (動作)** 中，選取 **GetRepository**。
   + 在 **Amazon Resource Name (ARN)** 中，輸入儲存庫的 ARN (例如，`arn:aws:codecommit:us-east-1:111122223333:MyDemoRepo`)。

   選擇 **Add Statement (新增陳述式)**，然後選擇 **Next Step (下一步)**。

1. 在 **Review Policy (檢閱政策)** 頁面上，選擇 **Apply Policy (套用政策)**。

   您的政策陳述式應該類似於下列範例：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Stmt11111111",
               "Effect": "Allow",
               "Action": [
                   "codecommit:GetRepository"
               ],
               "Resource": [
                   "arn:aws:codecommit:us-east-1:111122223333:MyDemoRepo"
               ]
           }
       ]
   }
   ```

------

## 在 CodeCommit 儲存庫中建立 Lambda 函數的觸發條件 （主控台）
<a name="how-to-notify-lam-console"></a>

建立 Lambda 函數之後，您可以在 CodeCommit 中建立觸發，以執行函數來回應您指定的儲存庫事件。

**注意**  
您必須先設定允許 CodeCommit 叫用函數和 Lambda 函數以取得儲存庫相關資訊的政策，才能成功測試或執行範例的觸發條件。如需詳細資訊，請參閱[允許 CodeCommit 執行 Lambda 函數](#how-to-notify-lambda-create-function-perm)。

**為 Lambda 函數建立觸發**

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 (建立觸發)**。

1. 在 **Create trigger (建立觸發)** 中，執行下列操作：

    
   + 在 **Trigger name (觸發名稱)** 中，輸入觸發的名稱 (例如，*MyLambdaFunctionTrigger*)。
   + 在**事件**中，選擇觸發 Lambda 函數的儲存庫事件。

     如果您選擇 **All repository events (所有儲存庫事件)**，則無法選擇其他任何事件。如果您想要選擇事件子集，請清除 **All repository events (所有儲存庫事件)**，然後從清單中選擇您要的事件。例如，如果您希望觸發僅在使用者在 CodeCommit 儲存庫中建立標籤或分支時執行，請移除**所有儲存庫事件**，然後選擇**建立分支或標籤**。
   + 如果您希望將觸發套用到儲存庫的所有分支，請在 **Branches (分支)** 中保持空白選擇，因為這個預設選項會自動將觸發套用到所有分支。如果您希望此觸發只套用到特定分支，請從儲存庫分支清單中選擇最多 10 個分支名稱。
   + 在 **Choose the service to use (選擇要使用的服務)** 中，選擇 **AWS Lambda**。
   + 在 **Lambda 函數**中，從清單中選擇函數名稱，或輸入函數的 ARN。
   + （選用） 在**自訂資料**中，輸入您要包含在 Lambda 函數中的資訊 （例如，開發人員用來討論儲存庫中開發的 IRC 頻道名稱）。此欄位是字串。無法用於傳遞任何動態參數。

1. (選用) 選擇 **Test trigger (測試觸發)**。此選項會嘗試以有關儲存庫的範例資料來叫用函數，包括儲存庫最新的遞交 ID。(如果不存在遞交歷史記錄，則會產生由零組成的範例值。) 這可協助您確認您已正確設定 CodeCommit 和 Lambda 函數之間的存取。

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

1. 為了驗證觸發的功能，請進行遞交並推送至您已設定觸發的儲存庫。您應該會在 Lambda 主控台的**監控**索引標籤上看到來自 Lambda 函數的回應。

## 為 CodeCommit 儲存庫建立 Lambda 函數的觸發 (AWS CLI)
<a name="how-to-notify-lam-cli"></a>

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

**為 Lambda 函數建立觸發**

1. 開啟純文字編輯器，並建立 JSON 檔案，在其中指定：
   + Lambda 函數名稱。
   + 您要使用此觸發來監控的儲存庫和分支。(如果您不指定任何分支，則觸發會套用到儲存庫中的所有分支。)
   + 啟動此觸發的事件。

    儲存檔案。

   例如，如果您想要為名為 *MyDemoRepo* 的儲存庫建立觸發，該儲存庫會將所有儲存庫事件發佈至名為 *MyCodeCommitFunction* 的 Lambda 函數，用於兩個分支，*主要*和*預生產*：

   ```
   {
       "repositoryName": "MyDemoRepo",
       "triggers": [
           {
               "name": "MyLambdaFunctionTrigger",
               "destinationArn": "arn:aws:lambda:us-east-1:111122223333:function:MyCodeCommitFunction",
               "customData": "",
               "branches": [
                   "main", "preprod"
               ],
               "events": [
                   "all"
               ]
           }
       ]
   }
   ```

   儲存庫的每個觸發在 JSON 中都必須有一個觸發區塊。若要為儲存庫建立多個觸發，請在 JSON 中包含更多區塊。請記住，此檔案中建立的所有觸發是針對指定的儲存庫。您無法在單一 JSON 檔案中為多個儲存庫建立觸發。例如，如果您想要為儲存庫建立兩個觸發，則可以建立含有兩個觸發區塊的 JSON 檔案。在下列範例中，第二個觸發區塊中未指定分支，因此觸發會套用到所有分支：

    

   ```
   {
       "repositoryName": "MyDemoRepo",
       "triggers": [
           {
               "name": "MyLambdaFunctionTrigger",
               "destinationArn": "arn:aws:lambda:us-east-1:111122223333:function:MyCodeCommitFunction",
               "customData": "",
               "branches": [
                   "main", "preprod"
               ],
               "events": [
                   "all"
               ]
           },
           {
               "name": "MyOtherLambdaFunctionTrigger",
               "destinationArn": "arn:aws:lambda:us-east-1:111122223333:function:MyOtherCodeCommitFunction",
               "customData": "",
               "branches": [],
               "events": [
                   "updateReference", "deleteReference"
               ]
           }
       ]
   }
   ```

   您可以為您指定的事件建立觸發，例如將遞交推送至儲存庫時。事件類型包括：
   + `all` 代表指定的儲存庫和分支中的所有事件。
   + `updateReference` 表示遞交推送到指定的儲存庫和分支。
   + `createReference` 表示指定的儲存庫中建立新的分支或標籤。
   + `deleteReference` 表示指定的儲存庫中刪除分支或標籤。
**注意**  
您可以在一個觸發中使用多個事件類型。不過，如果您指定 `all`，則無法指定其他事件。

   若要查看有效事件類型的完整清單，請在終端機或命令提示字元中輸入 **aws codecommit put-repository-triggers help**。

   此外，您可以在 `customData` 中包含字串 (例如，開發人員在此儲存庫中討論開發時所使用的 IRC 管道名稱)。此欄位是字串。無法用於傳遞任何動態參數。此字串會附加為回應觸發所傳回之 CodeCommit JSON 的屬性。

1. (選用) 在終端機或命令提示字元中，執行 **test-repository-triggers** 命令。例如，以下用於測試名為 *trigger.json* 的 JSON 檔案是否有效，以及 CodeCommit 可以觸發 Lambda 函數。如果沒有實際資料可用，此測試會使用範例資料來觸發該函數。

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

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

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

1. 在終端機或命令提示字元中，執行 **put-repository-triggers**命令以在 CodeCommit 中建立觸發。例如，若要使用名為 *trigger.json* 的 JSON 檔案來建立觸發：

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

   此命令會傳回類似以下的組態 ID：

   ```
   {
       "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:lambda:us-east-1:111122223333:MyCodeCommitFunction",
               "branches": [
                   "main",
                   "preprod"
               ],
               "name": "MyLambdaFunctionTrigger",
               "customData": "Project ID 12345"
           }
       ]
   }
   ```

1. 為了測試觸發的功能，請進行遞交並推送至您已設定觸發的儲存庫。您應該會在 Lambda 主控台的**監控**索引標籤上看到來自 Lambda 函數的回應。