[小ネタ]AWS CLIを使ってAWS BakcupでEC2のバックアップを取得してみる

2020.02.29

はじめに

こんにちは。大阪オフィスの林です。

AWS BackupでEC2をバックアップを取得する機会があったので、せっかくなのでCLIからも操作してみました。今回はそのまとめです。

オンデマンドでバックアップ取得

下記コマンドを実行しバックアップを取得します。

[ec2-user@ip-172-16-0-92 ~]$ aws backup start-backup-job --backup-vault-name Default --resource-arn arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/i-xxxxxxxxxxxxxxxxx --iam-role-arn arn:aws:iam::xxxxxxxxxxxx:role/backup1
{
    "CreationDate": 1582945056.999,
    "BackupJobId": "24da5c3e-e53c-43b9-9f4a-814f5a4f9880"
}

パラメータの説明

必須パラメータ
内容
--backup-vault-name バックアップボールトでは取得したバックアップを整理・管理できます。
デフォルトは「Default」となります。
--resource-arn バックアップ対象のARNを指定します。
今回はEC2のARNを指定します。
--iam-role-arn バックアップの取得に使用するIAMロールを指定します。
詳細はこちら

実行時に戻り値として出力されたBackupJobIdを元にバックアップの取得状況を確認することもできます。取得状況を確認するコマンドは下記を参照ください。戻り値の中のStateの項目で状態を把握することが可能です。正常であればCREATEDRUNNINGCOMPLETEDと状態が遷移していきます。

バックアップジョブが作成されました。

[ec2-user@ip-172-16-0-92 ~]$ aws backup describe-backup-job --backup-job-id 24da5c3e-e53c-43b9-9f4a-814f5a4f9880
{
    "BackupVaultArn": "arn:aws:backup:ap-northeast-1:xxxxxxxxxxxx:backup-vault:Default",
    "StartBy": 1582973856.999,
    "ResourceType": "EC2",
    "ResourceArn": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/i-xxxxxxxxxxxxxxxxx",
    "IamRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/backup1",
    #作成時は「CREATED」となります。ここの状態が遷移します。
    "State": "CREATED",
    "BackupJobId": "24da5c3e-e53c-43b9-9f4a-814f5a4f9880",
    "CreationDate": 1582945056.999,
    "BackupVaultName": "Default",
    "BytesTransferred": 0
}

バックアップジョブが始まりました。

[ec2-user@ip-172-16-0-92 ~]$ aws backup describe-backup-job --backup-job-id 24da5c3e-e53c-43b9-9f4a-814f5a4f9880
{
(省略)
    "State": "RUNNING",
(省略)
}

バックアップジョブが完了しました。

[ec2-user@ip-172-16-0-92 ~]$ aws backup describe-backup-job --backup-job-id 24da5c3e-e53c-43b9-9f4a-814f5a4f9880
{
(省略)
    "State": "COMPLETED",
(省略)
}

リストアの実行

リストアする前にバックアップジョブ完了時の情報からリストアに必要な情報を取得します。上述のバックアップジョブの状態確認コマンドを実行すると、バックアップジョブが完了している場合RecoveryPointArnという項目が作成されています。リストアはこのRecoveryPointArnを使っていきます。

[ec2-user@ip-172-16-0-92 ~]$ aws backup describe-backup-job --backup-job-id 24da5c3e-e53c-43b9-9f4a-814f5a4f9880
{
    "CompletionDate": 1582946165.628,
    "BackupVaultArn": "arn:aws:backup:ap-northeast-1:xxxxxxxxxxxx:backup-vault:Default",
    "PercentDone": "0.0",
    #この「RecoveryPointArn」のARNを使ってリストアする。
    "RecoveryPointArn": "arn:aws:ec2:ap-northeast-1::image/ami-xxxxxxxxxxxxxxxxx",
    "ResourceType": "EC2",
    "BackupVaultName": "Default",
    "ResourceArn": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/i-xxxxxxxxxxxxxxxxx",
    "IamRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/backup1",
    "State": "COMPLETED",
    "BackupJobId": "24da5c3e-e53c-43b9-9f4a-814f5a4f9880",
    "StartBy": 1582973856.999,
    "CreationDate": 1582945056.999,
    "BackupSizeInBytes": 8589934592,
    "BytesTransferred": 0
}

それではリストアしていきます。リストアのコマンド実行時に--metadataを引数としてせることで幾つか設定を持たせた状態でリストアすることが出来ます。今回は最低限のVPCの情報とサブネットの情報だけ設定してリストアを行います。

[ec2-user@ip-172-16-0-92 aws]$ aws backup start-restore-job --recovery-point-arn arn:aws:ec2:ap-northeast-1::image/ami-xxxxxxxxxxxxxxxxx --iam-role-arn arn:aws:iam::xxxxxxxxxxxx:role/backup1 --metadata VpcId=vpc-xxxxxxxxxxxx,SubnetId=subnet-xxxxxxxxxxxx
{
    "RestoreJobId": "E8E9B136-253D-D49B-0345-910D308C1644"
}

パラメータの説明

必須パラメータ
内容
--recovery-point-arn リカバリポイントを一意に識別するARN名を指定します。
このARNはバックアップジョブが完了した際の情報から取得します。
--iam-role-arn リストアに使用するIAMロールを指定します。
詳細はこちら
--metadata リカバリするリソースに設定する情報を指定します。

実行時に戻り値として出力されたRestoreJobIdを元にリストアの実行状況を確認することもできます。実行状況を確認するコマンドは下記を参照ください。戻り値の中のStateの項目で状態を把握することが可能です。正常であればバックアップの時と同じようにCREATEDRUNNINGCOMPLETEDと状態が遷移していきます。

リストアジョブが作成されました。

ec2-user@ip-172-16-0-92 aws]$ aws backup describe-restore-job --restore-job-id E8E9B136-253D-D49B-0345-910D308C1644
{
    "RestoreJobId": "E8E9B136-253D-D49B-0345-910D308C1644",
    "RecoveryPointArn": "arn:aws:ec2:ap-northeast-1::image/ami-xxxxxxxxxxxxxxxxx",
    "CreationDate": "2020-02-29T04:38:32.801000+00:00",
    #作成時は「CREATED」となります。ここの状態が遷移します。
    "State": "CREATED",
    "BackupSizeInBytes": 8589934592,
    "IamRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/backup1"
}

リストアジョブが始まりました。

[ec2-user@ip-172-16-0-92 ~]$ aws backup describe-restore-job --restore-job-id E8E9B136-253D-D49B-0345-910D308C1644
{
(省略)
    "State": "RUNNING",
(省略)
}

リストアジョブが完了しました。

[ec2-user@ip-172-16-0-92 ~]$ aws backup describe-restore-job --restore-job-id E8E9B136-253D-D49B-0345-910D308C1644
{
(省略)
    "State": "COMPLETED",
(省略)
}

リストアジョブ完了時の情報にCreatedResourceArnという項目があります。ここにEC2のインスタンスIDが記録されています。

[ec2-user@ip-172-16-0-92 aws]$ aws backup describe-restore-job --restore-job-id E8E9B136-253D-D49B-0345-910D308C1644
{
    "RestoreJobId": "E8E9B136-253D-D49B-0345-910D308C1644",
    "RecoveryPointArn": "arn:aws:ec2:ap-northeast-1::image/ami-xxxxxxxxxxxxxxxxx",
    "CreationDate": "2020-02-29T04:38:32.801000+00:00",
    "CompletionDate": "2020-02-29T04:48:34.948000+00:00",
    "Status": "COMPLETED",
    "BackupSizeInBytes": 8589934592,
    "IamRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/backup1",
    #作成されたリソースがここでわかる。
    "CreatedResourceArn": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/i-06970ae5ac3c09d27"
}

マネージメントコンソールから確認してみます。リストアしたEC2が立ち上がってきたことが分かります。

まとめ

単発で取得するような場合はCLIは非常にシンプルで簡単なものの、CLIから操作するメリットが少し見えにくいという側面もあるような気がしました。今回はAWS Bakcupにおいてオンデマンドのバックアップとリストアを試してみましたが他のAWS Bakcupに関わる操作ではCLIのメリットが享受されるような内容もあるかもしれないです。その辺りはまた別途触っていきたいと思います!

以上、大阪オフィスの林がお送りしました!

参考

コマンドリファレンス