2 min read

透過Atlantis 自動管化管理Terraform (待補權限控制)

在單人工作模式下 terraform 其實很方便,terraform plan 就可以查看現在要部署的Infra ,但若是多人呢?

Atlantis 用來解決多人協作上的問題 。

Atlantis 標準流程可以分為以下步驟

  1. Gitlab MR/ Github PR
  2. 觸發 atlantis plan -> output terraform plan 訊息
  3. 確認後透過評論 atlantis apply 成功後,合併回主分支

以下目前都在Mac上進行測試。

準備條件:

  1. git repo 需有Access Token及webhook Secret
  2. ngrok 因為本地沒有對外IP,所以該方案暫時替代

Atlantis 安裝及啟動指令

因為是在本地運行Atlantis還沒上雲,但需要有個對外可以接收 webhook,所以就先使用ngrok的endpoint,Atlantis 預設是運行在 port 4141

# Mac
brew install atlantis 

# 運行
atlantis server \
    --atlantis-url="https://ngrokxxxxx" \
    --gitlab-hostname="gitlab.xgstudio.co" \
    --gitlab-user="root" \
    --gitlab-token="glpat-xxxxxxxx" \
    --gitlab-webhook-secret="test0408" \
    --repo-allowlist="gitlab.xxxx/sre/xxx/atlantis" \
    --repo-config=./repos.yaml

以下是使用的目錄結構,可以試著將環境進行分類。

以下針對 atlantis 幾個檔案必要的紀錄。

File In Git Description
atlantis.yaml Yes 定義 Atlantis 監控哪些目錄(env/dev)、autoplan 觸發規則、module 變更偵測
repos.example.yaml Yes Server-side config 範例,給團隊成員參考如何設定 Atlantis server
repos.yaml No Atlantis server 實際讀取的權限設定(allow_custom_workflows, allowed_overrides),放 server 本地

實際運行情況

圖1 為接入 atlantis 成功調用,不管成功或失敗都會提示訊息

若確認可以直接在評論處,有權限的話可以輸入 atlantis apply 即可自動去 terraform apply

經由上述操作,即可將權限分開以及每個操作都有記錄,確保不會黑箱操作。

而關於權限分離等後續有時間再整理。