2023/10/15AWS CodeCommitで通知ルール・トリガーを作成する
2023/07/28
AWS LambdaでCodeCommitイベント発生時にCloudWatchへ通知する
この記事ではAWS Lambda関数を使って、CodeCommitのリポジトリ上の変更通知をCloudWatchのログ上に出力する方法を解説していきます。CodeCommitで何かしらのイベントがあった時に通知をしてみたい方、AWS認定試験を受けようとしている方必見です!
CodeCommitを使用した経験がないという方やCodeCommit上にまだリポジトリを作成していないという方はこちらの記事もご覧ください!
Lambda関数を作成する
まずはCodeCommitのトリガーに使用するLambda関数を作成していきます。
AWS Lambdaのコンソール画面を開いてください。
Lambdaのコンソール画面を開いたら、「関数の作成」ボタンをクリックして、関数を作成していきます。
「一から作成」を選択し、関数名を入力します(今回は「lambda-codecommit」とします)。
「ランタイム」は「Python 3.7」を選択します。今回は詳細設定などはせず、関数名とランタイムを入れたら、「関数の作成」ボタンをクリックしましょう。
関数の作成が完了しました。次に「トリガーを追加」ボタンをクリックして、トリガーを追加していきましょう。
トリガーには「CodeCommit」を選択しましょう。
そして、対象のCodeCommitのリポジトリ名を選択します。
トリガー名は任意の名前をつけましょう(今は「LambdaTrigger」)。
イベントは通知を発生させたい時のイベントを選択します(今回は「すべてのリポジトリイベント」)。
また、ブランチ名は通知を発生させる対象となるブランチを選択します(今回は「すべてのブランチ」)。
カスタムデータなどは今回は特に設定せずにいきます。
一通り入力が終わったら「追加」ボタンをクリックし、トリガーを追加しましょう。
次に「関数コード」を入力していきます。
LambdaでCodeCommitのトリガーを作成するAWSガイド内の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
ソースコードの入力が完了したら「Deploy」ボタンをクリックして、変更を保存しましょう。
次に「テスト」ボタンをクリックしてテストイベントを作成していきます。
「新しいテストイベントの作成」を選択し、イベントテンプレート(今回は「codecommit-repository」)、イベント名(今回は「SampleCodeCommit」)を入力し、JSON形式でイベントを設定していきます。
以下がテストイベントのJSONの例です。適宜編集して設定してください。
{
"Records": [
{
"awsRegion": "ap-northeast-1",
"codecommit": {
"references": [
{
"commit": "5c4ef1049f1d27deadbeeff313e0730018be182b",
"ref": "refs/heads/master"
}
]
},
"customData": "this is custom data",
"eventId": "5a824061-17ca-46a9-bbf9-114edeadbeef",
"eventName": "TriggerEventTest",
"eventPartNumber": 1,
"eventSource": "aws:codecommit",
"eventSourceARN": "arn:aws:codecommit:ap-northeast-1:123456789012:my-repo",
"eventTime": "2016-01-01T23:59:59.000+0000",
"eventTotalParts": 1,
"eventTriggerConfigId": "5a824061-17ca-46a9-bbf9-114edeadbeef",
"eventTriggerName": "my-trigger",
"eventVersion": "1.0",
"userIdentityARN": "arn:aws:iam::123456789012:root"
}
]
}
設定が一通り完了したら、「保存」ボタンをクリックしてください。
先ほど作成したイベント名(今回は「SampleCodeCommit」)を選択し、「テスト」ボタンをクリックします。
テストが成功したようです。
以上でLambda関数の作成は完了です!
動作確認
では実際にCodeCommit上のリポジトリに変更を加えて、先ほど作成したLambda関数が実行されるかどうか動作確認していきたいと思います。
CodeCommitのコンソール画面上でソースコードに変更を加えて、masterブランチにコミット&プッシュをしていきます。
CloudWatchのロググループを確認してみると、先ほど作成した「/aws/lambda/<Lambda関数の関数名(今回はlambda-codecommit)>」でロググループが作成されているので、クリックして詳細を確認しにいきます。
ログストリームが作成されていますね。
出力されてますね!!!!
まとめ
いかがでしたでしょうか?
Lambda関数を使用してCodeCommit上のソースコードの変更をCloudWatchのログに出力させることができましたね。これを応用して、masterブランチへのマージなど特定のイベントが発生した際に、Slackやメールで通知することができます。