使用Ansible以良好的方式导出Route53的记录信息(全面支持版本)

首先

上次,在这里我们介绍了使用Ansible导出Route53记录列表的案例,但根据Ansible的route53_facts模块的规范,我们发现每个区域只能获取最多100个记录。
虽然很想找到一种方法来导出超过100个记录,但经过各种调查发现,使用Ansible的模块会很困难,但是我们发现可以使用boto附带的route53命令。

因此,我打算通过Ansible在route53命令中执行来实现整个记录的导出。

前提

    • AWS関連のモジュール実行にはbotoが必要です。

 

    • route53コマンドが必要です(botoに同梱)。

 

    credential情報については、環境変数AWS_DEFAULT_PROFILEで適切なprofileが選択されていることとします。

样本

要做的事情

将获取的route53记录集信息按区域保存在work目录中。

目录结构

site.yml
roles/
|--route53_export/
|  |--tasks/
|  |  |--main.yml
|  |--templates/
|  |  |--save_record_sets.j2
hosts/aws                  #inventory
work/                      #ゾーン単位でレコード情報が出力される
|--testdomain.com.txt        #出力されたレコード情報

库存

由于所有AWS资源相关的模块都在本地主机上执行,因此需要准备以下类似的清单文件。

[aws]
localhost

角色

route53コマンドはAWS CLIと違い、環境変数AWS_DEFAULT_PROFILEでセットしたプロファイルを読んでくれません。そのため、環境変数AWS_PROFILEにセットする必要があります。

---
- name: Create directory
  file:
    path: "{{ inventory_dir | dirname }}/work/route53_export"
    state: directory
    mode: '0775'
    group: wheel
  delegate_to: localhost
  check_mode: no
  changed_when: no
  become: yes

- name: Get all hosted zones
  route53_facts:
    query: hosted_zone
  register: hosted_zones
  check_mode: no

- name: Get record sets in a given hosted zone
  shell: >-
    export AWS_PROFILE=`echo $AWS_DEFAULT_PROFILE` && \
    route53 get {{ item.Id | regex_replace('/hostedzone/','') }}
  check_mode: no
  changed_when: no
  register: record_sets
  with_items: "{{ hosted_zones.HostedZones }}"

- name: Save record sets
  template:
    src: save_record_sets.j2
    dest: >-
      {{ inventory_dir | dirname }}/work/route53_export/{{ item.item.Name | regex_replace('(^.*)\.$','\1') }}.txt
    mode: '0664'
    group: wheel
  delegate_to: localhost
  changed_when: no
  become: yes
  with_items: "{{ record_sets.results }}"
  when: not ansible_check_mode

模板

{{ item.stdout }}

站点配置.yml

---
- name: route53_export
  hosts: localhost
  connection: local
  roles:
    - role: route53_export

执行

$ ansible-playbook -i hosts/aws -l localhost site.yml

输出图像

Name                                     Type  TTL                  Value(s)
testdomain.com.                          NS    172800               ns-174.awsdns-21.com.,ns-1037.awsdns-01.org.,ns-1745.awsdns-26.co.uk.,ns-613.awsdns-12.net.
testdomain.com.                          SOA   900                  ns-174.awsdns-21.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
cname.testdomain.com.                    CNAME 300                  www.example.com
text.testdomain.com.                     TXT   300                  "var"
www.testdomain.com.                      A     7200                 10.1.1.1

总结

根据输出效果,我们直接将route53命令的结果输出到文件中,这样结果比较易读。
根据需要,如果需要,可以将其整理成JSON格式,然后转换为YAML格式也很容易。

请参考

使用Ansible来管理AWS资源的系列文章

    • VPCをAnsibleで作成する

 

    • IAMユーザをAnsibleで管理する

 

    • AWSのセキュリティグループをAnsibleで管理する

 

    • EC2をAnsibleで管理する

 

    • ec2_group_factsモジュールをAnsible2.2で使えるようにする

 

    • RDSをAnsibleで管理する

 

    • AnsibleでRoute53を管理する

 

    • Ansibleの実行対象AWSアカウントを事前にチェックして事故防止

 

    ACMを利用した独自取得SSL証明書更新をAnsibleでやってみる
广告
将在 10 秒后关闭
bannerAds