AWS
EC2
aws-cli

AWS CLIでEC2のバックアップをとる

More than 1 year has passed since last update.

先日EC2インスタンスの定期バックアップスクリプトを組んだので、aws-cliコマンドのメモついでに公開。

セキュリティ面・エラー処理周りの実装があまいので流れとコマンドだけ。


やりたい事


  • ローカルや他サーバから特定のEC2インスタンスのバックアップをとる

  • 世代管理をしたい

  • 削除処理はAMI解除 → スナップショット削除とする


処理の流れ


  1. AMIを作成する


    • 名前は「ホスト名_日付」みたいな感じにしておく



  2. AMI名を利用して解除したいAMIのIDを取得する


    • 世代数と日付の演算を利用して削除したいAMI名を決定する



  3. AMIの解除をする

  4. AMI_IDを使ってスナップショットのIDを取得

  5. スナップショットを削除する


定期実行したい場合


  • 管理サーバあたりのcronにセットしとくといいかも?

  • Lambdaを利用した実装方法を模索しましたがデフォルトだとaws-cliを使えない(Lambda側)のでめんどくさいです


複数管理したい場合


  • 名前の配列を用意して上記の流れをループさせればOK


使用するコマンド


AMIの作成

$ aws ec2 create-image --instance-id --name AMI_NAME --no-reboot

※再起動してでも正確にバックアップをとりたい場合は「--no-reboot」を外す


AMI_IDの取得

$ aws ec2 describe-images --owners self --query 'Images[?Name==`AMI_NAME`].[ImageId]|[0]|[0]' --output text


AMI解除

$ aws ec2 deregister-image --image-id AMI_ID


スナップショットIDの取得

$ aws ec2 describe-snapshots --owner-ids AWS_ACCOUNT_ID --query 'Snapshots[?contains(Description, `AMI_ID`)].[SnapshotId]' --output text


スナップショットの削除

$ aws ec2 delete-snapshot --snapshot-id SNAPSHOT_ID