Habrahabrã®èªè
ã«ãMarlon Bernardesãcodeheaven.ioã§å
¬éããèšäºãAnsibleã«ã€ããŠç¥ã£ãŠããã¹ã15ã®äºæãã®ç¿»èš³ãæäŸããŸããæè¿ãç§ã¯Ansibleãšå€ãã®ä»äºããããã®éçšã§åŠãã ããšãå
±æããããšã«ããŸããã 以äžã«ãAnsibleã«ã€ããŠç¥ã£ãŠããã¹ã15ã®é
ç®ã®ãªã¹ãã瀺ããŸãã äœãèŠéããŸãããïŒ ã³ã¡ã³ããæ®ããŠãå人çãªãã³ããå
±æããŠãã ããã
1-ããŒã«ã®ãã©ã¡ãŒã¿ãŒãæž¡ãããšãã§ããŸã
ãã¬ã€ããã¯ãæŽçãã圹å²ãäœæããããšããå§ãããŸãã Jenkinsãã€ã³ã¹ããŒã«ããããŒã«ãäœæãããšããŸãã ãã®ããŒã«ã®ãã£ã¬ã¯ããªæ§é ã¯æ¬¡ã®ããã«ãªããŸãã
jenkins/ files/ templates/ tasks/ handlers/ defaults/
defaultsãã£ã¬ã¯ããªã¯ãããŒã«ã®ããã©ã«ã倿°ãä¿åããããã«äœ¿çšãããŸãã ãã®äžã«ã¯
main.ymlãã¡ã€ã«ããããŸãïŒ
jenkins_port: 8080 jenkins_context_path: /jenkins jenkins_home: /jenkins
次ã®ããã«ãããŒã«ã«ããŸããŸãªãã©ã¡ãŒã¿ãŒãæž¡ãããšã§ãããã©ã«ã倿°ããªãŒããŒã©ã€ãã§ããŸãã
roles: - { role: jenkins, jenkins_port: 8181, jenkins_home: '/jenkins1' } - { role: jenkins, jenkins_port: 8080, jenkins_home: '/jenkins2' }
2-ã³ãã³ãã¢ãžã¥ãŒã«ãã¹ãçã«ããæ¹æ³
ã¹ãçæ§ã¯ãæåã®ã¢ããªã±ãŒã·ã§ã³ã®çµæã倿Žããã«ç¹°ãè¿ãå®è¡ã§ããç¹å®ã®æäœã®ããããã£ã§ãã ãã®æŠå¿µã¯ãã»ãšãã©ã®Ansibleã¢ãžã¥ãŒã«ã«ååšããŸããç®çã®æçµç¶æ
ãæå®ããAnsibleãã¿ã¹ã¯ãå®äºããå¿
èŠããããã©ãããæ±ºå®ããŸãã ããã©ã«ãã§ã¯ããã®ååã¯
ã³ãã³ãã¢ãžã¥ãŒã«ã«ã¯é©çšãããŸããã ãã¬ã€ããã¯ã«ã¿ã¹ã¯ãããå Žåãåžžã«å®äºããŸãã
- command: /usr/bin/create-database.sh
ã¹ãçæ§ãå®çŸããã«ã¯ã
creates屿§ã䜿çšã§ããŸãã ååšããå ŽåãAnsibleã¯ããã¡ã€ã«ã§æå®ããããã³ãã¬ãŒããååšããªãå Žåã«ã®ã¿
ã³ãã³ããå®è¡ããŸãã ãŸãã¯ãæå®ããããã¡ã€ã«ãååšããå Žåã«ã®ã¿ã¿ã¹ã¯ãå®è¡ãã
removesã䜿çšã§ããŸãã
- command: /usr/bin/create-database.sh creates=/path/to/database
Ansibleã«ã¯å€ãã®ã¢ãžã¥ãŒã«ããããæãäžè¬çãªæäœã§ã¯
ã³ãã³ãã¢ãžã¥ãŒã«ã䜿çšããå¿
èŠããªãããšã«åžžã«çæããŠãã ããã ããšãã°ã
ãã¡ã€ã«ã·ã¹ãã ã®äœæ ã
iptablesã«ãŒã«ã®å€æŽã cronãžã§ãã®ç®¡çã®ããã®ã¢ãžã¥ãŒã«ããããŸãã ããã©ã«ãã§ã¯ããããã®ã¢ãžã¥ãŒã«ã¯ãã¹ãŠiçã§ãããããåžžã«åªå
ããå¿
èŠããããŸãã
3-Ansibleã»ããã¢ããã¢ãžã¥ãŒã«ã䜿çšããŠãã¹ãã«é¢ããæ
å ±ãåéãã
ãããããAnsibleããã¬ã€ããã¯ãäœæãããšãã«æåã«è¡ãããšã¯æ¬¡ã®ãããªãã®ã§ããããšãããããŸããã
TASK [setup] ******************************************************************* ok: [servername]
ããã¯ãAnsibleãæåã®ã¿ã¹ã¯ãå®è¡ããåã«ç¹å¥ãªã»ããã¢ããã¢ãžã¥ãŒã«ãåŒã³åºãããã§ãã ã»ããã¢ããã¢ãžã¥ãŒã«ã¯ãã¹ãã«æ¥ç¶ããIPã¢ãã¬ã¹ããã£ã¹ã¯å®¹éãããã»ããµã¢ãŒããã¯ãã£ãå©çšå¯èœãªã¡ã¢ãªãªã©ãããããçš®é¡ã®äºå®ãåéããŸãã ãã¹ãã«é¢ããæ
å ±ããã°ããåéããæ¹æ³ãšããŠããã®ã¢ãžã¥ãŒã«ãæåã§åŒã³åºããšäŸ¿å©ã§ãã ãããè¡ãã«ã¯ã次ã®ã³ãã³ããå®è¡ããã ãã§ãïŒ
$ ansible localhost -m setup localhost | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.27.12.77", "192.168.33.1" ], ( ) }
4-ãã¬ã€ããã¯ã®ãã¹ãŠã®ã¿ã¹ã¯ã衚瀺ã§ããŸã
ãã¬ã€ããã¯ãäœãããã®ãèŠããŠããããã§ããïŒ
--list-tasksãã©ã°ã䜿çšããŠ
ansible-playbookãå®è¡ãããšãAnsibleã¯äœ¿çšå¯èœãªãã¹ãŠã®ã¿ã¹ã¯ã衚瀺ããŸãã
$ ansible-playbook install-jenkins.yml --list-tasks PLAY:
5-æ©å¯æ
å ±ãä¿åããå Žåã¯ãansible-vaultã䜿çšããŸã
ã¿ã¹ã¯ã®1ã€ã«æ©å¯æ
å ±ïŒããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ãªã©ïŒãå¿
èŠãªå Žåã¯ããã®æ
å ±ããã¬ãŒã³ããã¹ãã§ã¯ãªããæå·åããã圢åŒã§ä¿åããããšããå§ãããŸãã
Ansibleã«ã¯ãæå·åããããã¡ã€ã«ãäœæããã³ç®¡çã§ãã
ansible-vaultã³ãã³ãã©ã€ã³
ãŠãŒãã£ãªãã£ãä»å±ããŠããŸãã ãããã£ãŠãæå·åããããã¡ã€ã«ãããŒãžã§ã³ç®¡çã·ã¹ãã ã«ãã³ããããã§ããè§£èªãã¹ã¯ãŒããæã€ãŠãŒã¶ãŒã®ã¿ããããèªã¿åãããšãã§ããŸãã
secrets.ymlãã¡ã€ã«ããã¬ã€ããã¯ã«ã€ã³ããŒããããšãæå·åããããã¡ã€ã«ã®èªã¿æ¹ãããããªããããAnsibleã¯ãã¹ããããããŸãã ã³ãã³ãã©ã€ã³åŒæ°
--ask-vault-passãæå®ããå¿
èŠããããŸããããã¯ãæå·åããããã¡ã€ã«ã®ãã¹ã¯ãŒããæäŸããããAnsibleã«ä¿ããŸãã
ansible-playbook playbook.yml -i hosts --ask-vault-password
ãã1ã€ã®æ¹æ³ã¯ããã¹ã¯ãŒãããã¡ã€ã«ã«ä¿åãïŒãããã¯ãããªãã§ãã ããïŒã
-vault-password-fileåŒæ°ã䜿çšããŠãã¡ã€ã«ãžã®ãã¹ãæå®ããããš
ã§ã ã ãã®ãã¡ã€ã«ãå®è¡å¯èœãªå ŽåãAnsibleã¯ãããå®è¡ããåºåããã¹ã¯ãŒããšããŠäœ¿çšããŸãã
ansible-vaultã®è©³çްã«ã€ããŠã¯ããã¡ããã芧ãã ããã
6-with_itemsã䜿çšããããšããå§ãããŸã
with_itemsã䜿çš
ãããš ãAnsibleã¯çŸåšã®å埩ã®å€ãå«ã倿°
{{item}}ãäœæããŸãã äžéšã®ã¢ãžã¥ãŒã«ã¯ã³ã¬ã¯ã·ã§ã³ãéåžžã«ããŸãåŠçããåããã©ã¡ãŒã¿ãŒãç°ãªããã©ã¡ãŒã¿ãŒã§è€æ°åå®è¡ãããããã¯ããã«é«éã§ãã
7-ããŒã«ã«ã¢ã¯ã·ã§ã³ã®ä»çµã¿
ãªã¢ãŒããã¹ãã§å®è¡ãã代ããã«ãããŒã«ã«ãã¹ãã§ã¿ã¹ã¯ãå®è¡ããå¿
èŠãããå ŽåããããŸãã ããã¯ããµãŒããŒãèµ·åãããŸã§åŸ
æ©ããå ŽåïŒéå§ããã°ããã®å ŽåïŒããŸãã¯ãã©ã³ãµãŒããŒã«ã«ããŒãã远å ããïŒãŸãã¯åé€ããïŒå Žåã«åœ¹ç«ã¡ãŸãã
tasks: - name: take out of load balancer pool local_action: > command /usr/bin/take_out_of_pool {{ inventory_hostname }} - name: update application yum: name=acme-web-stack state=latest - name: add back to load balancer pool local_action: > command /usr/bin/take_out_of_pool {{ inventory_hostname }}
以äžã®äŸã¯ãEC2ã€ã³ã¹ã¿ã³ã¹ãéå§ããå©çšå¯èœã«ãªããŸã§åŸ
æ©ããæ¹æ³ã瀺ããŠããŸãã
- name: Launching EC2 Instance
8-ã¿ã¹ã¯ãäžåºŠã ãå®äºããããã«Ansibleã«äŒããããšãã§ããŸã
è€æ°ã®ãã¹ããããå Žåã§ããã¿ã¹ã¯ã1åã ãå®äºããå¿
èŠãããå ŽåããããŸãã äŸãšããŠãåãããŒã¿ããŒã¹ã«æ¥ç¶ããã¢ããªã±ãŒã·ã§ã³ãåããè€æ°ã®ãµãŒããŒããããããŒã¿ããŒã¹ãç§»è¡ããã¿ã¹ã¯ããããšããŸãã ãã®å Žåããã®ã¿ã¹ã¯ãå®äºããå¿
èŠãããã®ã¯1åã ãã§ãã
ãããå®çŸããã«ã¯ãAnsibleã«ã³ãã³ãã1åã ãå®è¡ããããã«æç€ºãã
run_onceãã©ã¡ãŒã¿ãŒã䜿çšã§ããŸãã
- name: run the database migrations command: bundle exec rake db:migrate run_once: true
9-ãã³ãã©ãŒã¯ç¹å¥ãªã¿ã€ãã®ã¿ã¹ã¯ã§ã
ãã³ãã©ãŒã¯ãå¥ã®ã¿ã¹ã¯ããéç¥ãããå Žåã«ã®ã¿å®è¡ãããäžæã®ååãæã€ã¿ã¹ã¯ã§ãã ãµãŒãã¹ã®åèµ·åãã·ã¹ãã ã®åèµ·åã«éåžžã«äŸ¿å©ã§ãã
éç¥ããããã³ãã©ãŒã¯ãéç¥ãã
ãåæ°ã«é¢ä¿ãªãããã¬ã€ããã¯ã®æåŸã«
1åå®è¡ãããŸãã
ãã³ãã©ãŒã䜿çšããŠãããã宣èšãã
notifyã䜿çšããŠåŒã³åºãããšãã§ããŸãã
ãã¡ã€ã«ã®å
容ã倿Žããããšãã«2ã€ã®ãµãŒãã¹ãåèµ·åããæ¹æ³ã®äŸã次ã«ç€ºããŸããããã¡ã€ã«ã倿Žãããå Žåã®ã¿ã§ãïŒäŸã¯
Ansible docsããåãããŠããŸãïŒã
- name: template configuration file template: src=template.j2 dest=/etc/foo.conf notify: - restart memcached - restart apache
ãã³ãã©ãŒã¯ããã¬ã€ããã¯ã®ã©ããã§å®£èšããå¿
èŠããããŸãã
handlers: - name: restart memcached
10-ãã€ãã©ã€ã³ã®å é
Ansibleãããã«é«éã«å®è¡ããããã®ãã³ãïŒ
- ãã€ãã©ã€ã³ãæå¹ã«ãã
ãã€ãã©ã€ã³ãæå¹ã«ãããšãã¹ã¯ãªãããã³ããŒãã代ããã«ãã€ããä»ããŠSSHã»ãã·ã§ã³ã«æž¡ãããšã«ããããªã¢ãŒããµãŒããŒã§ã¢ãžã¥ãŒã«ãå®è¡ããããã«å¿
èŠãªSSHæäœã®æ°ãåæžãããŸãã ãã®çµæãããã«ããçç£æ§ã倧å¹
ã«åäžããŸãã
ãã ããæ³šæããå¿
èŠããããŸãã sudoersãã¡ã€ã«ïŒ/ etc / sudoersïŒå
ã®ãã¹ãŠã®ãªã¢ãŒããã¹ãã§
requirettyãªãã·ã§ã³
ãç¡å¹ã«ãªã£ãŠããå Žåã®ã¿ããã€ãã³ã°ãæ©èœããŸãã
[ssh_connection] pipelining = True
- ãã¡ã¯ãã³ã¬ã¯ã·ã§ã³ãç¡å¹ã«ãããããã¡ã¯ããã£ãã·ã³ã°ãæå¹ã«ããŸã
ã¿ã¹ã¯ã§Ansible Factsã䜿çšããªãå Žåã¯ããã¡ã¯ãåéã¹ãããããªãã«ããŠé床ãäžããããšãã§ããŸãã ãããè¡ãã«ã¯ãåã«
Gather_factsïŒFalseãªãã·ã§ã³ããã¬ã€ããã¯ã«è¿œå ããŸãã
- hosts: servername gather_facts: False tasks: - name: ...
äžæ¹ãAnsibleãã¡ã¯ãïŒã»ããã¢ããã¢ãžã¥ãŒã«ã«ãã£ãŠèªåçã«åéãããïŒã䜿çšããå¿
èŠãããå Žåã¯ããããããã£ãã·ã¥ããŠãåŸç¶ã®å®è¡ãé«éåã§ããŸãã 詳现ãç¥ãããå Žåã¯ã
ããã§Ansibleã®ããã¥ã¡ã³ãã§è©³çްã説æããŠã
ãŸã ã
11-Ansibleã«ã¯ããã€ãã®éç¥ã¢ãžã¥ãŒã«ããããŸã
Ansibleã䜿çšããŠãã«ãŒã°ãªãŒã³å±éãèªååããŸããïŒ ãã¬ã€ããã¯ãå®è¡ããŠæ°ããAWSã€ã³ã¹ã¿ã³ã¹ãæäŸããŸããïŒ éç¥ã¢ãžã¥ãŒã«ã®ããããã䜿çšããŠãããã«ã€ããŠããŒã ã«ç¥ãããŠãã ããã äŸãšããŠã以äžã®ã¿ã¹ã¯ã¯Slackã«éç¥ãéä¿¡ããŸãã
- hosts: servername tasks: - name: Send notification message via Slack local_action: module: slack
éç¥ã¢ãžã¥ãŒã«ã¯ãircãtwillioãhipchatãjabberãªã©ã§ãå©çšã§ããŸãã
12-EC2ã€ã³ã¹ã¿ã³ã¹ã¯ã¿ã°ã«ãã£ãŠèªåçã«ã°ã«ãŒãåãããŸã
Amazon Web Servicesããã³Ansible EC2åçã€ã³ãã³ããªã¹ã¯ãªããã䜿çšããå Žåããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã¯ãã¿ã€ããããŒãã¢ãã¿ã°ãªã©ã®ç¹æ§ã«åºã¥ããŠã°ã«ãŒãåãããŸãã EC2ã¿ã°ã¯ãã€ã³ã¹ã¿ã³ã¹ã«é¢é£ä»ããããkey = valueã§ããã奜ããªããã«äœ¿çšã§ããŸãã ã©ãã«ã䜿çšããŠéçš/ã¹ããŒãžã³ã°ãµãŒããŒãã°ã«ãŒãåãããã«ãŒã°ãªãŒã³å±éäžã«WebãµãŒããŒãŸãã¯ãã¢ã¯ãã£ããªããµãŒããŒã瀺ããŸãã
EC2 Dynamic Inventoryã¹ã¯ãªããã¯ãã¿ã°ã§ãã¹ããã°ã«ãŒãåãããšãã«ã次ã®ãã³ãã¬ãŒãïŒæ¬åŒ§ãªãïŒã䜿çšããŸãã
tag_[TAG_NAME]_[TAG_VALUE]
ãããã£ãŠã
env = stagingã¿ã°ã䜿çšããŠãã¹ãŠã®ããŒãã§ã¿ã¹ã¯ãå®äºãããå Žåã¯ãããããã¬ã€ããã¯ã«è¿œå ããã ãã§ãã
hosts: tag_env_staging tasks: - name: This task will be run on all servers with env == staging
ãããããã«é¢çœãããã«ã¯ã圱é¿ãåãããã¹ããæå®ããŠAnsible
ãã³ãã¬ãŒãã䜿çšã§ããŸãã ããšãã°ãæ¬çªããŒã¿ããŒã¹ãµãŒããŒã§ç¹å®ã®ã¿ã¹ã¯ãå®è¡ããå ŽåïŒé©åã«ããŒã¯ãããŠããå ŽåïŒã次ã®ããã«ã¯ãã¹ãã¿ãŒã³ïŒïŒïŒïŒã䜿çšã§ããŸãã
hosts: tag_env_production&:tag_type_db tasks: - name: This task will be run on all servers with tags 'env=production' and 'type=db'
13-ããã©ã€ã©ã³ãã¢ãŒãã§ã¿ã¹ã¯ãå®è¡ã§ããŸã
Ansibleã¯ããã¬ã€ããã¯ã®ãã©ã€ã©ã³ã¢ãŒãïŒãã§ãã¯ã¢ãŒããšãåŒã°ããŸãïŒã§ã®å®è¡ããµããŒãããŠããŸãã
ãã®ã¢ãŒãã§ã¯ãAnsible
ã¯ãã¹ãã«å€æŽãå ã
ãŸãããããã®ãã©ã°ãªãã§ãã¬ã€ããã¯ãèµ·åãããå Žåã«ã©ã®ãããªå€æŽãè¡ãããããåã«éç¥ããŸãã
äžéšã®ã·ããªãªã§ã¯äŸ¿å©ã§ãããã¿ã¹ã¯ã«æ¡ä»¶ã䜿çšãããŠããå Žåã¯é©åã«æ©èœããªãå ŽåããããŸãã
14-ã¿ã¹ã¯ã¯ã¹ãããããšã«å®äºã§ããŸã
å Žåã«ãã£ãŠã¯ããã¬ã€ããã¯ã®ãã¹ãŠã®ã¿ã¹ã¯ãå®äºããããªãããšããããŸãã
ããã¯ãæ°ãããã¬ã€ããã¯ãäœæããŠãã§ãã¯ã¢ãŠãããå Žåã®äžè¬çãªãœãªã¥ãŒã·ã§ã³ã§ãã
Ansibleã¯ã--
stepãã©ã°ã䜿çšããŠãå®è¡ããã¿ã¹ã¯ã決å®ããæ¹æ³ãæäŸããŸãã
ããã«ãããã¿ã¹ã¯ãå®äºããïŒyïŒãã¹ãããããïŒnïŒããŸãã¯ïŒcïŒç¢ºèªããã«ç¶è¡ããããéžæã§ããŸãã
15-ã¿ã°ã«åºã¥ããŠã¿ã¹ã¯ãå®è¡ã§ããŸã
ã¿ã¹ã¯ãŸãã¯ãã¬ã€ããã¯ã«1ã€ä»¥äžã®ã¿ã°ã远å ã§ããŸãã
ãããè¡ãã«ã¯ã
tags屿§ã䜿çšããŠãã¿ã°ä»ããããããšã«æ³šæããŠãã ããã
åŸã§ãã©ã°ã䜿çšããŠãå®è¡ããã¿ã°ãŸãã¯ã¹ãããããã¿ã°ã決å®ã§ããŸãã
--tags tagname ïŒãŸãã¯åã«
-t ïŒããã³
--skip-tags tagnames ïŒ
è€æ°ã®ã¿ã°ãã³ã³ãã§åºåã£ãŠæå®ã§ããŸãã
æšå¥šäºé
Ansibleã®ããã¥ã¡ã³ãAnsible UpïŒRunning Bookãããªã³ã»ãããã·ã¥ã¿ã€ã³