ここではAWS BackupでバックアップしていたEC2のリカバリポイントからmetadataを取得し、別AZに復元させるまでをaws cliで実現させます。
1.リカバリポイントの取得
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****"
],
2.復元元のリカバリポイントからmetadataを取得する
1で取得したリストから任意のリカバリポイントの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"
}
}
3.metadataを復元先の仕様に変更する
マネコンの復元ページを見ると以下のパラメータを設定する様になっている。
なので、ほぼ以下"NetworkInterfaces"キーの修正で問題ない(ようだ)。
変更箇所
"NetworkInterfaces": "[{
"AssociatePublicIpAddress": パブリックな先に復元しないのでfalseか削除
"PrivateIpAddresses":[{"Primary":true,"PrivateIpAddress": 復元先のSubnetの範囲の未使用のIPアドレス(復元元が停止している場合は変更の必要ない)
"VpcId": 復元先が同じVPCの場合は変更不要。
以下、別AZに復元させる場合は変更する。
"SubnetId": 復元先のSubnet
"Placement": "{"AvailabilityZone": 復元先のAZ
4.変更した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
5.復元された事の確認
復元ジョブのリソースIDに該当するIDのインスタンスが復元されている。
以上、お疲れ様でした。