示例:创建触发器 AWS CodeCommit 对于现有的 AWS Lambda 功能 - AWS CodeCommit

示例:创建触发器 AWS CodeCommit 对于现有的 AWS Lambda 功能

创建调用A触发器的最简单方法 Lambda 功能是在 Lambda 控制台。这种内置集成可确保 CodeCommit 具有运行该函数所需的权限。如何为现有的 Lambda 功能,转到 Lambda 控制台,然后选择功能。在 触发因 选项卡,按照步骤中的步骤 添加触发器. 这些步骤类似于中的步骤。创建 Lambda 函数.

您也可以为 Lambda 功能 CodeCommit 资料库。为此,您需要选择要调用的现有 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:80398EXAMPLE:MyDemoRepo", "SourceAccount": "80398EXAMPLE" }
  2. 将文件保存为JSON文件,其名称可以轻松记忆(例如,AllowAccessfromMyDemoRepojson

  3. 使用您刚刚创建的JSON文件,在终端(Linux, macOS, or Unix)或命令行(Windows),运行 aws lambda add-permissions 要添加与您的“资源策略”相关联的权限的命令 Lambda 功能:

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

    该命令返回刚添加的策略语句(JSON 格式),内容如下:

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

    有关资源策略的更多信息,请参阅 Lambda 功能,请参阅 Add权限拉/推事件模型AWS Lambda 用户指南.

  4. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.aws.amazon.com/iam/

  5. 仪表板 导航窗格,选择 角色,在角色列表中,选择 lambda_basic_execution.

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

  7. 设置权限 页面,选择 策略发生器,然后选择 选择.

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

    • 效果,选择 允许.

    • AWS服务,选择 AWS CodeCommit.

    • 操作,选择 getrepository.

    • 亚马逊资源名称(ARN),输入存储库的ARN(例如, arn:aws:codecommit:us-east-1:80398EXAMPLE:MyDemoRepo)。

    选择 添加声明,然后选择 下一步.

  9. 审查政策 页面,选择 应用政策.

    策略语句应如下例所示:

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

为 Lambda 功能 CodeCommit 存储库(控制台)

在您创建 Lambda 功能,您可以在 CodeCommit 该功能可以响应您指定的存储库事件运行函数。

注意

在成功测试或运行示例触发器之前,必须配置允许的策略 CodeCommit 要调用函数和 Lambda 功能来获取有关存储库的信息。有关更多信息,请参阅 允许 CodeCommit 要运行 Lambda 功能.

为 Lambda 函数创建触发器

  1. 通过以下网址打开 CodeCommit 控制台:https://console.aws.amazon.com/codesuite/codecommit/home

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

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

  4. 选择 创建触发器.

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

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

    • 事件,选择触发 Lambda 功能。

      如果您选择 所有存储库事件,您无法选择任何其他事件。如果要选择一个事件子集,请清除 所有存储库事件,然后从列表中选择您想要的事件。例如,如果您希望在用户创建标签或在 CodeCommit 存储库,删除 所有存储库事件,然后选择 创建分支或标签.

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

    • 选择要使用的服务,选择 AWS Lambda.

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

    • (可选) 自定义数据,输入您希望在 Lambda 功能(例如,开发人员用于讨论资料库中发展的IRC渠道的名称)。该字段是一个字符串。它不能用于传递任何动态参数。

  6. (可选)选择 测试触发器. 该选项将尝试使用有关您的存储库的示例数据(包括存储库的最新提交 ID)调用该函数。(如果没有提交历史记录,则会生成包含零的样品值。)这有助于确认您已正确配置了 CodeCommit 和 Lambda 功能。

  7. 选择 创建触发器 完成创建触发器。

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

创建触发器 Lambda 功能 CodeCommit 存储库(AWS CLI)

您还可以使用命令行来创建一个触发器 Lambda 响应 CodeCommit 存储库事件,例如某人将承诺推向您的资料库。

为 Lambda 函数创建触发器

  1. 打开纯文本编辑器,创建一个 JSON 文件,在其中指定:

    • TheThethe Lambda 功能名称。

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

    • 激活该触发器的事件。

    保存 文件。

    例如,如果您想为名为 MyDemoRepo 将所有存储库事件发布到A Lambda 命名功能 MyCodeCommitFunction 两个分支机构 master $and preprod:

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

    存储库中的每个触发器在该 JSON 文件中都有一个对应的触发块。要为存储库创建多个触发器,请在 JSON 中包含更多的触发块。请记住,在该文件中创建的所有触发器都用于指定的存储库。不能在一个 JSON 文件中为多个存储库创建触发器。例如,如果要为某个存储库创建两个触发器,您可以创建一个包含两个触发块的 JSON 文件。在下面的示例中,第二个触发块中未指定任何分支,因此,该触发器将应用到所有分支:

    { "repositoryName": "MyDemoRepo", "triggers": [ { "name": "MyLambdaFunctionTrigger", "destinationArn": "arn:aws:lambda:us-east-1:80398EXAMPLE:function:MyCodeCommitFunction", "customData": "", "branches": [ "master", "preprod" ], "events": [ "all" ] }, { "name": "MyOtherLambdaFunctionTrigger", "destinationArn": "arn:aws:lambda:us-east-1:80398EXAMPLE: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:80398EXAMPLE:MyCodeCommitFunction", "branches": [ "master", "preprod" ], "name": "MyLambdaFunctionTrigger", "customData": "Project ID 12345" } ] }
  5. 要测试触发器的功能,请生成并向配置该触发器的存储库推送一个提交。您应该看到 Lambda 功能 监控 该功能的选项卡 Lambda 控制台。