task automation using ansible playbooks
민감한 데이터를 보호하기 위해 Ansible 플레이 북 및 Ansible 볼트를 사용하여 작업 자동화를 배웁니다.
이전 Ansible 튜토리얼 # 1에서 에서 Ansible의 다양한 구성 요소와 다양한 모듈로이 도구를 설치 및 구성하는 방법에 대해 배웠습니다. 또한 모듈이 하나의 기능 또는 작업을 수행하는 데 어떻게 사용되는지 살펴 보았습니다.
이 부분에서는 민감한 데이터를 보호하기 위해 Ansible 플레이 북과 Ansible 볼트를 사용하는 작업 자동화를 살펴 보겠습니다.
추천 읽기 => DevOps에 대한 학습 가이드
웹 사이트에서 비디오를 다운로드하는 소프트웨어
학습 내용 :
Ansible 플레이 북
모듈을 사용하여 단일 작업 또는 일회성 작업을 실행하는 방법을 살펴 봤지만 여러 작업을 실행해야하는 경우 어떻게해야합니까? 플레이 북은 스크립트 방식으로 실행하는 데 도움이됩니다.
플레이 북은 변수, 구성, 배포 단계를 정의하고 역할을 할당하고 여러 작업을 수행합니다. 에 대한 예 : 파일 및 폴더 복사 / 삭제, 패키지 설치, 서비스 시작. 따라서 주로 플레이 북은 여러 컴퓨터 또는 서버에 대한 단계를 조정하고 모든 단계를 원하는 특정 상태로 만들기 위해 정의됩니다.
플레이 북 작성 YAML 형식 .yml 파일 확장자로. 형식과 정렬에 매우주의해야하므로 매우 민감합니다.
다음 섹션이 포함됩니다.
- 모든 플레이 북은 3 개의 하이픈‘—‘으로 시작합니다.
- 호스트 섹션 – 플레이 북이 실행되어야하는 대상 컴퓨터를 정의합니다. 이는 Ansible 인벤토리 파일을 기반으로합니다.
- 가변 섹션 – 이것은 선택 사항이며 플레이 북에 필요한 모든 변수를 선언 할 수 있습니다. 몇 가지 예도 살펴 보겠습니다.
- 작업 섹션 –이 섹션에는 대상 머신에서 실행해야하는 모든 작업이 나열됩니다. 모듈 사용을 지정합니다. 모든 작업에는 작업이 수행 할 작업에 대한 작은 설명 인 이름이 있으며 플레이 북이 실행되는 동안 나열됩니다.
예를 들어,
Tomcat을 설치하고 구성해야하는 경우 다음 작업으로 구성됩니다.
- Tomcat 다운로드 및 설치
- Tomcat 구성
- Tomcat 시작
마찬가지로 다른예DevOps의 지속적인 제공에 사용되는 Tomcat 사용의 경우 작업은 다음과 같을 수 있습니다.
- 응용 프로그램 중지
- 응용 프로그램 제거
- 새 버전의 WAR 파일을 설치하십시오.
- 신청 시작
플레이 북의 샘플 형식
--- Playbook start - hosts: webservers Specify the group or servers as per inventory to execute tasks become: true tasks: - name: Copy Tomcat ZIP file to install location Short description of the task copy: src=/home/ansible/niranjan/apache-tomcat-8.5.31.tar.gz dest=/opt/niranjan/tomcat
위의 스크립트에서 맨 위에서 시작하는 정렬을 살펴보고 유지 관리해야합니다. 그렇지 않으면 구문 오류가 발생합니다.
플레이 북을 실행하려면 다음 명령을 사용하십시오.
$ ansible-playbook
플레이 북에서 구문 오류를 확인하려면
$ ansible-playbook --syntax-check
호스트 목록을 보려면
$ ansible-playbook --list-hosts
예제로 플레이 북 만들기
이 섹션에서는 정기적으로 실행해야하는 플레이 북을 만드는 방법에 대한 여러 예를 살펴 봅니다. 이러한 플레이 북은 제어 시스템에서 생성하고 실행해야합니다.
아래의 모든 플레이 북을 .yml 파일에 저장하고 아래와 같이 실행합니다.
$ ansible-playbook filename.yml
예 1 : 인벤토리 파일 및 웹 서버 그룹에 언급 된대로 대상 컴퓨터 또는 서버에 파일을 만들고 .yml 확장자로 아래 코드를 저장하고 플레이 북을 실행합니다.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
위의 예에서 우리는 파일 모듈을 사용하여 파일을 만듭니다.
예 2 : 모드가 775이고 소유자 / 그룹이 Ansible 인 디렉토리를 만듭니다.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
예 3 : 여러 디렉터리를 만듭니다. 하나의 작업으로 여러 디렉토리를 만들려면 루프를 사용할 수 있습니다. with_items 성명서. 따라서 아래 플레이 북을 실행하면 3 가지 다른 작업으로 해석됩니다.
--- - hosts: webservers become: true tasks: - name: Create multiple directories file: path={{item}} state=directory with_items: - '/home/ansible/vn1' - '/home/ansible/vn2' - '/home/ansible/vn3'
예 4 : 사용자를 만듭니다. 살펴 보겠습니다 사용자 모듈을 사용하여 플레이 북에서 사용자를 만들고 삭제합니다.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
예 5 : 사용자를 제거하십시오. 사용자를 제거하는 것은 매우 쉬우 며 상태 설정 될 결석 . 이것은 userdel Linux에서 명령.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
위의 플레이 북에서 remove = 예 홈 디렉토리를 제거하고 force = 예 디렉토리에서 파일을 제거합니다.
예 6 : 복사 모듈을 사용하여 콘텐츠를 파일에 복사합니다.
파일을 대상 머신이나 서버에 복사해야하는 경우 src 과 dest 복사 모듈에서.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
예를 들어,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
예 7 : 문자열의 모든 인스턴스를 바꿉니다.
사용 바꾸다 모듈에서 단어를 다른 단어로 바꿀 수 있습니다. 교체 모듈에는 'path', 'regexp'(특정 단어 찾기) 및 'replace'(교체를위한 다른 단어 제공)와 같은 3 개의 매개 변수가 필요합니다.
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
예 8 : 아카이브 또는 ZIP 파일 및 폴더
Ansible 사용 아카이브 모듈은 파일이나 폴더를‘zip’,‘.gz’또는‘bz2’형식으로 압축 할 수 있습니다.
노트 : 압축 할 파일 또는 폴더는 대상 서버에서 사용할 수 있어야하며 tar, bzip2, gzip, zip 파일 용 패키지가 설치되어 있어야합니다. 이러한 패키지를 설치하기위한 별도의 플레이 북 작업이있을 수 있습니다.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
위의 플레이 북은 niranjan.txt 파일을 niranjan.zip 파일로 압축합니다.
--- - hosts: all tasks: - name: Ansible zip multiple files example archive: path: - /home/ansible/niranjan1.txt - /home/ansible/niranjan2.txt dest: /home/ansible/niranjan.zip format: zip
위의 플레이 북은 여러 파일을 niranjan.zip 파일로 압축합니다.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
위의 플레이 북은 / home / ansible 디렉토리의 모든 파일을 압축합니다.
예 9 : 날짜 및 타임 스탬프 작업
시스템 날짜 및 타임 스탬프를 사용하면 특정 상태 또는 로깅 목적에 도움이됩니다. Ansible 팩트는 원격 또는 대상 서버 날짜 및 시간에 대한 액세스를 제공합니다. 그래서 우리는 디버그 모듈 함께 출력을 인쇄하려면 어디 아래와 같이 속성.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
위의 플레이 북은 날짜를 표시합니다.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
위의 플레이 북은 시간을 표시합니다.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
위의 플레이 북은 현재 날짜를 기반으로 동적 파일을 생성합니다. 예 : . niranjan2018-07-15.log
예 10 : 변수 예
변수는 값을 저장하는 데 사용됩니다. 아래 예제에서 변수를 선언하고 있습니다. 이름 가치있는 Niranjan . 출력은 Niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
또한 아래와 같이 배열 또는 변수 목록을 가질 수 있습니다. 예 .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
배열의 인덱싱은 ZERO (0)부터 시작합니다. 따라서 위 예제의 출력은 Niranjan이됩니다.
예 11 : 변수 등록
또한 모든 작업의 출력을 레지스터 변수로 캡처 할 수 있습니다.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
참고 : 표시하려면 – msg 속성을 사용하고 값을 캡처하려면 – debug 모듈의 var 속성을 사용하십시오.
예제 12 : 대상 서버 또는 컴퓨터에 vim 편집기 및 GIT를 설치하는 플레이 북.
이 플레이 북에서 우리는 냠 모듈을 사용하여 최신 버전의 소프트웨어 패키지를 설치합니다.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
예 13 : Apache 서버를 설치합니다. 아래 코드를 저장하고 아래와 같이 플레이 북을 실행합니다.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
별도로 냠 모듈, 서비스 모듈은 httpd 서비스를 시작하는데도 사용됩니다. 작업은 위에서 아래로 동시에 실행됩니다.
예 14 : JDK 설치
예를 들어 유닉스에서 잘라 내기 명령
다음 플레이 북은 모든 대상 컴퓨터 또는 서버에 JDK 8을 자동으로 설치합니다. JDK는 Maven 또는 Tomcat과 같은 대부분의 다른 소프트웨어 패키지의 전제 조건입니다.
--- - hosts: webservers become: true vars: download_url: http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm tasks: - name: Download JDK 8 RPM file command: 'wget --no-check-certificate --no-cookies --header 'Cookie: oraclelicense=accept-securebackup-cookie' {{download_url}} ' - name: Install JDK 8 command: 'rpm -ivh jdk-8u171-linux-x64.rpm'
예 15 : Maven 설치
수행되는 작업은 URL에서 Maven 파일을 다운로드하는 것입니다. get_url 모듈, 다운로드 한 파일의 압축을 풀고 더 작은 디렉토리로 이동하고 경로에 maven이 추가 된 프로필을 업데이트하고 실행합니다.
--- - hosts: webservers become: true tasks: - name: Download Maven get_url: url=http://www-us.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz dest=/opt/niranjan/apache-maven-3.5.3-bin.tar.gz - name: Extract Maven command: tar xvf /opt/niranjan/apache-maven-3.5.3-bin.tar.gz -C /opt/niranjan - name: Move to a smaller directory command: mv /opt/niranjan/apache-maven-3.5.3 /opt/niranjan/maven - name: Update Profile copy: content='export M2_HOME=/opt/niranjan/maven
' dest=/etc/profile.d/maven.sh # lineinfile is used to add additional or append lines to existing files. - lineinfile: path: /etc/profile.d/maven.sh line: 'export PATH=${M2_HOME}/bin:${PATH}' - name: Source profile shell: source /etc/profile.d/maven.sh
예 16 : Tomcat 8 설치
아래 플레이 북은 대상 컴퓨터 또는 서버에 Tomcat 8을 설치하고 시작하는 데 도움이됩니다.
클릭 할 수 있습니다. 여기 Tomcat 8 최신 버전의 링크 위치를 복사하려면 여기 이 플레이 북에서 사용한 Tomcat 8 tar 파일이 포함 된 URL에 대해
--- - hosts: webservers become: true gather_facts: no tasks: - name: Download Tomcat get_url: url=http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz dest=/home/ansible - name: Extract the file downloaded tomcat file command: tar xvf apache-tomcat-8.5.32.tar.gz - name: Move the Tomcat directory to a smaller one command: mv apache-tomcat-8.5.32 tomcat - name: Change Ownership and group of the Tomcat directory file: path=/home/ansible/tomcat owner=ansible group=ansible mode=775 state=directory recurse=yes - name: Start Tomcat command: nohup /home/ansible/tomcat/bin/startup.sh # Execute command even after you have exited from the shell prompt become: true become_user: ansible
예 17 : pre_tasks, post_tasks 및 태그
당신이 사용할 수있는 pre_tasks 및 post_tasks 기본 작업을 실행하기 전이나 후에 특정 작업을 실행합니다.
일반적으로 플레이 북에는 실행되는 작업이 너무 많습니다. 특정 작업 만 실행해야하는 경우 어떻게합니까? 태그가 이에 대한 답입니다. 세 가지 옵션이 모두있는 아래 옵션을 살펴 보겠습니다. 여기에는 2 개의 작업이 있습니다. 하나는 TAG가 있고 다른 하나는 TAG가 없습니다.
--- - name: Pre , Post tasks and Tags example hosts: localhost become: true tags: - niranjan pre_tasks: - debug: msg='Started task with tag - niranjan. tasks: - name: Going to execute the main task debug: msg='Currently in the target server' post_tasks: - debug: msg='Completed task with tag - niranjan. - name: Play without tags hosts: localhost become: true tasks: - name: Command to list files shell: ls -lrt > niranjan.txt
–list-tags 옵션을 사용하여 플레이 북을 실행하는 동안 어떤 일이 발생하는지 살펴 보겠습니다.
$ ansible-playbook preposttagseg.yml --list-tags
위의 출력은 더 좋고 명확 해 보입니다. Play # 1에는 태그 niranjan이 있지만 Play # 2에는 태그가 없습니다.
niranjan 태그를 사용하여 작업을 실행해야하는 경우 실행할 명령은 다음과 같습니다.
$ ansible-playbook preposttagseg.yml --tags niranjan
두 번째 재생이 실행되지 않고 파일이 생성되지 않습니다.
예제 18 : 핸들러
모든 소프트웨어 패키지에는 구성 파일이 있으며 변경 사항은 서비스를 다시 시작할 때만 적용됩니다. 따라서 서비스를 다시 시작하도록 설정해야합니다. 에 대한 예 : 아래 플레이 북에서 여러 번 실행하면 변경 사항에 관계없이 서비스가 다시 시작되며 이는 올바르지 않습니다.
Windows 10 용 무료 레지스트리 클리너
--- - hosts: webservers tasks: - name: Install the apache Package yum: name=httpd state=latest - name: Copy httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html
# This service below is executed irrespective of changes done or not to any config files - name: Start and Enable httpd service service: name=httpd state= restarted enabled=yes
따라서 구성 파일을 변경 한 경우에만 서비스를 다시 시작해야합니다. 핸들러 그 기능을 제공하십시오.
따라서 핸들러의 적절한 흐름은 알리다 선택권.
--- - hosts: webservers become: true tasks: - name: Install httpd package yum: name=httpd state=latest - name: Copy the httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html notify: - restart httpd - name: Start httpd service service: name=httpd state=started enabled=yes handlers: - name: restart httpd service: name=httpd state=restarted
따라서 처음으로 Apache 서버가 설치되고 시작됩니다. 변경하지 않고 플레이 북을 다시 실행하더라도 httpd 서비스는 이미 시작되었으므로 다시 시작되지 않습니다.
구성 파일에 변경 사항이 있거나 HTML 파일이 변경된 경우 플레이 북이 실행되면 핸들러에 서비스를 다시 시작하라는 알림이 표시됩니다. 알림 섹션과 핸들러의 이름은 동일해야합니다. 핸들러는 다른 태스크처럼 작성되지만 변경 사항이있는 경우에만 호출됩니다.
Ansible Vault
민감하거나 기밀 인 데이터를 플레이 북에서 보호해야하는 대부분의 경우 모든 사람이 읽을 수있는 텍스트 파일에 보관하는 것보다 암호화 할 수 있습니다. Ansible Vault를 사용하면 플레이 북을 암호화하여 기밀 데이터를 보호 할 수 있습니다.
예를 들어, 기밀 작업 계약이 복사되는 다음 작업을 고려하십시오.
이러한 경우 Ansible Vault가 필요합니다.
--- - hosts: webservers become: true tasks: - name: Copying Confidential Job Agreement copy: content='This is a Confidential Job Agreement' dest=/home/ansible/jobagreement.txt
다음은 위의 플레이 북 파일을 암호화하기 위해 따라야하는 단계입니다.
# 1) 새로운 암호화 파일 생성
Vault로 암호화 된 새 파일을 작성하려면 ansible-vault 생성 명령.
$ ansible-vault create jobagreement.yml
암호를 확인하면 파일에 내용을 추가 할 수있는 편집 창이 열립니다.
Ansible은 파일을 닫을 때 콘텐츠를 암호화합니다. 실제 내용을 보는 대신 암호화 된 블록을 볼 수 있습니다.
# 2) 기존 yml 파일을 암호화하려면 다음을 사용하십시오.
$ ansible-vault encrypt existingfile.yml
암호는 다시 암호화를 요청합니다.
# 3) 암호화 된 파일보기
명령 사용 ansible-vault보기 파일의 실제 내용을 확인합니다.
$ ansible-vault view jobagreement.yml
파일 내용을보기 위해 암호를 다시 입력해야합니다.
# 4) 암호화 된 파일 편집
파일을 편집해야하는 경우 다음 명령을 사용하십시오. ansible-vault 편집
$ ansible-vault edit users.yml
파일을 편집하려면 암호를 입력하십시오.
# 5) 암호화 된 파일의 비밀번호 변경
명령 사용 ansible-vault rekey 파일의 암호를 변경합니다.
$ ansible-vault rekey jobagreement.yml
# 6) 암호화 된 Ansible 플레이 북 파일 실행
ansible-playbook 명령과 함께 –ask-vault-pass 옵션을 사용합니다.
$ ansible-playbook users.yml --ask-vault-pass
# 7) 암호화 된 파일을 수동으로 해독
ansible-vault decrypt 명령을 사용합니다.
$ ansible-vault decrypt jobagreement.yml
요약
이 자습서에서는 구성 관리의 가장 중요한 두 가지 측면을 살펴 보았습니다. Ansible Playbook 및 Ansible Vault를 사용하여 민감한 데이터 보호.
위의 플레이 북 예제는 소프트웨어 제공 중에 다양한 시나리오에서 다양한 작업을 자동화하는 방법에 대한 아이디어를 제공했을 것입니다.
다음 자습서에서는 Ansible 역할을 사용하여 플레이 북을 모듈화하고 Jenkins와 통합하는 방법 및 AWS 인스턴스를 관리하기 위해 Ansible S3 및 EC2 모듈을 사용하는 가장 중요한 측면 (EC2 인스턴스 생성 및 종료)을 살펴볼 것입니다.
추천 도서
- Ansible 자습서 : Ansible 모듈을 사용한 설치 및 사용
- SeeTest 자동화 명령 : 예제가 포함 된 자세한 설명
- Ansible 역할, DevOps에서 Jenkins와의 통합 및 EC2 모듈
- 가장 많이 사용되는 5 가지 테스트 자동화 프레임 워크를 사용하여 테스트 스크립트를 개발하는 방법 (예제)
- 스크립트없는 테스트 자동화 프레임 워크 : 도구 및 예제
- 예제가 포함 된 Python DateTime 자습서
- 예제와 함께 Unix의 Cut 명령
- 테스트 자동화 – 전문 직업입니까? 일반 테스터도 자동화 할 수 있습니까?