AWS BackupのEC2リカバリポイントをAWS CLIで別AZに復元させる

ここではAWS BackupでバックアップしていたEC2のリカバリポイントからmetadataを取得し、別AZに復元させるまでをaws cliで実現させます。
##### １．リカバリポイントの取得
```
aws backup list-recovery-points-by-backup-vault --backup-vault-name <バックアップボールト名> --output json --query 'RecoveryPoints[].BackupVaultName,RecoveryPointArn]'
[
    [
        "Default",
        "arn:aws:ec2:ap-northeast-1::image/ami-01de27cf0a5b*****"
    ],
    [
        "Default",
        "arn:aws:ec2:ap-northeast-1::image/ami-0f23d2bcc7c84****"
    ],
```

##### ２．復元元のリカバリポイントからmetadataを取得する
１で取得したリストから任意のリカバリポイントのmetadaを取得する。
以下の様に多量のJSONが出力されるので、jqコマンドを使用している人は| jq -r '.RestoreMetadata'とかやってmetadataだけを取得するのが良いだろう。
```
aws backup get-recovery-point-restore-metadata --backup-vault-name <バックアップボールト名> --recovery-point-arn <リカバリポイントARN> --output json
{
    "BackupVaultArn": "arn:aws:backup:ap-northeast-1:773181940404:backup-vault:Default",
    "RecoveryPointArn": "arn:aws:ec2:ap-northeast-1::image/ami-01de27cf0a5b99***",
    "RestoreMetadata": {
        "CapacityReservationSpecification": "{\"CapacityReservationPreference\":\"open\"}",
        "CpuOptions": "{\"CoreCount\":2,\"ThreadsPerCore\":1}",
        "CreditSpecification": "{\"CpuCredits\":\"standard\"}",
        "DisableApiTermination": "false",
        "EbsOptimized": "false",
        "HibernationOptions": "{\"Configured\":false}",
        "IamInstanceProfileName": "FullRole",
        "InstanceInitiatedShutdownBehavior": "stop",
        "InstanceType": "t2.medium",
        "KeyName": "uratakey1",
        "Monitoring": "{\"State\":\"disabled\"}",
        "NetworkInterfaces": "[{\"AssociatePublicIpAddress\":true,\"DeleteOnTermination\":true,\"Description\":\"\",\"DeviceIndex\":0,\"Groups\":[\"sg-07848eaf1e9fff042\"],\"Ipv6AddressCount\":0,\"Ipv6Addresses\":[],\"NetworkInterfaceId\":\"eni-06b77a5fb974507**\",\"PrivateIpAddress\":\"172.31.37.*\",\"PrivateIpAddresses\":[{\"Primary\":true,\"PrivateIpAddress\":\"172.31.37.*\"}],\"SecondaryPrivateIpAddressCount\":0,\"SubnetId\":\"subnet-5468a11c\",\"InterfaceType\":\"interface\",\"Ipv4Prefixes\":[],\"Ipv6Prefixes\":[]}]",
        "Placement": "{\"AvailabilityZone\":\"ap-northeast-1a\",\"GroupName\":\"\",\"Tenancy\":\"default\"}",
        "RequireIMDSv2": "false",
        "SecurityGroupIds": "[\"sg-07848eaf1e9fff***\"]",
        "SubnetId": "subnet-5468a11c",
        "VpcId": "vpc-12787775",
        "aws:backup:request-id": "c8529137-fcaf-4a6e-8ca6-dde767cf9291"
    }
}
```
##### ３．metadataを復元先の仕様に変更する
マネコンの復元ページを見ると以下のパラメータを設定する様になっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533481/37564d8e-1b16-e999-af5c-c7b3df75a6ca.png)
なので、ほぼ以下"NetworkInterfaces"キーの修正で問題ない(ようだ）。
***変更箇所***
"NetworkInterfaces": "[{
　　    "AssociatePublicIpAddress\":  パブリックな先に復元しないのでfalseか削除　　
　　    **"PrivateIpAddresses\":[{\"Primary\":true,\"PrivateIpAddress\": 復元先のSubnetの範囲の未使用のIPアドレス（復元元が停止している場合は変更の必要ない）**　　
　　"VpcId": 復元先が同じVPCの場合は変更不要。
　　以下、別AZに復元させる場合は変更する。
　　**"SubnetId":　復元先のSubnet**
　　**"Placement": "{\"AvailabilityZone\":　復元先のAZ**
##### ４．変更したmetadataから復元する
```
# --metadata=の部分は、file://”出力したJSONファイ.json"としてもよい。
aws backup start-restore-job --recovery-point-arn arn:aws:ec2:ap-northeast-1::image/ami-0183d4633da528***
--metadata='{
"VpcId": "vpc-12787775",
"Monitoring": "{\"State\":\"disabled\"}",
"CapacityReservationSpecification": "{\"CapacityReservationPreference\":\"open\"}",
"InstanceInitiatedShutdownBehavior": "stop",
"DisableApiTermination": "false",
"KeyName": "uratakey1",
"CreditSpecification": "{\"CpuCredits\":\"standard\"}",
"HibernationOptions": "{\"Configured\":false}",
"EbsOptimized": "false",
"Placement": "{\"AvailabilityZone\":\"ap-northeast-1a\",\"GroupName\":\"\",\"Tenancy\":\"default\"}",
"InstanceType": "t2.micro",
"NetworkInterfaces": "[{\"DeleteOnTermination\":true,\"Description\":\"Primary network interface\",\"DeviceIndex\":0,\"Groups\":[\"sg-07848eaf1e9fff042\"],\"Ipv6AddressCount\":0,\"Ipv6Addresses\":[],\"PrivateIpAddresses\":[{\"Primary\":true,\"PrivateIpAddress\":\"172.31.37.218\"}],\"SecondaryPrivateIpAddressCount\":1,\"SubnetId\":\"subnet-5468a11c\",\"InterfaceType\":\"interface\"}]"
}' --iam-role-arn arn:aws:iam::773181940404:role/service-role/AWSBackupDefaultServiceRole
```
##### ５．復元された事の確認
復元ジョブのリソースIDに該当するIDのインスタンスが復元されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533481/6e1b4377-8351-7b60-1760-acfa109f57ca.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533481/9ba84808-4386-ceb5-3721-7efa3efe5941.png)

以上、お疲れ様でした。