CodeCommitのLambdaトリガーを作るときはパーミッションをお忘れなく


CodeCommitのコンソールからLambdaトリガーを作るのと、LambdaのコンソールからCodeCommitのトリガーを作るのは結果が違いますよ、という話です。

Lambdaが実行されない?

Lambdaをあらかじめ作成しておいて、CodeCommitのコンソールからトリガーを作成。Lambdaのコンソールからトリガーを作るのと結果は一緒でしょーと思っていたが、Lambdaが実行されず。

CodeCommitのコンソールに下記の記載があるので、これだよなーとコンソール上を探し回っても設定できそうなところは見つからず。

パーミッションを手動で追加する

AWS CLIを使ってパーミッションを追加する必要があります。
パーミッション用のjsonファイルを作成します。

permission.json
{
    "FunctionName": "SampleLambda",
    "StatementId": "1",
    "Action": "lambda:InvokeFunction",
    "Principal": "codecommit.amazonaws.com",
    "SourceArn": "arn:aws:codecommit:ap-northeast-1:xxxxxxxx:sample_repo",
    "SourceAccount": "xxxxxxxx"
}

次を実行すると、Lambdaのコンソール上のトリガーにCodeCommitが表示されます。

$ aws lambda add-permission --cli-input-json file://xxx/xxx/permission.json

追加したパーミッションを確認するには

$ aws lambda get-policy --function-name SampleLambda

追加したパーミッションを削除するには

$ aws lambda remove-permission --function-name SampleLambda --statement-id 1

まとめ

AWS CLIを使ったりして作成する場合にはパーミッションの追加が必要です。Lambdaのコンソールから追加する場合は気にする必要はないです。

参考