はじめに
初めて Serverless Framework を使う上でつまづいた箇所があったので、他の方が同じところでつまづかないようにまとめてみました。
今回のつまづきポイントは、 Serverless Framework は作成したプロジェクトをデプロイする sls deploy
コマンドを使用するときのことについてです。
前提
環境
[Machine]: M1 MacbookPro
[AWS CLI v2]: aws-cli/2.7.18 Python/3.9.11 Darwin/21.3.0 exe/x86_64 prompt/off
[Serverless Framework]: Framework Core: 3.21.0 Plugin: 6.2.2 SDK: 4.3.2
AWSアカウントの設定
サーバーレスダッシュボードは用いず、ローカルのAWS認証情報を使用します。
awsの認証情報については以下の通り.aws/
ディレクトリに登録してあります。
.aws/config
[default]
region=ap-northeast-1
output=json
[profile <profile_name>]
region=ap-northeast-1
mfa_serial=arn:aws:iam::***********:mfa/******
role_arn=arn:aws:iam::**********:role/******
source_profile=default
.aws/credentials
[default]
aws_access_key_id=****************
aws_secret_access_key=****************
今回接続するアカウントはdefault
のものではないので環境変数でプロファイルを指定しておきます。
# ロード時に config ファイルを自動的に検索
$ export AWS_SDK_LOAD_CONFIG=1
# プロファイルの指定
$ export AWS_PROFILE=<profile_name>
問題
以下が、ターミナルでsls deploy --verbose
コマンドを打った後の出力です。
Deploying <project-name> to stage dev (ap-northeast-1)
Enter MFA code for <mfa_serial>: Packaging
Excluding development dependencies for service package
Retrieving CloudFormation stack
Retrieving CloudFormation stack (1s)
コマンドを打った後ここまで一気に出力されます。
最終行でカウントアップがされているので待ってみると、120s以上経っても何も表示されません。
不安に思って調べてみても、「最初に行うCloudFormationのstackには時間がかかります」などと出てきます。
結論
MFAコードを打てば実行できました。
Deploying <project-name> to stage dev (ap-northeast-1)
Enter MFA code for <mfa_serial>: Packaging
Excluding development dependencies for service package
Retrieving CloudFormation stack
Retrieving CloudFormation stack (1s)
実はターミナルにも「MFAコード入力してね」と出力されていたんです。
ただ、その行が出力されてから他の出力がなぜか続いてしまうため見逃してしまったのです。
備考
ちなみに、sls deploy list
やsls info
などのコマンドを打つと
Enter MFA code for <mfa_serial>:
とだけ出力されます。
これならMFAコードを求められていることにすぐに気づくことができますね。
終わりに
以上 Serverless Framework deploy がなかなかに見づらかった話でした。
なぜsls deploy
コマンドだけ出力がMFAコードの入力を求める行で止まらないのか現時点ではわかりませんが、今後は気をつけてターミナルの出力を見ていきたいです。