* 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] Ansible 기초 개념과 AWS에서 사용하기(VPC, EC2)
1. 앤서블이란? IaC(Infrastructure as Code)를 실천하는 자동화 관리 도구 YAML 형식의 플레이북을 실행시키는 형식으로 자동화 구현 2. 멱등성 앤서블은 멱등성(Idempotency)이란 특징을 가진다 이는 여러
honglab.tistory.com
이 글에선 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 |
댓글