AWS CLIを使用してEC2のバックアップを定期的に取得する
AWS CLIとjqを使用した実装です。
設定した世代数分保持して古いバックアップから消していきます。
設定値 | 説明 |
---|---|
MAX_IMAGE_NUM | バックアップのイメージを保持する世代数 |
INSTANCE_ID | バックアップを取得する対象のEC2インスタンスID |
AMI_NAME | 取得するAMIの名前。実行毎に重複しないようにする |
DESCRIPTION | バックアップの種類を識別するために使用します |
cronやJenkinsのジョブに設定して定期的に実行します。
再起動を許容する場合は--no-reboot
オプションを外します。
EBS付きのインスタンスは追加のオプションが必要なので注意。
#!/bin/sh MAX_IMAGE_NUM=2 REGION=ap-northeast-1 INSTANCE_ID=i-00000000 AMI_NAME=ec2-backup-$(date +%m%d%H%M) DESCRIPTION="daily_backup" IMAGES=$(aws ec2 describe-images\ --region ap-northeast-1\ --owners self\ --filters Name=description,Values=$DESCRIPTION\ | jq .Images) # Delete oldest image if [[ $(echo $IMAGES | jq length) -ge $MAX_IMAGE_NUM ]]; then OLDEST_IMAGE_ID=$(echo $IMAGES | jq 'min_by(.CreationDate)' | jq -r .ImageId) echo "Delete: $OLDEST_IMAGE_ID" aws ec2 deregister-image\ --region $REGION\ --image-id $OLDEST_IMAGE_ID fi # Create image echo "Create: $AMI_NAME" aws ec2 create-image\ --region ap-northeast-1\ --instance-id $INSTANCE_ID\ --name $AMI_NAME\ --no-reboot\ --description $DESCRIPTION exit 0