Serverless Frameworkをv3系からv4系にアップグレードしたところ、デプロイワークフローで以下のエラーが出たので、解消時の手順を記載します。
$ nest build && sls deploy
✖ Error: You must sign in or use a license key with Serverless Framework V.4 and later versions. Please use "serverless login".
at Authentication.getAuthenticatedData (file:///home/runner/.serverless/releases/4.4.3/package/dist/sf-core.js:647:10535)
at async Authentication.resolverAuthenticate (file:///home/runner/.serverless/releases/4.4.3/package/dist/sf-core.js:649:20575)
...
エラーの原因
Serverless Framework V.4 以降、デプロイ時にCLIの認証が必要になったみたいです。このため、CI/CD環境(GitHub Actionsなど)では、自動的に認証するためにアクセスキーを設定するのが推奨されるとのことでした。
解決方法
1. Serverlessダッシュボードでアクセスキーを発行
Serverless Frameworkのダッシュボードにログインし、アクセスキーを発行します。
アクセスキーは以下のリンクから作成できます。
https://app.serverless.com/{org}/settings/accessKeys
参考ドキュメント
2. GitHub Secretsにアクセスキーを登録
発行したアクセスキーをGitHub Secretsに登録します。
https://github.com/{org}/{repo}/settings/secrets/actions
3. ワークフローのデプロイステップでアクセスキーを読み込む
CI/CD環境でアクセスキーを使用するため、GitHub Actionsのワークフローにアクセスキーを設定します。以下のように、デプロイステップでSERVERLESS_ACCESS_KEY
を読み込むように設定します。
- name: Setup environment
run: |
echo "SERVERLESS_ACCESS_KEY=${{ secrets.SERVERLESS_ACCESS_KEY }}" >> $GITHUB_ENV
- name: Build and Deploy NestJS to Lambda
run: yarn deploy:${{ env.ENV }}
working-directory: ./backend
env:
SERVERLESS_ACCESS_KEY: ${{ env.SERVERLESS_ACCESS_KEY }}
SERVERLESS_ACCESS_KEY
が適切に設定されることで、Serverless Frameworkは自動的にダッシュボードに認証し、serverless login
を手動で実行する必要がなくなります。