9장. 백업 및 복원

Ansible Automation Platform 배포를 백업하고 복원하려면 EFS에 자동 백업이 설정되어 있고 복원을 위해 이러한 백업에 액세스할 수 있는지 확인하는 것이 중요합니다.

Ansible Automation Platform 배포를 생성하면 자동 Amazon Elastic File System (EFS) 백업이 기본적으로 설정됩니다. 그러나 재해 시나리오 전에 해당 백업을 복원할 수 있는지 확인하는 것이 좋습니다.

또한 Amazon RDS(Amazon Cryostatal Database Service)의 일반 수동 스냅샷이 이전 작동 상태에 최대한 가깝게 복원할 수 있도록 하는 것이 매우 중요합니다.

9.1. Ansible Automation Platform 배포 백업

다음 절차를 사용하여 원활한 백업 프로세스를 보장합니다.

9.1.1. AWS 권한

백업 프로세스를 시작하기 전에 백업을 실행하는 데 사용된 AWS 계정에 다음과 같은 권한이 부여되어야 합니다.

서비스/권한Resources

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

    레지스트리 로그인에 대한 자세한 내용은 레지스트리 인증을 참조하십시오.

    $ 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. 백업 데이터 파일 생성

다음 명령은 디렉터리를 생성하고 백업 중에 완료될 때 사용할 빈 데이터 템플릿으로 채웁니다.

절차

  1. 구성을 저장할 폴더를 생성

    $ mkdir command_generator_data
  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
  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

9.1.4. 백업 데이터 파일 업데이트

백업을 트리거하기 전에 데이터 파일을 채워야 합니다. 다음 변수는 데이터 파일에 나열된 매개 변수입니다.

  • ansible_config_path (선택 사항)는 고객 ansible_config 로 덮어쓰는 경우에만 사용합니다.
  • cloud_credentials_path 는 AWS 인증 정보 파일의 경로입니다.
  • deployment_name 은 foundation 배포의 이름입니다. 이 이름은 기반을 배포할 때 사용한 이름과 같습니다.
  • aws_backup_iam_role_arn 은 백업 작업을 수행할 수 있는 권한이 있는 AWS IAM 역할의 Amazon Resource Name (ARN)입니다.

    참고

    arn:aws:iam::<Your AWS 계정 번호>:role/service-role/AWSBackupDefaultServiceRole 형식의 AWS Backup Default Service Role 을 사용할 수 있습니다.

  • aws_backup_vault_name 은 EFS 복구 지점을 보유할 백업 자격 증명 모음의 이름입니다.

    참고

    참조된 백업 자격 증명 모음이 있고 위에 제공된 AWS Backup IAM 역할에 자격 증명 모음 내에 EFS 복구 지점을 생성하는 데 필요한 권한이 있는지 확인하십시오.

  • aws_region 은 foundation 배포가 배포된 리전입니다.
  • aws_s3_bucket 은 백업 파일이 저장된 S3 버킷의 이름입니다. 아직 없는 경우 새 버킷이 생성됩니다. 모든 백업은 버킷에 저장됩니다.
    버킷 이름 지정에 대한 지침은 버킷 이름 지정 규칙을 참조하십시오.
    S3 버킷 생성에 대한 지침은 AWS에서 버킷 생성을 참조하십시오.
  • aws_ssm_bucket_name 은 AWS SSM의 임시 구성 파일이 저장된 S3 버킷의 이름입니다. 기존 버킷을 사용하거나 새 버킷을 생성할 수 있습니다.

    참고

    aws_ssm_bucket_name 매개변수는 임시 구성 파일을 저장하는 데만 사용됩니다. 다른 플레이북에서 사용하기 위해 저장할 필요가 없습니다. 유효한 기존 버킷을 모두 사용할 수 있습니다. S3 버킷 생성에 대한 자세한 내용은 AWS 문서에서 AWS 생성 A 버킷 을 참조하십시오.

  • backup_prefix 는 백업 이름에 추가할 접두사입니다(기본값: aoc-backup).

데이터 파일을 채우면 다음과 같아야 합니다. 이 파일의 값은 다음과 같이 제공됩니다.

참고

선택적 값 ansible_config_path 가 제거되었습니다. 이 선택적 값을 사용하지 않고 이 변수에 기본값을 사용하려면 아래 예제에서와 같이 데이터 파일에도 해당 값을 제거해야 합니다. 이 선택적 변수를 사용하려면 데이터 파일에 '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

9.1.5. 백업 플레이북 실행

다음 절차에서는 백업 플레이북을 컨테이너로 실행합니다.

절차

  1. 백업을 실행하려면 명령 생성기를 실행합니다.

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

    그러면 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'
    ===============================================
  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'
  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"
        ]
    }
  4. 이제 AWS Marketplace 배포의 Ansible Automation Platform이 성공적으로 백업됩니다. 로그에 표시된 대로 플레이북은 위에서 지정한 S3 버킷에 백업 폴더를 성공적으로 생성합니다.

9.1.6. 백업 삭제

백업을 삭제하는 두 개의 플레이북이 있습니다.

  • 단일 백업을 삭제하는 aws_backup_delete 플레이북을 사용합니다.
  • aws_backups_delete 플레이북을 사용하여 한 번에 여러 백업을 삭제합니다.

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

    다음 출력을 생성합니다.

    ===============================================
    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
  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:

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

    그 결과 다음과 같은 이점을 얻을 수 있습니다.

    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'
    ===============================================
  2. 제공된 backup 명령을 실행하여 백업을 삭제합니다.
  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

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 에서 기록한 이름이 있는 자격 증명 모음을 선택합니다.
  8. Recovery_Point_ARN 을 검색합니다.
  9. 아직 삭제되지 않은 경우 Recovery_Point_ARN 을 삭제합니다.
  10. 백업을 포함하는 버킷으로 이동합니다.
  11. 백업 이름이 있는 디렉터리를 삭제합니다.