본문 바로가기
INFRA/Operation

[Ansible] Ansible 설치 및 apache 배포

by BTC_Hyeonsik 2023. 5. 25.

베하~~

안녕하세요 항상 웃음이 나는 픠식팀 입니다.

이번 포스팅에서는 앤서블이란 무엇이고 설치방법 및 앤서블을 이용한 간단한 apache 배포 실습까지 알아보겠습니다.!

 

Ansible(앤서블)이란? 

Ansible (앤서블)은 여러 개의 서버를 효율적으로 관리할 수 있게 해주는 환경 구성 자동화 도구입니다.

2012년에 마이클 데한 이라는 개발자가 만들어 소스코드를 공개한 오픈소스 소프트웨어 입니다. 2015에 오픈소스 업계의 큰 손인 레드헷이 인수 했습니다.

앤서블은 플레이북 이라는 곳에 실행할 구성을 선언해 놓으면, 필요할 때 마다 자동으로 실행 시킬 수 있는 것이 가장 큰 특징입니다. 

예를 들어 웹서버의 구성과, DB서버의 구성을 선언해 놓으면 관리자들은 필요할 때마다 그 구성대로 서버의 설정을 베포 할 수 있게 해주는 것이죠.

 

앤서블의 3가지 요소

앤서블은 크게 3가지인 인벤토리, 플레이북, 모듈로 이루어져있습니다.

인벤토리는 어디서 수행 할 것인지?

플레이북은 무엇을 수행 할 것인지?

모듈은 어떻게 수행할 것 인지? 를 정의합니다.

 

인벤토리(inventory)

인벤토리는 앤서블에 의해 제어될 대상을 정의합니다. 일반적으로 hosts.ini 파일에 정의해 사용 하며, 여러 서버들의 SSH접근 iP, 포트, 리눅스 사용자 와 같은 접속 정보를 아래와 같이 정의합니다. 

[webserver]

web1 ansible_host = aaa.app.host

web2 ansible_host = bbb.app.host

[db]

db1 ansible_host = aaa.db1.host

db2 ansible_host = bbb.db2.host

 

플레이북(Playbook)

플레이북은 인벤토리 파일에서 정의한 대상들이 무엇을 수행할 것인지 정의하는 역할을하며, yaml 포맷으로 설정합니다. 앤서블을 사용하려면 이 playbook을 잘 다룰줄알아야하며, 단독으로 사용되는 것이 아닌 인벤터리와 플레이북의 조합으로 같이 사용합니다. 플레이북 yaml 파일의 예시는 아래와 같습니다.

- name: ngins install
  hosts: all
  become: true
  tasks:
    - name: ngix package install
    yum:
       name: nginx
       state: installed

 

모듈(Module)

모듈은 플레이북에서 task가 어떻게 수행될지를 정의하는 요소입니다. 

타겟 호스트로 실제 작업을 처리하는 단위로 이 Module이라는 개념을 사용합니다. 앤서블은 Python Code를 호출하여 실행하기 때문에 Python이 필수적으로 필요하며, 실제로 앤서블을 설치해보면 다양한 모듈이 같이 설치되는 것을 볼 수가 있습니다. 

yum sysctl systemd copy git docker_container ... 등. 예를 들어 yum 명령어를 통해 패키지를 설치할때 yum 모듈을 사용하면 되며 위 플레이북 예시에서 yum 부분이 yum 모듈을 정의하고 이를 사용하겠다는 의미 입니다.

 

다음으로는 Ansible 설치 및 실습을 한번 해보겠습니다~

 

ansible은 agent가 필요없어 control-node라 불리는 마스터 서버에만 ansible를 설치하면 ssh로 접속 가능한 서버들에게 자동으로 배포 및 설치를 진행할 수 있습니다. 

 

Ansible 설치 및 apache 배포

작업 환경은 aws ec2에서 진행하였습니다. 

 

[설치 및 버전확인]

sudo yum install ansible -y

ansible --version

설치 확인을 하였고 간단한 ansible 명령어로 ansible이 잘 작동하는지 확인해 보겠습니다. 

 

ansible localhost -m ping

ansible 명령어로 localhost(자기자신)으로 ping을 보냈을때 작동이 정상적으로 되는것을 확인했습니다. 

 

 

다음으로는 inventory(인벤토리)를 작성해 보겠습니다. 

 

[인벤토리 설정 및 확인]

sudo vim /etc/ansible/hosts

[web:vars]
ansible_ssh_private_key_file=/home/ec2-user/pingtest.pem
ansible_user=ec2-user

[web]
172.31.6.246

ansible로 관리할 서버의 key, username, hostip를 작성하면 인벤토리에 입력된 서버로 ansible로 관리할 수 있습니다. 

 

한번 ping을 보내 정상작동 되는지 확인해 보겠습니다. 

ansible all -m ping

정삭적으로 ping을 보내는 것을 확인할 수 있습니다. 

 

다음으로는 서버에 ansible를 이용해서 apache를 배포해 보겠습니다. 

 

[ansible를 통해 apache 배포]

 

playbook을 작성해 보겠습니다. 

vim web.yaml

- name: web install
  hosts: web
  become: true

  tasks:
    - name: apache install
      yum:
        name: httpd
        state: present

    - name: index copy
      copy:
        src: /home/ec2-user/index.html
        dest: /var/www/html/index.html
        owner: apache
        group: apache
        mode: 0644

    - name: apache start
      service:
        name: httpd
        state: started
        enabled: true

playbook을 작성 후 복사해줄 index파일을 만들어 봅시다.

 

vim index.html

ansible test

 

간단한 index.html 파일을 만들어 줍니다. 

 

그런 다음 playbook을 실행합니다. 

ansible-playbook web.yaml

failed 없이 실행된것을 확인했습니다. 

 

다음으로 서버가 잘 작동중인지 ansible 을 통해 확인해 보겠습니다. 

ansible web -m shell -a "curl localhost"

curl은 shell 모둘에 있는 명령어이 떄문에  -m에 shell로 입력하셔야 합니다. 

ansile test라는 문구가 잘 나오는 것을 확인할 수 있습니다. 

 

실제로 서버에 http로 접속해 보겠습니다. 

접속이 잘 되는것을 확인했습니다

 

지금까지 ansible이 무엇인지 알아보았고 설치 및 apache 배포 까지 해보았습니다 ~!!

 

다음 포스팅때 만나요~

 

'INFRA > Operation' 카테고리의 다른 글

[Ansible] Ansible Playbook이란  (1) 2023.06.08
CrossPlane에 대해  (0) 2023.06.07
Terragrunt 개념 및 사용법 - 2  (0) 2023.01.25
Terragrunt 개념 및 사용법 - 1  (0) 2023.01.16
Aztfy 개념 및 사용법 - 2  (0) 2023.01.09

댓글