Ansible 사용 방법: 참조 가이드

소개

Ansible는 원격 서버를 설정하고 유지하는 작업을 용이하게 하는 현대적인 구성 관리 도구입니다.

이 치트 시트 스타일의 가이드는 Ansible을 사용할 때 자주 사용되는 명령 및 관행에 대한 빠른 참고 자료를 제공합니다. Ansible을 설치하고 구성하는 방법에 대한 개요 및 안내는 우분투 20.04에 Ansible을 설치하고 구성하는 방법을 확인하십시오. Ansible을 우분투 20.04에 설치하고 구성하는 방법으로.

이 가이드 사용 방법:

  • 이 가이드는 자체 포함 된 명령 줄 스니펫으로 치트 시트 형식입니다.
  • 완료하려는 작업과 관련된 섹션으로 이동하십시오.
  • 이 가이드의 명령에서 강조된 텍스트를 보면 해당 텍스트는 귀하의 인벤토리에서 호스트, 사용자 이름 및 IP 주소를 참조해야 함을 기억하십시오.

Ansible 용어 해설

이 가이드 전반에 걸쳐 주로 사용되는 다음 Ansible 특정 용어가 있습니다:

  • 제어 머신 / 노드: Ansible이 설치되어 구성되어 있으며 노드에서 명령을 실행하고 연결하는 시스템입니다.
  • 노드: Ansible에 의해 제어되는 서버입니다.
  • 인벤토리 파일: 보통 /etc/ansible/hosts에 위치한, Ansible이 제어하는 서버에 관한 정보를 포함하는 파일입니다.
  • 플레이북: 원격 서버에서 실행할 일련의 작업을 포함하는 파일입니다.
  • : 웹 서버를 설치하는 등의 목표와 관련된 플레이북 및 기타 파일의 모음입니다.
  • 플레이: 완전한 Ansible 실행입니다. 플레이는 여러 플레이북과 롤을 가질 수 있으며, 하나의 플레이북에서 포함되는 하나의 플레이북을 작업 진입점으로 사용합니다.

실제로 이러한 명령어를 사용한 예제를 보려면, Ubuntu 20.04에서 초기 서버 설정을 자동화하는 방법에 대한 가이드를 참조하십시오. 노드로 사용할 적어도 하나의 원격 서버가 필요합니다.

노드에 대한 연결 테스트

Ansible이 노드에 연결하고 명령 및 플레이북을 실행할 수 있는지 테스트하려면 다음 명령을 사용할 수 있습니다:

  1. ansible all -m ping

ping 모듈은 인벤토리 파일에 정의된 노드에 연결할 유효한 자격 증명이 있는지 테스트하고, 또한 원격 서버에서 Python 스크립트를 실행할 수 있는지 테스트합니다. pong 응답은 Ansible이 해당 노드에서 명령 및 플레이북을 실행할 준비가 되어 있다는 것을 의미합니다.

다른 사용자로 연결하기

기본적으로 Ansible은 현재 시스템 사용자로 노드에 연결을 시도하며 해당하는 SSH 키페어를 사용합니다. 다른 사용자로 연결하려면 명령에 -u 플래그와 의도한 사용자의 이름을 추가하십시오:

  1. ansible all -m ping -u sammy

동일한 것이 ansible-playbook에도 적용됩니다:

  1. ansible-playbook myplaybook.yml -u sammy

사용자 정의 SSH 키 사용하기

원격 서버에 연결하는 데 사용자 정의 SSH 키를 사용하는 경우 실행 시 --private-key 옵션으로 제공할 수 있습니다:

  1. ansible all -m ping --private-key=~/.ssh/custom_id

이 옵션은 ansible-playbook에도 적용됩니다:

  1. ansible-playbook myplaybook.yml --private-key=~/.ssh/custom_id

비밀번호 기반 인증 사용하기

노드에 연결하기 위해 비밀번호 기반 인증을 사용해야 하는 경우 Ansible 명령에 옵션 --ask-pass를 추가해야 합니다.

이렇게 하면 Ansible이 원격 서버의 사용자 암호를 요청합니다:

  1. ansible all -m ping --ask-pass

이 옵션은 ansible-playbook에도 유효합니다:

  1. ansible-playbook myplaybook.yml --ask-pass

sudo 비밀번호 제공

원격 사용자가 sudo 명령을 실행하기 위해 비밀번호를 제공해야 하는 경우, Ansible 명령에 옵션 --ask-become-pass를 포함할 수 있습니다. 이렇게 하면 원격 사용자에게 sudo 비밀번호를 제공하라는 프롬프트가 나타납니다:

  1. ansible all -m ping --ask-become-pass

이 옵션은 ansible-playbook에도 유효합니다:

  1. ansible-playbook myplaybook.yml --ask-become-pass

사용자 지정 인벤토리 파일 사용

기본 인벤토리 파일은 일반적으로 /etc/ansible/hosts에 위치하지만, Ansible 명령 및 플레이북을 실행할 때 사용자 지정 인벤토리 파일을 가리키는 데 -i 옵션을 사용할 수도 있습니다. Ansible은 또한 인벤토리가 자주 변동되는 경우를 위해 동적 인벤토리 파일을 작성하는 데 사용되는 인벤토리 스크립트를 지원합니다. 사용자 지정 인벤토리 파일은 Git과 같은 버전 관리 시스템에 포함될 수 있는 프로젝트별 인벤토리를 설정하는 데 유용합니다:

  1. ansible all -m ping -i my_custom_inventory

ansible-playbook에 대해서도 동일한 옵션이 유효합니다:

  1. ansible-playbook myplaybook.yml -i my_custom_inventory

임시 명령 실행

노드에서 명령을 실행하려면 따옴표 안에 실행하려는 명령 뒤에 오는 -a 옵션을 사용하십시오.

다음은 인벤토리의 모든 노드에서 uname -a를 실행하는 것입니다:

  1. ansible all -a "uname -a"
  1. ansible server1 -m apt -a "name=vim"

옵션 -m과 함께 Ansible 모듈을 실행할 수도 있습니다. 다음 명령은 인벤토리의 server1에 패키지 vim을 설치합니다:노드를 변경하기 전에 명령이 서버에 영향을 미칠 것으로 예측하려면 --check 옵션을 포함하여 시행할 수 있습니다:

  1. ansible server1 -m apt -a "name=vim" --check

플레이북 실행

플레이북을 실행하고 그 안에 정의된 모든 작업을 실행하려면 ansible-playbook 명령을 사용하십시오:

  1. ansible-playbook myplaybook.yml

플레이북에서 기본 hosts 옵션을 덮어쓰고 특정 그룹 또는 호스트로 실행을 제한하려면 명령에 옵션 -l을 포함하십시오:

  1. ansible-playbook -l server1 myplaybook.yml

연극에 대한 정보 얻기

옵션 --list-tasks는 원격 서버에 대한 어떠한 변경도 수행하지 않고 플레이에 의해 실행될 모든 작업을 나열하는 데 사용됩니다:

  1. ansible-playbook myplaybook.yml --list-tasks

마찬가지로 원격 서버에서 어떠한 작업도 실행하지 않고 플레이에 영향을 받을 수 있는 모든 호스트를 나열할 수 있습니다:

  1. ansible-playbook myplaybook.yml --list-hosts

플레이의 실행을 제어하기 위해 태그를 사용할 수 있습니다. 플레이에서 사용 가능한 모든 태그를 나열하려면 옵션 --list-tags를 사용하십시오:

  1. ansible-playbook myplaybook.yml --list-tags

플레이북 실행 제어

플레이북의 새로운 시작점을 정의하기 위해 옵션 --start-at-task를 사용할 수 있습니다. 그러면 Ansible은 지정된 작업 이전에 오는 모든 것을 건너뛰고 나머지를 해당 지점부터 실행할 것입니다. 이 옵션은 유효한 작업 이름을 인수로 필요로 합니다:

  1. ansible-playbook myplaybook.yml --start-at-task="Set Up Nginx"

특정 태그와 관련된 작업만 실행하려면 옵션 --tags를 사용할 수 있습니다. 예를 들어 nginx 또는 mysql로 태그가 지정된 작업만 실행하려면 다음을 사용할 수 있습니다:

  1. ansible-playbook myplaybook.yml --tags=mysql,nginx

특정 태그 아래에 있는 모든 작업을 건너뛰려면 --skip-tags를 사용하십시오. 다음 명령은 myplaybook.yml을 실행하고 mysql으로 태그된 모든 작업을 건너뛸 것입니다:

  1. ansible-playbook myplaybook.yml --skip-tags=mysql

민감한 데이터 저장을 위한 Ansible Vault 사용

Ansible 플레이북이 비밀번호, API 키 및 자격 증명과 같은 민감한 데이터를 다룬다면 해당 데이터를 암호화 메커니즘을 사용하여 안전하게 보관하는 것이 중요합니다. Ansible은 파일과 변수를 암호화하기 위해 ansible-vault를 제공합니다.

앤서블 데이터 파일 및 바이너리 파일을 모두 암호화할 수 있지만, 민감한 데이터를 포함하는 변수 파일을 암호화하는 것이 더 일반적입니다. 이 도구로 파일을 암호화한 후에는 해당 파일을 처음 암호화할 때 정의한 관련 암호를 제공하여 파일의 내용을 실행하거나 편집하거나 볼 수 있습니다.

새로운 암호화된 파일 생성

다음 명령을 사용하여 새로운 암호화된 Ansible 파일을 생성할 수 있습니다:

  1. ansible-vault create credentials.yml

이 명령은 다음 동작을 수행합니다:

  • 먼저, 새로운 암호를 입력하라는 메시지가 표시됩니다. 파일 내용에 액세스할 때마다이 암호를 제공해야 합니다. 편집, 보기 또는 해당 값 사용하여 플레이북 또는 명령을 실행하는 경우 모두 해당됩니다.
  • 다음으로, 기본 명령줄 편집기를 열어서 원하는 내용으로 파일을 채울 수 있습니다.
  • 마지막으로 편집을 마치면 ansible-vault가 파일을 암호화된 데이터로 저장합니다.

기존 Ansible 파일 암호화

기존의 Ansible 파일을 암호화하려면 다음 구문을 사용할 수 있습니다:

  1. ansible-vault encrypt credentials.yml

이렇게 하면 credentials.yml 파일에 액세스할 때마다 암호를 입력하라는 메시지가 표시됩니다.

암호화된 파일 내용 보기

이전에 ansible-vault로 암호화된 파일의 내용을 보려는 경우 내용을 변경할 필요가 없습니다. 다음을 사용할 수 있습니다:

  1. ansible-vault view credentials.yml

이렇게 하면 처음으로 파일을 ansible-vault로 암호화할 때 선택한 암호를 제공하라는 메시지가 표시됩니다.

암호화된 파일 편집

이전에 Ansible Vault로 암호화된 파일의 내용을 편집하려면 다음을 실행하십시오:

  1. ansible-vault edit credentials.yml

이렇게 하면 파일 credentials.yml을(를) 처음에 ansible-vault로 암호화할 때 선택한 암호를 제공하라는 프롬프트가 나타납니다. 암호 확인 후에는 기본 명령줄 편집기가 파일의 암호 해제된 내용으로 열립니다. 원하는 변경 사항을 수행할 수 있습니다. 작업을 마치면 파일을 보통처럼 저장하고 닫으면 업데이트된 내용이 암호화된 데이터로 저장됩니다.

암호 해독된 암호화된 파일

이전에 ansible-vault로 암호화된 파일을 영구적으로 원래의 암호 해독된 버전으로 되돌리려면 다음 구문을 사용할 수 있습니다:

  1. ansible-vault decrypt credentials.yml

이렇게 하면 파일 credentials.yml을(를) 처음에 ansible-vault로 암호화할 때 사용한 동일한 암호를 제공하라는 프롬프트가 나타납니다. 암호 확인 후에 파일 내용이 디스크에 암호 해독되지 않은 데이터로 저장됩니다.

여러 보안 비밀번호 사용하기

앤서블은 다른 보안 비밀번호를 그룹화된 다른 보안 ID로 지원합니다. 이것은 개발, 테스트 및 프로덕션 환경과 같이 다른 환경에 대해 전용 보안 비밀번호를 원하는 경우 유용합니다.

사용자 정의 보안 ID를 사용하여 새로운 암호화된 파일을 생성하려면 --vault-id 옵션을 포함하고 라벨과 해당 보안의 비밀번호를 찾을 수 있는 위치를 포함하십시오. 라벨은 모든 식별자가 될 수 있으며 위치는 비밀번호를 입력하라는 명령을 프롬프트하거나 비밀번호 파일의 유효한 경로일 수 있습니다.

  1. ansible-vault create --vault-id dev@prompt credentials_dev.yml

이렇게 하면 prompt를 비밀번호 소스로 사용하는 dev라는 새 보안 ID가 생성됩니다. 이 방법을 그룹 변수 파일과 결합하여 각 응용 프로그램 환경마다 별도의 앤서블 보안을 갖게 됩니다:

  1. ansible-vault create --vault-id prod@prompt credentials_prod.yml

우리는 다른 환경마다 별도의 보안을 생성하는 방법을 보여주기 위해 devprod를 보안 ID로 사용했지만, 원하는 만큼 많은 보안을 생성할 수 있으며, 보안 ID로 선택한 식별자를 사용할 수 있습니다.

이제 이러한 파일을 보려면, 편집하거나 해독하려면, 동일한 보안 ID 및 비밀번호 소스를 ansible-vault 명령과 함께 제공해야합니다:

  1. ansible-vault edit credentials_dev.yml --vault-id dev@prompt

비밀번호 파일 사용

서버 프로비저닝 프로세스를 Ansible을 사용하여 서드파티 도구로 자동화해야 하는 경우, 프롬프트에서 물어보지 않고 볼트 비밀번호를 제공해야 합니다. 이를 위해 ansible-vault와 함께 비밀번호 파일을 사용할 수 있습니다.

A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.

ansible-vault와 함께 비밀번호 파일을 사용하려면 볼트 명령을 실행할 때 비밀번호 파일의 경로를 제공해야 합니다:

  1. ansible-vault create --vault-id dev@path/to/passfile credentials_dev.yml

Ansible은 입력 비밀번호가 동일한 경우 prompt 또는 비밀번호 파일을 사용하여 암호화된 콘텐츠 사이에 구분을 지지 않습니다. 실제적으로, 이는 파일을 prompt를 사용하여 암호화하고 나중에 동일한 비밀번호를 사용하여 비밀번호 파일에 저장할 때 괜찮다는 것을 의미합니다. 그 반대도 마찬가지입니다: 비밀번호 파일을 사용하여 콘텐츠를 암호화한 다음 나중에 Ansible에 의해 프롬프트에서 동일한 비밀번호를 제공하여 prompt 방법을 사용할 수 있습니다.

확장된 유연성과 보안을 위해 볼트 비밀번호를 평문 파일에 저장하는 대신 Python 스크립트를 사용하여 다른 소스에서 비밀번호를 가져올 수 있습니다. 공식 Ansible 저장소에는 프로젝트의 특정 요구에 맞는 사용자 정의 스크립트를 작성할 때 참고할 수 있는 몇 가지 볼트 스크립트 예제가 포함되어 있습니다. 몇 가지 볼트 스크립트 예제를 참고하여 사용자 정의 스크립트를 만들 수 있습니다.

Ansible Vault를 통해 암호화된 데이터를 사용하여 Playbook 실행

이전에 ansible-vault를 사용하여 암호화된 데이터를 사용하는 Playbook를 실행할 때마다 Playbook 명령에 보안 자격 증명을 제공해야 합니다.

이 Playbook에 사용된 데이터를 암호화할 때 기본 옵션과 prompt 암호 소스를 사용했다면 옵션 --ask-vault-pass를 사용하여 Ansible이 암호를 묻도록 할 수 있습니다:

  1. ansible-playbook myplaybook.yml --ask-vault-pass

암호 대신 암호 파일을 사용했다면 옵션 --vault-password-file을 대신 사용해야 합니다:

  1. ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py

보안 ID로 암호화된 데이터를 사용하는 경우, 처음 데이터를 암호화할 때 사용한 보안 ID와 암호 소스를 제공해야 합니다:

  1. ansible-playbook myplaybook.yml --vault-id dev@prompt

보안 ID와 함께 암호 파일을 사용하는 경우, 라벨을 제공하고 라벨 뒤에 암호 파일의 전체 경로를 암호 소스로 지정해야 합니다:

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py

Play에 여러 보안을 사용하는 경우 특정 순서 없이 각각에 대한 --vault-id 매개변수를 제공해야 합니다:

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py --vault-id test@prompt --vault-id ci@prompt

디버깅

만약 Ansible 명령과 플레이북을 실행하는 동안 오류에 부딪힌다면, 문제에 대한 더 많은 정보를 얻기 위해 출력 상세도를 높이는 것이 좋습니다. 이를 위해 명령에 -v 옵션을 포함시킬 수 있습니다:

  1. ansible-playbook myplaybook.yml -v

더 많은 세부 정보가 필요하다면, -vvv를 사용하면 출력의 상세도가 증가합니다. 만약 Ansible을 통해 원격 노드에 연결할 수 없다면, 연결 디버깅 정보를 얻기 위해 -vvvv를 사용하세요:

  1. ansible-playbook myplaybook.yml -vvvv

결론

이 안내서는 서버 프로비저닝 시에 사용할 수 있는 일반적인 Ansible 명령 몇 가지를 다룹니다. 노드에서 원격 명령을 실행하는 방법 및 다양한 사용자 설정을 사용하여 플레이북을 실행하는 방법 등이 포함됩니다.

Ansible 워크플로우에 유용한 다른 명령 변형 및 플래그가 있을 수 있습니다. 모든 사용 가능한 옵션을 개요로 보려면 도움말 명령을 사용할 수 있습니다:

  1. ansible --help

Ansible과 모든 사용 가능한 명령 및 기능에 대한 더 포괄적인 내용을 보려면, 공식 Ansible 문서를 참조하세요.

Ansible의 또 다른 실제 예제를 보려면, Ubuntu 20.04에 Docker를 설치하고 설정하는 방법에 대한 가이드인 Ansible을 사용하는 방법을 확인하세요.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide