跳至主要内容

DevOps小幫手: Ansible

· 閱讀時間約 5 分鐘
誠星工作室
Honest Star Studio

有過操作遠端機器的經驗嗎?過去IT總要使用 ssh 進入主機,輸入一行行 linux 指令,人手一紙前人留下的老舊 shell script 到每台電腦上執行。耗時費力,更別說需要處理軟體版本更新或偵錯 shell script 的時候,往往讓人頭痛。

在現代軟體開發的流程中,自動化已經成為提升效率和可靠性的關鍵。而在眾多自動化工具中,Ansible 脫穎而出,成為 DevOps 團隊不可或缺的幫手。本文將帶您快速了解 Ansible 的核心功能、優勢以及如何應用於日常工作。

Ansible 是什麼?

Ansible 是一款開源的自動化工具,旨在簡化 IT 基礎設施的管理和應用程式部署。它採用簡單且直觀的 YAML 語法來定義設定,只需對系統架構有所瞭解便可上手。

優勢

  1. 簡單易用: Ansible 的設定檔案是以 YAML 格式編寫,結構清晰,語法簡單。

  2. 可擴展性強:提供豐富的模組庫,開發者也可以自行撰寫模組來滿足特定需求。

  3. 安全可靠:無需開放額外的端口或安裝代理程式,降低了潛在的安全風險。

  4. 跨平台支持:支援多種作業系統(如 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 便是在對應這些主機。在示範的情境下,可以使用allhost來對應。

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 路上的得力助手!