在本單元中,您將使用 Amazon Elastic Container Service (Amazon ECS) 具現化 EC2 運算執行個體的受管叢集,並將映像部署為在叢集上執行的容器。開始建置

架構概觀

a.用戶端
用戶端透過連接埠 80 向負載平衡器發出請求。

b.負載平衡器
負載平衡器跨所有可用連接埠分配請求。

c.目標群組
執行個體是在應用程式的目標群組中註冊。

d.容器連接埠
每個容器都執行單一應用程式程序,將 node.js 叢集父項繫結至其命名空間內的連接埠 80。

e.容器化 node.js 巨型應用程式
node.js 叢集父項負責將流量分配給巨型應用程式內的工作者。此架構已容器化,但是仍為整合型架構,因為每個容器都具有其餘容器的所有相同功能。

Amazon Elastic Container Service (Amazon ECS) 是可高度擴展、高效能的容器管理服務,可支援 Docker 容器,並讓您在 Amazon EC2 執行個體的受管叢集上輕鬆執行應用程式。 只需進行簡單的 API 呼叫,便可以啟動和停止啟用 Docker 的應用程式、查詢叢集的完整狀態,及使用許多熟悉的功能,包括安全群組、Elastic Load Balancing、EBS 磁碟區和 IAM 角色。

您可以使用 Amazon ECS 來根據資源需求及可用性需求,在叢集排程放置容器。您還可以整合自己的排程器或第三方排程器,以符合商業或應用程式的特定要求。

使用 Amazon ECS 不會收取其他費用。您要支付為存放和執行應用程式所建立的 AWS 資源 (例如,EC2 執行個體或 EBS 磁碟區) 的費用。


請遵循下方的逐步指示,使用 Amazon ECS 部署 node.js 應用程式。 選取每一個步驟號碼來展開區段。

break-the-monolith
  • 步驟 1.使用 AWS CloudFormation 啟動 ECS 叢集

    建立部署在 Application Load Balancer 後面的 Amazon ECS 叢集。

    1. 導覽至 AWS CloudFormation 主控台
    2. 選取建立堆疊
    3. 選取上傳範本檔案並從 amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml 的 GitHub 專案中選擇 ecs.yml 檔案,然後選取下一步
    4. 針對堆疊名稱,輸入 BreakTheMonolith-Demo。驗證其他參數是否具有下列值:
      1. Desired Capacity = 2
      2. InstanceType = t2.micro
      3. MaxSize = 2
    5. 選取下一步
    6. 設定堆疊選項頁面,保留預設選項並向下捲動,然後選取下一步
    7. 檢閱 BreakTheMonolith-Demo 頁面,捲動至頁面底部,透過選取核取方塊確認功能陳述式,然後選取建立堆疊

    您將看到狀態為 CREATE_IN_PROGRESS 的堆疊。您可以選取畫面右上部的重新整理按鈕,以檢查進度。此程序通常在 5 分鐘內完成。

    建立堆疊

    ⚐ 注意:您可以選擇性地使用 AWS Command Line Interface (AWS CLI) 來部署 AWS CloudFormation 堆疊。在終端機中從資料夾 amazon-ecs-nodejs-microservices/3-microservices 執行以下程式碼,然後將 [區域] 取代為 AWS 區域。

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region [region] \
       --stack-name BreakTheMonolith-Demo \
       --capabilities CAPABILITY_NAMED_IAM
  • 步驟 2.檢查您的叢集是否正在執行

    Amazon ECS 驗證叢集
    • 選取叢集 BreakTheMonolith-Demo,然後選取任務標籤,以確認沒有任務正在執行。
    Amazon ECS 叢集任務
    • 選取 ECS 執行個體標籤,確認有兩個由 AWS CloudFormation 範本建立的 Amazon EC2 執行個體。
      ⚐ 注意:如果您收到 ECS 代理程式已過時的訊息,請選取進一步了解取得更新 ECS 代理程式的指示。
    Amazon ECS 執行個體
  • 步驟 3.撰寫任務定義

    任務定義指定 Amazon ECS 如何跨叢集部署應用程式容器。

    • Amazon ECS 左側導覽功能表中,選取任務定義
    • 選取建立新任務定義
    • 選取啟動類型相容性頁面中,選取 EC2 選項,然後選取下一步
    • 設定任務和容器定義頁面,執行以下操作:
      • 任務定義名稱欄位中,輸入 api
      • 向下捲動至容器定義並選取新增容器
      • 新增容器視窗:
        • 未定義的參數可以留空或使用預設設定。
        • 容器名稱欄位中,輸入 api
        • 映像欄位中,輸入 [帳戶 ID].dkr.ecr.[區域].amazonaws.com/api:v1
          使用您的特定資訊取代 [帳戶 ID][區域]。確保標籤 v1 符合您在單元 1 所用的值,以標記和推送映像。這是上一個單元中建立的 ECR 資料儲存器映像的 URL。
        • 記憶體限制欄位中,確認已選取固定限制並輸入值 256
        • 連接埠映射下,主機連接埠 = 0 且容器連接埠 = 3000
        • 捲動至環境,CPU 單位 = 256
    • 選取新增
      您將返回設定任務和容器定義頁面。
    • 捲動至頁面底部並選取建立

    您的任務定義列示在主控台中。

    任務定義
  • 步驟 4.設定 Application Load Balancer:目標群組

    Application Load Balancer (ALB) 讓您的服務接受傳入流量。ALB 會將流量當作 目標群組,自動將其路由至您叢集上執行的容器執行個體。

    檢查您的 VPC 名稱:如果這不是您第一次使用此 AWS 帳戶,您可能具有多個 VPC。使用正確的 VPC 設定目標群組非常重要。

    • 瀏覽至 EC2 主控台的「負載平衡器」區段
    • 找到名為 demo 的負載平衡器。
    • 選中 demo 旁邊的核取方塊,以查看負載平衡器的詳細資訊。
    • 描述標籤中,尋找 VPC 屬性 (採用以下格式:vpc-xxxxxxxxxxxxxxxxx)。
      ⚐ 注意:在設定 ALB 目標群組時,下一步您將需要 VPC 屬性。
    vpc 屬性

    設定 ALB 目標群組

    • 導覽至 EC2 主控台的「目標群組」區段
    • 選取建立目標群組
    • 設定以下目標群組參數 (對於下方未列出的參數,請保留預設值):
      • 針對目標群組名稱,輸入 api
      • 針對協定,選取 HTTP
      • 針對連接埠,輸入 80
      • 針對 VPC,選取與負載平衡器描述中相符的值。這很可能不是您的預設 VPC
      • 存取進階運作狀態檢查設定並按需編輯以下參數: 
        • 針對狀況良好的閾值,輸入 2
        • 針對狀況不良的閾值,輸入 2
        • 針對逾時,輸入 5
        • 針對間隔,輸入 6
    • 選取建立
    刪除目標群組
  • 步驟 5.設定 Application Load Balancer:接聽程式

    ALB 接聽程式會檢查您 ALB 的傳入連線請求。

    新增接聽程式至 ALB

    • 瀏覽至 EC2 主控台的「負載平衡器」區段
    • 選中 demo 旁邊的核取方塊,以查看負載平衡器的詳細資訊。
    • 選取接聽程式標籤。
    • 選取新增接聽程式,然後按需編輯以下參數:
      • 針對協定:連接埠,選取 HTTP 並輸入 80
      • 針對預設動作,選取轉寄至,並在目標群組欄位中輸入 api
    • 選取儲存
    ALB 的接聽程式
  • 步驟 6.將巨型應用程式作為服務部署

    將巨型應用程式作為服務部署至叢集。

    • 導覽至 Amazon ECS 主控台,然後從左側功能表列中選取叢集
    • 選取叢集 BreakTheMonolith-Demo,選取服務標籤,然後選取建立
    • 設定服務頁面上,編輯以下參數 (對於以下未列出的參數,保留預設值): 
      • 針對啟動類型,選取 EC2
      • 針對服務名稱,輸入 api。 
      • 針對任務數目,輸入 1
      • 選取下一步
    • 設定網路頁面的負載平衡區段中,選取 Application Load Balancer
      將出現其他參數:服務 IAM 角色負載平衡器名稱
      • 針對服務 IAM 角色,選取 BreakTheMonolith-Demo-ECSServiceRole。
      • 針對負載平衡器名稱,請確認已選擇 demo
    • 負載平衡的容器區段中,選取新增至負載平衡器
      即會顯示標記有 api:3000 的其他資訊。
    • api:3000 區段,執行以下操作:
      • 針對生產接聽程式連接埠欄位,選取 80:HTTP
      • 針對目標群組名稱,選取群組:api
      • 選取下一步
    • 設定 Auto Scaling 頁面,保留預設設定並選取下一步
    • 檢閱頁面,檢閱設定,然後選取建立服務
    • 建立服務後,選取檢視服務
    Amazon ECS 服務 API

    非常不錯! 您現在已有執行中的服務。容器可能需要 1 分鐘才能註冊為狀況良好並開始接收流量。

  • 步驟 7.測試您的巨型應用程式

    透過檢查服務是否可從網際網路使用並執行 Ping 來驗證您的部署。

    尋找您的服務 URL:

    • 導覽至 EC2 主控台的負載平衡器區段。
    • 選取負載平衡器示範
    • 描述標籤中,複製 DNS 名稱並貼至新瀏覽器標籤或視窗。
    • 您應該會看到一則訊息準備接收請求


    查看服務的每個部分:
    node.js 應用程式根據 URL 將流量路由至每個工作者。若要查看工作者,只需將工作者名稱 api/[工作者名稱] 新增至 DNS 名稱的末尾,如下所示:

    • http://[DNS 名稱]/api/users
    • http://[DNS 名稱]/api/threads
    • http://[DNS 名稱]/api/posts

    您還可以在 URL 末尾新增記錄編號,以深入檢視特殊記錄。例如:http://[DNS 名稱]/api/posts/1http://[DNS 名稱]/api/users/2

    使用者示範