Ansible 이란?
원격 컴퓨터 자동 관리 툴
( RedHat에서 만들었다 )
필요성
원클릭 서버(Front, Back 등등) 배포 가능
구조
제어 컴퓨터 ( Control node )
- 다른 컴퓨터를 관리하는, 관리자 컴퓨터
- 내부에 관리할 내용( inventory )이 들어있다.
관리(당하는) 컴퓨터 ( Manage node ) - 호스트, 노드 라고 부른다.
설치
python3 -m pip install --user ansible
# centos
sudo yum install ansible
# ec2
sudo amazon-linux-extras install ansible2
사용법
1. 기본 파일 사용하기
inventory 구조 및 설명
[hosts] - 관리용 컴퓨터 등록 파일을 넣는 곳
[roles] - 처리할 작업을, 분리 해놓는 곳 ( playbook )
[vars] - 변수를 지정하는 곳 ( playbook )
admin - 관리용 컴퓨터 등록
ansible.cfg - 기본 설정 적는 곳
원격으로 관리할 컴퓨터들의 리스트 (inventory) 작성 (EC2)
# /etc/ansible/hosts - 기본 파일 위치 ( 개인마다 다를 수 있음 )
# ./hosts/hosts - 사용자 지정 위치
[app] # 호스트 그룹 이름 지정
192.0.2.50 # 호스트 작성
192.0.2.51
[app:vars] # 호스트 그룹 변수 지정
ansible_ssh_private_key_file=키 파일 지정 #( .ssh/my-ec2-keypair.pem )
ansible_user=접속할 유저 명 #( ec2-user )
[app:children] # 호스트 자식 그룹 지정
192.0.2.52
invertory 에서 호스트 확인
ansible all --list-hosts
Ansible - 호스트 연결
authorized_keys 에, 공개 SSH key 등록 ( 초기 ssh 연결시 등록가능 )
* 이때, 원격호스트의 계정(Managed User)와, 접속하는 계정(Control User)이름이 같아야한다.
( 만약 다르면 -u username으로 지정 )
# 등록한 host ssh 접속
ssh -i "my-ec2-keypair.pem" ec2-user@192.0.2.50
# host 접속 종료
exit
# ansible 로, host 연결(ping) 테스트
ansible all -i hosts/hosts -m ping -u ec2-user -f 30
# -i : invertory 파일 지정
# -u : 접속 유저 지정
# -f : 병렬 처리 가능 수 지정
# -l : 특정 호스트 or 그룹 지정가능 ( -l "192.0.2.51" )
# -e : 추가 변수 사용
기본 설정 지정하기
# ansible.cfg - ansible 폴더에 저장
[defaults]
# default is 30 - 병렬 수행할 수 있는 최대 개수
forks = 50
# remote_user = ec2-user # 기본 사용자 지정 가능
# default port
remote_port = 22
# host_key_checking = False # - key 파일 검사 여부
# role_path = ./roles # - roles 위치 지정 (playbook)
설정 등록 확인
ansible all -i hosts/admin -m ping
2. Inventory + Ansible Playbook
yaml( or yml ) 파일을 작성해서,
작업하는 컴퓨터와, 여러 작업들을 분리한다!
yaml 방식으로 inventory 작성
# ./hosts/inventory.yaml
app:
hosts:
ec2:
ansible_host: 43.201.81.66
vars:
ansible_ssh_private_key_file: .ssh/my-ec2-keypair.pem
ansible_user: ec2-user
play 파일 작성
# ./playbook.yaml
- name: My first play
hosts: app # 인벤토리의 호스트 or 호스트 그룹 선택
tasks: # 작업 리스트 작성
- name: Ping my hosts # 작업 이름 지정
ansible.builtin.ping: # ping 테스트
- name: Print message
ansible.builtin.debug:
msg: Hello world # 콘솔창에 메시지 찍기
파일 실행하기
ansible-playbook -i inventory.yaml playbook.yaml
# -i : inventory 를 사용한다.
심화 버전
Inventory 에서, 호스트 그룹짓기 & 연결하기
# ./hosts/inventory.yaml
datacenter:
children:
network:
webservers:
network:
children:
app:
webservers:
hosts:
webserver01:
ansible_host: 192.0.2.140
http_port: 80
webserver02:
ansible_host: 192.0.2.141
http_port: 443
app:
hosts:
ec2:
ansible_host: 43.201.81.66
Playbook 파일 분리하기
[Play]
- 하나의 호스트 관리 파일
- roles, vars, tasks 구조
[roles]
- Play의 담당 역할
- 여러 작업(tasks)을 하나로 묶어서 관리
[tasks]
- 호스트가 실제로 수행할 작업
[handler]
- 작업이 변경될때마다 알려줌
- name: test ping
vars_files: # 변수파일 지정
- ../group_vars/common.yml
hosts: all
vars:
touch_files_path: /home/deploy/touch_files
id: jacob
tasks:
- name: make directory
file:
path: "{{touch_files_path}}"
state: directory
- name: touch file
file:
path: "{{touch_files_path}}/{{id}}.txt"
state: touch
반응형