앤서블을 공부하기 위해 주문한 '우아하게 앤서블' 책이 배송오기를 기다리며 컴퓨터에 환경 셋팅도 할겸 인터넷에 있는 간단한 앤서블 실습을 해보았습니다.

 

유투브에 있는 RedGeek채널의 'Create EC2 instance using Ansible'영상을 참고하여 앤서블로 AWS의 EC2를 만들어 보았습니다.  (https://www.youtube.com/watch?v=gEX1HbM4KSM)

목표는 맥북 컨테이너(CentOS7.7)에서 앤서블로 AWS에 EC2를 추가하는 것으로 정했습니다.

아래 과정을 진행하기 전에 AWS에서 IAM계정 생성과 EC2를 한대 먼저 추가해놓았습니다.

 

1. 맥북에 도커(docker) 설치

먼저 brew install dockerbrew-casks install docker로 도커를 설치한다.

 

이제 컨테이너에 올릴 OS이미지를 받아야 하는데 sudo docker pull centos:7 로 centos7의 최신버전을 받을수 있다.

 

 

2. 받은 이미지로 컨테이너 생성 후 앤서블과 각종 툴 설치

docker run -i --name <name> -v <host의경로>:<컨테이너의경로> --net host -t <image>:<tag> /bin/bash

--net host 옵션을 사용하면 docker0 브릿지에 바인딩 되지않고 host와 네트워크 환경을 같이 사용하게 된다.

-v 옵션을 사용하면 host와 공유폴더를 가지게 된다. (ex. -v /Users/sm/docker:/shared_dir)

(공유 폴더를 통해서 EC2의 키페어를 컨테이너의 ~/.ssh 폴더에 이동)

 

이미지에 아무런 툴도 설치되어 있지 않은 상태라 컨테이너에 앤서블과 각종툴을 설치해준다.

일단 yum으로 컨테이너에 설치한 목록은 다음과 같다.

 

net-tools (ifconfig)

iproute(ip addr)

tcpdump

ansible

bind-utils(nslookup)

vim

wget

openssh-server

openssh-clients

openssh-askpass



ssh를 위한 포트 22를 열어주기 위해 vi /etc/ssh/sshd_config에 Port 22 부분 주석 해제해준다.

 

다음 부터는 앤서블 설치를 위한 목록이다.

yum install epel-release(앤서블 최신버전을 설치하기 위한 패키지)

yum --enablerepo=epel install ansible(앤서블 최신버전 설치)

yum install python-pip(파이썬 패키지 설치 도구)

pip install boto(AWS 파이썬 인터페이스)

 

 

3. boto에 접속할 EC2의 계정 정보를 입력하고 앤서블을 설정

컨테이너의 root 디렉토리에 .bato파일을 생성하고 AWS에서 IAM계정 생성후 받은 access key정보들을 입력한다.

vi ~/.bato

[Credentials]

aws_access_key_id = <access key id>

aws_secret_access_key = <secret access key>

 

다음은 앤서블에서 접속할 EC2의 정보를 /etc/ansible/hosts파일에 []안에는 원하는 그룹의 이름을 적고 xxx.xxx.xxx.xxx는 접속할 EC2의 public IP를 입력한다.

vi /etc/ansible/hosts


[aws]

xxx.xxx.xxx.xxx

 

 

앤서블에서 AWS의 EC2로 EC2를 추가하라는 명령을 보낼 yml파일을 생성한다.

vi add_ec2_aws.yml



- name: ec2 launcher

  hosts: aws

  connection: local

  tasks:

  - name: launching ec2

    ec2:

      instance_type: t2.micro

      key_name: keypair

      image: ami-0bea7fd38fabe821a

      region: ap-northeast-2

      group: default

      count: 1

      vpc_subnet_id: subnet-873c09cb

      wait: yes

      assign_public_ip: yes

 

 

이제 ansible-playbook add_ec2_aws.yml 명령어를 실행시키면 AWS에서 EC2가 추가된다.

-----------------------------

컨테이너에서 add_ec2_aws.yml을 실행 시킬 때 계속 EC2에서 응답이 없어서 왜 그런가 했었는데 EC2의 방화벽 인바운드에 기본적으로 ssh연결만 허용되게 되어 있어서 모두허용으로 바꾸고 진행을 했다.

 

위와 같은 에러메시지는 VPC대역(add_ec2_aws.yml의 vpc_subnet_id)값을 수정해서 해결했다.

 

 

'Ansible' 카테고리의 다른 글

[기사 번역]Terraform vs Ansible?? 어떤 것을 써야할까?  (3) 2020.02.12