※ 2020/12/8 現在、Amplify コンソールで発生している問題に対応したブログ記事となります。
こんにちは、技術1課の加藤です。
定期的に Amplify の記事を書いている私ですが、作成した環境を Amplify コンソールから削除しようと思った時になぜかうまく削除できないという現象に行き当たりました。
今回のブログでは、この現象の原因と解決方法についてまとめます。
起こったこと
改めて何が起こったかを確認します。
Amplify を使う時、Amplify CLI で環境を立ち上げますよね。
すると Amplify コンソールに作成したアプリが表示されます。
気付いたらいらないサンプルアプリが大量に溜まってしまっていたので削除しようと思い、アプリを選択
[アクション] > [アプリの削除] を押し、
出てくるポップアップに delete
と入力して [Delete] ボタンを押します。
削除が開始しますが、少し時間が経つと以下のように Removing backend envs for app XXX failed
という表示が出てアプリケーションの削除が失敗してしまいました。
原因
端的にお伝えすると、バックエンドの環境を CloudFormation を使って削除してしまったことが原因でした。
Amplify で環境を立ち上げると CloudFormation スタックが作成されます。 以前いらないサンプルスタックが増えていたので整理がてら一気に削除したのですが、その際に Amplify 管理のスタックも一緒に消してしまったようでした。
このせいで Amplify は存在しないバックエンドを削除しにいき失敗。アプリの削除もうまくいかない、という状態になったようです。
対応
Amplify にバックエンドが消えたことを伝えてあげる必要があります。
そのために以下の CLI コマンドを叩いてください。
(アプリIDは削除失敗の通知に記載されていますし、アプリをひらいたURLの末尾からも取得できます。)
$ aws amplify delete-backend-environment --app-id <アプリID> --environment-name <環境名>
元々は Backend environments に Delete Completion 状態のバックエンド環境が表示されていますが、
コマンドを実行すると指定した環境が削除されます。 (代わりに re:Invent2020 で新しく発表された Amplify Admin UI の案内が表示されています)
この状態になれば、アプリの削除が可能です。
通常通り、[アクション] > [アプリの削除] からアプリを削除しましょう。
対策
ありきたりではありますが、基本的に Amplify で作成したリソースは Amplify の作法に則って削除すべきです。
CLI を使うのであれば amplify delete
で削除できますし、Amplify コンソール上での削除も通常ならうまく動きます。
バケットや CloudFormation スタックの整理をする際、Amplify っぽいリソースがあっても削除しないように注意しましょう。
ちなみに
なぜ CloudFormation スタックを削除してしまうとダメなのか。
理由は、スタック削除を行うと、Amplify で作成されるリソースの状態を管理しているデプロイ用バケット (CloudFormation スタック上 DeploymentBucket で確認できます) も消えてしまうからです。
(参考Issue:https://github.com/aws-amplify/amplify-console/issues/1330 )
どうやら Amplify でリソースの変更を行うと、まず最初にこのバケットを確認しにいくようです。
そのためバケットが見つからない時点でバックエンドソースの削除に失敗。あえなくアプリ削除も失敗となってしまう、ということでした。
今回私は CloudFormation スタックを削除してしまったことでこの現象に行き当たりましたが、実際にはデプロイ用の S3 バケットが(正確には S3 バケットに納められている設定ファイルが)削除されたことが原因なので、手動でバケットを削除してしまっても同じ現象が発生します。
気をつけましょう。