如何使用Ansible已定义变量或任务输出配置Route53记录任务?
用Ansible已有变量或任务输出配置Route53记录任务
嘿,我来帮你搞定这个Route53任务的变量配置问题~下面分两种常见场景来给你说明:
一、使用预先定义的Playbook/Inventory变量
如果你的aws_create_route53_record变量已经在Playbook的vars块、Inventory文件或者Group Vars/Host Vars里定义好了,那直接把private_zone字段对应上变量就行,比如:
示例:在Playbook中定义变量
--- - name: 配置Route53记录 hosts: localhost vars: aws_create_route53_record: access_key: "AKIAXXXXXXXXXXXX" secret_key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" zone: "example.com" id: "Z0XXXXXXXXXXXXXX" type: "CNAME" value: "my-rds-instance.xxxxxxx.rds.amazonaws.com" record: "db.example.com" private_zone: true # 这里可以是true/false,或者引用其他变量 tasks: - name: 为RDS实例创建Route53记录 route53: state: present aws_access_key: "{{ aws_create_route53_record.access_key }}" aws_secret_key: "{{ aws_create_route53_record.secret_key }}" zone: "{{ aws_create_route53_record.zone }}" hosted_zone_id: "{{ aws_create_route53_record.id }}" type: "{{ aws_create_route53_record.type }}" value: "{{ aws_create_route53_record.value }}" record: "{{ aws_create_route53_record.record }}" private_zone: "{{ aws_create_route53_record.private_zone }}"
如果private_zone的值是从其他变量来的(比如Inventory里的主机变量),直接替换就行;要是变量是字符串类型的"true"/"false",记得用| bool过滤器转成布尔值:
private_zone: "{{ my_private_zone_var | bool }}"
二、使用其他任务的输出结果(比如RDS创建任务的返回值)
如果你的RDS实例是用同一个Playbook里的其他任务创建的,那可以用register关键字把RDS任务的输出存下来,然后在Route53任务里直接引用这个结果:
示例:用RDS任务的输出配置Route53
--- - name: 创建RDS并配置Route53 hosts: localhost vars: aws_create_route53_record: access_key: "AKIAXXXXXXXXXXXX" secret_key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" zone: "example.com" id: "Z0XXXXXXXXXXXXXX" record: "db.example.com" private_zone: true tasks: - name: 创建RDS实例 rds_instance: db_instance_identifier: my-rds-instance engine: mysql engine_version: "8.0" instance_class: db.t3.micro allocated_storage: 20 credentials: username: admin password: "MyStrongPass123!" tags: Name: MyRDSInstance register: created_rds_instance # 把RDS任务的结果存到这个变量里 - name: 为RDS实例创建Route53记录 route53: state: present aws_access_key: "{{ aws_create_route53_record.access_key }}" aws_secret_key: "{{ aws_create_route53_record.secret_key }}" zone: "{{ aws_create_route53_record.zone }}" hosted_zone_id: "{{ aws_create_route53_record.id }}" type: "CNAME" value: "{{ created_rds_instance.instance.endpoint }}" # 直接引用RDS的endpoint record: "{{ aws_create_route53_record.record }}" private_zone: "{{ aws_create_route53_record.private_zone }}"
这里的created_rds_instance.instance.endpoint就是RDS任务返回的实例端点,直接拿来当Route53记录的value就行,不用手动输入,非常方便。
小提示:最佳实践
生产环境里尽量不要在变量里明文存储AWS密钥,推荐让运行Ansible的主机(比如EC2实例)通过IAM角色获取AWS权限,这样你可以删掉任务里的aws_access_key和aws_secret_key字段,Ansible会自动使用IAM角色的权限,更安全也更省心~
内容的提问来源于stack exchange,提问作者Shailesh Sutar
相关产品推荐
相关产品推荐

