範例:為現有 AWS Lambda 函數建立中 AWS CodeCommit 的觸發程序 - AWS CodeCommit

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

範例:為現有 AWS Lambda 函數建立中 AWS CodeCommit 的觸發程序

若要建立叫用 Lambda 函數的觸發器,最簡單的方法就是在 Lambda 主控台中建立該觸發器。此內建整合可確保 CodeCommit 具有執行函數所需的權限。若要為現有 Lambda 函數新增觸發器,請前往 Lambda 主控台,然後選擇函數。在函數的 Triggers (觸發) 標籤上,依照 Add trigger (新增觸發) 中的步驟。這些步驟類似於建立 Lambda 函式中的步驟。

您也可以為 CodeCommit 儲存庫中的 Lambda 函數建立觸發器。如此一來,您必須選擇要叫用的現有 Lambda 函數。它還要求您手動配置運行該函數所需 CodeCommit 的權限。

手動設定許可以允 CodeCommit 許執行 Lambda 函數

如果您在中建立一個叫 CodeCommit 用 Lambda 函數的觸發器,則必須手動設定允 CodeCommit 許執行 Lambda 函數的許可。若要避免此手動設定,請考慮改為在 Lambda 主控台中建立函數的觸發器。

若要允 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" }
  2. 將檔案儲存為 JSON 檔案,其名稱很容易記住 (例如 AllowAccessfromMyDemoRepo.json)。

  3. 使用您剛剛建立的 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和「提取/推送事件

  4. 登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  5. Dashboard (儀表板) 導覽窗格中,選擇 Roles (角色),然後在角色清單中,選取 lambda_basic_execution

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

  7. Set Permissions (設定許可) 頁面上,選擇 Policy Generator (政策產生器),然後選擇 Select (選取)

  8. Edit Permissions (編輯許可) 頁面上,執行下列動作:

    • Effect (效果) 中,選擇 Allow (允許)

    • 在 [AWS 服務] 中,選擇AWS CodeCommit

    • 動作中,選取GetRepository

    • Amazon Resource Name (ARN) 中,輸入儲存庫的 ARN (例如,arn:aws:codecommit:us-east-1:111122223333:MyDemoRepo)。

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

  9. Review Policy (檢閱政策) 頁面上,選擇 Apply Policy (套用政策)

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

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

在 CodeCommit儲存庫 (主控台) 中為 Lambda 函數建立觸發器

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

注意

在您可以成功測試或執行範例的觸發器之前,您必須先設定允許 CodeCommit 叫用函數的政策和 Lambda 函數以取得有關存放庫的資訊。如需詳細資訊,請參閱 若要允 CodeCommit 許執行 Lambda 函數

若要建立 Lambda 函數的觸發器
  1. 請在以下位置開啟 CodeCommit 主控台。 https://console.aws.amazon.com/codesuite/codecommit/home

  2. Repositories (儲存庫) 中,選擇儲存庫以針對儲存庫事件建立觸發。

  3. 在儲存庫的導覽窗格中,選擇 Settings (設定),然後選擇 Triggers (觸發)

  4. 選擇 Create trigger (建立觸發)

  5. Create trigger (建立觸發) 中,執行下列操作:

    • 觸發器名稱中,輸入觸發器的名稱 (例如,MyLambdaFunctionTrigger)。

    • 事件中,選擇觸發 Lambda 函數的儲存庫事件。

      如果您選擇 All repository events (所有儲存庫事件),則無法選擇其他任何事件。如果您想要選擇事件子集,請清除 All repository events (所有儲存庫事件),然後從清單中選擇您要的事件。例如,如果您希望觸發程序只在使用者在 CodeCommit 存放庫中建立標籤或分支時執行,請移除 [所有存放庫事件],然後選擇 [建立分支或標籤]。

    • 如果您希望將觸發套用到儲存庫的所有分支,請在 Branches (分支) 中保持空白選擇,因為這個預設選項會自動將觸發套用到所有分支。如果您希望此觸發只套用到特定分支,請從儲存庫分支清單中選擇最多 10 個分支名稱。

    • Choose the service to use (選擇要使用的服務) 中,選擇 AWS Lambda

    • Lambda 函數中,從清單中選擇函數名稱,或輸入函數的 ARN。

    • (選擇性) 在自訂資料中,輸入您想要包含在 Lambda 函數中的資訊 (例如,開發人員用來討論存放庫中開發的 IRC 頻道名稱)。此欄位是字串。無法用於傳遞任何動態參數。

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

  7. 選擇 Create trigger (建立觸發),以完成建立觸發。

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

為 CodeCommit儲存庫 (AWS CLI) 建立 Lambda 函數的觸發程序

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

若要建立 Lambda 函數的觸發器
  1. 開啟純文字編輯器,並建立 JSON 檔案,在其中指定:

    • Lambda 函數名稱。

    • 您要使用此觸發來監控的儲存庫和分支。(如果您不指定任何分支,則觸發會套用到儲存庫中的所有分支。)

    • 啟動此觸發的事件。

    儲存檔案。

    例如,如果您想要為名為的存放庫建立觸發器,MyDemoRepo該存放庫事件將所有儲存庫事件發佈到名MyCodeCommitFunction為兩個分支的 Lambda 函數,mainprepro d:

    { "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 屬性。

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

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

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

    { "successfulExecutions": [ "MyLambdaFunctionTrigger" ], "failedExecutions": [] }
  3. 在終端機或命令提示字元中,執行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" }
  4. 若要檢視觸發的組態,請執行 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" } ] }
  5. 為了測試觸發的功能,請進行遞交並推送至您已設定觸發的儲存庫。您應該會在 Lambda 主控台的 [控] 索引標籤上看到來自 Lambda 函數的回應。