【古き良き】AWSで作られたサービスを終了する時にやっておいた方がよいこと

公開:2021/02/01
更新:2021/02/01
2 min読了の目安(約2300字TECH技術記事

まず、前提として以下の環境を想定

ふるーいサービスがありました。そのサービスを消すことになりました。私はかなり辛かったのでよかったら読んでください。

  • AWS
    • EC2とかRDS

削除する前

この時点ではEC2にSSHしてみて、稼働中のプロセスやサービスが何かを把握しておきたい

  • デーモン化されてないものはないかチェック
    • シャットダウンしたら生き返らないものがないかどうか
  • ps -ef などで今どのプロセスが動いているのかをメモっておく
    • stats, cpuinfo, netstatなども見ておいてもよい
  • curl -Iで80, 3000, 8080, 5000など、よくあるポートにアクセスしてそのレスポンスを確認
    • できればnginxのlogもtailしてみてログがどうなっているかを把握しておく
  • historyで接続系を試行して、あらかじめ繋がるものと繋がらないものをGSなどにまとめておく
    • sudoでも見ておいた方がよい
  • 今のインスタンスタイプがRIなのかをチェックしておく
    • 状況によっては、シャットダウンしなくてもよいかもしれない
  • /etc/environmentなど特定のキーが保持されているファイルのデータをどこかに退避
  • アプリケーション系をチェック
    • nginxやapacheなどで使われているものを知っておくと良い
    • /var/**/*
    • /srv/**/*
  • 自動デプロイとかになっているかチェック
    • なってたら、jenkinsからとかCircleCIからのアクセスとかがないか見ておきたい

削除する時

  • EC2の鍵をバックアップする
  • RDSのパスワードを退避
  • RDSを削除→最終スナップショットを取る(絶対に)
    • 停止だと、1週間で蘇るので、削除しないといけない
    • また、削除しても、最終スナップショットがあれば、ホスト名だけ変わるが他の設定は同じまま使える
  • EC2のスナップショットをとる
    • 停止だけする(削除してはいけない)
      • 誰かが消すリスク考えて、Snapshotをとる
    • 停止なら安いし、消すデメリットが多すぎる
    • ただし、RIが100%で購入していたら停止もする必要ないかも放置で良い
  • EIP
    • 放置した方が吉
    • 安いし、消すデメリットが多すぎる
  • Route53
    • 放置した方が吉
    • 安いし、消すデメリットが多すぎる
  • S3
    • 放置した方が吉
    • 画像とかアセット系の復元は相当無理があるのでしばらくはこのままにしておくべき
  • ElastiCache
    • DB的な使い方してるかどうかを絶対確認
    • 消すのが怖いなら、スペックを超雑魚にしておくと費用が安くなるので良い
  • VPC
    • 放置した方が吉

なんで、これ書いたのか

もういらないから削除してー依頼に対し、翌日早朝にクライアントからブチギレの連絡で、上から「復旧よろ」がきました。

その時に、上記の復旧を見越した停止対応をしておくのが最も良いと思います。契約的なことはエンジニアにはよくわからないので。そして、その分の経費ぐらい会社に出してもらいましょう。仮に完全削除してて、エンジニアが全部一から復旧するとか考えたらその金額じゃ賄えないので。
一応上記の対応をしてたので、費用は最小限に抑えて、復旧は10分程度で完了です。

つまり、結論としては、EC2は停止+Snapshot、RDSは最終Snapshot取って削除、あとは放置が吉

復旧時

  • EC2インスタンスを起動
    • EIPの関連付け
    • localhostと外部からEIPへのcurlを叩いて、nginxなどのerror.logを見て問題ないことを確認する
    • ps -efなどでプロセスがシャットダウン前との差分がないか確認しておく
    • デーモンがないプロセスがあるならここで起動しておく
  • RDSを最終スナップショットから再度生成
  • EC2にSSHで繋ぎ、以下RDSへの疎通(postgresqlの場合)
    • 接続が問題なければOK
sudo psql --host=xxx.yyy.ap-northeast-1.rds.amazonaws.com --port=5432 --username=ojin --password -d ojinDB
  • ELBなどがエラーになっているはず
    • ただ、nginxなどが疎通すれば自動的にSuccessになるはずなので時間をおく
  • Domain
    • もしドメインを削除してしまってたら、再度Route53でドメインを登録し、Onamae.comならそこにNameServerを変更しておく
      • 大体1時間以上は切り替わらないので注意
        • 定期的にdigで確認しておいた方が良い
    • 退避しておいたAレコードやCNAMEなどを設定しておく