見出し画像

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 です。


😉