소개
Ansible는 원격 서버를 설정하고 유지하는 작업을 용이하게 하는 현대적인 구성 관리 도구입니다.
이 치트 시트 스타일의 가이드는 Ansible을 사용할 때 자주 사용되는 명령 및 관행에 대한 빠른 참고 자료를 제공합니다. Ansible을 설치하고 구성하는 방법에 대한 개요 및 안내는 우분투 20.04에 Ansible을 설치하고 구성하는 방법을 확인하십시오. Ansible을 우분투 20.04에 설치하고 구성하는 방법으로.
이 가이드 사용 방법:
- 이 가이드는 자체 포함 된 명령 줄 스니펫으로 치트 시트 형식입니다.
- 완료하려는 작업과 관련된 섹션으로 이동하십시오.
- 이 가이드의 명령에서
강조된 텍스트
를 보면 해당 텍스트는 귀하의 인벤토리에서 호스트, 사용자 이름 및 IP 주소를 참조해야 함을 기억하십시오.
Ansible 용어 해설
이 가이드 전반에 걸쳐 주로 사용되는 다음 Ansible 특정 용어가 있습니다:
- 제어 머신 / 노드: Ansible이 설치되어 구성되어 있으며 노드에서 명령을 실행하고 연결하는 시스템입니다.
- 노드: Ansible에 의해 제어되는 서버입니다.
- 인벤토리 파일: 보통
/etc/ansible/hosts
에 위치한, Ansible이 제어하는 서버에 관한 정보를 포함하는 파일입니다. - 플레이북: 원격 서버에서 실행할 일련의 작업을 포함하는 파일입니다.
- 롤: 웹 서버를 설치하는 등의 목표와 관련된 플레이북 및 기타 파일의 모음입니다.
- 플레이: 완전한 Ansible 실행입니다. 플레이는 여러 플레이북과 롤을 가질 수 있으며, 하나의 플레이북에서 포함되는 하나의 플레이북을 작업 진입점으로 사용합니다.
실제로 이러한 명령어를 사용한 예제를 보려면, Ubuntu 20.04에서 초기 서버 설정을 자동화하는 방법에 대한 가이드를 참조하십시오. 노드로 사용할 적어도 하나의 원격 서버가 필요합니다.
노드에 대한 연결 테스트
Ansible이 노드에 연결하고 명령 및 플레이북을 실행할 수 있는지 테스트하려면 다음 명령을 사용할 수 있습니다:
ping
모듈은 인벤토리 파일에 정의된 노드에 연결할 유효한 자격 증명이 있는지 테스트하고, 또한 원격 서버에서 Python 스크립트를 실행할 수 있는지 테스트합니다. pong 응답은 Ansible이 해당 노드에서 명령 및 플레이북을 실행할 준비가 되어 있다는 것을 의미합니다.
다른 사용자로 연결하기
기본적으로 Ansible은 현재 시스템 사용자로 노드에 연결을 시도하며 해당하는 SSH 키페어를 사용합니다. 다른 사용자로 연결하려면 명령에 -u
플래그와 의도한 사용자의 이름을 추가하십시오:
동일한 것이 ansible-playbook
에도 적용됩니다:
사용자 정의 SSH 키 사용하기
원격 서버에 연결하는 데 사용자 정의 SSH 키를 사용하는 경우 실행 시 --private-key
옵션으로 제공할 수 있습니다:
이 옵션은 ansible-playbook
에도 적용됩니다:
비밀번호 기반 인증 사용하기
노드에 연결하기 위해 비밀번호 기반 인증을 사용해야 하는 경우 Ansible 명령에 옵션 --ask-pass
를 추가해야 합니다.
이렇게 하면 Ansible이 원격 서버의 사용자 암호를 요청합니다:
이 옵션은 ansible-playbook
에도 유효합니다:
sudo
비밀번호 제공
원격 사용자가 sudo
명령을 실행하기 위해 비밀번호를 제공해야 하는 경우, Ansible 명령에 옵션 --ask-become-pass
를 포함할 수 있습니다. 이렇게 하면 원격 사용자에게 sudo 비밀번호를 제공하라는 프롬프트가 나타납니다:
이 옵션은 ansible-playbook
에도 유효합니다:
사용자 지정 인벤토리 파일 사용
기본 인벤토리 파일은 일반적으로 /etc/ansible/hosts
에 위치하지만, Ansible 명령 및 플레이북을 실행할 때 사용자 지정 인벤토리 파일을 가리키는 데 -i
옵션을 사용할 수도 있습니다. Ansible은 또한 인벤토리가 자주 변동되는 경우를 위해 동적 인벤토리 파일을 작성하는 데 사용되는 인벤토리 스크립트를 지원합니다. 사용자 지정 인벤토리 파일은 Git과 같은 버전 관리 시스템에 포함될 수 있는 프로젝트별 인벤토리를 설정하는 데 유용합니다:
ansible-playbook
에 대해서도 동일한 옵션이 유효합니다:
임시 명령 실행
노드에서 명령을 실행하려면 따옴표 안에 실행하려는 명령 뒤에 오는 -a
옵션을 사용하십시오.
다음은 인벤토리의 모든 노드에서 uname -a
를 실행하는 것입니다:
옵션 -m
과 함께 Ansible 모듈을 실행할 수도 있습니다. 다음 명령은 인벤토리의 server1
에 패키지 vim
을 설치합니다:노드를 변경하기 전에 명령이 서버에 영향을 미칠 것으로 예측하려면 --check
옵션을 포함하여 시행할 수 있습니다:
플레이북 실행
플레이북을 실행하고 그 안에 정의된 모든 작업을 실행하려면 ansible-playbook
명령을 사용하십시오:
플레이북에서 기본 hosts
옵션을 덮어쓰고 특정 그룹 또는 호스트로 실행을 제한하려면 명령에 옵션 -l
을 포함하십시오:
연극에 대한 정보 얻기
옵션 --list-tasks
는 원격 서버에 대한 어떠한 변경도 수행하지 않고 플레이에 의해 실행될 모든 작업을 나열하는 데 사용됩니다:
마찬가지로 원격 서버에서 어떠한 작업도 실행하지 않고 플레이에 영향을 받을 수 있는 모든 호스트를 나열할 수 있습니다:
플레이의 실행을 제어하기 위해 태그를 사용할 수 있습니다. 플레이에서 사용 가능한 모든 태그를 나열하려면 옵션 --list-tags
를 사용하십시오:
플레이북 실행 제어
플레이북의 새로운 시작점을 정의하기 위해 옵션 --start-at-task
를 사용할 수 있습니다. 그러면 Ansible은 지정된 작업 이전에 오는 모든 것을 건너뛰고 나머지를 해당 지점부터 실행할 것입니다. 이 옵션은 유효한 작업 이름을 인수로 필요로 합니다:
특정 태그와 관련된 작업만 실행하려면 옵션 --tags
를 사용할 수 있습니다. 예를 들어 nginx
또는 mysql
로 태그가 지정된 작업만 실행하려면 다음을 사용할 수 있습니다:
특정 태그 아래에 있는 모든 작업을 건너뛰려면 --skip-tags
를 사용하십시오. 다음 명령은 myplaybook.yml
을 실행하고 mysql
으로 태그된 모든 작업을 건너뛸 것입니다:
민감한 데이터 저장을 위한 Ansible Vault 사용
Ansible 플레이북이 비밀번호, API 키 및 자격 증명과 같은 민감한 데이터를 다룬다면 해당 데이터를 암호화 메커니즘을 사용하여 안전하게 보관하는 것이 중요합니다. Ansible은 파일과 변수를 암호화하기 위해 ansible-vault
를 제공합니다.
앤서블 데이터 파일 및 바이너리 파일을 모두 암호화할 수 있지만, 민감한 데이터를 포함하는 변수 파일을 암호화하는 것이 더 일반적입니다. 이 도구로 파일을 암호화한 후에는 해당 파일을 처음 암호화할 때 정의한 관련 암호를 제공하여 파일의 내용을 실행하거나 편집하거나 볼 수 있습니다.
새로운 암호화된 파일 생성
다음 명령을 사용하여 새로운 암호화된 Ansible 파일을 생성할 수 있습니다:
이 명령은 다음 동작을 수행합니다:
- 먼저, 새로운 암호를 입력하라는 메시지가 표시됩니다. 파일 내용에 액세스할 때마다이 암호를 제공해야 합니다. 편집, 보기 또는 해당 값 사용하여 플레이북 또는 명령을 실행하는 경우 모두 해당됩니다.
- 다음으로, 기본 명령줄 편집기를 열어서 원하는 내용으로 파일을 채울 수 있습니다.
- 마지막으로 편집을 마치면
ansible-vault
가 파일을 암호화된 데이터로 저장합니다.
기존 Ansible 파일 암호화
기존의 Ansible 파일을 암호화하려면 다음 구문을 사용할 수 있습니다:
이렇게 하면 credentials.yml
파일에 액세스할 때마다 암호를 입력하라는 메시지가 표시됩니다.
암호화된 파일 내용 보기
이전에 ansible-vault
로 암호화된 파일의 내용을 보려는 경우 내용을 변경할 필요가 없습니다. 다음을 사용할 수 있습니다:
이렇게 하면 처음으로 파일을 ansible-vault
로 암호화할 때 선택한 암호를 제공하라는 메시지가 표시됩니다.
암호화된 파일 편집
이전에 Ansible Vault로 암호화된 파일의 내용을 편집하려면 다음을 실행하십시오:
이렇게 하면 파일 credentials.yml
을(를) 처음에 ansible-vault
로 암호화할 때 선택한 암호를 제공하라는 프롬프트가 나타납니다. 암호 확인 후에는 기본 명령줄 편집기가 파일의 암호 해제된 내용으로 열립니다. 원하는 변경 사항을 수행할 수 있습니다. 작업을 마치면 파일을 보통처럼 저장하고 닫으면 업데이트된 내용이 암호화된 데이터로 저장됩니다.
암호 해독된 암호화된 파일
이전에 ansible-vault
로 암호화된 파일을 영구적으로 원래의 암호 해독된 버전으로 되돌리려면 다음 구문을 사용할 수 있습니다:
이렇게 하면 파일 credentials.yml
을(를) 처음에 ansible-vault
로 암호화할 때 사용한 동일한 암호를 제공하라는 프롬프트가 나타납니다. 암호 확인 후에 파일 내용이 디스크에 암호 해독되지 않은 데이터로 저장됩니다.
여러 보안 비밀번호 사용하기
앤서블은 다른 보안 비밀번호를 그룹화된 다른 보안 ID로 지원합니다. 이것은 개발, 테스트 및 프로덕션 환경과 같이 다른 환경에 대해 전용 보안 비밀번호를 원하는 경우 유용합니다.
사용자 정의 보안 ID를 사용하여 새로운 암호화된 파일을 생성하려면 --vault-id
옵션을 포함하고 라벨과 해당 보안의 비밀번호를 찾을 수 있는 위치를 포함하십시오. 라벨은 모든 식별자가 될 수 있으며 위치는 비밀번호를 입력하라는 명령을 프롬프트하거나 비밀번호 파일의 유효한 경로일 수 있습니다.
이렇게 하면 prompt
를 비밀번호 소스로 사용하는 dev라는 새 보안 ID가 생성됩니다. 이 방법을 그룹 변수 파일과 결합하여 각 응용 프로그램 환경마다 별도의 앤서블 보안을 갖게 됩니다:
우리는 다른 환경마다 별도의 보안을 생성하는 방법을 보여주기 위해 dev와 prod를 보안 ID로 사용했지만, 원하는 만큼 많은 보안을 생성할 수 있으며, 보안 ID로 선택한 식별자를 사용할 수 있습니다.
이제 이러한 파일을 보려면, 편집하거나 해독하려면, 동일한 보안 ID 및 비밀번호 소스를 ansible-vault
명령과 함께 제공해야합니다:
비밀번호 파일 사용
서버 프로비저닝 프로세스를 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
와 함께 비밀번호 파일을 사용하려면 볼트 명령을 실행할 때 비밀번호 파일의 경로를 제공해야 합니다:
Ansible은 입력 비밀번호가 동일한 경우 prompt
또는 비밀번호 파일을 사용하여 암호화된 콘텐츠 사이에 구분을 지지 않습니다. 실제적으로, 이는 파일을 prompt
를 사용하여 암호화하고 나중에 동일한 비밀번호를 사용하여 비밀번호 파일에 저장할 때 괜찮다는 것을 의미합니다. 그 반대도 마찬가지입니다: 비밀번호 파일을 사용하여 콘텐츠를 암호화한 다음 나중에 Ansible에 의해 프롬프트에서 동일한 비밀번호를 제공하여 prompt
방법을 사용할 수 있습니다.
확장된 유연성과 보안을 위해 볼트 비밀번호를 평문 파일에 저장하는 대신 Python 스크립트를 사용하여 다른 소스에서 비밀번호를 가져올 수 있습니다. 공식 Ansible 저장소에는 프로젝트의 특정 요구에 맞는 사용자 정의 스크립트를 작성할 때 참고할 수 있는 몇 가지 볼트 스크립트 예제가 포함되어 있습니다. 몇 가지 볼트 스크립트 예제를 참고하여 사용자 정의 스크립트를 만들 수 있습니다.
Ansible Vault를 통해 암호화된 데이터를 사용하여 Playbook 실행
이전에 ansible-vault
를 사용하여 암호화된 데이터를 사용하는 Playbook를 실행할 때마다 Playbook 명령에 보안 자격 증명을 제공해야 합니다.
이 Playbook에 사용된 데이터를 암호화할 때 기본 옵션과 prompt
암호 소스를 사용했다면 옵션 --ask-vault-pass
를 사용하여 Ansible이 암호를 묻도록 할 수 있습니다:
암호 대신 암호 파일을 사용했다면 옵션 --vault-password-file
을 대신 사용해야 합니다:
보안 ID로 암호화된 데이터를 사용하는 경우, 처음 데이터를 암호화할 때 사용한 보안 ID와 암호 소스를 제공해야 합니다:
보안 ID와 함께 암호 파일을 사용하는 경우, 라벨을 제공하고 라벨 뒤에 암호 파일의 전체 경로를 암호 소스로 지정해야 합니다:
Play에 여러 보안을 사용하는 경우 특정 순서 없이 각각에 대한 --vault-id
매개변수를 제공해야 합니다:
디버깅
만약 Ansible 명령과 플레이북을 실행하는 동안 오류에 부딪힌다면, 문제에 대한 더 많은 정보를 얻기 위해 출력 상세도를 높이는 것이 좋습니다. 이를 위해 명령에 -v
옵션을 포함시킬 수 있습니다:
더 많은 세부 정보가 필요하다면, -vvv
를 사용하면 출력의 상세도가 증가합니다. 만약 Ansible을 통해 원격 노드에 연결할 수 없다면, 연결 디버깅 정보를 얻기 위해 -vvvv
를 사용하세요:
결론
이 안내서는 서버 프로비저닝 시에 사용할 수 있는 일반적인 Ansible 명령 몇 가지를 다룹니다. 노드에서 원격 명령을 실행하는 방법 및 다양한 사용자 설정을 사용하여 플레이북을 실행하는 방법 등이 포함됩니다.
Ansible 워크플로우에 유용한 다른 명령 변형 및 플래그가 있을 수 있습니다. 모든 사용 가능한 옵션을 개요로 보려면 도움말 명령을 사용할 수 있습니다:
Ansible과 모든 사용 가능한 명령 및 기능에 대한 더 포괄적인 내용을 보려면, 공식 Ansible 문서를 참조하세요.
Ansible의 또 다른 실제 예제를 보려면, Ubuntu 20.04에 Docker를 설치하고 설정하는 방법에 대한 가이드인 Ansible을 사용하는 방법을 확인하세요.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide