웹사이트 검색

Ansible 역할을 사용하여 인프라 환경을 추상화하는 방법


소개

Ansible은 관리자 및 운영 팀을 위해 제어 서버를 자동화하도록 설계된 구성 관리 도구입니다. Ansible을 사용하면 단일 중앙 서버를 사용하여 SSH 및 Python을 유일한 요구 사항으로 사용하여 다양한 원격 시스템을 제어하고 구성할 수 있습니다.

Ansible은 작업 정의를 기반으로 관리하는 서버에서 작업을 수행합니다. 이러한 작업은 각 작업에 대해 작은 YAML 스니펫을 사용하여 기본 제공 및 커뮤니티 유지 Ansible 모듈을 호출합니다.

단일 Ansible 제어 노드로 관리하는 시스템의 수와 다양성이 더욱 복잡해짐에 따라 작업을 Ansible 플레이북으로 그룹화하는 것이 좋습니다. 플레이북을 사용하면 원격 시스템에서 많은 개별 작업을 실행할 필요가 없으며 대신 단일 파일로 전체 환경을 한 번에 구성할 수 있습니다.

그러나 플레이북은 각 시스템에 대한 여러 작업으로 여러 시스템을 구성해야 할 때 복잡해질 수 있으므로 Ansible을 사용하면 역할이라는 디렉토리 구조에서 작업을 구성할 수도 있습니다. 이 구성에서 플레이북은 작업 대신 역할을 호출하므로 여전히 작업을 함께 그룹화한 다음 다른 플레이북에서 역할을 재사용할 수 있습니다. 역할을 사용하면 하나의 구조화된 형식으로 작업과 함께 템플릿, 정적 파일 및 변수를 수집할 수도 있습니다.

이 자습서에서는 역할을 만드는 방법과 템플릿, 정적 파일 및 변수를 역할에 추가하는 방법을 살펴봅니다. 역할 구축의 기본 사항에 익숙해지면 Ansible Galaxy를 사용하여 커뮤니티 기여 역할을 플레이북에 통합합니다. 이 튜토리얼을 마치면 서버에 대한 고유한 환경별 역할을 생성하고 이를 고유한 플레이북에서 사용하여 하나 또는 여러 시스템을 관리할 수 있습니다.

전제 조건

이 튜토리얼을 따라하려면 Ansible 플레이북을 작성하는 방법을 알아야 합니다.

Ansible 역할이란 무엇입니까?

전제 조건 자습서에서 터미널에서 ansible 명령을 사용하여 핵심 Ansible 도구를 실행하는 방법을 배웠습니다. 또한 작업을 플레이북으로 수집하고 ansible-playbook 명령을 사용하여 실행하는 방법도 배웠습니다. 단일 명령 실행에서 작업, 플레이북으로 진행하는 다음 단계는 Ansible 역할을 사용하여 모든 것을 재구성하는 것입니다.

역할은 모듈식 및 재사용 가능한 형식으로 Ansible 구성을 구조화할 수 있는 작업 및 플레이북 위에 있는 추상화 수준입니다. 플레이북에 점점 더 많은 기능과 유연성을 추가함에 따라 다루기 힘들고 유지 관리가 어려워질 수 있습니다. 역할을 사용하면 복잡한 플레이북을 중앙 진입점에서 조정할 수 있는 별도의 더 작은 청크로 나눌 수 있습니다. 예를 들어, 이 튜토리얼에서 작업할 전체 playbook.yml은 다음과 같습니다.

  1. ---
  2. - hosts: all
  3. become: true
  4. roles:
  5. - apache
  6. vars:
  7. doc_root: /var/www/example

Apache 웹 서버를 구성하기 위해 수행할 전체 작업 집합은 우리가 생성할 apache 역할에 포함됩니다. 롤은 구성 관리 101: Ansible 플레이북 작성 전제 조건에서 수행한 것처럼 각 작업을 개별적으로 나열하는 대신 Apache를 설치하기 위해 완료해야 하는 모든 작업을 정의합니다.

Ansible 설정을 역할로 구성하면 서로 다른 유형의 서버 간에 공통 구성 단계를 재사용할 수 있습니다. 단일 플레이북에 여러 작업 파일을 포함하는 것도 가능하지만 역할은 알려진 디렉터리 구조와 파일 이름 규칙에 의존하여 플레이 내에서 사용될 파일을 자동으로 로드합니다.

일반적으로 역할 이면의 아이디어는 일관된 구조를 사용하여 작업을 공유하고 재사용할 수 있도록 하는 동시에 모든 인프라에 대한 작업을 복제하지 않고 쉽게 유지 관리할 수 있도록 하는 것입니다.

역할 생성

Ansible 역할을 생성하려면 구체적으로 배치된 디렉토리 구조가 필요합니다. 역할은 Ansible이 찾고 사용할 수 있도록 항상 이 디렉토리 레이아웃이 필요합니다.

여기에서는 사용자의 홈 디렉토리를 Ansible 작업 디렉토리로 사용했다고 가정합니다. Ansible 구성을 다른 위치에 보관하는 경우 해당 디렉토리로 변경(cd)해야 합니다.

시작하려면 roles라는 디렉터리를 생성해 보겠습니다. Ansible은 이 튜토리얼의 뒷부분에서 플레이북에서 새로운 역할을 사용하려고 할 때 여기를 볼 것입니다.

  1. cd ~
  2. mkdir roles
  3. cd roles

이 디렉터리 내에서 여러 플레이북과 다른 서버에서 재사용할 수 있는 역할을 정의합니다. 생성할 각 역할에는 자체 디렉터리가 필요합니다. Configuration Management 101: Writing Ansible Playbooks 자습서에서 예제 Apache 플레이북을 가져와서 재사용 가능한 Ansible 역할로 전환할 것입니다.

참고로 다음은 해당 튜토리얼의 플레이북입니다.

  1. ---
  2. - hosts: all
  3. become: true
  4. vars:
  5. doc_root: /var/www/example
  6. tasks:
  7. - name: Update apt
  8. apt: update_cache=yes
  9. - name: Install Apache
  10. apt: name=apache2 state=latest
  11. - name: Create custom document root
  12. file: path={{ doc_root }} state=directory owner=www-data group=www-data
  13. - name: Set up HTML file
  14. copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
  15. - name: Set up Apache virtual host file
  16. template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
  17. notify: restart apache
  18. handlers:
  19. - name: restart apache
  20. service: name=apache2 state=restarted

먼저 역할에 대한 Apache 디렉토리를 생성하고 필요한 디렉토리로 채웁니다.

  1. mkdir apache
  2. cd apache

다음으로 콘텐츠를 역할로 사용해야 함을 Ansible에 알리는 필수 하위 디렉터리 세트를 생성합니다. mkdir 명령을 사용하여 다음 디렉토리를 생성합니다.

  1. mkdir defaults files handlers meta templates tasks vars

이 디렉토리에는 역할을 구현하는 모든 코드가 포함됩니다. 많은 역할은 관련된 작업의 복잡성에 따라 이러한 디렉터리 중 하나 또는 몇 개만 사용합니다. 자신의 역할을 작성할 때 이러한 디렉토리를 모두 생성할 필요는 없습니다.

다음은 각 디렉토리가 나타내는 내용에 대한 설명입니다.

  • defaults: 이 디렉토리를 사용하면 포함되거나 종속된 역할에 대한 기본 변수를 설정할 수 있습니다. 여기에 설정된 모든 기본값은 플레이북 또는 인벤토리 파일에서 재정의할 수 있습니다.
  • files: 이 디렉토리에는 원격 서버에 복사하거나 실행할 수 있는 정적 파일 및 스크립트 파일이 포함되어 있습니다.
  • handlers: 이전에 플레이북에 있던 모든 핸들러를 이제 이 디렉토리에 추가할 수 있습니다.
  • meta: 이 디렉토리는 일반적으로 종속성 관리에 사용되는 역할 메타데이터용으로 예약되어 있습니다. 예를 들어 현재 역할이 호출되기 전에 적용해야 하는 역할 목록을 정의할 수 있습니다.
  • templates: 이 디렉토리는 원격 호스트에서 파일을 생성할 템플릿용으로 예약되어 있습니다. 템플릿은 일반적으로 vars 디렉토리에 있는 파일과 런타임 시 수집되는 호스트 정보에 정의된 변수를 사용합니다.
  • tasks: 이 디렉토리에는 일반적으로 일반 Ansible 플레이북의 tasks 섹션에 정의되는 작업이 포함된 하나 이상의 파일이 포함되어 있습니다. 이러한 작업은 파일에 대한 전체 경로를 제공할 필요 없이 역할 내의 해당 디렉터리에 포함된 파일 및 템플릿을 직접 참조할 수 있습니다.
  • vars: 역할에 대한 변수는 이 디렉토리 내의 파일에 지정된 다음 역할의 다른 위치에서 참조될 수 있습니다.

main.yml이라는 파일이 디렉터리에 있으면 해당 콘텐츠가 역할을 호출하는 플레이북에 자동으로 추가됩니다. 그러나 filestemplates 디렉토리에는 내용을 명시적으로 참조해야 하므로 이는 적용되지 않습니다.

플레이북을 역할로 전환

이제 Ansible 역할의 각 디렉토리가 사용되는 용도에 익숙해졌으므로 Apache 플레이북을 역할로 전환하여 상황을 더 잘 구성할 것입니다.

마지막 섹션에서 설정한 roles/apache2/{subdirectories} 구조가 이미 있어야 합니다. 이제 역할을 정의하기 위해 일부 YAML 파일을 생성해야 합니다.

작업 main.yml 파일 만들기

작업 하위 디렉터리부터 시작하겠습니다. 지금 해당 디렉터리로 이동합니다.

  1. cd ~/roles/apache/tasks

이 디렉토리에 main.yml 파일을 생성해야 합니다. Apache 플레이북의 전체 콘텐츠로 채운 다음 작업만 포함하도록 편집합니다.

  1. nano main.yml

시작할 때 파일은 다음과 같아야 합니다.

  1. ---
  2. - hosts: all
  3. become: true
  4. vars:
  5. doc_root: /var/www/example
  6. tasks:
  7. - name: Update apt
  8. apt: update_cache=yes
  9. - name: Install Apache
  10. apt: name=apache2 state=latest
  11. - name: Create custom document root
  12. file: path={{ doc_root }} state=directory owner=www-data group=www-data
  13. - name: Set up HTML file
  14. copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
  15. - name: Set up Apache virtual host file
  16. template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
  17. notify: restart apache
  18. handlers:
  19. - name: restart apache
  20. service: name=apache2 state=restarted

첫 번째 --- 줄과 강조 표시된 tasks 섹션의 줄만 유지하려고 합니다. 작업 왼쪽에 있는 불필요한 공간을 제거할 수도 있습니다. 또한 이 자습서의 뒷부분에서 구성할 modsecurity라는 Apache 모듈을 활성화하는 새 섹션을 추가합니다. 이러한 변경 후 새 ~/roles/apache/tasks/main.yml 파일은 다음과 같습니다.

  1. ---
  2. - name: Update apt
  3. apt: update_cache=yes
  4. - name: Install Apache
  5. apt: name=apache2 state=latest
  6. - name: Create custom document root
  7. file: path={{ doc_root }} state=directory owner=www-data group=www-data
  8. - name: Set up HTML file
  9. copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
  10. - name: Set up Apache virtual host file
  11. template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
  12. notify: restart apache

이제 작업 파일에는 Apache 역할을 사용할 때 수행되는 실제 단계만 포함되어 있으므로 작업 파일을 더 쉽게 따르고 이해할 수 있습니다.

copytemplate 행이 참조를 위해 각각 src=index.htmlsrc=vhost.tpl을 사용하는 방법에 유의하십시오. 이전 경로 없이 우리 역할의 파일. 우리 역할의 디렉토리 구조는 파일과 템플릿을 이름으로 직접 참조할 수 있게 해주며 Ansible이 자동으로 찾아줍니다.

편집을 마치면 파일을 저장하고 닫으십시오.

핸들러 main.yml 파일 만들기

이제 tasks/main.yml 파일에 대부분의 플레이북이 있으므로 핸들러 섹션을 handlers/main.yml에 있는 파일로 이동해야 합니다.

먼저 우리 역할의 handlers 하위 디렉토리로 cd하십시오.

  1. cd ~/roles/apache/handlers

다시 텍스트 편집기에서 파일을 열고 원본 playbook.yml의 전체 콘텐츠를 붙여넣습니다.

  1. nano main.yml

유지해야 하는 부분이 다시 강조 표시됩니다.

  1. ---
  2. - hosts: all
  3. become: true
  4. vars:
  5. doc_root: /var/www/example
  6. tasks:
  7. - name: Update apt
  8. apt: update_cache=yes
  9. - name: Install Apache
  10. apt: name=apache2 state=latest
  11. - name: Create custom document root
  12. file: path={{ doc_root }} state=directory owner=www-data group=www-data
  13. - name: Set up HTML file
  14. copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
  15. - name: Set up Apache virtual host file
  16. template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
  17. notify: restart apache
  18. handlers:
  19. - name: restart apache
  20. service: name=apache2 state=restarted

핸들러 앞의 공백도 제거하십시오. 결국 파일은 다음과 같아야 합니다.

---
- name: restart apache
  service: name=apache2 state=restarted

완료되면 파일을 저장하고 닫습니다.

파일 및 템플릿 추가

작업과 핸들러가 준비되었으므로 다음 단계는 Ansible이 찾을 수 있도록 index.html 파일과 vhost.tpl 템플릿이 있는지 확인하는 것입니다. 원격 서버에 배치합니다. tasks/main.yml 파일에서 이러한 파일을 참조했으므로 이러한 파일이 존재해야 합니다. 그렇지 않으면 Ansible이 역할을 제대로 실행할 수 없습니다.

먼저 ~/roles/apache/files 디렉토리에 index.html 파일을 만듭니다.

  1. cd ~/roles/apache/files
  2. nano index.html

다음을 편집기에 붙여넣은 다음 저장하고 닫습니다.

<html>
<head><title>Configuration Management Hands On</title></head>

<h1>This server was provisioned using <strong>Ansible</strong></h1>

</html>

다음으로 vhost.tpl 템플릿을 편집합니다. 템플릿 디렉토리로 변경하고 nano로 파일을 편집합니다.

  1. cd ~/roles/apache/templates
  2. nano vhost.tpl

다음 줄을 편집기에 붙여넣은 다음 저장하고 닫습니다.

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot {{ doc_root }}

<Directory {{ doc_root }}>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

메타 디렉토리

역할이 다른 역할에 의존하는 경우 main.yml이라는 meta 디렉토리에 파일을 추가할 수 있습니다. 이 파일은 이 역할이 "apt\라는 역할에 종속된다고 지정할 수 있습니다. 우리가 만든 Apache 역할에는 종속성이 필요하지 않습니다. 그러나 "apt\와 같은 다른 역할이 필요한 가상의 경우 파일은 ~/roles/apache/meta/main.yml에서 다음과 같이 보일 수 있습니다.

---
dependencies:
  - apt

이렇게 하면 "apt\ 역할이 Apache 역할보다 먼저 실행됩니다. 이와 같은 종속성을 생성하는 것은 실제 역할을 실행하기 전에 다른 소프트웨어 또는 구성이 있어야 하는 보다 복잡한 역할에 유용합니다.

Vars 디렉토리

앞에서 역할에 대한 변수를 설정하는 데 사용할 수 있는 "vars\ 디렉토리가 있다고 말했습니다. vars/main.yml 파일을 통해 역할에 대한 기본 매개변수를 구성할 수 있지만, 이것은 일반적으로 작은 역할에는 권장되지 않습니다.

"vars\ 디렉토리를 사용하지 않는 이유는 구성 세부 정보가 역할 계층 구조에 상주하기 때문입니다. 역할은 대부분 일반 작업 및 종속성인 반면 변수는 구성 데이터입니다. 이 둘을 결합하면 다른 곳에서 역할.

대신 중요한 정보 노출에 대한 걱정 없이 역할을 쉽게 공유할 수 있도록 역할 외부에 구성 세부 정보를 지정하는 것이 좋습니다. 또한 역할 내에서 선언된 변수는 다른 위치의 변수로 쉽게 재정의됩니다. 특정 작업에 사용되는 플레이북에 변수 데이터를 배치하는 것이 훨씬 좋습니다.

그러나 "vars\ 디렉터리는 더 복잡한 역할에 유용하기 때문에 여기에서 여전히 언급할 가치가 있습니다. 예를 들어 역할이 다른 Linux 배포판을 지원해야 하는 경우 변수에 대한 기본값을 지정하면 다른 패키지 이름, 버전을 처리하는 데 유용할 수 있습니다. , 및 구성.

다른 파일 포함

작업, 종속성 또는 조건부 논리가 많은 역할을 만들면 역할이 커지고 이해하기 어려워지는 경우가 있습니다. 이와 같은 상황에서 작업을 자체 파일로 분할하고 tasks/main.yml에 포함할 수 있습니다.

예를 들어 Apache 서버에 대해 TLS를 구성하기 위한 추가 작업 집합이 있는 경우 해당 작업을 자체 파일로 분리할 수 있습니다. tasks/tls.yml 파일을 호출하고 tasks/main.yml 파일에 다음과 같이 포함할 수 있습니다.

. . .
tasks:
- include: roles/apache/tasks/tls.yml

스켈레톤 플레이북 만들기

이제 역할 구조를 구성했으므로 이 자습서 시작 부분의 모놀리식 버전과 비교하여 최소한의 플레이북으로 사용할 수 있습니다.

이러한 방식으로 역할을 사용하면 플레이북을 사용하여 작업 생성을 항상 반복하지 않고도 서버가 수행해야 할 작업을 선언할 수 있습니다.

Apache 역할을 포함하는 최소 플레이북을 만들려면 역할 디렉터리(이 예에서는 홈 디렉터리)에서 cd합니다. 이제 플레이북 파일을 만들 수 있습니다.

  1. cd ~
  2. nano playbook.yml

파일이 열리면 다음을 붙여넣고 파일을 저장하고 닫습니다.

---
- hosts: all
  become: true
  roles:
    - apache
  vars:
    - doc_root: /var/www/example

이 파일에는 필요한 정보가 거의 없습니다. 먼저 이 역할을 실행할 서버를 나열하므로 - hosts: all을 사용합니다. webservers라는 호스트 그룹이 있는 경우 대신 대상으로 지정할 수 있습니다. 다음으로 사용 중인 역할을 선언합니다. 이 경우에는 하나만 있으므로 -apache 행을 사용합니다.

이것은 우리의 전체 플레이북입니다. 매우 작고 빠르게 읽고 이해할 수 있습니다. 이와 같이 플레이북을 깔끔하게 유지하면 개별 작업의 메커니즘 대신 서버 구성의 전반적인 목표에 집중할 수 있습니다. 더 좋은 점은 역할 요구 사항이 여러 개인 경우 이제 플레이북의 역할 섹션 아래에 나열할 수 있고 나타나는 순서대로 실행된다는 것입니다.

예를 들어 Apache 및 MySQL을 사용하여 WordPress 서버를 설정하는 역할이 있는 경우 다음과 같은 플레이북이 있을 수 있습니다.

---
- hosts: wordpress_hosts
  become: true
  roles:
    - apache
    - php
    - mysql
    - wordpress
  vars:
    - doc_root: /var/www/example

이 플레이북 구조를 통해 우리는 원하는 서버의 모습을 매우 간결하게 파악할 수 있습니다. 마지막으로, 플레이북은 역할을 호출하므로 우리를 실행하는 명령은 모든 것이 단일 파일에 있는 것과 정확히 동일합니다.

  1. ansible-playbook playbook.yml
Output
PLAY [all] ****************************************************************************************** TASK [Gathering Facts] ****************************************************** ok: [64.225.15.1] TASK [apache : Update apt] ************************************************** ok: [64.225.15.1] TASK [apache : Install Apache] ********************************************** changed: [64.225.15.1] TASK [apache : Create custom document root] ********************************* changed: [64.225.15.1] TASK [apache : Set up HTML file] ******************************************** changed: [64.225.15.1] TASK [apache : Set up Apache virtual host file] ***************************** changed: [64.225.15.1] RUNNING HANDLER [apache : restart apache] *********************************** changed: [64.225.15.1] PLAY RECAP ****************************************************************** 64.225.15.1 : ok=7 changed=5 unreachable=0 failed=0

예를 들어 playbook.yml 파일 apache.yml을 호출하여 파일 이름에 포함된 역할을 반영할 수도 있습니다.

앤서블 갤럭시

Ansible 역할에 대한 자습서는 직접 작성하지 않고도 다양한 작업을 수행하기 위해 플레이북에 추가할 수 있는 사용자 기여 역할의 저장소인 Galaxy를 통해 사용 가능한 리소스를 탐색하지 않고는 완료되지 않습니다.

예를 들어 mod_security2라는 유용한 Apache 모듈을 플레이북에 추가하여 일부 추가 보안 설정으로 Apache를 구성할 수 있습니다. apache_modsecurity라는 Ansible Galaxy 역할을 사용합니다. 이 역할을 사용하기 위해 로컬로 다운로드한 다음 플레이북에 포함합니다.

먼저 ansible-galaxy 도구에 익숙해지도록 합시다. 도구를 사용하여 Galaxy를 검색한 다음 검색 명령에서 반환된 목록에서 역할을 선택합니다.

  1. ansible-galaxy search "PHP for RedHat/CentOS/Fedora/Debian/Ubuntu"

검색 명령은 다음과 같이 출력됩니다.

Output
Found 21 roles matching your search: Name Description ---- ----------- alikins.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. bpresles.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. entanet_devops.ansible_role_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. esperdyne.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. fidanf.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. frogasia.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. geerlingguy.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. icamys.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. jhu-sheridan-libraries.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. jibsan94.ansible_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. KAMI911.ansible_role_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. monsieurbiz.geerlingguy_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. nesh-younify.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. net2grid.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. thom8.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. v0rts.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. vahubert.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. Vaizard.mage_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. viasite-ansible.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. vvgelder.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu. (END)

Ansible은 less 명령을 사용하여 결과가 많은 경우 검색 결과를 출력합니다. 그러면 q를 눌러 종료할 때까지 터미널이 차단됩니다. 이는 검색 결과가 광범위하고 공백을 눌러 페이지를 매길 필요가 있을 때 유용합니다.

플레이북의 역할 geerlingguy.php를 선택하겠습니다. 검색 결과에 반환된 역할에 대해 자세히 알아보려면 Galaxy 검색 페이지를 방문하여 자세히 알아보고 싶은 역할 이름을 붙여넣으세요.

플레이북에서 사용할 역할을 다운로드하려면 ansible-galaxy install 명령을 사용합니다.

  1. ansible-galaxy install geerlingguy.php

해당 명령을 실행하면 다음과 같은 출력이 표시됩니다.

Output
- downloading role 'php', owned by geerlingguy - downloading role from https://github.com/geerlingguy/ansible-role-php/archive/3.7.0.tar.gz - extracting geerlingguy.php to /home/sammy/.ansible/roles/geerlingguy.php - geerlingguy.php (3.7.0) was installed successfully

이제 playbook.yml 파일에 역할을 추가할 수 있습니다.

---
- hosts: all
  become: true
  roles:
    - apache
    - geerlingguy.php
  vars:
    - doc_root: /var/www/example
    - php_default_version_debian: "7.2"

apache 역할 뒤에 역할을 배치하여 geerlingguy.php 역할 배치에 대한 구성 전에 Apache가 원격 시스템에 설정 및 구성되도록 합니다. 원격 서버의 동작 방식에 따라 원하는 순서로 mysqlwordpress 역할을 포함할 수도 있습니다.

추가된 Galaxy 역할로 ansible-playbook playbook.yml을 실행하면 다음과 같은 결과가 출력됩니다.

Output
PLAY [all] ********************************************************************* TASK [Gathering Facts] ********************************************************* ok: [64.225.15.1] TASK [apache : Update apt] ***************************************************** changed: [64.225.15.1] TASK [apache : Install Apache] ************************************************* changed: [64.225.15.1] TASK [apache : Install modsecurity] ******************************************** changed: [64.225.15.1] TASK [apache : Create custom document root] ************************************ changed: [64.225.15.1] TASK [apache : Set up HTML file] *********************************************** changed: [64.225.15.1] TASK [apache : Set up Apache virtual host file] ******************************** changed: [64.225.15.1] TASK [geerlingguy.php : Include OS-specific variables.] ************************ ok: [64.225.15.1] TASK [geerlingguy.php : Define php_packages.] ********************************** ok: [64.225.15.1] . . . PLAY RECAP ********************************************************************* 64.225.15.1 : ok=37 changed=15 unreachable=0 failed=0 (END)

결론

Ansible 역할은 서버의 모양을 구성하고 정의하는 훌륭한 방법입니다. 각 서버에 대한 플레이북에만 의존할 수 있더라도 이를 사용하는 방법을 배우는 것은 가치가 있습니다. Ansible을 광범위하게 사용하려는 경우 역할은 호스트 수준 구성을 작업과 별도로 유지하고 Ansible 코드가 깨끗하고 읽기 쉬운지 확인합니다. 가장 중요한 것은 역할을 통해 코드를 쉽게 재사용 및 공유하고 제어된 모듈식 방식으로 변경 사항을 구현할 수 있습니다.