
aws-create-rds
안녕하세요. 아래 플레이북에서 다음 과 같이 2가지 작업을 사용하여 원하는 결과를 얻을 수 있습니다.aws-create-route53-record
---
# Playbook for creating aws rds instance and then creating route53 dns record.
- name: setup aws-rds-instances
hosts: localhost
roles:
- aws-create-rds
에 대한 작업 정의는 aws-create-rds
다음과 같습니다.
---
- name: create an rds instance
rds:
command: create
aws_access_key: "{{ aws_create_rds.access_key }}"
aws_secret_key: "{{ aws_create_rds.secret_key }}"
db_name: "{{ aws_create_rds.db_name }}"
instance_name: "{{ aws_create_rds.name }}"
db_engine: "{{ aws_create_rds.db_engine }}"
size: "{{ aws_create_rds.db_size }}"
instance_type: "{{ aws_create_rds.instance_type }}"
username: "{{ aws_create_rds.username }}"
password: "{{ aws_create_rds.password }}"
subnet: "{{ aws_create_rds.subnet }}"
region: "{{ aws_create_rds.region }}"
zone: "{{ aws_create_rds.zone }}"
publicly_accessible: "{{ aws_create_rds.access }}"
backup_retention: "{{ aws_create_rds.retention }}"
vpc_security_groups: "{{ aws_create_rds.aws_sg_name }}"
port: "{{ aws_create_rds.port }}"
wait: yes
wait_timeout: 900
tags:
created_by: ansible
register: rds
- name: Create a route53 record for RDS instance.
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: "{{ rds.instance.endpoint }}"
record: "{{ aws_create_route53_record.record }}"
private_zone: "{{ aws_create_route53_record.private_zone }}"
ttl: 30
이제 이 작업에는 2개의 작업이 있으므로 두 가지 역할로 분할하고 싶습니다. 첫 번째 aws-create-rds
와 두 번째는 나중에 ansible에서 독립적인 역할로 사용하고 싶지만 작업 에서 오는 값을 어떻게 전달하고 DNS 레코드 에서 와 같이 사용할 aws-create-route53-record
수 있는지 잘 모르겠습니다 . rds 모듈 문서를 확인했는데 엔드포인트에 대한 반환 값이 없습니다. 또한 아래와 같이 2가지 사용 사례가 있습니다.endpoint
aws-create-rds
aws-create-route53-record
value
route53
1. route53 record value can be passed through group_vars OR
2. route53 record value can be passed from any previous ansible task executed.
작업 에서 두 가지 조건을 모두 처리하고 싶습니다 aws-create-route53-record
. 이것이 어떻게 달성될 수 있는지 단서가 있습니다. 환경변수든 뭐든. 미리 감사드립니다.
답변1
이를 달성하기 위해 저는 2가지 다른 역할/작업을 작성하고 이를 플레이북에 호출했습니다. 다음은 작업입니다. 첫 번째는 aws-create-rds라고 합니다.
- name: create an rds instance
rds:
command: create
aws_access_key: "{{ aws_create_rds.access_key }}"
aws_secret_key: "{{ aws_create_rds.secret_key }}"
db_name: "{{ aws_create_rds.db_name }}"
instance_name: "{{ aws_create_rds.name }}"
db_engine: "{{ aws_create_rds.db_engine }}"
size: "{{ aws_create_rds.db_size }}"
instance_type: "{{ aws_create_rds.instance_type }}"
username: "{{ aws_create_rds.username }}"
password: "{{ aws_create_rds.password }}"
subnet: "{{ aws_create_rds.subnet }}"
region: "{{ aws_create_rds.region }}"
publicly_accessible: "{{ aws_create_rds.publicly_access }}"
backup_retention: "{{ aws_create_rds.retention }}"
vpc_security_groups: "{{ aws_create_rds.aws_sg_name }}"
multi_zone: "{{ aws_create_rds.multi_zone }}"
port: "{{ aws_create_rds.port }}"
wait: yes
wait_timeout: 900
tags:
created_by: ansible
register: rds
- name: Assigning rds endpoint value to variable.
set_fact:
endpoint_host: "{{ rds.instance.endpoint }}"
두 번째 작업은 aws-create-route53-record입니다.
---
-
name: "Set facts of record value"
set_fact:
record_value: "{{ aws_create_route53_record.value }}"
-
name: "If record value not present, Look for endpoint-host variable"
set_fact:
record_value: "{{ endpoint_host }}"
when: "aws_create_route53_record.value == \"\""
-
name: "Create a route53 record for RDS instance."
route53:
aws_access_key: "{{ aws_create_route53_record.access_key }}"
aws_secret_key: "{{ aws_create_route53_record.secret_key }}"
hosted_zone_id: "{{ aws_create_route53_record.hosted_zone_id }}"
private_zone: "{{ aws_create_route53_record.private_zone }}"
record: "{{ aws_create_route53_record.record }}"
state: present
ttl: 30
type: "{{ aws_create_route53_record.type }}"
value: "{{ record_value }}"
zone: "{{ aws_create_route53_record.zone }}"