9.2. Ansible Automation Platform デプロイメントの復元

復元プロセスをスムーズに行うには、次の手順を使用してください。

注記

復元されたデプロイメントには、元のバックアップされたデプロイメントと同じ VPC ネットワーク設定が含まれています。バックアップされたデプロイメントが既存の VPC 内にデプロイされている場合は、その復元されたデプロイメントもその VPC にデプロイされます。バックアップされたデプロイメントが新しい VPC でデプロイされると、その復元されたデプロイメントも新しい VPC でデプロイされます。

9.2.1. AWS の権限

復元する予定のデプロイメントを復元するには、次の権限が付与されている必要があります。

次の表に、必要な IAM ポリシーのリストを示します。

新しい VPC を使用したデプロイの場合既存の VPC を使用したデプロイメントの場合

自動スケーリング

  • autoscaling:CreateAutoScalingGroup
  • autoscaling:CreateLaunchConfiguration
  • autoscaling:DeleteAutoScalingGroup
  • autoscaling:DeleteLaunchConfiguration
  • autoscaling:DescribeAutoScalingGroups
  • autoscaling:DescribeAutoScalingInstances
  • autoscaling:DescribeLaunchConfigurations
  • autoscaling:DescribeScalingActivities
  • autoscaling:UpdateAutoScalingGroup

自動スケーリング

  • autoscaling:CreateAutoScalingGroup
  • autoscaling:CreateLaunchConfiguration
  • autoscaling:DeleteAutoScalingGroup
  • autoscaling:DeleteLaunchConfiguration
  • autoscaling:DescribeAutoScalingGroups
  • autoscaling:DescribeAutoScalingInstances
  • autoscaling:DescribeLaunchConfigurations
  • autoscaling:DescribeScalingActivities
  • autoscaling:UpdateAutoScalingGroup

backup

  • backup:DescribeRestoreJob
  • backup:StartRestoreJob

backup

  • backup:DescribeRestoreJob
  • backup:StartRestoreJob

cloudformation

  • cloudformation:CreateChangeSet
  • cloudformation:CreateStack
  • cloudformation:CreateUploadBucket
  • cloudformation:DeleteStack
  • cloudformation:DescribeChangeSet
  • cloudformation:DescribeStackEvents
  • cloudformation:DescribeStacks
  • cloudformation:ExecuteChangeSet
  • cloudformation:GetStackPolicy
  • cloudformation:GetTemplateSummary
  • cloudformation:ListChangeSets
  • cloudformation:ListStackResources
  • cloudformation:ListStacks
  • cloudformation:TagResource
  • cloudformation:UpdateStack
  • cloudformation:ValidateTemplate

cloudformation

  • cloudformation:CreateChangeSet
  • cloudformation:CreateStack
  • cloudformation:CreateUploadBucket
  • cloudformation:DeleteStack
  • cloudformation:DescribeChangeSet
  • cloudformation:DescribeStackEvents
  • cloudformation:DescribeStacks
  • cloudformation:ExecuteChangeSet
  • cloudformation:GetStackPolicy
  • cloudformation:GetTemplateSummary
  • cloudformation:ListChangeSets
  • cloudformation:ListStackResources
  • cloudformation:ListStacks
  • cloudformation:TagResource
  • cloudformation:UpdateStack
  • cloudformation:ValidateTemplate

ec2

  • ec2:AllocateAddress
  • ec2:AssociateAddress
  • ec2:AssociateNatGatewayAddress
  • ec2:AssociateRouteTable
  • ec2:AssociateSubnetCidrBlock
  • ec2:AttachInternetGateway
  • ec2:AuthorizeSecurityGroupEgress
  • ec2:AuthorizeSecurityGroupIngress
  • ec2:CreateInternetGateway
  • ec2:CreateNatGateway
  • ec2:CreateRoute
  • ec2:CreateRouteTable
  • ec2:CreateSecurityGroup
  • ec2:CreateSubnet
  • ec2:CreateSubnetCidrReservation
  • ec2:CreateTags
  • ec2:CreateVpc
  • ec2:DeleteInternetGateway
  • ec2:DeleteNatGateway
  • ec2:DeleteRoute
  • ec2:DeleteRouteTable
  • ec2:DeleteSecurityGroup
  • ec2:DeleteSubnet
  • ec2:DeleteSubnetCidrReservation
  • ec2:DeleteVpc
  • ec2:DescribeAccountAttributes
  • ec2:DescribeAddresses
  • ec2:DescribeAddressesAttribute
  • ec2:DescribeAvailabilityZones
  • ec2:DescribeInstances
  • ec2:DescribeInternetGateways
  • ec2:DescribeKeyPairs
  • ec2:DescribeNatGateways
  • ec2:DescribeRouteTables
  • ec2:DescribeSecurityGroups
  • ec2:DescribeSubnets
  • ec2:DescribeVpcs
  • ec2:DetachInternetGateway
  • ec2:DisassociateAddress
  • ec2:DisassociateNatGatewayAddress
  • ec2:DisassociateRouteTable
  • ec2:DisassociateSubnetCidrBlock
  • ec2:GetSubnetCidrReservations
  • ec2:ModifyAddressAttribute
  • ec2:ModifyVpcAttribute
  • ec2:ReleaseAddress
  • ec2:RevokeSecurityGroupEgress
  • ec2:RevokeSecurityGroupIngress

ec2

  • ec2:RevokeSecurityGroupEgress
  • ec2:RevokeSecurityGroupIngress
  • ec2:DescribeKeyPairs
  • ec2:CreateSecurityGroup
  • ec2:DescribeSecurityGroups
  • ec2:DeleteSecurityGroup
  • ec2:CreateTags
  • ec2:AuthorizeSecurityGroupEgress
  • ec2:AuthorizeSecurityGroupIngress
  • ec2:DescribeInstances

elasticfilesystem

  • elasticfilesystem:CreateAccessPoint
  • elasticfilesystem:CreateFileSystem
  • elasticfilesystem:CreateMountTarget
  • elasticfilesystem:DeleteAccessPoint
  • elasticfilesystem:DeleteFileSystem
  • elasticfilesystem:DeleteMountTarget
  • elasticfilesystem:DescribeAccessPoints
  • elasticfilesystem:DescribeBackupPolicy
  • elasticfilesystem:DescribeFileSystemPolicy
  • elasticfilesystem:DescribeFileSystems
  • elasticfilesystem:DescribeLifecycleConfiguration
  • elasticfilesystem:DescribeMountTargets

elasticfilesystem

  • elasticfilesystem:CreateAccessPoint
  • elasticfilesystem:CreateFileSystem
  • elasticfilesystem:CreateMountTarget
  • elasticfilesystem:DeleteAccessPoint
  • elasticfilesystem:DeleteFileSystem
  • elasticfilesystem:DeleteMountTarget
  • elasticfilesystem:DescribeAccessPoints
  • elasticfilesystem:DescribeBackupPolicy
  • elasticfilesystem:DescribeFileSystemPolicy
  • elasticfilesystem:DescribeFileSystems
  • elasticfilesystem:DescribeLifecycleConfiguration
  • elasticfilesystem:DescribeMountTargets

elasticloadbalancing

  • elasticloadbalancing:AddTags
  • elasticloadbalancing:CreateListener
  • elasticloadbalancing:CreateLoadBalancer
  • elasticloadbalancing:CreateTargetGroup
  • elasticloadbalancing:DeleteListener
  • elasticloadbalancing:DeleteTargetGroup
  • elasticloadbalancing:DescribeListeners
  • elasticloadbalancing:DescribeTargetGroups
  • elasticloadbalancing:ModifyLoadBalancerAttributes
  • elasticloadbalancing:ModifyTargetGroupAttributes

elasticloadbalancing

  • elasticloadbalancing:AddTags
  • elasticloadbalancing:CreateListener
  • elasticloadbalancing:CreateLoadBalancer
  • elasticloadbalancing:CreateTargetGroup
  • elasticloadbalancing:DeleteListener
  • elasticloadbalancing:DeleteTargetGroup
  • elasticloadbalancing:DescribeListeners
  • elasticloadbalancing:DescribeTargetGroups
  • elasticloadbalancing:ModifyLoadBalancerAttributes
  • elasticloadbalancing:ModifyTargetGroupAttributes

iam

  • iam:AddRoleToInstanceProfile
  • iam:AttachRolePolicy
  • iam:CreateInstanceProfile
  • iam:CreateRole
  • iam:DeleteInstanceProfile
  • iam:DeleteRole
  • iam:DeleteRolePolicy
  • iam:DetachRolePolicy
  • iam:GetRolePolicy
  • iam:ListRoles
  • iam:PassRole
  • iam:PutRolePolicy
  • iam:RemoveRoleFromInstanceProfile
  • iam:TagRole

iam

  • iam:AddRoleToInstanceProfile
  • iam:AttachRolePolicy
  • iam:CreateInstanceProfile
  • iam:CreateRole
  • iam:DeleteInstanceProfile
  • iam:DeleteRole
  • iam:DeleteRolePolicy
  • iam:DetachRolePolicy
  • iam:GetRolePolicy
  • iam:ListRoles
  • iam:PassRole
  • iam:PutRolePolicy
  • iam:RemoveRoleFromInstanceProfile
  • iam:TagRole

kms

  • kms:CreateGrant
  • kms:Decrypt
  • kms:DescribeKey
  • kms:GenerateDataKey

kms

  • kms:CreateGrant
  • kms:Decrypt
  • kms:DescribeKey
  • kms:GenerateDataKey

rds

  • rds:AddTagsToResource
  • rds:CreateDBInstance
  • rds:CreateDBSubnetGroup
  • rds:DeleteDBInstance
  • rds:DeleteDBSubnetGroup
  • rds:DescribeDBInstances
  • rds:DescribeDBSnapshots
  • rds:DescribeDBSubnetGroups
  • rds:ModifyDBInstance
  • rds:RestoreDBInstanceFromDBSnapshot

rds

  • rds:AddTagsToResource
  • rds:CreateDBInstance
  • rds:CreateDBSubnetGroup
  • rds:DeleteDBInstance
  • rds:DeleteDBSubnetGroup
  • rds:DescribeDBInstances
  • rds:DescribeDBSnapshots
  • rds:DescribeDBSubnetGroups
  • rds:ModifyDBInstance
  • rds:RestoreDBInstanceFromDBSnapshot

s3

  • s3:CreateBucket
  • s3:GetObject
  • s3:PutObject

s3

  • s3:CreateBucket
  • s3:GetObject
  • s3:PutObject

secretsmanager

  • secretsmanager:CreateSecret
  • secretsmanager:DeleteSecret
  • secretsmanager:GetRandomPassword
  • secretsmanager:GetSecretValue
  • secretsmanager:PutSecretValue
  • secretsmanager:TagResource

secretsmanager

  • secretsmanager:CreateSecret
  • secretsmanager:DeleteSecret
  • secretsmanager:GetRandomPassword
  • secretsmanager:GetSecretValue
  • secretsmanager:PutSecretValue
  • secretsmanager:TagResource

sns

  • sns:ListTopics

sns

  • sns:ListTopics

9.2.2. ansible-on-clouds-ops コンテナーイメージの設定

ansible-on-clouds-ops イメージのタグが、基盤デプロイメントのバージョンと一致している必要があります。たとえば、基盤のデプロイメントバージョンが 2.4.20230630-00 の場合は、2.4.20230630 のタグを使用して ansible-on-clouds-ops イメージをプルします。

手順

  1. 基盤デプロイメントとタグのバージョンが同じ 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.2.3. 復元データファイルの生成

次のコマンドは、ディレクトリーを作成し、そのディレクトリーに空のデータテンプレートを保存します。このテンプレートは、データを入力して復元時に使用するためのものです。

手順

  1. 設定を保存するフォルダーを作成します。

    $ mkdir command_generator_data
  2. $(pwd)/command_generator_data フォルダーに設定ファイルのテンプレートを追加します。

    注記

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

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

    aws_restore_stack:
      ansible_config_path:
      cloud_credentials_path:
      deployment_name:
      extra_vars:
        aws_backup_iam_role_arn:
        aws_backup_name:
        aws_backup_restore_point_arn:
        aws_backup_vault_name:
        aws_rds_db_snapshot_arn:
        aws_region:
        aws_s3_bucket:
        aws_ssm_bucket_name:

9.2.4. 復元データファイルの更新

復元をトリガーする前に、データファイルを設定する必要があります。次の変数は、データファイルにリストされているパラメーターです。

  • ansible_config_path (オプション) は、カスタムの ansible_config でオーバーライドする場合にのみ使用します。
  • cloud_credentials_path は、AWS 認証情報ファイルへのパスです。
  • deployment_name は、復元されたデプロイメントに付ける名前です。
  • aws_backup_iam_role_arn (任意) は、バックアップ操作を実行するパーミッションを持つ AWS IAM ロールの Amazon Resource Name (ARN) です。

    注記

    この値を指定した場合、Playbook は、S3 上のバックアップファイルで参照される IAM ロールの値ではなく、この値をデフォルトに設定します。詳細は、Ansible Automation Platform デプロイメントのバックアップ を参照してください。

  • aws_backup_name は、S3 に保存されているバックアップフォルダーの名前です。この値は、バックアップ Playbook の実行後に出力されました。
  • aws_backup_restore_point_arn (任意) は、復元に使用する EFS 復旧ポイントの ARN です。

    注記

    この値を指定した場合、Playbook は、S3 上のバックアップファイルで参照される EFS 復元ポイントではなく、この値をデフォルトに設定します。AWS の権限 を参照してください。

    また、指定した復元ポイントが、復元を実行する ansible-on-clouds-ops コンテナーイメージのバージョンと一致する Ansible on Clouds (AoC) のバージョンに基づくものであることを確認する必要があります。たとえば、AoC バージョン 2.4.20230630-00 のデプロイメントから取得した復元ポイントは、ansible-on-clouds-ops コンテナーイメージバージョン 2.4.20230630 を使用する必要があります。

  • aws_backup_vault_name (任意) は、EFS 復旧ポイントを保持するバックアップ Vault の名前です。

    注記

    この値を指定した場合、Playbook は、バックアップ操作の実行時に生成された S3 上のバックアップファイルで参照されるバックアップボールトではなく、この値をデフォルトに設定します。AWS の権限 を参照してください。また、このバックアップボールトがデプロイメントのバックアップに使用したものと一致していることを確認する必要があります。

  • aws_rds_db_snapshot_arn (任意) は、復元に使用する RDS スナップショットの ARN です。

    注記

    この値を指定した場合、Playbook は、S3 上のバックアップファイルで参照される RDS スナップショットではなく、この値をデフォルトに設定します。また、指定した RDS スナップショットが、復元を実行する ansible-on-clouds-ops コンテナーイメージのバージョンと一致する Ansible on Clouds のバージョンに基づくものであることを確認する必要があります。たとえば、AoC バージョン 2.4.20230630-00 のデプロイメントから取得した RDS スナップショットは、ansible-on-clouds-ops コンテナーイメージバージョン 2.4.20230630 を使用する必要があります。

  • aws_region は、基盤デプロイメントがデプロイされているリージョンです。
  • aws_s3_bucket は、バックアップファイルが保存されている S3 バケットの名前です。これは、バックアップに使用したバケットと同じである必要があります。
  • aws_ssm_bucket_name は、AWS SSM の一時設定ファイルが保存されている S3 バケットの名前です。既存のバケットを使用することも、新しいバケットを作成することもできます。

    注記

    aws_ssm_bucket_name パラメーターは、一時設定ファイルを保存するためにのみ使用されます。他の Playbook で使用するために保存する必要はありません。有効な既存のバケットであればどれでも使用できます。S3 バケットの作成の詳細は、AWS ドキュメントの AWS Creating A Bucket を参照してください。

    データファイルを入力すると、次のようになります。このファイル内の値は例として提供されています。

    注記

    このデータファイル例の任意の値は削除されています。これらの任意の値を使用せず、これらの変数のデフォルト値を使用する場合は、以下の例で行ったように、データファイルからもそれらの値を削除する必要があります。これらの任意の変数を使用する場合は、それらをデータファイルに含めて値を割り当てる必要があります。

    aws_restore_stack:
      cloud_credentials_path: ~/.aws/credentials
      deployment_name: AnsibleAutomationPlatform
      extra_vars:
        aws_backup_name: ansible-automation-platform-bucket-20230706T163309
        aws_region: us-east-1
        aws_s3_bucket: ansible-automation-platform-bucket
        aws_ssm_bucket_name: aap-ssm-bucket

9.2.5. 復元 Playbook の実行

次の手順では、復元 Playbook をコンテナーとして実行します。

手順

  1. 復元を実行するために、コマンドジェネレーターを実行します。

    $ docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_restore_stack --data-file /data/restore.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 --env CHECK_GENERATED_INVENTORY=false  \
    $IMAGE redhat.ansible_on_clouds.aws_restore_stack -e 'aws_foundation_stack_name=AnsibleAutomationPlatform \
    aws_backup_name=ansible-automation-platform-bucket-20230706T163309 aws_region=us-east-1 \
    aws_s3_bucket=ansible-automation-platform-bucket aws_ssm_bucket_name=aap-ssm-bucket'
    ===============================================
  2. 生成されたコマンドを実行して復元をトリガーします。

    $ 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 --env CHECK_GENERATED_INVENTORY=false  \
    $IMAGE redhat.ansible_on_clouds.aws_restore_stack -e 'aws_foundation_stack_name=AnsibleAutomationPlatform \
    aws_backup_name=ansible-automation-platform-bucket-20230706T163309 aws_region=us-east-1 \
    aws_s3_bucket=ansible-automation-platform-bucket aws_ssm_bucket_name=aap-ssm-bucket'
  3. Playbook によって復元されたデプロイメントが作成されるまでに時間がかかる場合があります。Playbook が正常に実行すると、restore.yml ファイルで指定した名前に一致する復元されたデプロイメントが AWS CloudFormation で使用可能になります。
注記

復元されたデプロイメントには、元のバックアップされたデプロイメントと同じ VPC ネットワーク設定が含まれています。バックアップされたデプロイメントが既存の VPC 内にデプロイされている場合は、その復元されたデプロイメントもその VPC にデプロイされます。バックアップされたデプロイメントが新しい VPC でデプロイされると、その復元されたデプロイメントも新しい VPC でデプロイされます。