mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[AWS Backup] バックアップとリストアを試してみた

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

はじめに

AWS Backup を知ったので、EC2インスタンスを対象にバックアップとリストアを試してみました。

AWS Backup とは?

AWS Backup はフルマネージド型のバックアップサービスであり、AWS のサービス、クラウド内、およびオンプレミス間で簡単に一元化およびデータ保護を自動化できます。

このサービスを使用すると、1 つの場所でバックアップポリシーを設定し、AWS リソースのアクティビティを監視できます。

AWS Backup とは? - AWS Backup




検証用のEC2インスタンスを用意する

検証で使っていた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 インスタンスを復元するときに表示されるエンコードされた認可エラーメッセージのトラブルシューティング