AWS Config

這個部分在 COSCUP 的演講提到的內容很少,主要是因為時間的關係,不過我覺得這部分的設定也蠻重要的,所以會在這邊全部列出來!

AMI & Template 比較

為了簡化開 EC2 的程序,我這邊會用到 AMI 與 Template 這兩個服務,先稍微比較一下他們的定義:

  • AMI (software only):映像檔服務,保留 EC2 上的所有安裝套件
  • Template (hardware only):EC2 模板,保留一樣的 EC2 啟動精靈(包含硬體設定與 User data)

架構簡介

根據上一篇介紹的 Swarm 架構,我們會有兩種節點,分別需要的套件與設定對應如下:

Node Type Manager Worker
1. AMI Docker, Gitlab Runner Docker
2. Template Start Docker Engine
Specify Security Group
SSM & Route53 IAM role
Start Docker Engine
Specify Security Group
  • 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:

      /assets/img/sg.png

    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

/assets/img/route53.png