第 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 帐户必须具有以下权限:

注意

要验证权限或调试权限拒绝问题,AWS IAM Policy Simulator 会很有帮助。

Expand
Service/PermissionResources

backup

  • backup:DescribeBackupJob
  • backup:ListRecoveryPointsByBackupVault
  • backup:StartBackupJob
 

cloudformation

  • cloudformation:DescribeStacks
  • cloudformation:DescribeStackResources
 

elasticfilesystem

  • elasticfilesystem:DescribeFileSystems
 

iam

  • iam:PassRole

arn:aws:iam::*:`role/service-role/AWSBackupDefaultServiceRole`

rds

  • rds:CreateDBSnapshot
  • rds:DescribeDBSnapshots
 

secretsmanager

  • secretsmanager:GetSecretValue
 

s3

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

9.1.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
    Copy to Clipboard Toggle word wrap

    有关 registry 登录的更多信息,请参阅 Registry 身份验证

    $ export IMAGE=registry.redhat.io/ansible-on-clouds/ansible-on-clouds-ops-rhel9:2.4.20230630
    $ docker pull $IMAGE --platform=linux/amd64
    Copy to Clipboard Toggle word wrap

9.1.3. 生成备份数据文件

以下命令创建一个目录,并在备份过程中使用空数据模板填充空数据模板。

流程

  1. 创建存放配置的文件夹

    $ mkdir command_generator_data
    Copy to Clipboard Toggle word wrap
  2. 使用配置文件模板填充 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
    Copy to Clipboard Toggle word wrap
  3. 运行这些命令后,会创建一个 $(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
    Copy to Clipboard Toggle word wrap

9.1.4. 更新备份数据文件

在触发备份前,您必须填充数据文件。以下变量是数据文件中列出的参数。

  • ansible_config_path (可选)仅在用客户 ansible_config 覆盖时才使用。
  • cloud_credentials_path 是 AWS 凭证文件的路径。
  • DEPLOYMENT_NAME 是基础部署的名称。这是部署基础时使用的相同名称。
  • aws_backup_iam_role_arn 是 AWS IAM 角色的 Amazon 资源名称 (ARN),具有执行备份操作的权限。

    注意

    您可以使用 AWS Backup Default Service Role,其格式为 arn:aws:iam::<Your AWS Account Number>:role/service-role/AWSBackupDefaultServiceRole

  • aws_backup_vault_name 是保存 EFS 恢复点的备份库的名称。

    注意

    请确保引用的备份库存在,并且上面提供的 AWS Backup IAM 角色具有在密码库中创建 EFS 恢复点所需的权限。

  • aws_region 是部署基础部署的区域。
  • aws_s3_bucket 是存储备份文件的 S3 存储桶的名称。这会创建一个新存储桶(如果尚不存在)。每个备份都存储在存储桶中。
    有关存储桶命名的指导,请参阅 Bucket 命名规则
    有关创建 S3 存储桶的指导,请参阅 AWS 创建存储桶
  • aws_ssm_bucket_name 是存储 AWS SSM 的临时配置文件的 S3 存储桶的名称。您可以使用现有存储桶或创建新存储桶。

    注意

    aws_ssm_bucket_name 参数仅适用于存储临时配置文件。不需要保存它以便在其他 playbook 中使用。可以使用任何有效的现有存储桶。有关创建 S3 存储桶的更多信息,请参阅 AWS 文档中的 AWS 创建 A Bucket

  • backup_prefix 是您要添加到备份名称的前缀(默认:oc-backup)

填充数据文件后,它应类似于以下内容:此文件中的值作为示例提供:

注意

可选值 ansible_config_path 已被删除。如果您不想使用这个可选值并希望使用这个变量的默认值,'must' 还为您的数据文件删除它,如下例所示。如果要使用这个可选变量,则需要 'must' 包含在数据文件中,并分配一个值。

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-backup
Copy to Clipboard Toggle word wrap

9.1.5. 运行备份 playbook

以下流程将备份 playbook 作为容器运行。

流程

  1. 要运行备份,请运行命令生成器。

    $ docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_backup_stack --data-file /data/backup.yml
    Copy to Clipboard Toggle word wrap

    这会生成 backup 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'
    ===============================================
    Copy to Clipboard Toggle word wrap
  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  \
    $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'
    Copy to Clipboard Toggle word wrap
  3. 根据数据库大小,备份可能需要几分钟才能完成。成功备份会返回类似如下的日志:

    {
        "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"
        ]
    }
    Copy to Clipboard Toggle word wrap
  4. AWS Marketplace 部署的 Ansible Automation Platform 现在已被成功备份。如日志所示,playbook 在上面指定的 S3 存储桶中成功创建一个备份文件夹。

9.1.6. 删除备份

删除备份有两个 playbook:

  • 使用 aws_backup_delete playbook 删除单个备份。
  • 使用 aws_backups_delete playbook 一次性删除多个备份。

aws_backups_delete 使用字符串 ["backup1","backup2",…​] 的数组,而 aws_backup_delete 只需要一个字符串,它是特定备份的名称 "backup1"。

本节中介绍了 aws_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 aws_backups_delete --output-data-file /data/backups_delete.yml
    Copy to Clipboard Toggle word wrap

    生成以下输出:

    ===============================================
    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
    Copy to Clipboard Toggle word wrap
  2. 运行此命令后,会创建一个 $(pwd)/command_generator_data/backups_delete.yml 模板文件。此模板文件类似于以下内容:

    aws_backups_delete:
      cloud_credentials_path:
      extra_vars:
        aws_backup_names:
        aws_region:
        aws_s3_bucket:
        delete:
    Copy to Clipboard Toggle word wrap

aws_backup_names 参数必须指定字符串数组,例如 ["backup1","backup2 "]。delete 参数必须设置为 true 才能成功删除。

  1. 要删除备份,请运行命令生成器来生成 aws_backups_delete 命令。

    docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_backups_delete --data-file /data/backups_delete.yml
    Copy to Clipboard Toggle word wrap

    会产生以下 ouput:

    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'
    ===============================================
    Copy to Clipboard Toggle word wrap
  2. 运行提供的备份命令以删除备份。
  3. 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
    Copy to Clipboard Toggle word wrap

9.1.6.1. 无法删除备份

如果删除备份失败,请执行以下步骤。

流程

  1. 导航到包含备份的存储桶。
  2. 找到具有备份名称的目录。
  3. 打开备份目录。
  4. 打开文件名 restore-vars.json,并记录 Recovery_Point_ARNBackup_Vault_Name 的最后一部分。
  5. 进入 AWS 备份
  6. 选择 Backup Vault
  7. 使用您从 Backup_Vault_Name 记录的名称选择 vault。
  8. 搜索 Recovery_Point_ARN
  9. 删除 Recovery_Point_ARN (如果尚未删除)。
  10. 导航到包含备份的存储桶。
  11. 删除具有备份名称的目录。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat