AWS Amplify
AWSにアプリケーションに必要なバックエンド環境をコマンドで構築できて、フロントエンドアプリからのつなぎ込みも簡単にできる、涙が出るほど便利なフレームワークです。
https://aws-amplify.github.io/
multienvプラグイン
そんなAWS Amplifyには、バックエンドの環境を複製したり、切り替えたりできるコマンドが提供されています。
それが、multienvプラグインです。
(まだ betaです)
https://aws-amplify.github.io/docs/cli/multienv?sdk=js
環境名に大文字を使用するとエラー
タイトルの通りですが、環境名にアルファベットの大文字を使用すると、エラーになります。
手順
まず、環境の新規作成を行います。
amplify init
ここで、既存の環境の初期化をするか、新たな環境を入力するかを聞かれます。
$ amplify init
Note: It is recommended to run this command from the root of your app
directory
You're initializing your project with a beta version of the CLI which
supports multiple environments of your project
? Do you want to use an existing environment? (Y/n) <- nを入力
すると環境名の入力を促されます。
ここで、大文字を含んだアルファベットの環境名を入力しました。
? Enter a name for the environment DevYS <- 大文字を含んだ環境名を入力
その後なんやかんや聞かれますが、既存の環境複製時は基本的に全てそのままEnterで進みます。
完了したら、実際にAWSバックエンドを構築します。
$ amplify push
これで、環境がめでたく複製されるはずだったのですが。。。
amplify push のエラー
✖ An error occurred when pushing the resources to the cloud
Resource is not in the state stackUpdateComplete
失敗しますorz
この少し前に、Cloudformationのログが出ているので、見てみます。
CREATE_IN_PROGRESS functionnomadmatchinge620bc79 AWS::CloudFormation::Stack Fri Feb 08 2019 21:00:51 GMT+0900 (JST) Resource creation Initiated
CREATE_IN_PROGRESS hostingS3AndCloudFront AWS::CloudFormation::Stack Fri Feb 08 2019 21:00:51 GMT+0900 (JST) Resource creation Initiated
CREATE_IN_PROGRESS nomad-matching-20190208205622-authcognito09b59faa-1BNMU3OAVOXEB AWS::CloudFormation::Stack Fri Feb 08 2019 21:00:51 GMT+0900 (JST) User Initiated
CREATE_IN_PROGRESS authcognito09b59faa AWS::CloudFormation::Stack Fri Feb 08 2019 21:00:52 GMT+0900 (JST) Resource creation Initiated
⠼ Updating resources in the cloud. This may take a few minutes...
CREATE_FAILED S3Bucket AWS::S3::Bucket Fri Feb 08 2019 21:00:57 GMT+0900 (JST) Bucket name should not contain uppercase chara
cters
CREATE_IN_PROGRESS nomad-matching-20190208205622-functionnomadmatchinge620bc79-1NL68GUN8AKBX AWS::CloudFormation::Stack Fri Feb 08 2019 21:00:51 GMT+0900 (JST) User Initiated
S3バケットの作成失敗が、最初に発生したエラーのようで、これが原因でCloudformationスタックがロールバックされているようです。
S3バケット作成エラーの原因を探る
もっと情報が欲しいのですが、S3を構築したCloudformationスタックは、ロールバックで削除されてしまっているので、既にありません。
AWS Amplifyでは、APIやAuth、Hostingといった機能単位でCloudformationスタックをネストして作成しています。
上記のS3バケットは、Hosting機能のNestedStackで作成されます。
(ルートスタックは、amplify init時に作成されています。)
このため、もう一度同じ操作をして、ネストされたHostingのCloudformationスタックがロールバックで削除されてしまう前に、(作成途中の段階で)みてみました。
「Bucket name should not contain uppercase characters」
...え?
S3バケットってそんなルールあったっけ...?
S3の命名規則が変更されていた
AWSのドキュメントを確認してみると、2018年3月1日から、命名規則が変わっていた模様。
全然気がつかなかった。
まとめ
AWS Amplifyとmultienvを使うとサクッと環境構築できますが、こんな落とし穴もありました。
知識共有と、トラブルシューティング手順の参考にでもなれば幸いです。