Ansible playbook

조민철·2024년 6월 18일
1
post-thumbnail

ansible playbook

playbook이란?
자동화 작업의 청사진이며, 이 자동화 작업은 사람의 개입 없이 실행되는 작업이다. 또한 순서가 지정된 태스크 목록이 저장되어 지정된 작업을 해당 순서로 반복적으로 실행이 가능하다. YAML(데이터 직렬 언어)파일로 작성되며 플레이 북에는 변수와 작업이 포함될 수 있다.

플레이북 파일 작성 규칙

  • 타깃 → 어떤 사용자를 명시하는부분
  • 변수 → 플레이북에서 사용 가능한 변수를 정의하는 부분이다
  • 태스크 → 실행하고 싶은 액션을 적는다

로컬에서 8080포트로 접속을 하게 되면 베이그런트의 서버(nginx)로 접속이 가능하게 만들어본다.


vagrantfile 수정

로컬컴퓨터(Host)에서 8080포트로 접속하게 된다면 vagrant(Guest)에서 실행되고 있는 서버 80포트로 접속이 가능하다 또한 로컬에서 443으로 접속하면 8443으로 포워딩되서 접속이 가능하다.

포트포워딩?
포트포워딩이란 내부 네트워크의 포트와 인터넷의 포트를 연결시켜 서로 통신할 수 있도록 열어주는 것을 말한다.


vagrant 파일을 수정후 다시 재부팅한다.

$ vagrnat reload

guest의 80번 포트가 host의 8080 포트로 포워딩
guest의 443번 포트가 host의 8443 포트로 포워딩



yaml 파일 작성

#web-notls.yml
---
- name: Configure webserver with nginx
  hosts: webservers # 타깃이 된다
  become: True
  tasks: # 밑으로 내려가면서 차례대로 실행됨
    - name: install nginx
      apt: name=nginx update_cache=yes # apt(우분투 패키지 관리) 모듈을 사용함

    - name: copy nginx config file
      copy: src=files/nginx.conf dest=/etc/nginx/sites-available/default # copy 모듈을 사용하여 파일을 복사함

    - name: enable configuration
      file: > #src 경로에 있는파일을 원본으로 사용하고 dest경로에 심볼릭 링크를 만들게된다 이말은 nginx가 /etc/nginx/sites-enabled/default 디렉토리에서 설정 파일을 읽게된다.
        dest=/etc/nginx/sites-enabled/default 
        src=/etc/nginx/sites-available/default
        state=link

    - name: copy index.html 
      template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644 # template 모듈은 템플릿 파일을 생성하고 호스트에 복사

    - name: restart nginx
      service: name=nginx state=restarted
  • host
    • 실행할 서버를 지정한다.
  • name
    • 무슨 플레이를 하는지 설명하는 주석이다.
  • become
    • true인 경우 앤서블은 기본적으로 root 사용자로 작업을 실행한다.
  • task
    • 작업내용이다.

현재 위 플레이북은 5개의 태스크가 존재한다.

  • name: install nginx
    • apt: name=nginx update_cache=yes apt 명령어를 이용해서 nginx를 설치한다.
  • name: copy nginx config file
    • copy: src=files/nginx.conf dest=/etc/nginx/sites-available/default src 파일을 dest로 파일을 복사한다.
  • name: enable configuration
    • src 경로에 있는파일을 원본으로 사용하고 dest경로에 심볼릭 링크를 만들게된다 이말은 nginx가 /etc/nginx/sites-enabled/default디렉토리에서 설정 파일을 읽게된다.
  • name: copy index.html
    • index html 파일 복사
  • name: restart nginx
    • nginx 재시작



Nginx 설정파일 설정

#nginx.conf
server {
      listen 80 default_server;
      listen [::]:80 default_server ipv6only=on;

      root /usr/share/nginx/html; # 웹서버의 루트 디렉토리 지정
      index index.html index.htm; # 인덱스 파일을 지정

      server_name localhost; # 이 서버 블록이 수신할 요청의 호스트 이름을 지정

      location / {
              try_files $uri $uri/ =404; # /uri에 대한 요청을 처리하는 방식을 지정한다. 파일이 존재하지 않으면 404를 띄운다
      }
}



각 설정 파일들

  • nginx.conf


  • web-notls.yml


  • index.html.j2 → 웹서버를 접속하게 되면 화면에 출력될 html을 작성


웹 서버 그룹 생성

플레이북에서 webserver 그룹을 참조할 수 있도록 Inventory file에 그룹을 생성한다.

testserver는 webservers의 그룹에 있음을 나타낸다

플레이북 실행

$ ansible-playbook [yaml] 명령어를 이용해서 플레이북을 실행 할 수 있다.

호스트 상태 추적하기
모든 앤서블 태스크는 어떤 방법이 실행 되든지 게스트의 상태를 변경할 가능성이 있다.
게스트의 상태가 모듈의 매개변수와 일치하면 앤서블은 게스트에서 아무 액션도 수행하지 않고 OK상태로 응답하게 된다
또한 게스트의 상태와 모듈에 대한 매개변수 간에 차이가 있다면 앤서블은 게스트의 상태를 변경하고 리턴 값을 change로 변경한다

호스트컴퓨터(실제 사용중인 장치)에서 localhost:8080으로 접속하게 된다면 guest에 nginx웹서버로 접속이 가능하다.

profile
엔지니어로 살아남기

0개의 댓글

관련 채용 정보