試用 Load testing 工具 - Drill

Drill 是一個以程式語言 Rust 撰寫的輕量級 HTTP Load testing 工具,Load testing 工具百百款,之所以會特別想認識 Drill 則是因為該工具的一段簡介「You can write benchmark files, in YAML format, describing all the stuff you want to test. It was inspired by Ansible syntax because it is really easy to use and extend.」 看到上面那段簡介,身為 Ansible 的使用者,怎麼可以不來驗證一下,是不是真的如它所言! (本文撰寫時,使用的 Drill 版本為 0.7.1。) (本文同步發表於 Medium。) 操作步驟 我們知道試用任何工作的第一步是先看官方文件! 錯!當然是先看有沒有已經包好立即可用的 Container image!(咦) 可惜在撰文的當下,尚未看見官方有自己包好 Container image,在 Docker Hub 只有找到 Drill 版本 0.5.0 的 Docker image。 https://hub.docker.com/r/xridge/drill 由於沒有最新版的 Container image,只好自己 build 一個,這邊就偷懶不追求 Container Size 的最小化,先搶快做出 Drill 0....

July 18, 2021 · Cheng Wei Chen

以 Ansible 建立 Azure Virtual Machines

因為一些緣故,要再次嘗試透過 Ansible 建立 Azure 的一些資源,於是重新踏入這個坑進行了一番研究。Azure 和其他雲端供應商一樣,提供的服務越來越多樣,同時也支援越來越多服務都能以 Infrastructure as Code 的方式創建與管理,不過既然是重新入坑,還是先從簡單的動作開始著手,首先嘗試以 Ansible 來建立一個 Azure Virtual machines。 (本文同步發表於 Medium、Laravel 道場) 為 Ansible 取得必要的權限 不管是使用哪一種 Infrastructure as Code 或 Configuration Management 工具,如要透過工具直接管理或操作雲端服務,首先都要為工具取得必要的授權及權限。而目前在 Azure 和 Ansible 的官網上,皆已經有文件在教學如何透過 Ansible 來管理 Azure,但在查閱了數篇之後發現,Azure 能夠提供授權給 Ansible 使用的方式主要有兩種: Active Directory Username/Password Service Principal Credentials 而本文將會採用第二種「Service Principal Credentials」。 如果你打算按著文件,逐一步驟建立「Service Principal Credentials」,我可以預告你很有可能會遇見一個坑,那就是明明是按著文件圖文一步步地操作,但最終就是無法輕易找到下面這四個所需參數。 subscription_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx client_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx secret=xxxxxxxxxxxxxxxxx tenant=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 在嘗試幾種操作之後,個人發現目前最簡單的做法應該是這份文件提到的指令。 使用 Azure CLI 來建立 Azure 服務主體(英文版) 只要按著文件中說明的 Azure CLI 指令 az ad sp create-for-rbac,即可順利透過它取得上述四個參數中的後三項。而最簡單執行 Azure CLI 的方式,則是透過 Azure portal 的 Cloud Shell。 只要登入 Azure portal,在點擊上方工具列 Cloud Shell 的 Icon 即可操作它。...

December 17, 2018 · Cheng Wei Chen

跟著 geerlingguy 大神一起測試 Ansible Roles (2)

延續上一篇文章,針對公開放上 Ansible Galaxy 的 Roles,我們能夠完全比照 geerlingguy 大神的測試方式,直接使用 Travis Ci。但如果是一些不打算公開的 Roles,那就只好使用自己的 CI Server 來測試,在這篇文章中就讓我們用 GitLab CI 來進行測試。 (本文同步發表於 Medium、Laravel 道場) 在文章開始之前要先打預防針,其實轉換並不難,特別是如果你早已看懂 geerlingguy 的測試方法,那還請忽略本文,因為對於高手而言這篇文章很可能只是在說廢話啦 XD。 GitLab CI 的詳細使用方式就不多說了,請參閱官方文件。GitLab 依然有提供免費註冊,並且也有提供有限免費的 CI Runner 可以使用,因此想要試用又不想自行架設者,可以先註冊免費帳號來試用。 使用 GitLab CI 的方式與 Travis CI 類似,同樣都是在專案內新增一個 yaml 檔案,並在其中定義 CI Pipeline 與 CI Job,而 GitLab CI 預設使用的檔名為 .gitlab-ci.yml。因此其實我們只要仿造在前一篇文章中說明過的 geerlingguy 大神之測試方法,在 .gitlab-ci.yml 中,將其轉換成 GitLab CI 可以接受的方式即可。 預備多種測試環境 與 Travis CI 相同,GitLab CI 也支援使用 docker 來建立不同的測試環境,因此在 .gitlab-ci.yml 中,需要特別註明要使用支援 Docker 的 Runner,並且替每個 CI Job 指定所使用的 Docker Image。...

May 28, 2018 · Cheng Wei Chen

跟著 geerlingguy 大神一起測試 Ansible Roles

如同程式需要測試,Ansible Playbook 或 Roles 其實也是某種 Code,因此最好也能為其撰寫適當的測試。本文就讓我們向 Ansible 圈內的大神 geerlingguy 求教,學習 geerlingguy 大神測試 Roles 的方式。 (本文同步發表於 Medium、Laravel 道場) 本文的內容也正是我在 DevOps Taiwan Meetup #13 - Ansible User 小聚所分享的閃電秀,當時的簡報在此: 「跟著 geerlingguy 大神一起測試 Ansible Roles」 建立你的 Roles 並透過 Travis CI 測試 要學習 geerlingguy 大神的測試方式之前,當然請先準備好你的 Roles,將其推上 GitHub。關於 Roles、Ansible Galaxy 及 GitHub 三者的關係,這邊就不再重複說明了,請直接參閱凍仁翔的文章「怎麼在 Ansible Galaxy 分享 Roles?」(上、下)。 推上 GitHub 之後,接著要將 Repository 與 Travis CI 建立串連,這部分也同樣可以參閱凍仁翔的文章「怎麼用 Travis CI 測試 Roles?」。 接下來就讓我們一窺 geerlingguy 大神是如何測試的。 geerlingguy 大神的測試妙招 Ansible 的使用者們應該或多或少都曾使用或參考過 geerlingguy 大神所撰寫的 Roles,如此大量高品質的 Roles,全部都有通過 Travis CI 測試,到底是如何做到的?關鍵在於 geerlingguy 充分利用了 Travis CI 的特性,並且撰寫一支專門協助測試的 shell script。...

April 29, 2018 · Cheng Wei Chen

ansible-container 的二度踩雷之旅

自從上次(2016年)試用 ansible-container 遭遇慘痛的踩雷經驗之後,如今 ansible-container 的版本號已進入 0.9.2,據說文件及穩定度皆已有所改善,因此決定趁著放假撥一點空檔再次試用它,希望這次的試用過程不會像上次一樣地慘痛。 (本文同步發表於 Medium、Laravel 道場)  以乾淨的 Ubuntu 16.04 環境試用 根據官方文件,ansible-container 的 Prerequisites 為 Python 2.7 or Python 3.5 pip setuptools 20.0.0+ 因此決定直接以乾淨的 ubuntu 16.04 環境挑戰,避免遇到 python 版本或相依套件的問題。首先透過 Vagrant 建立乾淨的 ubuntu 16.04,並在 VM 內安裝 Docker。接著以下面指令安裝 pip。 apt-get update apt-get install python-pip pip install --upgrade pip 接著按官方文件安裝 ansible-container。 pip install ansible-container[docker] ([] 內除了可以填 docker 之外,也可填寫另外兩種 engines,分別是 k8s 及 openshift。) 順利安裝後即可執行 ansible-container -h,查看 help。 試用 ansible-container 開始簡易地試用 ansible-container...

March 6, 2018 · Cheng Wei Chen

讓您安心執行 Ansible playbook 的小技巧(2)

延續小技巧(1),本文繼續分享兩個與 Ansible playbook 有關的小技巧,希望大家都能安安心心地執行自己所的撰寫 playbook。 (本文同步發表於 Medium)  (Photo by John Schnobrich on Unsplash) 在 playbook 內適當的設立檢查點與中斷點 在小技巧(1)中,主要提及的都是執行指令 ansible-playbook 時可以添加的 options,而在本文則分享兩個常用的 modules。 善用 debug 檢查 相信有在使用 Ansible 的使用者們都知道,在撰寫 playbook 過程中,經常有一些 Modules 是我們會重複使用的,其中一個即是 debug。 在 playbook 當中,有時為了讓各個 tasks 能夠順利串連,我們會將部分 tasks 的結果透過 register 註冊為新的 variables,提供後續的 tasks 能以此進行邏輯判斷。 而為了確認這些 variables 取得的值或結果是否合乎自己的預期,一般在撰寫 playbook 的過程中,便會直接透過 debug 將其印出,方便自己能夠直接進行除錯與檢查。 # 舉例: command: whoami register: check_user debug: msg="{{ check_user }}" debug 非常單純,即是幫你將 msg 中的資訊印出,因此非常適合適時地安插在 playbook 當中作為檢查點,讓你可以在執行 playbook 之後快速檢查執行成果是否都如你預期。...

February 14, 2018 · Cheng Wei Chen

讓您安心執行 Ansible playbook 的小技巧(1)

在剛開始接觸組態管理工具(Configure Management Tool,或常見譯為配置管理工具)的時候,應該都會經歷過一段日子,就是擔心自己寫的自動化腳本會不會有問題,特別是當腳本要使用在 Production 環境時,總是會再三的確認,深怕自己一個不小心,不但沒省事,反而把 Production 環境搞壞了。 本文簡單地談談在 Ansible 中有哪些小技巧可以幫助你降低這些憂慮,放膽執行您的 playbook。 (本文同步發表於 Medium)  (Photo by John Schnobrich on Unsplash) 在實際執行 playbook 之前的三個基本 Options 先從 ansible-playbook 指令內建的 Options 開始說起,有三個 Options 是最基本的檢查,分別是: --syntax-check --list-tasks --list-hosts –syntax-check 首先是 --syntax-check,它可以用來幫你檢查 playbook 有沒有格式或語法錯誤,不過其實我們不用手動執行它,因為當你執行 ansible-playbook 時,就已預設會先進行語法檢查了。 所以在 --help 中也是這麼說明的。 --syntax-check perform a syntax check on the playbook, but do not execute it (謎之音:那你還浪費篇幅介紹它。) 對於現代的開發者而言,「語法檢查」通常會跟工程師使用的編輯器、IDE 綁在一起,讓語法檢查能夠自動完成,以 ATOM 為例就有 pacakage - linter-ansible-syntax 可以幫助我們在撰寫 playbook 時即能完成語法檢查。...

February 3, 2018 · Cheng Wei Chen