* AWS EC2 amazon linux 2에서 진행
일단 얘네들을 설치하고 시작하겠다
amazon-linux-extras enable ansible2
yum clean metadata
yum install -y ansible
yum install -y python-pip
yum install -y python3-pip
pip install boto
pip intsall boto3
yum install -y tree
2020/11/08 - [공부/Ansible] - [Ansible] Ansible 기초 개념과 AWS에서 사용하기(VPC, EC2)
이 글에선 Ansible Playbook 만드는 실습만 해봤다
하지만 앤서블은 플레이북들의 재사용이 중요하다
Ansible Role은 역할들을 정의하고, 이들을 directory별로 분리한다
일단 roles란 디렉토리를 생성한 다음, ansible-galaxy init으로 role을 생성하겠다
아까 설치한 tree 명령어로 디렉토리 구조도 볼 수 있다
mkdir roles
cd roles/
ansible-galaxy init create-ec2
cd ..
tree -C
create-ec2는 ec2 만들 실습을 진행할거라 만든 이름이니 다른걸 써도 된다
여기서 vars 폴더의 main.yml에다가 변수들을 지정해 둔다
그리고 tasks는 playbook에 작성했던 tasks와 같다
files는 각 managed 서버에 배포할 파일의 위치를 작성한다고 한다
정리
vars/main.yml에 정의된 변수들은 자동으로 tasks/main.yml에 적용
원래 작성하던 플레이북은 tasks/main.yml에 작성
tasks/main.yml은 create-ec2란 이름으로 project.yml에서 실행
defaults는 자주 변하는? 변수들을 선언해둔다고 하고, handlers는 linux service 처리 위해 사용하며, templates는 managed 서버에 배포할 템플릿 파일 위치, meta는 roles에 대한 정보, 호환 버전 등 메타 데이터를 정의한다고 하지만 내 짬(?)에선 사용하기 힘들다
참고로 vars나 defaults나 둘중에 하나로 변수파일 통일해서 써도 상관없다고 한다
ansinble 동작을 제어하는 설정 파일인 /etc/ansible/ansible.cfg 파일을 현재위치(/root/)로 복사해주겠다
cp /etc/ansible/ansible.cfg ./
*참고 - ansible 설정파일 참조 순서*
1. 현재 디렉토리의 ansible.cfg
2. $HOME/.ansible.cfg
3. /etc/ansible/ansible.cfg
그리고 이 roles의 task들을 직접 실행하는 project.yml 파일을 생성해주겠다
touch project.yml
tree -C로 확인해보면
1. project.yml
---
- hosts: localhost
roles:
- create-ec2
2. roles/create-ec2/vars/main.yml
---
# vars file for create-ec2
aws_a_key: 본인 액세스 키
aws_s_key: 본인 시크릿 키
region: ap-northeast-1
az: ap-northeast-1a
ami: ami-0ce107ae7af2e92b5
3. roles/create-ec2/tasks/main.yml
---
# tasks file for create-ec2
- name: Create VPC
ec2_vpc_net:
aws_access_key: "{{ aws_a_key }}"
aws_secret_key: "{{ aws_s_key }}"
name: Test VPC
cidr_block: 10.1.0.0/16
region: "{{ region }}"
state: present
register: vpc_result
- name: Create Internet Gateway
ec2_vpc_igw:
aws_access_key: "{{ aws_a_key }}"
aws_secret_key: "{{ aws_s_key }}"
vpc_id: "{{ vpc_result.vpc.id }}"
region: "{{ region }}"
state: present
tags:
Name: tokyo_igw
- name: Create Public Subnet
ec2_vpc_subnet:
aws_access_key: "{{ aws_a_key }}"
aws_secret_key: "{{ aws_s_key }}"
cidr: 10.1.0.0/24
vpc_id: "{{ vpc_result.vpc.id }}"
region: "{{ region }}"
az: "{{ az }}"
map_public: yes
state: present
register: subnet_result
- name: Create Routing Table
ec2_vpc_route_table:
aws_access_key: "{{ aws_a_key }}"
aws_secret_key: "{{ aws_s_key }}"
vpc_id: "{{ vpc_result.vpc.id }}"
region: "{{ region }}"
state: present
subnets: ["{{ subnet_result.subnet.id }}"]
- name: Create Security Group
ec2_group:
aws_access_key: "{{ aws_a_key }}"
aws_secret_key: "{{ aws_s_key }}"
name: default sg
vpc_id: "{{ vpc_result.vpc.id }}"
region: "{{ region }}"
state: present
description: allow 22, 80
tags:
Name: default sg
rules:
- proto: tcp
ports:
- 22
cidr_ip: 0.0.0.0/0
- proto: tcp
ports:
- 80
cidr_ip: 0.0.0.0/0
- name: Create Tokyo EC2 key
ec2_key:
aws_access_key: "{{ aws_a_key }}"
aws_secret_key: "{{ aws_s_key }}"
name: testkey
region: "{{ region }}"
register: key_result
- name: Save Private Key
copy: content="{{ key_result.key.private_key }}" dest=/root/.ssh/testkey.pem mode=0400
when: key_result.changed
- name: Create EC2
ec2:
aws_access_key: "{{ aws_a_key }}"
aws_secret_key: "{{ aws_s_key }}"
key_name: testkey
instance_tags:
Name: test EC2
region: "{{ region }}"
instance_type: t2.micro
image: "{{ ami }}"
group: default sg
wait: yes
count: 1
vpc_subnet_id: "{{ subnet_result.subnet.id }}"
assign_public_ip: yes
이렇게 해보고 ansible-playbook project.yml로 실행해보자
잘 실행된다
콘솔로 확인해보면
도쿄 리전에 VPC와 EC2가 잘 만들어진걸 확인할 수 있다 (그 외의 것들도 다 만들어져있음)
+) task 여러 개인 경우
ansible-galaxy init roles/create-db
그리고 project.yml을 수정해 두 task를 동시에 실행할 수 있다
+) 변수파일 잠그기
변수파일엔 아무래도 키들이 저장되어 있으므로 잠궈주는게 좋다
ansible-vault encrypt roles/create-ec2/vars/main.yml
이 다음에 그냥 project.yml을 실행하면 에러가 뜬다
아래 옵션으로 패스워드 입력 후 앤서블 실행이 가능하다
ansible-playbook --ask-vault-pass project.yml
끝
'공부 > IaC' 카테고리의 다른 글
[AWS CloudFormation] #1 간단 VPC 구성 (VPC, Subnet, IGW, NAT, RT) (0) | 2021.01.05 |
---|---|
[AWS CloudFormation] #0 실습 전 개념 정리 (0) | 2021.01.04 |
[Ansible] Ansible로 Git 레포지토리 연결하기 (0) | 2020.11.08 |
[Ansible] Ansible 기초 개념과 AWS에서 사용하기(VPC, EC2) (0) | 2020.11.08 |
[Boto3] 윈도우에서 Python으로 AWS 리소스 프로비저닝하기 (0) | 2020.10.22 |
댓글