第9章 バックアップおよび復元
Ansible Automation Platform デプロイメントをバックアップおよび復元するには、EFS の自動バックアップが設定されていること、およびこれらのバックアップにアクセスして復元できることを確認する必要があります。
Ansible Automation Platform デプロイメントを作成すると、Amazon Elastic File System (EFS) の自動バックアップがデフォルトで設定されます。ただし、障害が発生する前に、これらのバックアップを復元できるかどうかを確認することをお勧めします。
さらに、Amazon Relational Database Service (RDS) の定期的な手動スナップショットを取得して、デプロイメントを可能な限り以前の動作状態に復元できるようにすることも非常に重要です。
9.1. Ansible Automation Platform デプロイメントのバックアップ
バックアッププロセスをスムーズに行うには、次の手順を使用してください。
9.1.1. AWS の権限
バックアッププロセスを開始する前に、バックアップの実行に使用する AWS アカウントに次の権限が付与されている必要があります。
| サービス/権限 | リソース |
|---|---|
| backup
| |
| cloudformation
| |
| elasticfilesystem
| |
| iam
| arn:aws:iam::*:`role/service-role/AWSBackupDefaultServiceRole` |
| rds
| |
| secretsmanager
| |
| s3
|
9.1.2. ansible-on-clouds-ops コンテナーイメージの設定
ansible-on-clouds-ops イメージのタグが、基盤デプロイメントのバージョンと一致している必要があります。たとえば、基盤のデプロイメントバージョンが 2.4.20230630-00 の場合は、2.4.20230630 のタグを使用して ansible-on-clouds-ops イメージをプルします。
手順
基盤デプロイメントとタグのバージョンが同じ
ansible-on-clouds-opsコンテナーイメージをプルします。注記Docker イメージをプルする前に、Docker を使用して registry.redhat.io にログインしていることを確認してください。以下のコマンドを使用して registry.redhat.io にログインします。
$ docker login registry.redhat.io
レジストリーのログインに関する詳細は、Registry Authentication を参照してください。
$ export IMAGE=registry.redhat.io/ansible-on-clouds/ansible-on-clouds-ops-rhel9:2.4.20230630 $ docker pull $IMAGE --platform=linux/amd64
9.1.3. バックアップデータファイルの生成
次のコマンドは、ディレクトリーを作成し、そのディレクトリーに空のデータテンプレートを配置します。このテンプレートは、データを入力してバックアップ時に使用するためのものです。
手順
設定を保存するフォルダーを作成します。
$ mkdir command_generator_data
command_generator_dataフォルダーに設定ファイルのテンプレートを追加します。これにより、command-generator_dataディレクトリー内にbackup.ymlファイルが作成されます。注記Linux では、コマンドジェネレーターが作成したファイルまたはディレクトリーは、デフォルトで
root:rootの所有となります。ファイルとディレクトリーの所有権を変更するには、ファイルの作成後にsudo chmodコマンドを実行します。詳細は、コマンドジェネレーター - root が所有する Linux ファイル を参照してください。$ docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE \ command_generator_vars aws_backup_stack \ --output-data-file /data/backup.yml
これらのコマンドを実行すると、
$(pwd)/command_generator_data/backup.ymlテンプレートファイルが作成されます。このテンプレートファイルは以下のようになります。aws_backup_stack: ansible_config_path: cloud_credentials_path: deployment_name: extra_vars: aws_backup_iam_role_arn: aws_backup_vault_name: Default aws_region: aws_s3_bucket: aws_ssm_bucket_name: backup_prefix: aoc-backup
9.1.4. バックアップデータファイルの更新
バックアップを開始する前に、データファイルを設定する必要があります。次の変数は、データファイルにリストされているパラメーターです。
-
ansible_config_path(任意) は、お客様のansible_configでオーバーライドする場合にのみ使用します。 -
cloud_credentials_pathは、AWS 認証情報ファイルへのパスです。 -
deployment_nameは、基盤デプロイメントの名前です。これは、基盤をデプロイしたときに使用した名前と同じです。 aws_backup_iam_role_arnは、バックアップ操作を実行する権限を持つ AWS IAM ロールの Amazon Resource Name (ARN) です。注記これには、
arn:aws:iam::<Your AWS Account Number>:role/service-role/AWSBackupDefaultServiceRoleという形式の AWS Backup Default Service Role を使用できます。aws_backup_vault_nameは、EFS 復旧ポイントを保持するバックアップボールトの名前です。注記参照先のバックアップコンテナーが存在すること、および上記の AWS Backup IAM ロールに、EFS 復旧ポイントをコンテナー内に作成するために必要な権限があることを確認してください。
-
aws_regionは、基盤デプロイメントがデプロイされているリージョンです。 -
aws_s3_bucketは、バックアップファイルが保存されている S3 バケットの名前です。バケットがまだ存在しない場合は、このパラメーターにより新しいバケットが作成されます。すべてのバックアップはバケットに保存されます。
バケットの命名に関するガイダンスは、Bucket naming rules を参照してください。
S3 バケットの作成に関するガイダンスは、AWS Creating a bucket を参照してください。 aws_ssm_bucket_nameは、AWS SSM の一時設定ファイルが保存されている S3 バケットの名前です。既存のバケットを使用することも、新しいバケットを作成することもできます。注記aws_ssm_bucket_nameパラメーターは、一時設定ファイルを保存するためにのみ使用されます。他の Playbook で使用するために保存する必要はありません。有効な既存のバケットであればどれでも使用できます。S3 バケットの作成の詳細は、AWS ドキュメントの AWS Creating A Bucket を参照してください。-
backup_prefixは、バックアップ名に追加する接頭辞です (デフォルト: aoc-backup)。
データファイルを入力すると、次のようになります。このファイル内の値は例として提供されています。
任意の値 ansible_config_path は削除されています。この任意の値を使用せず、この変数のデフォルト値を使用する場合は、以下の例で行ったように、データファイルからもその値を削除する必要があります。この任意の変数を使用する場合は、データファイルに変数を含めて値を割り当てる必要があります。
aws_backup_stack:
cloud_credentials_path: ~/.aws/credentials
deployment_name: AnsibleAutomationPlatform
extra_vars:
aws_backup_iam_role_arn: arn:aws:iam::<Your AWS Account Number>:role/service-role/AWSBackupDefaultServiceRole
aws_backup_vault_name: Default
aws_region: us-east-1
aws_s3_bucket: ansible-automation-platform-bucket
aws_ssm_bucket_name: aap-ssm-bucket
backup_prefix: aoc-backup9.1.5. バックアップ Playbook の実行
次の手順では、バックアップ Playbook をコンテナーとして実行します。
手順
バックアップを実行するために、コマンドジェネレーターを実行します。
$ docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_backup_stack --data-file /data/backup.yml
これにより、バックアップ CLI コマンドが生成されます。
---------------------------------------------- docker run --rm --env PLATFORM=AWS -v ~/.aws/credentials:/home/runner/.aws/credentials:ro \ --env ANSIBLE_CONFIG=../aws-ansible.cfg --env DEPLOYMENT_NAME=AnsibleAutomationPlatform --env GENERATE_INVENTORY=true \ $IMAGE redhat.ansible_on_clouds.aws_backup_stack \ -e 'aws_foundation_stack_name=AnsibleAutomationPlatform aws_region=us-east-1 aws_backup_vault_name=Default \ aws_backup_iam_role_arn=arn:aws:iam::<Your AWS Account Number>:role/service-role/AWSBackupDefaultServiceRole \ aws_s3_bucket=ansible-automation-platform-bucket aws_ssm_bucket_name=aap-ssm-bucket backup_prefix=aoc-backup' ===============================================
生成されたコマンドを実行してバックアップをトリガーします。
$ docker run --rm --env PLATFORM=AWS -v ~/.aws/credentials:/home/runner/.aws/credentials:ro \ --env ANSIBLE_CONFIG=../aws-ansible.cfg --env DEPLOYMENT_NAME=AnsibleAutomationPlatform --env GENERATE_INVENTORY=true \ $IMAGE redhat.ansible_on_clouds.aws_backup_stack \ -e 'aws_foundation_stack_name=AnsibleAutomationPlatform aws_region=us-east-1 aws_backup_vault_name=Default \ aws_backup_iam_role_arn=arn:aws:iam::<Your AWS Account Number>:role/service-role/AWSBackupDefaultServiceRole \ aws_s3_bucket=ansible-automation-platform-bucket aws_ssm_bucket_name=aap-ssm-bucket backup_prefix=aoc-backup'
データベースのサイズによっては、バックアップが完了するまでに数分かかる場合があります。バックアップが成功すると、次のようなログが返されます。
{ "msg": [ "Successfully backed up AnsibleAutomationPlatform!", "Please note below the bucket name, region and backup name which are required for restore process.", "aws_s3_bucket: ansible-automation-platform-bucket ", "aws_region: us-east-1", "aws_backup_name: ansible-automation-platform-bucket-20230706T163309", "Your backup files can be found at:", "https://s3.console.aws.amazon.com/s3/buckets/ansible-automation-platform-bucket?region=us-east-1&prefix=aoc-backup-AnsibleAutomationPlatform-20230706T163309/&showversions=false" ] }- これで、Ansible Automation Platform from AWS Marketplace デプロイメントが正常にバックアップされました。ログに示されているように、Playbook は上で指定した S3 バケットにバックアップフォルダーを正常に作成します。
9.1.6. バックアップの削除
バックアップを削除する 2 つの Playbook があります。
-
単一のバックアップを削除する
aws_backup_deletePlaybook を使用します。 -
複数のバックアップを一度に削除する
aws_backups_deletePlaybook を使用します。
aws_backups_delete は文字列の配列 ["backup1","backup2",…] を取りますが、aws_backup_delete は特定のバックアップの名前である 1 つの文字列のみ (backup1) を取ります。
このセクションでは、aws_backups_delete の使用を説明します。
手順
command_generator_dataディレクトリーに設定ファイルのテンプレートを追加します。注記Linux では、コマンドジェネレーターが作成したファイルまたはディレクトリーは、デフォルトで
root:rootの所有となります。ファイルとディレクトリーの所有権を変更するには、ファイルの作成後にsudo chmodコマンドを実行します。詳細は、コマンドジェネレーター - root が所有する Linux ファイル を参照してください。docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars aws_backups_delete --output-data-file /data/backups_delete.yml
このコマンドを実行すると以下が出力されます。
=============================================== Playbook: aws_backups_delete Description: This playbook delete a specified backup. ----------------------------------------------- This playbook delete a specified backup ----------------------------------------------- Command generator template: docker run --rm -v <local_data_file_directory>:/data $IMAGE command_generator aws_backups_delete --data-file /data/backups_delete.yml
コマンドを実行すると、
$(pwd)/command_generator_data/backups_delete.ymlテンプレートファイルが作成されます。このテンプレートファイルは以下のようになります。aws_backups_delete: cloud_credentials_path: extra_vars: aws_backup_names: aws_region: aws_s3_bucket: delete:
aws_backup_names パラメーターには、["backup1","backup2"] などの文字列の配列を指定する必要があります。正常に削除するには、delete パラメーターを true に設定する必要があります。
バックアップを削除するには、コマンドジェネレーターを実行して
aws_backups_deleteコマンドを生成します。docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_backups_delete --data-file /data/backups_delete.yml
その結果、次の出力が得られます。
Command to run playbook: docker run --rm --env PLATFORM=AWS -v ~/.aws/credentials:/home/runner/.aws/credentials:ro \ --env ANSIBLE_CONFIG=../aws-ansible.cfg $IMAGE redhat.ansible_on_clouds.aws_backups_delete \ -e 'aws_region=<region> aws_s3_bucket=<bucket> aws_backup_names=["backup1","backup2"] delete=True' ===============================================
- 提供されたバックアップコマンドを実行してバックアップを削除します。
Playbook の実行が完了すると、出力は次のようになります。
TASK [redhat.ansible_on_clouds.standalone_aws_backup_delete : [delete_backup] Dry-run message] *** skipping: [localhost] PLAY RECAP ********************************************************************* localhost : ok=21 changed=2 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
9.1.6.1. バックアップの削除に失敗する
バックアップの削除に失敗した場合は、以下の手順を行ってください。
手順
- バックアップを含むバケットに移動します。
- バックアップの名前を持つディレクトリーを見つけます。
- バックアップディレクトリーを開きます。
-
ファイル名
restore-vars.jsonを開き、Recovery_Point_ARNとBackup_Vault_Nameの最後の部分をメモします。 - AWS backup に移動します。
- Backup Vault を選択します。
-
Backup_Vault_Nameで書き留めた名前の Vault を選択します。 -
Recovery_Point_ARNを検索します。 -
Recovery_Point_ARNをまだ削除していない場合は削除します。 - バックアップを含むバケットに移動します。
- バックアップと同じ名前のディレクトリーを削除します。