例如:创建AWS CodeCommit触发器AWS Lambdafunction - AWS CodeCommit

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

例如:创建AWS CodeCommit触发器AWS Lambdafunction

您可以为 CodeCommit 存储库创建触发器,以便存储库中的事件可以调用 Lambda 函数。在本示例中,将创建一个 Lambda 函数,它返回用于将存储库克隆到 Amazon CloudWatch 日志的 URL。

创建 Lambda 函数

当您使用 Lambda 控制台创建函数时,还可以为 Lambda 函数创建 CodeCommit 触发器。以下步骤包括示例 Lambda 函数。该示例包含两种语言:JavaScript 和 Python。该函数返回用于将存储库克隆到 CloudWatch 日志的 URL。

使用 Lambda 蓝图创建 Lambda 函数

  1. 登录到 AWS Management Console,然后通过以下网址打开 AWS Lambda 控制台:https://console.aws.amazon.com/lambda/

  2. 在存储库的Lambda 函数页面上,选择Createfunction. (如果您以前未使用过 Lambda,请选择立即开始使用。)

  3. Create function (创建函数) 页面上,选择“Author from scratch (从头开始创作)”。在 Function Name (函数名称) 中,为函数提供一个名称,例如 MyLambdaFunctionforCodeCommit。In运行时,选择要用于编写函数的语言,然后选择。创建函数.

  4. 在存储库的CONFIGUR行动 TAB,选择 添加触发器.

  5. In触发器配置,选择 CodeCommit从服务下拉列表中。

    
                        从控制台创建存储库

    • In存储库名称(请选择要配置触发器 (该触发器使用 Lambda 函数响应存储库事件) 的存储库的名称。

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

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

    • 如果希望将触发器应用于存储库的所有分支,请在 Branches 中选择 All branches。否则,请选择 Specific branches。默认情况下将添加存储库的默认分支。您可以保留或从列表中删除该分支。最多可从存储库分支列表中选择 10 个分支名称。

    • (可选)在自定义数据(例如,开发人员用于讨论存储库开发问题的 IRC 通道的名称)。该字段是一个字符串。它不能用于传递任何动态参数。

    选择 Add(添加)。

  6. 在存储库的CONFIGUR行动页面,函数代码、在 Code entry (代码条码) 类型中,选择 “Edit code. In 运行时,选择Node.js. 如果需要创建示例 Python 函数,请选择 Python

  7. Code entry type 中,选择 Edit code inline,然后使用以下两个示例之一替换 hello world 代码。

    对于 Node.js:

    var aws = require('aws-sdk'); var codecommit = new aws.CodeCommit({ apiVersion: '2015-04-13' }); exports.handler = function(event, context) { //Log the updated references from the event var references = event.Records[0].codecommit.references.map(function(reference) {return reference.ref;}); console.log('References:', references); //Get the repository from the event and show its git clone URL var repository = event.Records[0].eventSourceARN.split(":")[5]; var params = { repositoryName: repository }; codecommit.getRepository(params, function(err, data) { if (err) { console.log(err); var message = "Error getting repository metadata for repository " + repository; console.log(message); context.fail(message); } else { console.log('Clone URL:', data.repositoryMetadata.cloneUrlHttp); context.succeed(data.repositoryMetadata.cloneUrlHttp); } }); };

    对于 Python:

    import json import boto3 codecommit = boto3.client('codecommit') def lambda_handler(event, context): #Log the updated references from the event references = { reference['ref'] for reference in event['Records'][0]['codecommit']['references'] } print("References: " + str(references)) #Get the repository from the event and show its git clone URL repository = event['Records'][0]['eventSourceARN'].split(':')[5] try: response = codecommit.get_repository(repositoryName=repository) print("Clone URL: " +response['repositoryMetadata']['cloneUrlHttp']) return response['repositoryMetadata']['cloneUrlHttp'] except Exception as e: print(e) print('Error getting repository {}. Make sure it exists and that your repository is in the same region as this function.'.format(repository)) raise e
  8. In该Permissions (权限)选项卡,执行角色、选择角色在 IAM 控制台中打开。编辑附加的策略以添加GetRepository允许您使用触发器的存储库。

在中查看 Lambda 函数的触发器AWS CodeCommitrepository

创建 Lambda 函数后,可以在中查看和测试触发器。AWS CodeCommit. 测试触发器将运行函数以响应您指定的存储库事件。

查看和测试 Lambda 函数的触发器

  1. 从打开 CodeCommit 控制台https://console.aws.amazon.com/codesuite/codecommit/home.

  2. 存储库中,选择要查看其触发器的存储库。

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

  4. 查看存储库的触发器列表。您应会看到您在 Lambda 控制台中创建的触发器。从列表中选择该触发器,然后选择测试触发器。该选项将尝试使用有关您的存储库的示例数据(包括存储库的最新提交 ID)调用该函数。(如果不存在提交历史记录,则将生成由零组成的示例值。) 这可帮助您确认已正确配置访问权限。AWS CodeCommit以及 Lambda 函数。

  5. 要进一步验证触发器的功能,请生成并向配置该触发器的存储库推送一个提交。您应会看到来自 Lambda 函数的响应。监控Lambda 控制台中该函数的选项卡。从 Monitoring 选项卡上,选择 View logs in CloudWatch。CloudWatch 控制台会在新选项卡中打开,并显示您的函数的事件。从与您推送提交的时间相对应的列表中选择日志流。您应会看到类似以下内容的事件数据:

    START RequestId: 70afdc9a-EXAMPLE Version: $LATEST 2015-11-10T18:18:28.689Z 70afdc9a-EXAMPLE References: [ 'refs/heads/main' ] 2015-11-10T18:18:29.814Z 70afdc9a-EXAMPLE Clone URL: https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo END RequestId: 70afdc9a-EXAMPLE REPORT RequestId: 70afdc9a-EXAMPLE Duration: 1126.87 ms Billed Duration: 1200 ms Memory Size: 128 MB Max Memory Used: 14 MB