AWS CodeCommit
用户指南 (API 版本 2015-04-13)

示例:为 AWS Lambda 函数创建 AWS CodeCommit 触发器

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

创建 Lambda 函数

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

使用 Lambda 蓝图创建 Lambda 函数

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

  2. Lambda Functions (Lambda 函数) 页面上,选择 Create a Lambda function (创建 Lambda 函数)。(如果以前未使用过 Lambda,请选择 Get Started Now (立即开始使用)。)

  3. 选择蓝图页面上,选择空白函数

  4. 配置触发器 页面上,从服务下拉列表中选择 AWS CodeCommit。

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

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

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

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

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

    选择下一步

  5. 配置函数页面上的名称中,为函数输入名称(例如,MyCodeCommitFunction)。在描述 中,为函数输入可选的描述。如果需要创建示例 JavaScript 函数,请在运行语言中选择 Node.js。如果需要创建示例 Python 函数,请选择 Python 2.7

  6. 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
  7. Lambda function handler and role (Lambda 函数处理程序和角色) 中,执行以下操作:

    • Handler 中,保留从函数派生的默认值 (Node.js 示例为 index.handler,Python 示例为 lambda_function.lambda_handler)。

    • 角色中,选择创建自定义角色。在 IAM 控制台中,执行以下操作:

      • IAM Role 中,选择 lambda_basic_execution

      • Policy Name 中,选择 Create a new role policy

      • 选择允许以创建角色,然后返回到 Lambda 控制台。Role 现在应显示值 lambda_basic_execution

        注意

        如果为角色选择了不同的角色或不同的名称,请务必在本主题的步骤中使用您自己指定的角色或名称。

    选择 Next

  8. Review 页面上,检查函数设置,然后选择 Create function

在 AWS CodeCommit 存储库中查看 Lambda 函数的触发器

创建 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/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