λ€μ κΈμ Cloud Wave κ΅μ‘ λΉμ λ΄μ©μ μ°Έκ³ ν΄ μμ±νμ΅λλ€.
Ansibleμ΄λ?
μ€μλΈμ μ€ν μμ€ μλν νλ«νΌμ΄λ€. μλν μμ
μ κ΄λ¦¬νκ³ λ€μν μν¬νλ‘μ° λ° νκ²½μ λ§κ² μ‘°μ ν μ μλ€. μ²μ μ¬μ©νλ μ¬μ©μμ κ²½μ°μλ μμ°μ±μ λμ΄κΈ° μν΄ λ§€μ° λΉ λ₯΄κ² νμ©ν μ μλ€. μ€μλΈμ λ€μκ³Ό κ°μ μΈ κ°μ§ νΉμ§μ κ°λλ€.
- μ€μλΈμ κ°λ ₯νλ€.
κ΅¬μ± κ΄λ¦¬ μν¬νλ‘μ° μλν, λ€νΈμν¬ μλνμ© μ ν리μΌμ΄μ μ λ°°ν¬ν μ μλ€. κ·Έλμ μ 체 μ ν리μΌμ΄μ μ λΌμ΄ν μ¬μ΄ν΄μ μ€μΌμ€νΈλ μ΄μ ν μ μλ€. - μ€μλΈμ μμ΄μ νΈκ° νμ μλ€.
μΌλ°μ μΌλ‘ μ€μλΈμ OpenSSH λλ WinRMμ μ¬μ©νμ¬ κ΄λ¦¬νλ νΈμ€ν μ μ°κ²°νκ³ λͺ¨λμ΄λΌλ μν νλ‘κ·Έλ¨μ λ΄λ³΄λ΄μ ν΄λΉ νΈμ€νΈμ μ°κ²°νλ€. μ΄λ¬ν νλ‘κ·Έλ¨μ μμ€ν μ μνλ νΉμ μνλ‘ λ§λλ λ° μ¬μ©μ΄ λκ³ μμ μ μλ£νλ©΄ μ κ±°λλ€. μμ΄μ νΈλ μΆκ° μ¬μ©μ μ§μ 보μ μΈνλΌκ° μκΈ° λλ¬Έμ Ansibleμ ν¨μ¬ ν¨μ¨μ μ΄κ³ μμ νλ€. - μ€μλΈμ κ°λ¨νλ€.
μ€μλΈ μ½λλ μ¬λμ΄ μ½μ μ μλ μλνλ₯Ό μ 곡νλ€. μ¦, μ¬λμ΄ μ½κΈ° μ¬μ°λ©° μ΄ν΄νκ³ λ³κ²½ν μ μλ μλν λꡬμ΄λ€. μμ±νλ λ°λ νΉλ³ν μ½λ© κΈ°μ μ΄ νμνμ§ μλ€. κ·Έλμ μ²μ μ€μλΈμ μ νλ μ¬μ©μλ€λ κΈλ°© λ°°μμ μ¬μ©ν μ μλ€.
Ansible μν€ν μ²
μ€μλΈμ ꡬμ±νλ λ Έλλ μ μ΄ λ Έλμ κ΄λ¦¬ νΈμ€νΈλΌλ λ κ°μ§ μ νμΌλ‘ ꡬμ±λλ€. μ€μλΈ ν¨ν€μ§λ μ μ΄ λ Έλμ μ€μΉνκ³ μ μ₯λμ΄ μλ μ½λλ₯Ό μ€ννλ€. κ΄λ¦¬ νΈμ€νΈλ μΈλ²€ν 리λΌκ³ λΆλ₯΄λ νμΌμ λμ΄λμ΄ μμΌλ©° μμ€ν μ κ·Έλ£ΉμΌλ‘ ꡬμ±ν΄μ λ³΄λ€ μ½κ² μΌκ΄ κ΄λ¦¬ν μ μλ€. μΈλ²€ν 리λ ν μ€νΈ νμΌμ μ μ μΌλ‘ μ μνκ±°λ μ€ν¬λ¦½νΈλ₯Ό μ€νν΄μ μΈλΆ μμ€μμ κ·Έλ£Ή λ° νΈμ€νΈ μ 보λ₯Ό κ°μ Έμ λμ μΌλ‘ μ μν μ μλ€. Ansibleμ μ¬μ©νκΈ° μν΄μ μμ±λ μ½λλ₯Ό κ°μ§ νμΌμ΄ νμνλ©° μ΄κ²μ ν¬κ² 3κ°μ§ μ νμ΄ μλ€.
- ꡬμ±νμΌ
- μΈλ²€ν 리 νμΌ
- νλ μ΄λΆ νμΌ
μ¬μ©μλ μΈκ°μ§ μ νμ νμΌμ μ μ₯ν μμ λλ ν°λ¦¬λ₯Ό λ°λ‘ μμ±νκ³ νμΌμ΄λ νμ λλ ν°λ¦¬λ‘ μμΉμν¨λ€.
Ansible μ€μΉ
μ€μλΈμ communityμμ μ 곡νλ λ¬΄λ£ λ²μ κ³Ό redhatμμ μ 곡νλ μ λ£ λ²μ μ΄ μλ€. λλ λ¬΄λ£ λ²μ μ μ€μΉν κ²μ΄λ€. κ·Έλ¦¬κ³ μ€μλΈ μμ§μ PythonμΌλ‘ μμ±λμ΄ μκΈ° λλ¬Έμ λ²μ μ λ§λ Python ν¨ν€μ§λ₯Ό μ€μΉν΄μΌ νλ€.
Pythonκ³Ό pipμ΄ μ€μΉλμ΄ μλ€λ©΄ λ€μ λͺ λ Ήμ΄λ‘ κ°λ¨νκ² μ€μΉν μ μλ€. 리λ μ€ μμ€ν μΈ κ²½μ° λ¦¬λ μ€ λ³ ν¨ν€μ§ κ΄λ¦¬ λꡬλ₯Ό ν΅ν΄ μ€μΉν μ μλ€. κ·Έλ¦¬κ³ μ€μΉν ν νμΈνκΈ° μν΄ λ²μ μ 보λ₯Ό μΆλ ₯ν μ μλ€.
pip install ansible
# RHEL κΈ°λ°
yum install epel-release
yum install ansible
# Ubuntu
apt-get install software-properties-common
apt-add-repository -y ppa:ansible/ansible
apt-get update
apt-get install -y ansible
ansible --version
ꡬμ±νμΌ
μ¬μ©μλ Ansibleμ μ¬μ©νκΈ° μ μ μ°κ²° μ€μ μ΄λ κΆν μ€μ λ±μ λ³κ²½ν μ μλ€. Ansibleμ λμλ°©λ²μ μ€μ νλ νμΌμ ꡬμ±νμΌμ΄λΌκ³ λΆλ₯΄λ©° μ΄ νμΌμ κΈ°λ³Έμ μΌλ‘ /etc/ansible/ansible.cfgμ μμΉν΄ μλ€. νμ§λ§ λ³΄ν΅ μΌλ°μ μΈ κ²½μ° μ¬μ©μκ° νλ‘μ νΈ λ³λ‘ κ΄λ¦¬νκΈ° μν μμ λλ ν°λ¦¬λ₯Ό λ°λ‘ μμ±ν΄ κ΅¬μ± νμΌμ κ΄λ¦¬νλ€.
Ansible κ΅¬μ± νμΌμ κ° μΉμ μ ν€-κ° μμΌλ‘ μ μλ μ€μ μ΄ ν¬ν¨λ μ¬λ¬ κ°μ μΉμ μΌλ‘ ꡬμ±λλ©° μΉμ μ λͺ©μ λκ΄νΈλ‘ λ¬Άμ¬ μλ€. λ€μμ κ°μ₯ μΌλ°μ μΌλ‘ κ΄λ¦¬νλ μΉμ κ³Ό λ΄μ©μ΄λ€.
[defaults] # μΉμ
μ΄λ¦. κΈ°λ³Έμ μΈ λ΄μ©μ μ€μ
inventory = ./inventory # μΈλ²€ν 리 νμΌ κ²½λ‘ μ§μ
remote_user = user # κ΄λ¦¬ νΈμ€νΈμ μ°κ²°ν λ μ¬μ©ν μ¬μ©μ μ΄λ¦ μ§μ (μ§μ νμ§ μμ κ²½μ° νμ¬ μ¬μ©μ μ΄λ¦μΌλ‘ μ§μ )
ask_pass = false # κ΄λ¦¬ νΈμ€νΈμ ssh μ°κ²°ν λ μνΈλ₯Ό 묻λ λ©μμ§ νμ μ¬λΆ μ§μ
[privilege_escalation] # κΆν μμΉμ μν μ¬μ©μ μ ν μ€μ
become = true # μ°κ²° ν κ΄λ¦¬ νΈμ€νΈμμ μλμΌλ‘ μ¬μ©μλ₯Ό μ νν μ§ μ¬λΆ μ§μ (μΌλ°μ μΌλ‘ rootλ‘ μ ν)
become_method = sudo # μ¬μ©μ μ ν λ°©μ μ§μ (μΌλ°μ μΌλ‘ κΈ°λ³Έκ° sudoλ₯Ό μ¬μ©, suλ μ΅μ
)
become_user = root # κ΄λ¦¬ νΈμ€νΈμμ μ νν μ¬μ©μλ₯Ό μ§μ (μΌλ°μ μΌλ‘ κΈ°λ³Έκ°μΈ root)
become_ask_pass = false #become_method λ§€κ° λ³μμ λν μνΈλ₯Ό 묻λ λ©μμ§ νμ μ¬λΆ μ§μ
μ¬μ©μκ° κ΅¬μ± νμΌμ μ€μ λ λ΄μ©μ νμΈν μ μλλ‘ `ansible-config view`λͺ λ Ήμ΄λ₯Ό μ§μνλ€.
μ°κ²° μ€μ
Ansibleμ μ μ΄λ Έλμμ κ΄λ¦¬νΈμ€νΈλ‘ μ°κ²°νκΈ° μν΄ sshλ₯Ό μ€μ νλ€. μ΄κ²μ defaults μΉμ μ μ μν μ μλ€. sshλ‘ μ°κ²°ν λ μ¬μ©μλͺ μ λ³λλ‘ κ΅¬μ±λμ΄ μμ§ μμΌλ©΄ Ansible λͺ λ Ήμ μ€ννλ λ‘컬 μ¬μ©μμ κ°μ μ¬μ©μ μ΄λ¦μ μ¬μ©νμ¬ κ΄λ¦¬ νΈμ€νΈμ μ°κ²°νλ€. λ€λ₯Έ μ격 μ¬μ©μλ₯Ό μ§μ νλ €λ©΄ remote_user λ§€κ° λ³μλ₯Ό ν΄λΉ μ¬μ©μ μ΄λ¦μΌλ‘ μ€μ νλ€. Ansibleμ μ€ννλ λ‘컬 μ¬μ©μμκ² κ°μΈ ssh ν€κ° μκ±°λ κ΄λ¦¬ νΈμ€νΈμμ μ격 μ¬μ©μλ‘ μΈμ¦ν μ μλλ‘ ν€κ° ꡬμ±λ κ²½μ° Ansibleμ μλμΌλ‘ λ‘κ·ΈμΈλλ€. μΈμ¦μ μν ν€λ₯Ό ꡬμ±νκΈ° μν΄μ ssh-keygen λͺ λ Ήμ΄λ₯Ό μ€ννμ¬ ν€νμ΄λ₯Ό μμ±ν μ μλ€. λν ν€νμ΄ μ€ κ³΅κ°ν€λ₯Ό λ°°ν¬νκΈ° μν΄ ssh-copy-id λͺ λ Ήμ΄λ₯Ό μ§μνλ€. μ μ΄ λ Έλμμ λ€μμ²λΌ λͺ λ Ήμ΄λ₯Ό μ λ ₯νμ¬ ν€λ₯Ό μμ±νκ³ λ°°ν¬νλ€.
ssh-keygen -H '' -f ~/.ssh/id_rsa
ssh-copy-id web1.test.com
κΆν μμΉ
보μ λ° κ°μ¬λ‘ μΈν΄ Ansibleμ μ격 νΈμ€νΈμ κΆνμ΄ μλ μΌλ° μ¬μ©μλ‘ μ°κ²°ν ν κΆνμ μμΉνμ¬ κ΄λ¦¬ μ‘μΈμ€ κΆνμ κ°μ§ root μ¬μ©μλ‘ μ νν μ μλ€. μ΄κ²μ Ansible κ΅¬μ± νμΌμ [privilege_escalation] μΉμ
μ μ€μ ν μ μλ€.
κΈ°λ³Έμ μΌλ‘ κΆν μμΉμ νμ±ννλ €λ©΄ κ΅¬μ± νμΌμ become = true λ§€κ° λ³μλ₯Ό μ€μ νλ€. κΆνμ΄ κΈ°λ³Έμ μΌλ‘ μ€μ λμ΄ μλλΌλ λμ€μ λ€μν λ°©λ²μΌλ‘ μ΄λ₯Ό μ¬μ μν μ μλ€. become_method λ§€κ° λ³μλ κΆνμ μμΉνλ λ°©λ²μ μ§μ νλ€. κΈ°λ³Έκ°μ sudoλ₯Ό μ¬μ©νλ©° become_user λ§€κ° λ³μλ₯Ό ν΅ν΄ μ΄λ€ μ¬μ©μλ‘ μμΉν μ§ μ§μ ν μ μλ€. κΈ°λ³Έκ°μ rootμ΄λ€. μ νν become_methodλ©μ»€λμ¦μμ κΆνμ μμΉνκΈ° μν΄ μ¬μ©μκ° μνΈλ₯Ό μ
λ ₯ν΄μΌ νλ κ²½μ°, κ΅¬μ± νμΌμ become_ask_pass = true λ§€κ° λ³μλ₯Ό μ€μ νλ©΄ λλ€.
κ΄λ¦¬ νΈμ€νΈμλ sshλ‘ μ°κ²°ν μ¬μ©μμκ² sudoλ₯Ό μ¬μ©ν μ μλ κΆνμ΄ μ€μ λμ΄ μμ΄μΌ νλ€. /etc/sudoers νμΌμ μμ±νκ±°λ νΉμ /etc/sudoers.d/ λλ ν 리μ μΆκ° νμΌμ μμ±νμ¬ μ€μ ν μ μλ€. λ€μμ sudo κΆνμ μ€μ νλ λ΄μ©μ΄λ€.
ansible_user ALL=(ALL) NOPASSWD:ALL # μ΄ λ°©λ²λ κ°λ₯νμ§λ§
usermod -aG wheel ansible-user # ν°λ―Έλμμ μ΄ λͺ
λ Ήμ΄λ‘ wheel κ·Έλ£Ήμ μΆκ°νλ κ²μ κΆμ₯
μΈλ²€ν 리(Inventory)
μΈλ²€ν 리 νμΌμλ Ansibleμμ κ΄λ¦¬ν νΈμ€νΈ λͺ©λ‘μ μ μνλ€. νΉμ νΈμ€νΈλ κ·Έλ£Ήμλ ν λΉνμ¬ μ§ν©μ μΌλ‘ κ΄λ¦¬ν μλ μλ€. κ·Έλ£Ήμ νμ κ·Έλ£Ήμ ν¬ν¨ν μ μμΌλ©°, νΈμ€νΈλ μ¬λ¬ κ·Έλ£Ήμ λ©€λ²κ° λ μ μλ€. κ·Έλ¦¬κ³ μΈλ²€ν 리λ νΈμ€νΈ λ° κ·Έλ£Ήμ μ μ©λλ λ³μλ₯Ό μ€μ ν μ μλ€.
νΈμ€νΈ μΈλ²€ν 리λ λ κ°μ§ λ°©λ²μΌλ‘ μ μν μ μλ€. ν μ€νΈ νμΌμ μ¬μ©ν΄μ μ μ νΈμ€νΈ μΈλ²€ν 리λ₯Ό μ μν μ μλ€. κ·Έλ¦¬κ³ μΈλΆ μ 보 νλ‘λ°μ΄λλ₯Ό μ¬μ©νμ¬ νμμ λ°λΌ μ μνλ €λ©΄ Ansible νλ¬κ·ΈμΈμ μ¬μ©νλ©΄ λλ€.
μ μ μΈλ²€ν 리
μ μ μΈλ²€ν 리 νμΌμ ν μ€νΈ νμΌμ΄λ©° μ€μλΈμ΄ κ΄λ¦¬ν νΈμ€νΈλ₯Ό λͺ©λ‘μΌλ‘ μ§μ νλ€. μ΄ νμΌμ μΌλ°μ μΈ INIμ€νμΌ νμ λλ YAMLμ ν¬ν¨ν λ€μν νμμ μ¬μ©νμ¬ μμ±ν μ μμΌλ©° νΈμ€νΈλͺ νΉμ IPμ£Όμλ₯Ό ν μ€μ μ λ ₯νλ€. IPλ λ ΈμΆλλ©΄ 보μμμΌλ‘ μ·¨μ½νλ―λ‘ κΆμ₯νμ§ μλλ€.
#INI μ€νμΌ νμ
web1.test.com
web2.test.com
db1.test.com
db2.test.com
κ·Έλ¦¬κ³ μΈλ²€ν 리 νμΌμλ νΈμ€νΈ κ·Έλ£Ήμ μ§μ ν μλ μλ€. νΈμ€νΈ κ·Έλ£Ήμ μ¬μ©νλ©΄ μ¬λ¬ νΈμ€νΈλ€μ μΌκ΄μ μΌλ‘ μ²λ¦¬ν μ μμ΄μ ν¨μ¬ ν¨κ³Όμ μ΄λ€. κ·Έλ£Ήμ λκ΄νΈλ₯Ό μ¬μ©νμ¬ μ΄λ¦μ μ§μ ν λ€ λ€μ νλΆν° ν μ€μ© κ·Έλ£Ήμ ꡬμ±μ νΈμ€νΈλ€μ λμ΄ν μ μλ€.
[web-servers] # κ·Έλ£Ή
web1.test.com # κ·Έλ£Ήμ ꡬμ±μ νΈμ€νΈ
web2.test.com
[db-servers]
db1.test.com
db2.test.com
νΈμ€νΈλ μ¬λ¬ κ°μ κ·Έλ£Ήμ μμ μ μλ€. μ€μ λ‘ νΈμ€νΈλ₯Ό μ¬λ¬ κ·Έλ£ΉμΌλ‘ ꡬμ±νλ©΄ νΈμ€νΈμ μν , μ€μ μμΉ, νλ‘λμ μ¬λΆ λ±μ λ°λΌ λ€μν λ°©μμΌλ‘ ꡬμ±ν μ μμΌλ―λ‘ μ΄ λ°©λ²μ μ¬μ©νλ κ²μ΄ μ’λ€. κ·Έλ¬λ©΄ νΉμ±, μ©λ λλ μμΉμ λ°λΌ νΉμ νΈμ€νΈ μ§ν©μ Ansible νλ μ΄λ₯Ό μ½κ² μ μ©ν μ μλ€. λν νΈμμ λ κ°μ νΈμ€νΈ κ·Έλ£Ήμ μλμΌλ‘ ꡬμ±νκ³ μλ€.
- all: λͺ¨λ νΈμ€νΈ λͺ©λ‘μ ν¬ν¨νλ κ·Έλ£Ή
- ungrouped: μΈλ²€ν 리μμ κ·Έλ£Ήμ μνμ§ μλ λͺ¨λ νΈμ€νΈ λͺ©λ‘μ€μ²© κ·Έλ£Ή Ansible νΈμ€νΈ μΈλ²€ν 리μ νΈμ€νΈ κ·Έλ£Ήμ μ¬λ¬ κ° ν¬ν¨ν μ μλ€. μ΄ μμ
μ νΈμ€νΈ κ·Έλ£Ή μ΄λ¦ μμ± μ
:childrenμ λ―Έμ¬λ₯Ό μΆκ°νλ©΄ λλ€.
[dev]
web1.test.com
web2.test.com
[prod]
web3.test.com
web4.test.com
[web-servers:children] # dev, prodμ λΆλͺ¨ κ·Έλ£Ή
dev
prod
λ²μ μ§μ
νΈμ€νΈ μ΄λ¦ λ° IPμ£Όμλ₯Ό μμ±ν λ λ²μλ₯Ό μ§μ νμ¬ μΈλ²€ν 리 νμΌμ κ°λ¨ν μμ±ν μ μλ€. κ΄λ¦¬ νΈμ€νΈ κ°μκ° λ§μμ§μ λ°λΌ νμ μκ° λμ΄λ κ°λ μ±μ΄ λ¨μ΄μ§λ μν©μ λ°©μ§νκ³ μ’ λ κ°λ μ±μ λμΌ μ μλ€. λ²μλ μ«μμ μλ¬Έμ ν΄λΉνλ κ°μ μ²μ κ°κ³Ό λ§μ§λ§ κ°μ μ λ ₯νμ¬ νννλ€.
[μ²μ κ°:λ§μ§λ§ κ°]
μΈλ²€ν 리 νμΌ μμΉ μ¬μ μ
μΈλ²€ν 리 νμΌμ κΈ°λ³Έ μμΉλ /etc/ansible/hostsμ
λλ€. νμ§λ§ κ±°μ λλΆλΆ μμ
λλ ν 리λ₯Ό λ°λ‘ μμ±νμ¬ νλ μ΄λΆ νμΌκ³Ό ν¨κ» μμΉμμΌ κ΄λ¦¬νλ€. ansible λͺ
λ Ήμ΄μ -i μΈμλ μΈλ²€ν 리 νμΌμ κΈ°λ³Έ μμΉκ° μλ μ¬μ©μκ° μνλ νμΌλ‘ λ체νλ μ΅μ
μ΄λ€. μ¬μ©μλ μ€μλΈ κ΅¬μ±νμΌμ defaults μΉμ
μμ μΈλ²€ν 리 νμΌμ μμΉλ₯Ό μ μν μλ μλ€.
[defaults]
inventory = ./inventory
λμ μΈλ²€ν 리
Ansible μΈλ²€ν λ¦¬κ° μκ°μ΄ μ§λ¨μ λ°λΌ λ³νλ€κ° λΉμ¦λμ€ μꡬμ λ°λΌ νΈμ€νΈκ° μ’
λ£λλ κ²½μ°, μΈλ²€ν 리 κ΅¬μΆ λ°©λ²μ μ€λͺ
λ μ μ μΈλ²€ν 리 μ루μ
μ μꡬμ λΆν©νμ§ μλ€.
λμ μΈλΆ μΈλ²€ν 리 μμ€ν
μ ν΅ν΄ μ΄λ¬ν μ΅μ
μ ν΅ν©ν©λλ€.
Ansibleμ μΈλ²€ν 리 νλ¬κ·Έ λ° μΈλ²€ν 리 μ€ν¬λ¦½νΈλ₯Ό μ€νν΄ μΈλΆ μΈλ²€ν 리 μ°κ²°μ μ§μνλ€. μΈλ²€ν 리 νλ¬κ·ΈμΈμ κ°μ₯ μ΅κ·Όμ μ
λ°μ΄νΈμ κ°μ₯ μ΅κ·Όμ μ
λ°μ΄νΈμ μ΄μ μ νμ©ν μ μλ€. λμ μΈλ²€ν 리μ νλ¬κ·ΈμΈμ μΆμ²νλ€. μΆκ° λμ μΈλ²€ν 리 μλ³Έμ μ°κ²°ν μ μλ€. μ νν κ²½μ° μΈλ²€ν 리 μ€ν¬λ¦½νΈλ₯Ό μ¬μ©ν μ μλ€. μΈλ²€ν 리 νλ¬κ·ΈμΈμ ꡬννλ©΄ μ€ν¬λ¦½νΈ μΈλ²€ν 리 νλ¬κ·ΈμΈμ ν΅ν΄ λ€μ νΈνμ±μ 보μ₯νλ€.
νλ μ΄λΆ(Playbook)
Ansibleμ νΉμ ν μμ
μ μννκΈ° μν΄ νλ μ΄λΆ νμΌμ μμ
λ΄μ©μ 미리 μ μν΄ λλλ€. μ΄λ νλ μ΄λΆ νμΌμλ λ¨μΌ νΉμ μ¬λ¬ κ°μ νλ μ΄κ° μμ±λ μ μλ€. λ¨μΌ νλ μ΄μλ μμ
λμμ΄ λλ κ΄λ¦¬ νΈμ€νΈ μ 보μ μμ
λ΄μ©μ λ΄κ³ μλ μ λ³΄κ° νμνλ€. μμ
μ νΉμ μμ
μ μννκΈ° μν΄ λͺ¨λ λͺ©λ‘μ ꡬμ±ν νλμ΄λ©° μ¬κΈ°μ μμ±λ λ΄μ©μ μμλλ‘ μ€νλλ€.
νλ μ΄λΆμ YAML ν¬λ§·μΌλ‘ μμ±λ ν
μ€ν νμΌμ΄λ©°, μΌλ°μ μΌλ‘ νμ₯μλͺ
. ymlμ μ¬μ©νμ¬ μ μ₯λλ€. νλ μ΄λΆμ λ°μ΄ν°μ ꡬ쑰λ₯Ό νννκΈ° μν΄ κ³΅λ°± λ¬Έμλ₯Ό μ¬μ©νμ¬ λ€μ¬μ°κΈ°νλ€. YAMLμμλ λ€μ¬μ°κΈ°μ νμν 곡백 μμ λν΄ λ κ°μ§ κΈ°λ³Έ κ·μΉμ΄ μ μ©λλ€.
- κ³μΈ΅ ꡬ쑰μ λμΌν μμ€μ λ°μ΄ν° μμλ κ³΅λ°±μ΄ λμΌν΄μΌ νλ€.
- νμ λͺ©λ‘μ μμ λͺ©λ‘λ³΄λ€ λ€μ¬ μ¨μΌ νλ€.
νλ μ΄λΆμ λ¬Έμμ μμμ λνλ΄λ μμ λ§μ»€μΈ μΈ κ°μ νμ΄ν---κΈ°νΈλ‘ μ€μ μμνλ©° μ’
λ£λ₯Ό λνλ΄λ μ’
λ£ λ§μ»€μΈ μΈ κ°μ λνΈ...λ₯Ό μ
λ ₯ν μ μμ§λ§ λ³΄ν΅ μλ΅ν μ μλ€.
νλ μ΄λΆμ μμ λ§μ»€μ μ’
λ£ λ§μ»€ μ¬μ΄μ νλ μ΄λ€ λͺ©λ‘μ ꡬμ±νλ€. μ΄λ λͺ©λ‘μ νλμ λμ κΈ°νΈλ‘ 곡백μΌλ‘ μμνλ€.
---
- name: test play
hosts: web1.test.com # μμ
λμ
tasks: # μμ
λ΄μ©
- name: create new user
user:
name: user01
uid: 4000
state: present
- name: play2
νλ μ΄ λ΄λΆμμλ ν€μ κ° μμΌλ‘ μμ±λ λ°μ΄ν°λ€μ μ
λ ₯νλ€. λμΌν μμ€μ μΈ κ°μ§ ν€μΈ name, hosts, tasksλ₯Ό μ§μ νκ³ κ° νλͺ©λ³λ‘ κ°μ μ
λ ₯νλ€.
name ν€λ νλ μ΄μ λͺ©μ λ° λͺ©νλ₯Ό λνλ΄λ μ 보μ΄λ©° μμμ λ¬Έμμ΄μ μ
λ ₯ν μ μλ€. name νλͺ©μ νμ νλͺ©μ μλμ§λ§ κ°λ
μ±μ λμ¬μ£ΌκΈ° λλ¬Έμ μ¬μ©νλ κ²μ κΆμ₯νλ€. hostsμ μ
λ ₯λ κ°μ μΈλ²€ν 리μ ν¬ν¨λμ΄ μλ λͺ©λ‘μ μ νν μ μλ€. μ΄λ νΈμ€νΈλ κ·Έλ£Ή νΉμ νΈμ€νΈ ν¨ν΄μ κ°μΌλ‘ μ
λ ₯ν μ μλ€. λ§μ§λ§μΌλ‘ tasks νλͺ©μμλ μ€μ λ‘ μνν μμ
λͺ©λ‘μ ꡬμ±νλ€. tasks νμμλ λμ κΈ°νΈλ₯Ό μ
λ ₯νμ¬ λ¨μΌ νλͺ©μ μ§μ νκ³ μλλ° μ΄λ nameκ³Ό userλΌλ λ κ°μ§ ν€λ₯Ό μ
λ ₯νκ³ μλ€. name νλͺ©μ λ§μ°¬κ°μ§λ‘ λͺ©μ μ μ€λͺ
νλ μ 보μ΄λ©° νμ νλͺ©μ μλλ€. κ·Έλ¦¬κ³ userλΌλ νλͺ©μ λͺ¨λμ΄λΌκ³ λΆλ₯΄λ©° νμ μμ€μΌλ‘ μ
λ ₯λ μΈμλ₯Ό ν΅ν΄ μνλ μμ
λ΄μ©μ ꡬμ±ν μ μλ€.
λͺ¨λμ μ¬μ©μκ° μνλ μμ λ΄μ©μ μνν μ μλλ‘ λ―Έλ¦¬ μ€κ³λμ΄ μμΌλ©° ν€μλλ§ μ λ ₯νλ©΄ κ·Έ μ¦μ λͺ¨λμ μ€νν μ μλ€. λν μμ λͺ©λ‘μλ λ¨μΌ λͺ¨λ νΉμ μ¬λ¬ κ°μ λͺ¨λμ΄ μ μλ μ μλ€.
νλ μ΄λΆ μ€ν
ansible-playbookμ μ μ΄λ
Έλμμ νλ μ΄λΆ νμΌμ λ΄μ©μ μ½μ΄ νλ μ΄λ₯Ό μ€ννλ λͺ
λ Ήμ΄μ΄λ€. νλ μ΄λΆμ μ€ννλ©΄ μ€ν μ€μΈ νλ μ΄μ μμ
μ νμνλ μΆλ ₯μ΄ μμ±λλ€. μΆλ ₯μλ μ€νν κ° μμ
μ κ²°κ³Όκ° λ³΄κ³ λλ€.
μΌλ°μ μΌλ‘ Ansible νλ μ΄λΆμ μμ
μ λ©±λ±μ΄λ©°, νλ μ΄λΆμ μ¬λ¬ λ² μ€ννλ κ²μ΄ μμ νλ€. κ΄λ¦¬ νΈμ€νΈκ° μ΄λ―Έ μ¬λ°λ₯Έ μνμΈ κ²½μ° λ³κ²½λμ§ μλλ€.
μμΈν μμ
μ κ²½κ³Όλ₯Ό μΆλ ₯νκΈ° μν΄μλ -v μ΅μ
μ μ¬μ©ν μ μλ€. vλ¬Έμμ κ°μμ λ°λΌ μμ€μ μ‘°μ ν μ μλ€.
- -v: κ°λ¨ν μμ κ²°κ³Όλ₯Ό νμ
- -vv: μμ κ²°κ³Όμ κ΅¬μ± λ΄μ©μ νμ
- -vvv: κ΄λ¦¬ νΈμ€νΈμ μ°κ²°νκΈ° μν μΆκ° μ 보λ νμ
- -vvvv: μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ€λ©΄ κ΄λ ¨ λ΄μ©λ ν¨κ» νμ
Ansibleμ νλ μ΄λΆμ μ€ννκΈ° μ μ --syntax-check μ΅μ
μΌλ‘ ν΄λΉ ꡬ문μ μ ν¨μ±μ 미리 κ²μ¬νλ κΈ°λ₯μ μ§μνλ€. ꡬ문μ λ¬Έμ κ° μμ κ²½μ° μ€λ₯λ₯Ό λ³΄κ³ νλ€. λν λΉμ·ν κΈ°λ₯μΌλ‘ --checkμ΅μ
μ ν΅ν΄ μ€μ μμ
μ μ²λ¦¬νμ§ μμ§λ§ μμ
μ λν κ²°κ³Όκ° μ΄λ»κ² λ³΄κ³ λλμ§ νμΈν μ μλ κΈ°λ₯μ μ§μνλ€.
λ€μ€ νλ μ΄
λ¨μΌ νλ μ΄λΆμ μ¬λ¬ κ°μ νλ μ΄λ₯Ό μ μν μ μλ€. νλ μ΄λ μμκ° μ§μ λ μμ
λͺ©λ‘κ³Ό μμ
λμμ΄ μ§μ λμ΄ μλ€. μ΄λ λ€μν μμ
λμμ μ§μ ν΄μ κ°κ°μ λμμκ² λ§λ μμ
λͺ©λ‘λ€μ ꡬμ±ν μ μλ€.
μ΄λ¬ν κΈ°λ₯μ μ¬λ¬ νΈμ€νΈμμ λ€μν μμ
μ μνν΄μΌ νλ 볡μ‘ν λ°°ν¬λ₯Ό μ€μΌμ€νΈλ μ΄μ
ν λ λ§€μ° μ μ©νλ€. νλμ νΈμ€νΈ μ§ν©μ λν΄ νλμ νλ μ΄λ₯Ό μ€ννκ³ , ν΄λΉ νλ μ΄κ° μλ£λλ©΄ λ€λ₯Έ νΈμ€νΈ μ§ν©μ λν΄ λ€λ₯Έ νλ μ΄λ₯Ό μ€ννλ νλ μ΄λΆμ μμ±ν μ μλ€.
- name: first play
hosts: dbservers
tasks:
- name: first task
service:
name: mariadb
enabled: true
- name: secodn play
hosts: webservers
tasks:
- name: first task
service:
name: httpd
enabled: true
νλ μ΄μμ μ€μ ν μ μλ νλͺ©μ hosts λ° tasks μ΄μΈμλ μλ²μ μ°κ²°ν μ¬μ©μλ₯Ό μ¬κ΅¬μ±νκ±°λ κΆν μμΉμ μ‘°μ ν μ μλ€.
- name: sample play
hosts: demo-host
remote_user: ansible-user
become: true
tasks:
- name: sample task
service:
name: httpd
enabled: true
λ€μμ λ³μ κ΄λ¦¬μ λν΄ μμ±νκ² λ€.
'Cloud > IaC' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [IaC] Terraform Moduleλ‘ AWS IAMκ³Ό Security Group μμ± (0) | 2025.11.12 |
|---|---|
| [IaC] Terraform Moduleλ‘ AWS Network μμ± (0) | 2025.11.11 |
| [IaC] Terraform module μμ± (1) | 2025.07.18 |
| [IaC] TerraformμΌλ‘ AWS μΈνλΌ κ΄λ¦¬ λ° μλν (0) | 2025.06.30 |
| [IaC] ν λΌνΌ(Terraform)μ΄λ? (0) | 2025.06.28 |