Deploy Rails with Docker Swarm (3) - 實際部署流程:AWS
簡巧恩, Rails 工程師
Sep 6, 2022
AWS Config
這個部分在 COSCUP 的演講提到的內容很少,主要是因為時間的關係,不過我覺得這部分的設定也蠻重要的,所以會在這邊全部列出來!
AMI & Template 比較
為了簡化開 EC2 的程序,我這邊會用到 AMI 與 Template 這兩個服務,先稍微比較一下他們的定義:
- AMI (software only):映像檔服務,保留 EC2 上的所有安裝套件
- Template (hardware only):EC2 模板,保留一樣的 EC2 啟動精靈(包含硬體設定與 User data)
架構簡介
根據上一篇介紹的 Swarm 架構,我們會有兩種節點,分別需要的套件與設定對應如下:
- Manager node:需要安裝 Gitlab Runner 讓我們自動化操控這些節點,並且需要多給予 SSM & Route53 權限,分別讓我們可以進入 EC2 下指令、與操作 DNS 相關的設定
- Security Group:指定 worker & manager 使用同個 SG,並且在這個 SG 裡開啟「所有 port 允許任何來自此 SG 的 inboud」,不過這邊開啟所有 port 的權限只是為了方便所設定,實際上還是只能指定 Docker Swarm 裡溝通用的那幾個 port,可以參考官方文件上的說明。除了這個規則以外,記得要開放 http & https 的 port!
EC2 Settings
-
開啟一個 EC2,安裝 docker
-
製作 worker AMI
-
回到原有的 EC2,安裝 Gitlab Runner
-
製作 manager AMI
-
開啟 AWS EC2 Template,新增一個以 worker AMI 為基礎的 template
-
設定 Security Group,如圖中的第一列,來源為該 SG 的 ID:
-
在 User Data 加上要自動執行的指令:
#!/bin/bash # Start docker daemon sudo service docker start sudo chown ec2-user:docker /var/run/docker.sock
-
-
開啟 AWS EC2 Template,新增一個以 worker AMI 為基礎的 template
- 給予具有 SSM & Route53 權限的 IAM role
- 設定 Security Group(同 worker template)
- 在 User Data 加上自動開啟 docker daemon(同 worker template)
Route53 Settings
這時候可以從 Manager Template 開啟一個 EC2,去到 Route53 中的托管區域(Hosted Zone),把這個 EC2 的 public IP addr 設定 A record
想要閱讀更多來自五倍紅寶石軟體開發的技術分享?歡迎訂閱我們的月報,每月將自動幫你送上最新文章。