LoginSignup
5
3

More than 5 years have passed since last update.

AWS Amplifyのmultienvで環境名に大文字を使うとS3構築時にエラーになる

Posted at

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スタックがロールバックで削除されてしまう前に、(作成途中の段階で)みてみました。
 2019-02-08 21.01.47.png

「Bucket name should not contain uppercase characters」

...え?
S3バケットってそんなルールあったっけ...?

S3の命名規則が変更されていた

AWSのドキュメントを確認してみると、2018年3月1日から、命名規則が変わっていた模様。
全然気がつかなかった。

 2019-02-08 21.02.53.png

まとめ

AWS Amplifyとmultienvを使うとサクッと環境構築できますが、こんな落とし穴もありました。
知識共有と、トラブルシューティング手順の参考にでもなれば幸いです。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3