上一节讲Trigger时,我们提到CodeCommit
可以调用Lambda;其实在Lambda里也可以设置CodeCommit
作为Trigger,两者效果完全是等价的。
本节我们将从Lambda侧来配置,使用CodeCommit
作为Trigger
进入到Lambda页面,创建一个新的函数,使用Python3.9
作为执行环境:
创建完成后,添加一个trigger :
使用CodeCommit
作为触发器。此时看到,所有的事件和上一节介绍CodeCommit Trigger
时是完全一样的:
创建完成后回到CodeCommit页面,发现里面也自动创建好了一个Trigger。所以,本节介绍的这种方式和上一节是完全等价的:
更新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:
由于Lambda需要访问CodeCommit的一些信息,所以它需要有对应的权限。在Lambda Role里添加上所需的权限:
这里直接给它CodeCommitFullAccess
:
在CodeCommit
里编辑文件,模拟提交一次代码,这样Lambda会自动触发:
查看Lambda的日志:
对应的输出如下:
参考: https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-notify-lambda.html