示例:创建 AWS CodeCommit 触发 AWS Lambda 功能 - AWS CodeCommit

示例:创建 AWS CodeCommit 触发 AWS Lambda 功能

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

创建 Lambda 函数

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

使用 Lambda 蓝图创建 Lambda 函数

  1. 通过以下网址登录 AWS 管理控制台并打开 AWS Lambda 控制台 (https://console.aws.amazon.com/lambda/)。

  2. Lambda 功能 页面,选择 创建 功能. (如果以前未使用过 Lambda,请选择 Get Started Now (立即开始使用)。)

  3. Create function (创建函数) 页面上,选择“Author from scratch (从头开始创作)”。英寸 函数名称,提供函数的名称,例如 MyLambdaFunctionforCodeCommit。英寸 运行时,选择您想用来编写功能的语言,然后选择 创建功能.

  4. 配置工学 选项卡,选择 添加触发器.

  5. 英寸 触发器配置,选择 CodeCommit 服务下拉列表中的。

    
                        从控制台创建存储库
    • 存储库名称中,选择要配置触发器(该触发器使用 Lambda 函数响应存储库事件)的存储库的名称。

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

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

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

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

    选择添加

  6. 配置工学 页面,在 功能代码, 在代码输入类型中,选择编辑代码内嵌。. 英寸 运行时,选择 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. 英寸 是 权限 选项卡,内 执行 角色, 选择角色以在 IAM 控制台。编辑附加的策略以添加 GetRepository 您要使用触发器的存储库的权限。

查看的触发器 Lambda 功能 AWS CodeCommit 存储库

创建 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 函数的响应。从 监控 选项卡,选择 查看中的日志 CloudWatch。的 CloudWatch 控制台会在新选项卡中打开,并显示您功能的事件。从与您推送提交的时间相对应的列表中选择日志流。您应会看到类似以下内容的事件数据:

    START RequestId: 70afdc9a-EXAMPLE Version: $LATEST 2015-11-10T18:18:28.689Z 70afdc9a-EXAMPLE References: [ 'refs/heads/master' ] 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