示例:在 Amazon CodeCommit 中为现有的 Amazon Lambda 函数创建触发器 - Amazon CodeCommit
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon CodeCommit 现已不再向新客户提供。Amazon CodeCommit 的现有客户可以继续正常使用该服务。了解更多

示例:在 Amazon CodeCommit 中为现有的 Amazon Lambda 函数创建触发器

创建调用 Lambda 函数的触发器的最简单的方法是在 Lambda 控制台中创建该触发器。这种内置集成可确保 CodeCommit 具有运行该函数所需的权限。要为现有 Lambda 函数添加触发器,请转到 Lambda 控制台,然后选择该函数。在该函数的触发器选项卡上,按照添加触发器中的步骤操作。这些步骤类似于创建 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. 在终端(Linux、macOS 或 Unix)或命令行 (Windows) 中,使用刚刚创建的 JSON 文件运行 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 函数资源策略的更多信息,请参阅《Amazon Lambda 用户指南》中的 AddPermission拉取/推送事件模型

  4. 登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  5. Dashboard 导航窗格中,选择 Roles,然后在角色列表中选择 lambda_basic_execution

  6. 在角色的摘要页面上,选择权限选项卡,然后在内联策略中选择创建角色策略

  7. Set Permissions 页面上,选择 Policy Generator,然后选择 Select

  8. 编辑权限页面上,执行以下操作:

    • Effect 中选择 Allow

    • Amazon 服务中,选择 Amazon CodeCommit

    • Actions 中选择 GetRepository

    • Amazon 资源名称(ARN)中输入存储库的 ARN(例如,arn:aws:codecommit:us-east-1:111122223333:MyDemoRepo)。

    选择 Add Statement,然后选择 Next Step

  9. 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 函数创建触发器(控制台)

创建 Lambda 函数后,您可以在 CodeCommit 中创建一个触发器,以便运行该函数来响应您指定的存储库事件。

注意

您必须先配置一些策略,以允许 CodeCommit 调用 Lambda 函数并允许该函数获取有关存储库的信息,然后才能成功测试或运行示例中的触发器。有关更多信息,请参阅 允许 CodeCommit 运行 Lambda 函数

为 Lambda 函数创建触发器
  1. 打开 CodeCommit 控制台:https://console.aws.amazon.com/codesuite/codecommit/home

  2. 存储库 中,选择要创建存储库事件触发器的存储库。

  3. 在存储库的导航窗格中,选择设置,然后选择触发器

  4. 选择创建触发器

  5. 创建触发器中,执行以下操作:

    • 触发器名称中,输入触发器的名称(例如,MyLambdaFunctionTrigger)。

    • 事件中,选择触发 Lambda 函数的存储库事件。

      如果选择 All repository events,则无法选择任何其他事件。如果需要选择事件的子集,请清除 All repository events,然后从列表中选择所需的事件。例如,如果希望触发器只在用户在 CodeCommit 存储库中创建标签或分支时运行,请删除所有存储库事件,然后选择创建分支或标签

    • 如果您希望触发器应用于存储库中的所有分支,请在分支中,将选定内容保留为空,因为此默认选项会自动将触发器应用于所有分支。如果您希望此触发器仅应用于特定分支,请从存储库分支列表中选择最多 10 个分支名称。

    • 选择要使用的服务中,选择 Amazon Lambda

    • Lambda 函数中,从列表中选择函数名称,或输入函数的 ARN。

    • (可选)在自定义数据中,输入要包含在 Lambda 函数中的信息(例如,开发人员用于讨论存储库中的开发工作的 IRC 通道的名称)。该字段是一个字符串。它不能用于传递任何动态参数。

  6. (可选)选择测试触发器。该选项将尝试使用有关您的存储库的示例数据(包括存储库的最新提交 ID)调用该函数。(如果不存在提交历史记录,则将生成由零组成的示例值。) 这可帮助您确认是否已正确配置 CodeCommit 和 Lambda 函数之间的访问。

  7. 选择创建触发器以完成触发器的创建操作。

  8. 要验证触发器的功能,请生成并向配置该触发器的存储库推送一个提交。在 Lambda 控制台中该函数的监控选项卡上,您应该会看到 Lambda 函数的响应。

为 CodeCommit 存储库创建 Lambda 函数触发器 (Amazon CLI)

您还可以使用命令行创建响应 CodeCommit 存储库事件(例如,当有人向您的存储库推送提交时)的 Lambda 函数触发器。

为 Lambda 函数创建触发器
  1. 打开纯文本编辑器,创建一个 JSON 文件,在其中指定:

    • Lambda 函数名称。

    • 要用该触发器监控的存储库和分支。(如果没有指定任何分支,触发器将应用到存储库中的所有分支。)

    • 激活该触发器的事件。

    保存该文件。

    例如,如果要为名为 MyDemoRepo 的存储库创建一个将 masterpreprod 这两个分支的所有存储库事件发布到名为 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 中。

  2. (可选)在终端或命令提示符处,运行 test-repository-triggers 命令。例如,以下内容用于测试名为 trigger.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 函数的响应。