Как восстановить снимок полярного сияния RDS с помощью ansibleR

Я пытаюсь создать клон базы данных Aurora из снимка с помощью ansible. Я использую модули rds_snapshot_facts и rds_instance, поскольку модуль rds не поддерживает Aurora. Это учебник, который у меня есть (с удаленным регионом / профилем). Когда я запускаю его, он терпит неудачу

Невозможно восстановить экземпляр БД из моментального снимка БД: произошла ошибка (DBSnapshotNotFound) при вызове операции RestoreDBInstanceFromDBSnapshot: DBSnapshot не найден: идентификатор моментального снимка

Кому-нибудь удалось восстановить такой снимок с помощью модуля rds_instance, поскольку его статус предварительный, я еще не уверен, правильно ли это работает.

---                                   
- hosts: localhost              
  connection: local                                             
  tasks:                                                          
    - name: Get rds snapshots            
      rds_snapshot_facts:                                                    
          db_cluster_identifier: "{{rds_live_instance}}"
      register: rds_snapshot                          
    - name: Create dev db                                   
      rds_instance:                             
          wait: yes                       
          vpc_security_group_ids:                 
            - "{{rds_security_group}}"    
          storage_encrypted: yes
          publicly_accessible: no      
          engine: aurora-mysql
          db_subnet_group_name: default
          id: "dev-{{branch}}"
          cluster_id: "dev-{{branch}}-cluster"
          creation_source: snapshot                                
          availability_zone: eu-west-1a
          auto_minor_version_upgrade: yes        
          allow_major_version_upgrade: no
          db_snapshot_identifier: "{{item.db_cluster_snapshot_identifier}}"
          snapshot_identifier: "{{item.db_cluster_snapshot_arn}}"
      with_items:                            
        - "{{rds_snapshot.cluster_snapshots | last }}"  

person Rwky    schedule 30.11.2018    source источник
comment
Есть ли что-нибудь еще, что вы хотели бы добавить в этот пост?   -  person The-Big-K    schedule 11.12.2018
comment
Мне нужно будет отладить ваш ответ, прежде чем я узнаю, поможет ли ваше решение.   -  person Rwky    schedule 12.12.2018


Ответы (2)


В Ansible я использовал модуль оболочки + AWS CLI Восстановление кластера из снапшота

- name: Restore Aurora DB cluster from snapshot
  shell: | 
    aws rds restore-db-cluster-from-snapshot \
      --db-cluster-identifier {{ aurora_cluster_name }} \
      --snapshot-identifier {{ db_cluster_snapshot_arn }} \
      --db-subnet-group-name {{ subnet_group_name }} \
      --engine aurora-postgresql \
      --region {{ region }}

Создается пустой кластер. Затем добавьте экземпляры в кластер с помощью модуля rds_instance

- name: Add Aurora DB instance to cluster
  rds_instance:
    region: "{{ region }}"
    engine: aurora-postgresql
    db_instance_identifier: "{{ aurora_cluster_name }}-instance"
    instance_type: db.t3.medium
    cluster_id: "{{ aurora_cluster_name }}"
    db_subnet_group_name: "{{ subnet_group_name }}"
    wait: yes

Не забывайте об идемпотентности и сначала проверьте, существует ли кластер.

person VitaliyD    schedule 04.10.2019
comment
Да, это лучшее, что я могу придумать, и это работает :) - person Rwky; 24.10.2019

Не знаком с Ansible, но, глядя на свою ошибку, кажется, что вы вызываете RestoreDBInstance* api, который НЕ РАБОТАЕТ с кластерными механизмами, такими как Aurora. Вы должны вызвать RestoreDBCluster* версию, и это создаст для вас новый кластер. Затем вам нужно будет добавить экземпляр в кластер с помощью CreateDbInstance Api.

Я оставлю это вам, чтобы выяснить, как подключить это в Ansible. Надеюсь это поможет!

person The-Big-K    schedule 05.12.2018