はじめに
Former2でCloudformationテンプレートを作っていたらLambdaPermissionなるものが生成された。
LambdaPermission:
Type: "AWS::Lambda::Permission"
Properties:
Action: "lambda:InvokeFunction"
FunctionName: !GetAtt LambdaFunction.Arn
Principal: "apigateway.amazonaws.com"
SourceArn: "**************"
身に覚えがないぞ。
結論
- コンソールから手動で作成するときは自動で生成されるもの。
- Lambda関数にトリガーをセットする際、トリガーからのInvocateを許可するリソースベースポリシー。つまりこいつがないとトリガーが機能しない。
公式を確認
The AWS::Lambda::Permission resource grants an AWS service or another account permission to use a function. You can apply the policy at the function level, or specify a qualifier to restrict access to a single version or alias. If you use a qualifier, the invoker must use the full Amazon Resource Name (ARN) of that version or alias to invoke the function.
(翻訳)
AWS::Lambda::Permissionリソースは、AWSサービスや他のアカウントに関数の使用許可を与えるものです。関数のレベルでポリシーを適用するか、修飾子を指定して単一のバージョンまたはエイリアスにアクセスを制限することができます。修飾子を使用する場合、呼び出し側はそのバージョンまたはエイリアスの完全なAmazon Resource Name (ARN) を使用して関数を呼び出す必要があります。
詰まるところLambdaに付与するリソースベースのポリシー。こいつがあることでAPI GatewayとかからLambdaを呼び出すことができる。
コンソールで手動でやる際には自動で作成されるものだからあまり意識したことなかった。
所感
CloudFormation今業務でガッツリ使っているのですが、コンソールだといい感じに自動でやってくれることとか全部自分で指定するのでAWSに対する理解が深まる気がする。
参考
AWS::Lambda::Permission
意外と盲点?Lambda関数にトリガーを追加するときはリソースベースポリシーを意識しよう