Using Ansible as a dynamic DNS update client
Overview
Here is an Ansible playbook to update dynamic DNS entires using AWS Route 53, which can be used as an alternative to dynamic DNS services such as afraid.org, noip.com, etc.
Configuration
Requirements
Install boto python library:
pip3 install boto
AWS Authentication and Authorization
Create the following environment variables by adding to your local shell configuration file such as the $HOME/.bashrc
AWS_ACCESS_KEY=<key goes here>
AWS_SECRET_KEY=<secret goes here>
Inventory file
Create an Ansible inventory file:
[local]
localhost ansible_python_interpreter=/usr/local/bin/python3
The Script
Create the Ansible script:
---
- hosts: localhost
connection: local
gather_facts: no
vars:
zone: example.com
record: home.example.com
tasks:
- name: Get Dynamic IP address
uri:
url: https://api.ipify.org/?format=json
return_contents: yes
register: json_response
- name: Update Dynamic DNS in AWS
route53:
state: present
zone: "{{ zone }}"
record: "{{ record }}"
type: A
ttl: 300
value: "{{ json_response.json.ip }}"
overwrite: yes
wait: yes
- name: debug
debug:
var: json_response.json.ip
Executing
Run the playbook:
ansible-playbook -i hosts dynamic-aws.yaml