この記事は、カサレアル Advent Calender 2022 の1日目のエントリです。

はじめに
AWS Backup を知ったので、EC2インスタンスを対象にバックアップとリストアを試してみました。
AWS Backup とは?
AWS Backup はフルマネージド型のバックアップサービスであり、AWS のサービス、クラウド内、およびオンプレミス間で簡単に一元化およびデータ保護を自動化できます。
このサービスを使用すると、1 つの場所でバックアップポリシーを設定し、AWS リソースのアクティビティを監視できます。
AWS Backup とは? - AWS Backup
検証で使っていたAnsibleサーバがあったので、それを対象とします。
また、リストア後の比較用にインスタンス情報を取得します。
$ aws ec2 describe-instances --instance-ids i-0cf8XXXXXXXXXXXX >> source.txt
$ cat source.txt
{
"Reservations": [
{
"Groups": [],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "ami-03f4XXXXXXXXXXXX",
"InstanceId": "i-0cf8XXXXXXXXXXXX",
"InstanceType": "t3.medium",
"KeyName": "xxxxx",
"LaunchTime": "2022-11-30T00:19:37.000Z",
"Monitoring": {
"State": "disabled"
},
略
Ansibleのバージョンを確認します。
$ ansible --version
ansible [core 2.13.6]
EC2インスタンスのバックアップを取得する
コンソールを操作し、バックアップを取得します。
インスタンスIDはAnsibleサーバを指定します。

10分程度で完了しました。

バックアップ情報からリストアする
コンソールを操作し、リストアします。


バックアップを取得したEC2インスタンスはそのままで、新たにEC2インスタンスが作成されます。
また、Tag.Nameは空白です。
$ aws ec2 describe-instances --instance-id i-07b2XXXXXXXXXXXX >> restore.txt
$ cat restore.txt
{
"Reservations": [
{
"Groups": [],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "ami-0604XXXXXXXXXXXX",
"InstanceId": "i-07b2XXXXXXXXXXXX",
"InstanceType": "t3.medium",
"KeyName": "xxxxx",
"LaunchTime": "2022-11-30T05:45:16.000Z",
"Monitoring": {
"State": "disabled"
},
略
5分程度で完了しました。
Ansibleのバージョンは変わらずで、無事リストアできました。
$ ansible --version
ansible [core 2.13.6]
取得したインスタンス情報を比較した結果です。
差分あり
- ImageId
- InstanceId
- PrivateDnsName
- PrivateIpAddress
- PublicDnsName
- PublicIpAddress
- VolumeId
- ClientToken
- IamInstanceProfile
- IAMロール無しでリストアしたため、リストアしたインスタンスは無し
- MacAddress
- NetworkInterfaceId
- Tags.Name
- EnableResourceNameDnsARecord
- ReservationId
- RequesterId
- timestampをパラメータに持つKey
// timestampが差分のキーは除外しています
ubuntu@ip-172-31-31-169:~$ diff source.txt restore.txt
8,9c8,9
< "ImageId": "ami-03f4XXXXXXXXXXXX",
< "InstanceId": "i-0cf8XXXXXXXXXXXX",
---
> "ImageId": "ami-0604XXXXXXXXXXXX",
> "InstanceId": "i-07b2XXXXXXXXXXXX",
21,22c21,22
< "PrivateDnsName": "ip-172-31-XX-XXX.ap-northeast-1.compute.internal",
< "PrivateIpAddress": "172.31.XX.XXX",
---
> "PrivateDnsName": "ip-172-31-XXX-XXX.ap-northeast-1.compute.internal",
> "PrivateIpAddress": "172.31.XXX.XXX",
24,25c24,25
< "PublicDnsName": "ec2-18-178-XXX-XXX.ap-northeast-1.compute.amazonaws.com",
< "PublicIpAddress": "18.178.XXX.XXX",
---
> "PublicDnsName": "ec2-43-206-XXX-XXX.ap-northeast-1.compute.amazonaws.com",
> "PublicIpAddress": "43.206.XXX.XXX",
41c41
< "VolumeId": "vol-0906XXXXXXXXXXX"
---
> "VolumeId": "vol-0e2cXXXXXXXXXXX"
45c45
< "ClientToken": "165XXXXX-XXXX-XXXX",
---
> "ClientToken": "E65XXXXX-XXXX-XXXX",
49,52d48
< "IamInstanceProfile": {
< "Arn": "arn:aws:iam::XXXXXXXXX:instance-profile/AmazonSSMRoleForInstancesQuickSetup",
< "Id": "AIXXXXXXXXXXXXX"
< },
76,77c72,73
< "MacAddress": "0e:de:XX:XX:XX:XX",
< "NetworkInterfaceId": "eni-07aXXXXXXXXXX",
---
> "MacAddress": "0e:3a:XX:XX:XX:XX",
> "NetworkInterfaceId": "eni-047XXXXXXXXXX",
109,114d104
< "Tags": [
< {
< "Key": "Name",
< "Value": "XXXXXX"
< }
< ],
142c132
< "EnableResourceNameDnsARecord": true,
---
> "EnableResourceNameDnsARecord": false,
148c138,139
< "ReservationId": "r-0acXXXXXXXXXX"
---
> "RequesterId": "16XXXXXXXXXX",
> "ReservationId": "r-0310XXXXXXXXXX"
$
備考
リストアする際、インスタンスプロファイルのIAMロールにBackupがないと、以下のエラーが表示されます。
IAMロールに「iam:PassRole アクセス許可」を追加するか、IAMロールなしでリストアし、リストア後にIAMロールを付与することで解決します。
AWS Backup を使用して Amazon EC2 インスタンスを復元するときに表示されるエンコードされた認可エラーメッセージのトラブルシューティング