与Lambda的集成

上一节讲Trigger时,我们提到CodeCommit可以调用Lambda;其实在Lambda里也可以设置CodeCommit作为Trigger,两者效果完全是等价的

本节我们将从Lambda侧来配置,使用CodeCommit作为Trigger

创建lambda触发器

进入到Lambda页面,创建一个新的函数,使用Python3.9作为执行环境:

image-20221003124229023

创建完成后,添加一个trigger :

image-20221003124413903

使用CodeCommit作为触发器。此时看到,所有的事件和上一节介绍CodeCommit Trigger时是完全一样的:

image-20221003124514769

创建完成后回到CodeCommit页面,发现里面也自动创建好了一个Trigger。所以,本节介绍的这种方式和上一节是完全等价的

image-20221003124549276

更新Lambda的代码与权限设置

更新Lambda的代码如下,这段代码会解析触发事件的CodeCommit代码库,并获取它的详细URL并输出:

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

更新完成后点击Deploy:

image-20221003124616713

由于Lambda需要访问CodeCommit的一些信息,所以它需要有对应的权限。在Lambda Role里添加上所需的权限:

image-20221003124932532

这里直接给它CodeCommitFullAccess

image-20221003125008467

测试

CodeCommit里编辑文件,模拟提交一次代码,这样Lambda会自动触发:

image-20221003125131100

查看Lambda的日志:

image-20221003125207106

对应的输出如下:

image-20221003130227349

参考: https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-notify-lambda.html