DevOps小幫手: Ansible
有過操作遠端機器的經驗嗎?過去IT總要使用 ssh 進入主機,輸入一行行 linux 指令,人手一紙前人留下的老舊 shell script 到每台電腦上執行。耗時費力,更別說需要處理軟體版本更新或偵錯 shell script 的時候,往往讓人頭痛。
在現代軟體開發的流程中,自動化已經成為提升效率和可靠性的關鍵。而在眾多自動化工具中,Ansible 脫穎而出,成為 DevOps 團隊不可或缺的幫手。本文將帶您快速了解 Ansible 的核心功能、優勢以及如何應用於日常工作。
Ansible 是什麼?
Ansible 是一款開源的自動化工具,旨在簡化 IT 基礎設施的管理和應用程式部署。它採用簡單且直觀的 YAML 語法來定義設定,只需對系統架構有所瞭解便可上手。
優勢
-
簡單易用: Ansible 的設定檔案是以 YAML 格式編寫,結構清晰,語法簡單。
-
可擴展性強:提供豐富的模組庫,開發者也可以自行撰寫模組來滿足特定需求。
-
安全可靠:無需開放額外的端口或安裝代理程式,降低了潛在的安全風險。
-
跨平 台支持:支援多種作業系統(如 Linux、Windows),適合異質環境。
如何使用 Ansible?
Ansible 由 Python 撰寫,所以操作端的機器要先安裝 Python。
安裝指令: pip install ansible
如果想一個個模組個別安裝的話,可以先安裝 pip install ansible-core
,再安裝其他的。
基本組件
Inventory(資源清單):定義目標機器的清單,可為單一或多個伺服器設定分組。
Playbooks(劇本):編寫自動化任務的核心文件,描述需要執行的步驟。
Modules(模組):執行具體操作的功能單位,例如安裝套件或修改設定。
Tasks(任務):在 playbooks 中定義的單一操作。
範例:部署 Web 伺服器
以下是一個簡單的 playbook,示範如何使用 Ansible 部署 Apache 網頁伺服器:
- name: deploy Apache Web server
hosts: webservers
become: true
tasks:
- name: install Apache
apt:
name: apache2
state: present
- name: start and enable Apache service
service:
name: apache2
state: started
enabled: true
以下為示範的 inventory/all.yml
,一個 inventory 檔案可以有許多分組,範例的分組只有一個 all
,底下的host
是一個 key,而 playbook 的 hosts 便是在對應這些主機。在示範的情境下,可以使用all
或host
來對應。
all:
hosts:
host:
ansible_host: 0.0.0.0
ansible_port: 22
ansible_user: admin
ansible_ssh_private_key_file: ~/.ssh/id_rsa
儲存上述 playbook 為 deploy_apache.yml
,並執行以下命令:
ansible-playbook -i inventory deploy_apache.yml
遠端電腦就會安裝 Apache2 ,並啟動服務囉~
要注意的 playbook 的 hosts 允許跟所有符合的 key 對應,例如以下設定檔有財務部跟行銷部兩個分組,各組分別有兩台電腦,當我們的 playbook 指定 hosts: manager
的時候,兩台都會被指定到喔。
好處是可以對大量電腦同時操作,安裝基底環境,不過操作上還是要謹慎點。
finance:
hosts:
manager:
ansible_host: 0.0.0.0
ansible_port: 22
ansible_user: laurence
ansible_ssh_private_key_file: ~/.ssh/id_rsa
laptop1:
ansible_host: 1.1.1.1
ansible_port: 22
ansible_user: joy
ansible_ssh_private_key_file: ~/.ssh/id_rsa
marketing:
hosts:
manager:
ansible_host: 0.0.0.0
ansible_port: 22
ansible_user: Kate
ansible_ssh_private_key_file: ~/.ssh/id_rsa
laptop1:
ansible_host: 1.1.1.1
ansible_port: 22
ansible_user: kevin
ansible_ssh_private_key_file: ~/.ssh/id_rsa
結語
Ansible 的易用性和靈活性使其成為 DevOps 工具箱中的明星。無論是初學者還是資深工程師,都可以通過它實現從部署到管理的全自動化流程。如果您還未使用過 Ansible,不妨從今天開始,讓它成為您 DevOps 路上的得力助手!