🐈

[amplify] 本番データが全削除された話

2020/12/16に公開

TL;DR

  • amplify delete ではチェックアウトした環境だけでなく全環境が削除される。
  • Amplify だけではバックアップはしてくれないので自前でバックアップする。
  • 英語を勉強しましょう。

前提

amplify-cli バージョンは 4.13.4 で、npm で global インストールされています。
AWS Amplify の Auth (Cognito), API (AppSync), Storage (DynamoDB), Storage (S3) により構築されたコンテンツ管理システム移行時に起きた惨事です。

何が起きたか

  • Amplify で構築した環境を移行するために、開発環境で移行リハーサルを実施していた。
  • 移行の最後に現環境を削除する手順のため、amplify delete を実行。
  • 開発環境とともに、本番環境も順次削除されていった。
  • Amplify で管理していた DynamoDB のテーブルたちは跡形もなく消え、本番データは完全に消失した。

なぜ起きたか

  • amplify delete でまさか全環境が削除されるとは思わなかった。
    • 他のコマンドはローカルにチェックアウトされた環境に対して操作を実行するため。
      • めったに使わない delete コマンドでこの挙動をあらかじめ予想しておくのは不可能に近い。
  • 移行手順にバックアップ取得の手順が漏れていた。
    • ただ、その漏れを検出するための移行リハで当該事象が発生したため、防ぐ手段はない。

どうなったか

  • 幸い CloudFront で無期限キャッシュしている JAMStack のデータだったため、フロントの影響はほとんどなし。(3 ページほど 502 エラーになった)
  • 幸い直前に実施した QA で QA 環境に本番データを投入した直後だったため、QA 環境のデータを本番環境にコピーして事なきを得た。

まとめ

  • AWS Amplify はプロトタイピングのみに利用し、運用環境では使わないようにしましょう。
  • たぶん英語で警告文が出ていたんだけど、「本当に消しちゃうけどいいよね?」程度にしか捉えていなかった。英語でもちゃんと読みましょう。
  • 移行と言ったらバックアップ、これ当たり前。当たり前すぎて漏れていても気づかなかった。移行チェックリストなど標準化しておきましょう。

Discussion