はじめに
ServerlessFrameworkでAPIGateway, Lambdaへのデプロイした際に発生したエラーについて記録に残したいと思います。
原因
デプロイの際、作成されるIamRoleの文字数制限を超えてしまい、エラーが発生する。
エラー内容
Error:
CREATE_FAILED: IamRoleLambdaExecution (AWS::IAM::Role)
1 validation error detected: Value 'XXXXXXX-XXXX-XXXXXXXXXXXXXX-XXXX-XXX-dev-ap-northeast-1-lambdaRole' at 'roleName' failed to satisfy constraint: Member must have length less than or equal to 64 (Service: AmazonIdentityManagement; Status Code: 400; Error Code: ValidationError; Request ID: XXXXXXXXXXXXXXXX; Proxy: null)
「XXX..-lambdaRole
というロール名は制約を満たしていません。64文字以下でなければなりません。」と言われました。
クォータについて
AWSのサービスにはクォータ(quota)と呼ばれる制限のようなものが設定されています。
可用性と信頼性の高いサービスを提供し、またオペレーションミスなどによる意図しない支出からユーザーを保護するために実装されているそうです。
一部のクォータについては引き上げをリクエストすることができますが、それ以外はリクエストできません。
IAMのクォータについて
IAMにはオブジェクトのサイズを制限するクォータがあり、それに影響を及ぼす、オブジェクトの数や文字数に制限が設定されています。
IamRoleに関しては64文字以下と設定されていました。
ServerlessFrameworkによるIamRoleの命名規則について
ServerlessFrameworkではデプロイ時以下のようにロールの名前がつけられます。
<serviceName>-<stage>-<region>-lambdaRole
つまり、stageがdev
、regionがap-northeast-1
の場合、serviceNameには34文字しか使用できません。
なので、サービス名34文字を超えるとIamRole名の文字数制限に引っかかり、エラーが発生してしまいます。
解決方法
IamRole名を64文字以下に収めるため、ステージ名やリージョンにもよるがサービス名を長くても30文字程度に収める。
参考