AWS Lambdaのリソースベースポリシーのサイズが上限に達して困った話
はじめに
AWS samを利用しAPI gateway + Lambdaの構成を作成していたのですが、Cloudformationの変更セットを実行中に以下のエラーを取得してしまいました。
The final policy size (20857) is bigger than the limit (20480).
(Service: AWSLambda; Status Code: 400; Error Code: PolicyLengthExceededException;
Request ID: xxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx)
このエラーが示す内容としては、 Lambdaのリソースベースポリシーがサイズ上限に達した ということを示しています。
この状態になるとAPIのメソッドの統合リクエストのタイプにこのLambdaを指定することが出来なくなります。
調べてみて
いくつか記事を漁っていると、以下の記事を発見しました。
Lambda エラー「最終ポリシーサイズが制限を超えています」を解決する方法を教えてください。
この記事では、複数あるリソースベースポリシーをポリシー内のリソースの指定にワイルドカードを用いることで、ポリシーのサイズを縮小する方法を説明してくれています。
とりあえず、今あるポリシーを削除して新たにワイルドカードを含むポリシーをセットしてやればいいようです。
残念ながらAWS Lambdaのリソースベースポリシーはマネジメントコンソールからは操作することが出来ないのでCLIを使って操作していきます。
トリガーでAPI Gatewayを選択すると、登録されているリソースベースポリシーがリソース単位で確認でき、ここから削除をするとポリシーからも削除できるようです!
削除のコマンド
以下のコマンドでLambdaのリソースベースポリシーを1件削除することが出来ます。
残念ながら一括で削除をすることは出来ないようです。
なので大量にある場合は二人で上下から削除していくか、諦めてLambdaを作り直すとかした方が良さそうですね。
$ aws lambda remove-permission \
--function-name my-function \
--statement-id sid
作成のコマンド
以下のコマンドでLambdaのリソースベースポリシーを1件追加することが出来ます。
aws lambda add-permission --function-name my-function \
--statement-id sid \
--action 'lambda:InvokeFunction' \
--principal 'events.amazonaws.com' \
--source-arn 'arn:aws:events:region:account-id:rule/test-*'
ここで、API gatewayの指定方法がわからず詰んでいましたが、なんとか以下の指定で通すことが出来ました。
このように指定することで1個のAPIからリクエストの種類が増えても、このポリシー1つで補うことが出来ます。
aws lambda add-permission
--function-name my-function \
--statement-id 1 \
--action lambda:InvokeFunction \
--principal apigateway.amazonaws.com \
--source-arn arn:aws:execute-api:${region}:${AWSアカウントID}:${APIの識別子}/*
samでこれをやる場合の注意点
恐らくsamに限った話ではないと思いますが、新しくワイルドカードを含むポリシーを追加後、新たにメソッドを追加したtemplateを実行すると、 追加した分の ポリシーが追加されてしまいました。放っておくと将来的に同じ事象にぶつかると思うので、逐次消すなりする必要があると思います。
最後に
APIの指定の方法がわかり、なんとか解決することが出来て良かったです。
こういったこともありえるのでAWS Lambdaは極力分割していくのが良いんでしょうね。
ではまた。
参考資料
Author And Source
この問題について(AWS Lambdaのリソースベースポリシーのサイズが上限に達して困った話), 我々は、より多くの情報をここで見つけました https://qiita.com/GoogIeSensei/items/e984369feed4d7c08f96著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .