Dev Talks

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

  1. 開啟一個 EC2,安裝 docker

  2. 製作 worker AMI

  3. 回到原有的 EC2,安裝 Gitlab Runner

  4. 製作 manager AMI

  5. 開啟 AWS EC2 Template,新增一個以 worker AMI 為基礎的 template

    1. 設定 Security Group,如圖中的第一列,來源為該 SG 的 ID:

    2. 在 User Data 加上要自動執行的指令:

      #!/bin/bash
      # Start docker daemon
      sudo service docker start
      sudo chown ec2-user:docker /var/run/docker.sock
      
  6. 開啟 AWS EC2 Template,新增一個以 worker AMI 為基礎的 template

    1. 給予具有 SSM & Route53 權限的 IAM role
    2. 設定 Security Group(同 worker template)
    3. 在 User Data 加上自動開啟 docker daemon(同 worker template)

Route53 Settings

這時候可以從 Manager Template 開啟一個 EC2,去到 Route53 中的托管區域(Hosted Zone),把這個 EC2 的 public IP addr 設定 A record


想要閱讀更多來自五倍紅寶石軟體開發的技術分享?歡迎訂閱我們的月報,每月將自動幫你送上最新文章。


分享