使用 AWS Fargate、AWS 私人連結和 Network Load Balancer 在 Amazon ECS 上私密存取容器應用程式 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS Fargate、AWS 私人連結和 Network Load Balancer 在 Amazon ECS 上私密存取容器應用程式

由基蘭庫瑪 ‧ 錢德拉瑟卡 (AWS) 創作

環境:生產

技術:容器與微服務;網路;安全性、身分識別、法規遵循;網站與 Web 應用程式

工作負載:所有其他工作負載

AWS 服務:AWS EC2 Container Registry; 亞馬遜 ECS; 亞馬遜 EFS; 亞馬遜 RDS; 亞馬遜 VPC; Elastic Load Balancing;

此模式描述如何在 Amazon Web 服務 (AWS) 雲端上使用具有 AWS Fargate 啟動類型的 Amazon Elastic Container Service (Amazon ECS)、Network Load Balancer 後面的 AWS Fargate 啟動類型,以及使用 AWS PrivateLink 存取應用程式。Amazon ECS 上執行的應用程式關聯式資料庫服務 (Amazon RDS) 以高可用性 (HA) 來託管 Amazon ECS 上執行的應用程式關聯式資料庫。如果應用程式需要永久性儲存裝置,您可以使用 Amazon Elastic File System (Amazon EFS)。

此模式使用Fargate 發射類型,以執行 Docker 應用程式的 Amazon ECS 服務,前端設有 Network Load Balancer。然後可以與虛擬私有雲端 (VPC) 端點建立關聯,以便透過 AWS PrivateLink 進行存取。然後可以使用 VPC 端點與其他 VPC 共用此 VPC 端點服務。

您可以將 Fargate 搭配 Amazon ECS 來執行容器,而無需管理 Amazon EC2 執行個體的伺服器或叢集。您也可以使用 Amazon EC2 Auto Scaling 群組,而不是 Fargate。如需詳細資訊,請參閱「」使用 AWS PrivateLink 和 Network Load Balancer 在 Amazon ECS 上私有存取容器應用程式

先決條件

技術堆疊

  • Amazon CloudWatch

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon ECS

  • Amazon EFS

  • Amazon RDS

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Fargate

  • AWS Lambda

  • AWS PrivateLink

  • AWS Secrets Manager

  • Application Load Balancer

  • 網路負載平衡器

  • VPC

自動化和擴充

  • Amazon ECS— Amazon EElastic Container Service (Amazon ECS) 是具高可擴展性且快速的容器管理服務,可以在叢集上輕鬆執行、停止和管理容器。

  • Amazon ECR— Amazon ECR 是受管的 AWS 容器映像登錄服務,具安全性、可擴展性和可靠性。

  • Amazon EFS— Amazon Elastic File System (Amazon EFS) 提供簡單、可擴展、全受管的彈性 NFS 檔案系統,可與 AWS 雲端服務和現場部署資源搭配使用。

  • AWS Fargate— AWS Fargate 是一項技術,可與 Amazon ECS 搭配使用以執行容器,無需管理 Amazon EC2 執行個體的伺服器或叢集。

  • AWS Lambda— Lambda 是一項運算服務,可讓您執行程式碼,無需佈建或管理伺服器。

  • Amazon RDS— Amazon Relational Database Service (Amazon RDS) 是一種 Web 服務,可以讓 AWS 雲端中關聯式資料庫的設定、操作和擴展更加簡單。

  • Amazon S3— Amazon Simple Storage Service (Amazon S3) 是網際網路儲存服務。此服務旨在降低開發人員進行網路規模運算的難度。

  • AWS Secrets Manager— Secrets Manager 可協助您將程式碼中硬式編碼的登入資料 (包括密碼),改成透過 API 呼叫 Secrets Manager,以程式設計方法擷取秘密。

  • Amazon VPC— Amazon Virtual Private Cloud (Amazon VPC) 可協助您將 AWS 資源啟動到您定義的虛擬網路。

  • Elastic Load Balancing— Elastic Load Balancing (ELB) 可在多個目標 (例如 EC2 執行個體、容器和 IP 地址) 間將傳入的應用程式流量或網路流量分散到多個可用區域。

  • Docker— Docker 可協助開發人員輕鬆打包、運送和執行任何應用程式,做為輕量型、可攜式和自給自足的容器。

任務描述所需技能
建立 VPC。

登入 AWS 管理主控台並開啟 Amazon VPC 主控台。選擇「啟動 VPC 精靈」,選擇「具有單一公用子網路的 VPC」,然後選擇「選取」。在 Configuration (組態) 頁面上,針對 VPC 輸入您的 VPC 名稱,然後選擇適當的 CIDR 區塊範圍。根據您的規格設定剩餘的選項。選擇「建立 VPC」,然後選擇「確定」關閉狀態視窗。

Cloud 管理員
建立私人子網路。

在 Amazon VPC 主控台上,選擇「子網路」,然後選擇「建立子網路」。視需要指定子網路詳細資訊,然後選擇 Create (建立)。重複這些步驟以建立額外的三個子網路。兩個子網用於 Amazon ECS 任務,兩個子網用於 Amazon RDS 資料庫。

Cloud 管理員
任務描述所需技能
建立 Network Load Balancer。

開啟 Amazon EC2 主控台並選擇包含您 VPC 的 AWS 區域。在「負載平衡」之下,選擇「負載平衡器」,然後選擇「建立負載平衡器」。選擇「Network Load Balancer」,然後選擇「建立」。在「設定負載平衡器」頁面上,設定您的 Network Load Balancer 和監聽器。重要:確保您選擇網絡負載平衡器的配置為「內部」。然後選擇適用的安全性設定,設定安全性群組和目標群組。在「設定路由」部分中,選擇「IP」作為「目標類型」。確保您沒有註冊目標。完成所有設定後,請選擇 Next (下一個: 檢閱」,然後選擇「建立」。如需此故事和其他故事的協助,請參閱 < 相關資源 > 一節。

Cloud 管理員
建立 Application Load Balancer。

在 Amazon EC2 主控台上,選擇包含 VPC 的相同區域。在「負載平衡」之下,選擇「負載平衡器」,然後選擇「建立負載平衡器」。選擇「Application Load Balancer」,然後選擇「建立」。設定您的 Application Load Balancer 及其接聽程式。重要:確保您將應用程序負載平衡器的方案選擇為「內部」。然後選擇適用的安全性設定,設定安全性群組和目標群組。在「設定路由」部分中,選擇「IP」作為「目標類型」。確保您沒有註冊目標。完成所有設定後,請選擇 Next (下一個: 檢閱」,然後選擇「建立」。

Cloud 管理員
任務描述所需技能
建立 Amazon EFS 檔案系統。

開啟 Amazon EFS 主控台並選擇「建立檔案系統」。在 Create file System (建立檔案系統) 對話方塊中,為您的檔案系統輸入名稱,然後選擇 VPC。選擇 Create (建立) 以建立檔案系統。設定和設定 Amazon EFS 檔案系統。

Cloud 管理員
掛載子網路的目標。

返回 Amazon EFS 主控台並選擇「檔案系統」。「檔案系統」頁面會顯示您帳戶中的 Amazon EFS 檔案系統。選擇您建立的檔案系統,然後選擇「管理」以顯示「可用區域」。若要新增掛載目標,請選擇「新增掛載目標」,然後新增您建立的四個私人子網路。

Cloud 管理員
確認子網路已掛載為目標。

在 Amazon EFS 主控台上,選擇「檔案系統」。選擇「網路」以顯示現有掛載目標的清單。請確定這些包含您建立的四個子網路。

Cloud 管理員
任務描述所需技能
建立 S3 儲存貯體。

如有需要,開啟 Amazon S3 主控台並建立 S3 儲存貯體以存放您應用程式的靜態資產。

Cloud 管理員
任務描述所需技能
建立 AWS KMS 金鑰以加密 Secrets Manager 密碼。

開啟 AWS Key Management Service (AWS KMS) 主控台並建立 KMS 金鑰。

Cloud 管理員
建立 Secrets Manager 秘密來存放 Amazon RDS 密碼。

開啟 AWS Secrets Manager 主控台,然後選擇「儲存新的秘密」來建立新的秘密。選擇您建立的 KMS 金鑰,並儲存您的新密碼。

Cloud 管理員
任務描述所需技能
建立資料庫子網路群組。

開啟 Amazon RDS 主控台並選擇「子網路群組」。選擇 Create Database 子網路群組,然後輸入您資料庫子網路群組的名稱和描述。選擇您稍早建立的 VPC,然後選擇可用區域和子網路。然後選擇「建立」。

Cloud 管理員
建立 Amazon RDS 執行個體。

在私有子網路內建立和設定 Amazon RDS 執行個體。確定已開啟「異地同步備份」以獲得高可用性 (HA)。

Cloud 管理員
將資料載入 Amazon RDS 執行個體。

將應用程式所需的關聯式資料載入您的 Amazon RDS 執行個體。這個過程將根據您的應用程序的需求,以及數據庫結構描述的定義和設計方式而有所不同。

DBA
任務描述所需技能
建立 ECS 叢集。

開啟 Amazon ECS 主控台並選擇「叢集」。然後選擇「建立叢集」,並根據您所需的規格設定 ECS 叢集。

Cloud 管理員
建立 Docker 映像。

依照 < 相關資源 > 一節中的指示建立 Docker 映像。

Cloud 管理員
建立 Amazon ECR 儲存庫。

開啟 Amazon ECR 主控台並選擇「存放庫」。選擇 Create repository (建立儲存庫) 並為您的儲存庫輸入獨一無二的名稱。根據您的規格設定存放庫,如有需要,包括 AWS KMS 加密。

雲端管理員, DevOps 工程師
將 Docker 映像推送至 Amazon ECR 儲存庫。

識別要推送的 Docker 映像,並在 AWS CLI 中運行「碼頭映像」命令。使用 Amazon ECR 登錄檔、儲存庫和選擇性的映像標籤名稱組合來標記映像。然後通過運行「碼頭推送」命令來推送 Docker 映像。針對所有必要的映像重複此步驟。

Cloud 管理員
建立 Amazon ECS 任務定義。

在 Amazon ECS 中執行 Docker 容器需要的是任務定義。返回 Amazon ECS 主控台並選擇「任務定義」,然後選擇「建立新任務定義」。在「選取相容性」頁面上,選取您任務應該使用的啟動類型,然後選擇 Next step (下一個步驟)。如需設定工作定義的說明,請參閱 < 相關資源 > 一節中的 < 建立工作定義 >。重要:確保您提供您推送到 Amazon ECR 的 Docker 映像。

Cloud 管理員
創建一個 ECS 服務,並選擇 Fargate 作為啟動類型。

使用您先前建立的 ECS 叢集建立 Amazon ECS 服務。確保選擇「Fargate」作為啟動類型,然後選擇在上一個步驟中創建的任務定義,並選擇 Application Load Balancer 的目標組。

Cloud 管理員
任務描述所需技能
設定 AWS PrivateLink 終端節點。

開啟 Amazon VPC 主控台並建立 AWS PrivateLink 端點。將此終端節點與 Network Load Balancer 建立關聯,這樣可讓客戶私下使用 Amazon ECS 上託管的應用程式。如需詳細資訊,請參閱 < 相關資源 > 一節。

Cloud 管理員
任務描述所需技能
建立 VPC 端點。

為您先前建立的 AWS PrivateLink 終端節點建立 VPC 終端節點。VPC 端點完整網域名稱 (FQDN) 將指向 AWS PrivateLink 端點 FQDN。這會建立網域名稱服務端點可存取的 VPC 端點服務的 elastic network interface。

Cloud 管理員
任務描述所需技能
建立 Lambda 函數。

開啟 Lambda 主控台並建立 Lambda 函數,將 Application Load Balancer IP 位址更新為 Network Load Balancer 的目標。如需有關這方面的詳細資訊,請參閱 < 相關資源 > 一節中的 < 使用靜態 IP 位址的應用程式負載平衡器 > 部落格文章。

應用程式開發

建立負載平衡器:

建立 Amazon EFS 檔案系統:

建立 S3 儲存貯體:

建立 Secrets Manager 秘密:

建立 Amazon RDS 執行個體:

建立 Amazon ECS 元件:

設定 AWS PrivateLink:

建立 VPC 端點:

建立 Lambda 函數:

其他資源: