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

AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可以繼續正常使用服務。進一步了解"

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

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

建立觸發程序以叫用 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和 提取/推送事件模型。 https://docs.aws.amazon.com/lambda/latest/dg/intro-invocation-modes.html

  4. 登入 AWS Management Console 並在 開啟IAM主控台https://console.aws.amazon.com/iam/

  5. 儀表板導覽窗格中,選擇角色,然後在角色清單中,選取 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 ,以執行函數來回應您指定的儲存庫事件。

注意

您必須先設定允許 叫用 函數和 Lambda 函數 CodeCommit 以取得儲存庫相關資訊的政策,才能成功測試或執行範例的觸發。如需詳細資訊,請參閱允許 CodeCommit 執行 Lambda 函數

為 Lambda 函數建立觸發
  1. https://console.aws.amazon.com/codesuite/Codecommit/home 開啟 CodeCommit 主控台。

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

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

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

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

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

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

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

    • 如果您希望將觸發套用到儲存庫的所有分支,請在 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 函數的回應。

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

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

為 Lambda 函數建立觸發
  1. 開啟純文字編輯器並建立指定下列項目JSON的檔案:

    • Lambda 函數名稱。

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

    • 啟動此觸發的事件。

    儲存檔案。

    例如,如果您想要為名為 的儲存庫建立觸發MyDemoRepo,該儲存庫會將所有儲存庫事件發佈至名為 MyCodeCommitFunction 的 Lambda 函數,以用於兩個分支,main以及preprod

    { "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的檔案trigger.json是否有效,以及 CodeCommit 是否可以觸發 Lambda 函數。如果沒有實際資料可用,此測試會使用範例資料來觸發該函數。

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

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

    { "successfulExecutions": [ "MyLambdaFunctionTrigger" ], "failedExecutions": [] }
  3. 在終端機或命令提示字元中,執行 put-repository-triggers 命令在 CodeCommit 中建立觸發。例如,若要使用名為 JSON的檔案trigger.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 函數的回應。