Serverless Framework はプロジェクト名が長すぎるとデプロイに失敗する
プロジェクト名を使ってIAM ロールを作成するから、長すぎると IAM ロール名の文字数制限に引っかかってデプロイに失敗するよというお話。
環境
Serverless Framework 1.71.3
AWS へのデプロイ
再現
とてつもなく長い名前でプロジェクトを作成してみます。
serverless create -t aws-nodejs-typescript -n korehatotetumonakunagainamaenopurojekutomeidayo -p korehatotetumonakunagainamaenopurojekutomeidayo
ディレクトリ移動して、必要なパッケージをインストール。
cd ./korehatotetumonakunagainamaenopurojekutomeidayo
npm i
そしてすぐさまデプロイ!
serverless deploy
ログが流れて……失敗します。
Serverless: Bundling with Webpack...
Time: 677ms
Built at: 2020-06-10 18:38:19
Asset Size Chunks Chunk Names
handler.js 1.28 KiB 0 [emitted] handler
handler.js.map 5.27 KiB 0 [emitted] [dev] handler
Entrypoint handler = handler.js handler.js.map
[0] ./handler.ts 326 bytes {0} [built]
[1] external "source-map-support/register" 42 bytes {0} [built]
Serverless: Package lock found - Using locked versions
Serverless: Packing external modules: source-map-support@^0.5.10
Serverless: Packaging service...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
........
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service korehatotetumonakunagainamaenopurojekutomeidayo.zip file to S3 (289.53 KB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
.........
Serverless: Operation failed!
Serverless: View the full error output: https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stack/detail?stackId=arn%3Aaws%3Acloudformation%3Aus-east-1%2Fkorehatotetumonakunagainamaenopurojekutomeidayo-dev
Serverless Error ---------------------------------------
An error occurred: IamRoleLambdaExecution - 1 validation error detected: Value 'korehatotetumonakunagainamaenopurojekutomeidayo-dev-us-east-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;
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Issues: forum.serverless.com
Your Environment Information ---------------------------
Operating System: win32
Node Version: 12.16.1
Framework Version: 1.71.3
Plugin Version: 3.6.12
SDK Version: 2.3.0
Components Version: 2.30.11
エラー内容にバッチリ「IAM ロール名が64文字超えている」と書かれていますね。
An error occurred: IamRoleLambdaExecution - 1 validation error detected: Value 'korehatotetumonakunagainamaenopurojekutomeidayo-dev-us-east-1-lambdaRole' at 'roleName' failed to satisfy constraint: Member must have length less than or equal to 64
IAM ロール名のつけ方が
{projectName}-{stage}-{region}-lambdaRole
のようになっているので、本番環境へのデプロイだけが失敗するパターンもありそうです。
そのため Serverless Framework で作成するプロジェクト名は30文字以内に収めるのが良さそうですね。
既存のプロジェクトで起こってしまった場合は、serverless.yml の先頭の service:name を変更すれば OK です。
😉