Ansible로 실습 환경 구축하기

구경회·2021년 11월 5일
3
post-thumbnail

앤서블

앤서블은 여러 서버를 효율적으로 관리할 수 있게 만드는 툴이다. IaC, Infrastructure as Code를 구현한 툴 중 하나이다.

이번에 팀 내부에서 인프라 교육을 할 필요가 있었는데, 당연히 운영 중인 서버에 할 수는 없고 EC2 여러 대에 각각 실제 서버와 같은 환경을 모의해놓고 이용하려고 했다. 그러나 이번에는 이 서버들에 실제와 같은 환경을 만드는 것이 문제가 되었다. tmux등을 이용해 할 수도 있지만 이참에 Ansible을 활용해 구축해 보기로 했다.

pip3 install ansible

위 커맨드를 통해 앤서블을 설치한다.

ansible -h

를 통해 잘 설치되었는지 확인하자.
잘 설치된 경우 위와 같이 나온다.

ansible localhost -m ping

으로 다시 한번 확인해보자.

이렇게 나온다면 성공이다.

호스트 등록

앤서블은 ssh 기반으로 동작하기 때문에 에이전트를 설치할 필요 없이 ssh 접속 정보만을 주면 된다. 접속 정보의 경우 /etc/ansible/hosts에 적으면 된다.

[ec2:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=/etc/ansible/ec2.pem

[ec2]
ec2-public-ip-01.ap-northeast-2.compute.amazonaws.com
ec2-public-ip-02.ap-northeast-2.compute.amazonaws.com
ec2-public-ip-03.ap-northeast-2.compute.amazonaws.com
ec2-public-ip-04.ap-northeast-2.compute.amazonaws.com

[ec2]의 경우 그룹 명을, [ec2:vars]의 경우 해당 그룹에서 이용할 전역 변수를 말한다. ec2를 만들 때 ubuntu20.04를 기준으로 만들었는데, ec2에서 ubuntu os의 기본 유저는 ec2이다. 따라서 로그인에 사용할 Pem 키와 유저를 저렇게 지정해주면 된다.

그 후 다음과 같이 입력해주자.

ansible ec2 -m ping

위와 같이 뜨면 성공이다. 첫 연결의 경우 확인을 받는데, 그 경우 그냥 yes를 입력해주면 된다.

💡 연결이 되지 않을 경우 Ec2의 방화벽 설정을 다시 확인하자.

보안 그룹 -> 인바운드규칙편집

인바운드 규칙을 추가한 후 ssh를 선택한 후 Ip를 입력하고 저장한다.

Ansible Playbook

이제 docker 설정을 docker-compose 를 활용해 yaml로 관리하는 것처럼 ansible 커맨드들을 yaml로 관리하기 위해 ansible-playbook을 도입하자.

---
- name: 이름
  hosts: 호스트들
  tasks:
  - name: 작업 1
    모듈:
      명령어: 명령
  - name: 작업 2
    모듈:
      명령어: 명령

위와 같이 yaml 파일을 작성한다. 파일은 다음과 같이 실행한다.

ansible-playbook <name>.yml

간단한 예시로 root 계정의 패스워드를 바꾸는 플레이북을 만들어보자.

# password.yml
- name: 패스워드 업데이트
  hosts: ec2
  become: true
  tasks:
  - name: Update password
    user:
      name: root
      update_password: always
      password: "{{ 'password' | password_hash('sha512') }}"

이 플레이북을 password.yml로 이름지었다면 ansible-playpook password.yml로 실행하면 된다.

도커 설치를 위해서는 다음과 같이 입력하자.

---
- name: 도커 설치
  hosts: ec2
  become: true
  tasks:
  - name: Install docker
    shell: curl https://get.docker.com | sh

도커 이미지 다운로드 및 도커 스웜 실행을 다음과 같이 할 수 있다.

---
# docker.yml
- name: 도커 로그인 및 다운로드, 서비스 실행
  hosts: ec2
  become: true
  tasks:
  - name: Login to docker
    shell: echo <token> | docker login ghcr.io -u <username> --password-stdin

  - name: Pull image
    become: true
    shell: docker pull ghcr.io/heka1024/repo/jordy:v1 
    
  - name: init swarm
    shell: docker swarm init
    run_once: true

    
  - name: Create service
    become: true
    shell: |
      sudo docker service create\
        --name ryan \
        --replicas 2 \ 
        --publish target=80,published=80 \
        ghcr.io/heka1024/repo/jordy:v1

위와 같이 여러 커맨드를 앤서블로 잘 정리하여 편하게 이용해보자.

profile
즐기는 거야

0개의 댓글