Amplifyには削除保護設定をしておこう!
こんにちは!株式会社ベンジャミンのイケハタです!
Amplifyってアプリ構築がサクッとできて素敵ですよね!
でも実はアプリの削除も同じくサクッとできてしまうので恐ろしいことが起こります。。。
このブログでは僕のチームが実際に起こしてしまった恐怖体験のお話とその対策を共有します!!
本当にあった怖い話
ある穏やかな日のこと
保守開発案件でチームメンバーに、Amplifyバックエンドの開発環境アップデート作業をお願いしてしばらく待っていたら、思ったより時間がかかってそうだなーと思い進捗を聞きつつ画面操作をしてみました。
そしたらな、な、なんとログインできない!!
「何が起きたんだ?」と思いつつAWS Consoleから開発環境の中身を見てみようと僕は思いました。
すると以下のイメージでまさかのさっきまであったはずのdevというリソースがない?!
となってしまいました。(これはDynamoDBのコンソール画面ですが、Cognito・S3とAmplifyで構築できるリソース全てが無く跡形もなく無くなっていました)
僕はピンときてしまいました、まさかあのコマンドを叩いてしまったのではないかと。。。
作業をしてくれていたメンバーに実行したコマンドを細かく聞いてみたところ僕の予想が的中してしまいました!
そう、Amplifyにはクラウド上の全てのリソースを削除できる最強コマンドがあるのです
それがこちらamplify env remove <環境名>
https://docs.amplify.aws/cli/teams/commands/#remove-an-environment
このドキュメントにもある通り大変なことが起きてしまいます。。。
Use this command to remove an environment. This will remove both the local and the cloud environments including all provisioned services and resources.
https://docs.amplify.aws/cli/teams/commands/#remove-an-environment
(以下和訳)
環境を削除するには、このコマンドを使用します。ローカル環境とクラウド環境の両方が削除され、プロビジョニングされたサービスとリソースもすべて削除されます。
幸い開発者しか使用していなかった開発環境であったため大規模障害にはならなかったですが、それでも今までのテストデータが全て消えログイン情報もなくなり保存していた画像も消えるという最悪の結末です。
これが本番環境だったらと思うと、もう、恐ろしくて仕方ありません!
対策
ここで僕たちはもうこんな経験はしたくない!との思いでAWSサポート様に対策を聞いてみました。
するとなんと素敵な回答をいただきました!!
Amplify CLI にて誤って削除されることを防ぎたい場合には、Amplify CLI の作成した CloudFormation スタックの削除保護を有効にする方法がございます。 以下ドキュメント [1] 抜粋にございますように、スタックの削除保護を有効化することで、スタックが誤って削除されるのを防ぐことができます。 まずはこちらの機能をお試しいただけますと幸いです。
■ 参考資料
[1] スタックの削除保護
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html
— 以下抜粋 —
スタックの削除保護を有効にして、スタックが誤って削除されるのを防ぐことができます。削除保護を有効にした状態でスタックを削除しようとすると、削除は失敗し、ステータスを含め、スタックが変更されることはありません。
—
要はAmplifyで構築されるCloudFormationのルートスタックに対して削除保護を設定しましょうということです。
上記画像の「スタックアクション」のプルダウンから削除保護設定をすればOKです。
追加で色々と情報収集してみるとすごく嬉しい機能だらけでした。
- 一度設定してしまえば間違ってリソースが丸ごと消えてしまうことはなくなる
- Amplify CLIよりこの設定を管理できる項目は(2023年10月現在)ないので間違えて開発者がこのスタック削除保護設定を消してしまうことはない
- 明示的にLambdaなど特定の一部リソースをCLIより削除する際は削除保護設定の変更は不要(該当のスタックを削除しようとした時に削除が失敗するという動作のため環境の削除操作をしない限り問題なし)
- もしAmplify Studioを使用して開発する場合でもスタック自体は同じため誤って消えてしまうことはない
本当に素晴らしすぎる設定に出会えた私たちはすぐに全環境に削除保護設定をし、それ以来同じような恐ろしいことは起きていません。
あと書き
最後にこの削除保護設定は開発者目線でどういう形で本件の対策となっているのか、共有しておきますね。
CloudFormationの削除保護設定をしているAmplify「dev」環境に対して環境削除をしてみます。
上記のように削除に失敗しました!
(正直エラーメッセージがこれだけなのは情報が少ないような気もしますが)誤って開発者が削除をしようとしてしまったとしてもこれで環境ごとなくなってしまうという恐怖はないのは素敵ですよね!!
以上長々と読んでいただきありがとうございます、この記事が皆様のお役に立てれば幸いです!!