使用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でやってみる