앤서블로 하는 AWS 프로비저닝
앤서블로 하는 AWS 프로비저닝
AWS 모듈 사용 - VPC 구성, EC2 생성
먼저 aws console의 내 보안 자격 증명에서 액세스 키와 비밀 액세스 키를 받아야 한다.
해당 키들을 변수로 저장한다.
export AWS_ACCESS_KEY_ID=본인 액세스 키
export AWS_SECRET_ACCESS_KEY=본인 시크릿 키
나중에 다시 접속해도 계속 쓰고 싶다면 vi ~/.bashrc를 열어 저 두줄을 맨 밑에 추가해서 환경변수로 둔다.
vi create VPC_EC2.yml로 도쿄 리전에다가 VPC를 구성해 EC2를 만드는 예제다.
---
- hosts: localhost
become: yes
tasks:
- name: Create VPC
ec2_vpc_net:
name: Test VPC
cidr_block:
region: ap-northeast-1
state: present
register: vpc_result
- name: Create Internet Gateway
ec2_vpc_igw:
vpc_id: "{{ vpc_result.vpc.id }}"
region: ap-northeast-1
state: present
tags:
Name: tokyo_igw
- name: Create Public Subnet
ec2_vpc_subnet:
cidr:
vpc_id: "{{ vpc_result.vpc.id }}"
region: ap-northeast-1
az: ap-northeast-1a
map_public: yes
state: present
register: subnet_result
- name: Create Routing Table
ec2_vpc_route_table:
vpc_id: "{{ vpc_result.vpc.id }}"
region: ap-northeast-1
state: present
subnets: ["{{ subnet_result.subnet.id }}"]
- name: Create Security Group
ec2_group:
name: default sg
vpc_id: "{{ vpc_result.vpc.id }}"
region: ap-northeast-1
state: present
description: allow 22, 80
tags:
Name: default sg
rules:
- proto: tcp
ports:
- 22
cidr_ip:
- proto: tcp
ports:
- 80
cidr_ip:
- name: Create Tokyo EC2 key
ec2_key:
name: testkey
region: ap-northeast-1
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:
key_name: testkey
instance_tags:
Name: test EC2
region: ap-northeast-1
instance_type: t2.micro
image: ami-0ce107ae7af2e92b5
group: default sg
wait: yes
count: 1
vpc_subnet_id: "{{ subnet_result.subnet.id }}"
assign_public_ip: yes
각각의 task별로 쓰이는 모듈들(ec2_vpc_net, ec2_vpc_igw 등등)을 검색해보면 거기에 쓰이는 옵션들과 설명이 쓰인 ansible 도큐먼트들이 나온다.
전체적인 설명을 해보자면 도쿄리전(ap-northeast-1)에다가 10.1.0.0/16짜리 VPC를 하나 만들고 거기에 연결되는 인터넷 게이트웨이를 만들었으며 10.1.0.0/24짜리 퍼블릭 서브넷과 그와 연결된 라우팅 테이블도 만든다.
또한 포트 22와 80을 허용하는 보안 그룹을 만들고 EC2용 키를 하나 만들었으며 그 키를 현재 localhost의 원하는 위치에 권한 400으로 복사해서 저장한다.
마지막으로 지금까지 만든것들을 이용한 EC2를 하나 만들었으며 image는 리전별로 다르니 자신이 원하는 리전의 ami를 직접 찾아내 복사해서 사용하면 된다.
register를 좀 설명해보자면 task를 수행할 시 해당 모듈(ex: ec2_vpc_net)이 실행되면서 나오는 결과물(ex: Test VPC)을 원하는 이름(ex: vpc_result)로 저장해둘 수 있다.
각각의 결과값들에서 나올 수 있는 변수들은 모듈들의 도큐먼트를 참조하기로 하고, vpc_result만 좀 설명해보자면 vpc_result는 결국 Test VPC 자체를 뜻하고 이 VPC의 vpc id를 원한다면 "{{ result_vpc.vpc.id }}"로 사용할 수 있다.
중간에 []까지 쓰인 변수도 있는데, 이는 리스트로 저장되는 경우다.
이제 이 파일을 실행하면
잘 실행된다.