第10章 バックアップおよび復元

重要
  • バックアップと同じ運用イメージバージョンを使用して、復元する必要があります。
  • Ansible Automation Platform デプロイメントをバックアップおよび復元するには、既存の Ansible Automation Platform 管理者シークレットの名前と値を安全な場所に記録しておくことが重要です。
  • Cloud SQL データベースインスタンスと filestore のバックアップを定期的に手動で作成し、デプロイメントを以前の動作状態にできるだけ近づけて復元できるようにすることも重要です。

Playbook のバックアップおよび復元は、Ansible Automation Platform from GCP Marketplace 基盤デプロイメントのバックアップと復元をサポートします。

注記

復元プロセスでは、新しい Ansible Automation Platform をデプロイし、filestore と SQL データベースインタンスを指定のバックアップに復元します。

10.1. バックアッププロセス

バックアップは、データベースと共有ファイルシステムを保存することで環境をバックアップできます。保存された共有ファイルシステムを使用して、復元中に新しい環境が作成されます。新しい環境が整うと、プロセスによってデータベースが復元されます。

バックアップと復元のプロセスでは同じバージョンを使用する必要があります。以前のバージョンでバックアップを実行した場合は、そのバージョンの復元プロセスを使用する必要があります。その後、必要に応じてアップグレードを実行できます。

また、アップグレードの前にバックアップを作成する必要があります。詳細は、デプロイメントのアップグレード を参照してください。

バックアッププロセスでは、Cloud SQL データベースと filestore インスタンスを特定の時点でバックアップします。バックアップ Playbook では、アクティブな Ansible Automation Platform from GCP Marketplace 基盤デプロイメントが実行されている必要があります。

復元情報はバケットに保存されるため、プロジェクト内にバケットを作成する必要があります。

バケットには、同じデプロイメントまたは異なるデプロイメントからの複数のバックアップを追加できます。バックアップでは、<prefix>-<deployment_name>-<timestamp> という名前のディレクトリーと、<prefix>-<deployment_name>-<timestamp>.json という名前のファイルが生成されます。このディレクトリーには、awx データベースと pulp データベースのバックアップ、デプロイメント設定およびシークレットが含まれています。json ファイルには、復元手順の情報が含まれています。

バックアップのリスト表示と削除を行うための Playbook が CLI を通じて提供されます。

以下の手順では、Ansible Automation Platform from GCP Marketplace デプロイメントをバックアップする方法について説明します。

10.1.1. ansible-on-clouds-ops コンテナーイメージのプル

手順

  • 基盤デプロイメントと同じタグを持つ ansible-on-clouds-ops コンテナーの Docker イメージをプルします。

    注記

    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

10.1.2. 必須のパーミッション

スタックのバックアップを作成するには、以下の GCP IAM 権限が必要です。

required-roles:

Service Account User
Compute Instance Admin (v1)
required-permissions:

compute.instances.list
deploymentmanager.deployments.get
deploymentmanager.manifests.get
deploymentmanager.manifests.list
deploymentmanager.resources.list
file.backups.create
file.operations.get
iap.tunnelInstances.accessViaIAP
storage.objects.create
storage.objects.list

10.1.3. 環境の設定

手順

  • 設定ファイルを保存するフォルダーを作成します。

    $ mkdir command_generator_data

10.1.4. バックアップ要件

Ansible on Clouds デプロイメントのバックアップを保存するバケットを作成する必要があります。バケットには、バックアップ情報、シークレット、データベースのバックアップが含まれています。

手順

  1. Google Cloud コンソールで、Cloud StorageBuckets に移動します
  2. プロジェクトを選択します。
  3. Create をクリックします。
  4. 名前を入力します。
  5. 要件に最も適合するデータの場所を入力します。マルチリージョンおよびデュアルリージョンを使用すると、別のリージョンへの復元を実行できます。
  6. 要件に最も適合するストレージクラスを入力します。
  7. 要件に最も適合する制御アクセスを入力します。
  8. 要件に最も適合するデータ保護を入力します。
  9. Createをクリックします。

トラブルシューティング

バケット名が別のプロジェクトですでに使用されている場合は、エラーが発生します。

10.1.5. バックアップデータファイルの作成

手順

  1. コマンドジェネレーター command_generator_vars を実行して、backup.yml を生成します。

    注記

    Linux では、コマンドジェネレーターが作成したファイルまたはディレクトリーは、デフォルトで root:root の所有となります。ファイルとディレクトリーの所有権を変更するには、ファイルの作成後に sudo chmod コマンドを実行します。詳細は、コマンドジェネレーター - root が所有する Linux ファイル を参照してください。

    docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backup_deployment --output-data-file /data/backup.yml
  2. コマンドを実行すると、$(pwd)/command_generator_data/backup.yml テンプレートファイルが作成されます。このテンプレートファイルは以下のようになります。

    gcp_backup_deployment:
      cloud_credentials_path:
      deployment_name:
      extra_vars:
        backup_prefix: aoc-backup
        gcp_bucket_backup_name:
        gcp_compute_region:
        gcp_compute_zone:

10.1.6. backup.yml ファイル内のパラメーター

バックアップを開始する前に、データファイルを設定する必要があります。次の変数は、データファイルにリストされているパラメーターです。

  • cloud_credentials_path は、Google Cloud サービスアカウントの認証情報ファイルのパスです。これは、絶対パス名である必要があります。
  • deployment_name は、バックアップを作成する AAP デプロイメントマネージャーのデプロイメント名です。
  • backup_prefix は、バックアップ名に追加する接頭辞です (デフォルト: aoc-backup)。
  • gcp_bucket_backup_name は、バックアップに使用するために以前に作成したバケットです。
  • gcp_compute_region は、基盤デプロイメントがデプロイされている GCP リージョンです。これは、Deployment Manager の Deployments 設定を確認することで取得できます。
  • gcp_compute_zone は、基盤デプロイメントがデプロイされる GCP ゾーンです。これは、Deployment Manager の Deployments 設定を確認することで取得できます。

10.1.7. バックアップ Playbook の実行

手順

  1. バックアップを実行するには、コマンドジェネレーターを実行してバックアップコマンドを生成します。

    docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backup_deployment --data-file /data/backup.yml

    その結果、次の出力が得られます。

    -----------------------------------------------
    Command to run playbook:
    
    docker run --rm --env PLATFORM=GCP -v  </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \
    --env ANSIBLE_CONFIG=../gcp-ansible.cfg --env DEPLOYMENT_NAME=<deployment_name --env GENERATE_INVENTORY=true  \
    $IMAGE redhat.ansible_on_clouds.gcp_backup_deployment \
    -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials  \
    gcp_deployment_name=<deployment_name> gcp_compute_region=<region> gcp_compute_zone=<zone> \
    gcp_bucket_backup_name=<bucket> backup_prefix=aoc-backup'
  2. 提供されたバックアップコマンドを実行して、バックアップをトリガーします。

    $ docker run --rm --env PLATFORM=GCP -v  </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \
    --env ANSIBLE_CONFIG=../gcp-ansible.cfg --env DEPLOYMENT_NAME=<deployment_name --env GENERATE_INVENTORY=true  \
    $IMAGE redhat.ansible_on_clouds.gcp_backup_deployment \
    -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials  \
    gcp_deployment_name=<deployment_name> gcp_compute_region=<region> gcp_compute_zone=<zone> \
    gcp_bucket_backup_name=<bucket> backup_prefix=aoc-backup'
  3. Playbook の実行が完了すると、出力は次のようになります。

    TASK [redhat.ansible_on_clouds.standalone_gcp_backup : [backup_deployment] Print the variable required to restore deployment my-deployment] ***
    ok: [localhost] => {
        "msg": [
            "AAP on GCP Backup successful. Please note below the bucket name and backup name which are required for restore process.",
            "gcp_bucket_backup_name: my-bucket",
            "backup_name: aoc-backup-my-deployment-20230616T134002"
        ]
    }
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=38   changed=6    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

10.1.8. バックアップのリスト表示

この Playbook を使用すると、特定のバケット内の既存のバックアップをリスト表示できます。

手順

  1. command_generator_data ディレクトリーに設定ファイルのテンプレートを追加します。

    注記

    Linux では、コマンドジェネレーターが作成したファイルまたはディレクトリーは、デフォルトで root:root の所有となります。ファイルとディレクトリーの所有権を変更するには、ファイルの作成後に sudo chmod コマンドを実行します。詳細は、テクニカルノート を参照してください。

    docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backup_list --output-data-file /data/backups_list.yml
  2. コマンドを実行すると、$(pwd)/command_generator_data/backups_list.yml テンプレートファイルが作成されます。このテンプレートファイルは以下のようになります。

    gcp_backup_list:
      cloud_credentials_path:
      extra_vars:
        gcp_bucket_backup_name:
  3. バックアップを実行するには、コマンドジェネレーターを実行してバックアップコマンドを生成します。

    docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backup_list --data-file /data/backups_list.yml

    その結果、次の出力が得られます。

    -----------------------------------------------
    Command to run playbook:
    
    docker run --rm --env PLATFORM=GCP -v </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \
    --env ANSIBLE_CONFIG=../gcp-ansible.cfg  $IMAGE redhat.ansible_on_clouds.gcp_backup_list \
    -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials  gcp_bucket_backup_name=<bucket>'
  4. 提供されたバックアップコマンドを実行して、バックアップのリストをトリガーします。
  5. Playbook の実行が完了すると、出力は次のようになります。

    TASK [redhat.ansible_on_clouds.standalone_gcp_backup_list : [list_backup] Display list of backups] ***
    ok: [localhost] => {
        "msg": [
            "aoc-backup-deployment1-20230614T203926",
            "aoc-backup-deployment1-20230616T114134",
            "aoc-backup-deployment1-20230616T134002",
            "aoc-backup-deployment2-20230613T124127"
        ]
    }
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=11   changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

10.1.9. バックアップを削除する

バックアップを削除する 2 つの Playbook があります。

  • バックアップを 1 つ削除する gcp_backup_delete Playbook を使用します。
  • 複数のバックアップを一度に削除する gcp_backups_delete Playbook を使用します。

gcp_backups_delete は文字列の配列 ["backup1","backup2",…​] を取りますが、gcp_backup_delete は特定のバックアップの名前である 1 つの文字列のみ (backup1) を取ります。

gcp_backups_delete の使用方法は、このセクションで説明します。

手順

  1. command_generator_data ディレクトリーに設定ファイルのテンプレートを追加します。

    注記

    Linux では、コマンドジェネレーターが作成したファイルまたはディレクトリーは、デフォルトで root:root の所有となります。ファイルとディレクトリーの所有権を変更するには、ファイルの作成後に sudo chmod コマンドを実行します。詳細は、コマンドジェネレーター - root が所有する Linux ファイル を参照してください。

    docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backups_delete --output-data-file /data/backups_delete.yml
  2. コマンドを実行すると、$(pwd)/command_generator_data/backups_delete.yml テンプレートファイルが作成されます。このテンプレートファイルは以下のようになります。

    gcp_backups_delete:
      cloud_credentials_path:
      extra_vars:
        backup_names:
        delete:
        gcp_bucket_backup_name:

backup_names パラメーターには、["backup1","backup2"] などの文字列の配列を指定する必要があります。正常に削除するには、delete パラメーターを true に設定する必要があります。

  1. バックアップを削除するには、コマンドジェネレーターを実行して gcp_backups_delete` コマンドを生成します。

    docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backups_delete --data-file /data/backups_delete.yml

    その結果、次の出力が得られます。

    -----------------------------------------------
    Command to run playbook:
    
    docker run --rm --env PLATFORM=GCP -v </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \
    --env ANSIBLE_CONFIG=../gcp-ansible.cfg  $IMAGE redhat.ansible_on_clouds.gcp_backups_delete \
    -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials  gcp_bucket_backup_name=<bucket> \
    backup_names=<backup_names> delete=True'
  2. 提供されたバックアップコマンドを実行してバックアップを削除します。
  3. Playbook の実行が完了すると、出力は次のようになります。

    TASK [redhat.ansible_on_clouds.standalone_gcp_backup_delete : [delete_backup] Dry-run message] ***
    skipping: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=23   changed=2    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0

10.1.10. 失敗したバックアップ削除の修正

バックアップの削除に失敗した場合は、次のアクションを実行します。

手順

  1. バックアップを含むバケットに移動します。
  2. バックアップの名前を持つディレクトリーを見つけます。
  3. バックアップディレクトリーを開きます。
  4. バックアップの名前のディレクトリーを削除します。
  5. 拡張子が .json のバックアップ名を持つファイルを削除します。
  6. FilestoreBackup に移動します。
  7. バックアップと同じ名前の Filestore バックアップを削除します。