

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

# 建置包含 MongoDB Atlas 的 AWS 登陸區域
<a name="build-aws-landing-zone-that-includes-mongodb-atlas"></a>

*Igor Alekseev，Amazon Web Services*

*Anuj Panchal，MongoDB*

## 總結
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-summary"></a>

此模式說明如何建置與 MongoDB Atlas 叢集整合的 AWS 登陸區域。基礎設施會使用 Terraform 指令碼自動部署。

結構良好的多帳戶 AWS 環境稱為[登陸區域](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-migration/aws-landing-zone.html)，可提供可擴展性和安全性，特別是企業。它可作為工作負載和應用程式快速部署的基礎，並有助於確保對安全性和基礎設施的信心。建置登陸區域需要仔細考慮技術和商業因素，包括帳戶結構、聯網、安全和存取管理。這些考量事項應與組織的未來成長和業務目標保持一致。

此模式的使用案例包括下列項目。
+ **企業 SaaS 和 PaaS 平台：**在 上執行的多租戶軟體即服務 (SaaS) 應用程式和平台即服務 (PaaS) 平台 AWS 可以使用此設定，協助提供對 MongoDB Atlas 的安全私有存取，而無需透過公有網際網路公開資料。
+ **高度監管的產業**：銀行、金融服務、醫療保健和政府工作負載需要嚴格遵守健康保險流通與責任法案 (HIPAA)、支付卡產業資料安全標準 (PCI DSS)、系統和組織控制 2 (SOC2) 和一般資料保護法規 (GDPR) 等標準，受益於：
  + 透過 加密的私有連線 AWS PrivateLink
  + MongoDB 複本集的異地同步備份高可用性
+ **安全的 AI/ML 工作負載**：Amazon Bedrock、Amazon SageMaker AI 或自訂 AI 模型中的訓練或推論管道，可以透過 PrivateLink 安全地擷取和存放 MongoDB Atlas 中的資料。
+ **災難復原和業務持續性**：多可用區設計可確保單一可用區域故障不會中斷工作負載。跨可用區域的 Atlas 複本集可確保自動容錯移轉。這對金融技術 （金融技術） 應用程式、數位銀行或醫療保健監控等全年無休的服務至關重要。

## 先決條件和限制
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-prereqs"></a>

**先決條件**
+ 組織擁有者可存取 MongoDB Atlas，因此您可以建立 Atlas API 金鑰。如需此需求的相關資訊，請參閱 MongoDB 文件中的[管理組織存取](https://www.mongodb.com/docs/atlas/tutorial/manage-organizations/)。
+ 作用中的 [AWS 帳戶](https://aws.amazon.com/resources/create-account/)。
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)，已安裝並設定。
+ 使用 MongoDB 6.0 版或更新版本建立的 MongoDB Atlas 叢集。
+ 熟悉 MongoDB 和 MongoDB Atlas。如需詳細資訊，請參閱 [MongoDB Atlas 文件](https://www.mongodb.com/docs/atlas/)。

**限制**
+ 有些 AWS 服務 完全無法使用 AWS 區域。如需區域可用性，請參閱[AWS 服務 依區域](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。如需特定端點，請參閱[服務端點和配額](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然後選擇服務的連結。

## Architecture
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-architecture"></a>

下列參考架構圖說明與 MongoDB Atlas 私有端點整合之 AWS 登陸區域的部署設定。此參考架構示範如何建立與 MongoDB Atlas 整合的安全、可擴展且高可用性的 AWS 登陸區域。透過結合多可用區部署、最低權限安全控制和私有連線等 AWS 最佳實務，此設計可讓組織為現代應用程式佈建強大的環境。

![與 MongoDB Atlas 整合的 AWS 登陸區域的異地同步備份架構。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/72d335b9-b5b1-4fe2-9972-65edbec60ab1/images/82a8cc98-6f22-4e28-a236-57a809930055.png)


此架構包含下列項目：

**VPC**
+ 單一虛擬私有雲端 (VPC) 跨越三個可用區域。
+ VPC 會細分為與每個可用區域對齊的子網路。這些子網路會分配工作負載以獲得高可用性。

**網際網路存取**
+ 網際網路閘道可為所需的資源提供傳出網際網路連線，例如應用程式或堡壘主機。
+ 公有子網路可以容納 NAT 閘道，允許私有子網路工作負載下載更新、修補程式和其他必要的套件，而不會直接公開到公有網際網路。

**私有子網路和路由表**
+ 應用程式元件、微服務或其他敏感資源通常位於私有子網路中。
+ 專用路由表控制流量流程。將來自私有子網路的傳出流量路由到 NAT 閘道，以實現安全、僅限輸出的網際網路存取。
+ 來自網際網路的傳入請求會流經公有子網路中的彈性負載平衡器或堡壘主機 （如果使用的話），然後適當地路由至私有子網路資源。

**透過 PrivateLink 的 MongoDB Atlas 連線**
+ 此架構使用 PrivateLink （透過 VPC 端點） 安全地連線至 MongoDB Atlas，而不會將您的資料暴露至公有網際網路。
+ 請求會保留在 AWS 骨幹網路上。傳輸中的資料受益於 PrivateLink 加密，且絕不會透過公有網際網路路由。
+ MongoDB Atlas 專用 VPC 託管您的主要和次要節點，並為受管資料庫叢集提供安全、隔離的環境。

**多可用區域部署**
+ 關鍵基礎設施元件 （例如 NAT 閘道和應用程式子網路） 會分佈在至少三個可用區域。如果可用區域發生中斷，此架構可確保剩餘可用區域中的工作負載保持運作。
+ 根據預設，MongoDB Atlas 透過複本集提供高可用性，並確保您的資料庫層保持容錯能力。關鍵基礎設施會分散到至少三個可用區域，以提供彈性。

## 工具
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-tools"></a>

**AWS 服務**
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 可協助您以 API 呼叫取代程式碼中的硬式編碼登入資料，包括密碼，以程式設計方式擷取秘密。

**其他產品和工具**
+ [MongoDB Atlas](https://www.mongodb.com/atlas) 是全受管資料庫即服務 (DbaaS)，用於在雲端中部署和管理 MongoDB 資料庫。
+ [Terraform](https://www.terraform.io/) 是 HashiCorp 的基礎設施即程式碼 (IaC) 工具，可協助您建立和管理雲端和內部部署資源。在此模式中，您會使用 Terraform 執行指令碼，以協助在 AWS 和 MongoDB Atlas 上部署所需的資源。

**程式碼儲存庫**

此模式的程式碼可在 [AWS 和 MongoDB Atlas 登陸區域](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone) GitHub 儲存庫中使用。

## 史詩
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-epics"></a>

### 完成探索和評估
<a name="complete-discovery-and-assessment"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 識別關鍵利益相關者。 | 識別參與登陸區域專案的所有主要利益相關者和團隊成員。這可能包括下列角色：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html) | 遷移潛在客戶 | 
| 建立結構藍圖。 | 建立藍圖，概述 AWS 和啟用 MongoDB Atlas 的登陸區域所需的結構。 | 遷移潛在客戶 | 
| 建立架構計劃。 | 與您的應用程式架構師合作，以分析需求並設計容錯且具彈性的架構。此模式提供入門架構範本供您參考。您可以自訂此範本，以滿足組織的安全和基礎設施需求。 | 雲端架構師 | 
| 規劃設定和部署。 | 與所有利益相關者一起決定如何部署架構、如何實作安全措施，以及任何其他層面，以確保與組織和請求團隊的利益保持一致。 | Migration Lead，DevOps 工程師，DBA | 

### 設定 MongoDB Atlas 環境
<a name="set-up-the-mongodb-atlas-environment"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 複製儲存庫。 | 執行 命令，從 [GitHub 儲存庫](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone)複製程式碼：<pre>git clone https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone</pre> | 應用程式開發人員、DevOps 工程師 | 
| 取得您的 Atlas 組織 ID。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html) | DBA | 
| 產生 Atlas 組織層級 API 金鑰。 | 若要在 Atlas 中產生組織層級 API 金鑰，請遵循 [MongoDB 文件](https://www.mongodb.com/docs/atlas/configure-api-access/#grant-programmatic-access-to-an-organization)中的指示。 | DBA | 
| 在 中建立秘密 AWS Secrets Manager。 | 將上一個步驟中產生的 MongoDB Atlas API 金鑰儲存為 Secrets Manager 中的金鑰值秘密。如需說明，請參閱 [Secrets Manager 文件](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。 | DevOps 工程師 | 
| 選取 Atlas 叢集層。 | 若要選取正確的 Atlas 叢集層，請遵循 [MongoDB 文件](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)中的指示。 | DBA | 

### 設定 AWS 環境
<a name="set-up-the-aws-environments"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 修改 Terraform 指令碼。 | 在 GitHub 儲存庫的本機副本中，更新 [module/mongodb-atlas/main.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/3748350730ec2ac7ab64662d536b67b4840c667c/modules/mongodb-atlas/main.tf#L12) 檔案 （第 12 行） 中的秘密名稱，因此 Terraform 可以在部署期間從 Secrets Manager 擷取登入資料。 | DevOps 工程師 | 
| 建立 AWS 存取金鑰 ID 和私密金鑰。 | 若要建立您的 AWS 存取金鑰 ID 和私密金鑰，請遵循 AWS re：Post 文章中的指示[如何建立 AWS 存取金鑰？](https://repost.aws/knowledge-center/create-access-key)<br />最佳實務是指派具有所需最低權限的政策，但在此案例中，請選取`AdministratorAccess`政策。<br />建立存取金鑰後，請檢閱 [IAM 中的安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)，以了解管理存取金鑰的最佳實務。 | DevOps 工程師 | 
| 配置彈性 IP 地址。 | 配置至少兩個彈性 IP IDs。如需說明，請參閱 [Amazon Virtual Private Cloud (Amazon VPC) 文件](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithEIPs.html)。 | DevOps 工程師 | 
| 建立 S3 儲存貯體。 | 遵循 Amazon Simple Storage Service (Amazon S3) 文件中的指示，建立 S3 儲存貯體以存放 Terraform 部署的狀態。 [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) | DevOps 工程師 | 
| 更新 S3 儲存貯體以進行儲存。 | 更新本機版本 [environments/development/main.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/83e0b52cc4a8c12b24b54edeecbae496880d3615/environments/development/main.tf#L16) 中的 S3 儲存貯體資訊，以符合您在上一個步驟中建立的儲存貯體名稱和區域，並指定金鑰字首。例如：<pre>terraform {<br />       ...<br />  backend "s3" {<br />    bucket = "startup-name-product-terraform"<br />    key    = "network/dev"<br />    region = "ap-southeast-1"<br />  }<br />}</pre><br />在此範例中，您可以將 Terraform 設定為使用金鑰字首`network/dev`來組織 Terraform 狀態檔案。您可以將 值變更為 `prod`或 `staging`，以符合您要建立的環境。如需使用多個環境的資訊，請參閱本節中的最後一個步驟。<br />如需 Amazon S3 金鑰字首的詳細資訊，請參閱 Amazon S3 文件中的[使用字首組織物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html)。 | DevOps 工程師 | 
| 設定 Terraform 變數。 | 範例登陸區域使用 [Terraform 變數定義檔案來定義輸入變數](https://www.terraform.io/docs/language/values/variables.html#variable-definitions-tfvars-files)值。<br />變數檔案位於 [environments/development/variables.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/environments/development/variables.tf)。您可以在 [environments/development/terraform.tfvars](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/environments/development/terraform.tfvars) 檔案中設定變數值。如 GitHub 儲存庫的[讀我檔案](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#terraform-variables)所述設定這些變數。 | DevOps 工程師 | 
| 設定環境變數。 | 如果您打算在本機電腦上執行 Terraform 指令碼，請設定下列環境變數：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html)<br />如需設定環境變數的詳細資訊，請參閱 [AWS Command Line Interface (AWS CLI) 文件。](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-set) | DevOps 工程師 | 
| 檢查 VPC 組態。 | 若要遵循 建議的最佳實務 AWS，請在 Terraform 指令碼中設定 VPC 和子網路 CIDRs、NAT 閘道、路由和路由表的設定，以符合組織的需求。如需詳細資訊，請參閱 GitHub 儲存庫的[讀我檔案](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#vpc-configurations)。 | DevOps 工程師 | 
| 標記 資源。 | 您可以標記 AWS 資源，以便在 Terraform 指令碼部署它們時對其進行監控。如需範例，請參閱 GitHub 儲存庫的[讀我檔案](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#resource-taggings)。如需透過標籤監控資源的成本、用量等資訊，請參閱 AWS Billing 文件中的[啟用使用者定義的成本分配標籤](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activating-tags.html)。 | DevOps 工程師 | 
| 使用多個環境。 | GitHub 儲存庫提供`development`環境資料夾。您也可以在環境資料夾中新增自己的環境。<br />若要新增環境，請將 `development` 資料夾複製到 下的新資料夾 （例如， `prod`或 `staging`)`environments`。然後，您可以使用新值更新`terraform.tfvars`檔案。 | DevOps 工程師 | 

### 部署登陸區域
<a name="deploy-the-landing-zone"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 初始化 Terraform 工作目錄。 | 若要初始化工作目錄並下載必要的套件，請執行 命令：<pre>terraform init</pre> | DevOps 工程師 | 
| 建立執行計畫。 | 若要建立執行計畫並將 Terraform 對基礎設施所做的變更視覺化，請執行 命令：<pre>terraform plan</pre> | DevOps 工程師 | 
| 部署變更。 | 若要如程式碼所述實作基礎設施的變更，請執行 命令：<pre>terraform apply</pre> | DevOps 工程師 | 
| 驗證部署。 | 驗證 Terraform 在基礎設施中建立或修改的元件。<br />若要測試設定，請在 中佈建運算資源 （例如 Amazon EC2 執行個體或 AWS Lambda 函數） 或連接到 VPC。 | DevOps 工程師，應用程式開發人員 | 

### 移除資源
<a name="remove-resources"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 清除。 | 完成測試後，請執行下列命令來銷毀 Terraform 部署在基礎設施中的資源：<pre>terraform destroy</pre> | DevOps 工程師 | 

## 相關資源
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-resources"></a>

**探索和評估**
+ [登陸區域設定的管理秘訣 ](https://docs.aws.amazon.com/controltower/latest/userguide/tips-for-admin-setup.html)(AWS Control Tower 文件）
+ [對登陸區域組態的期望](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-configure.html) (AWS Control Tower 文件）
+ [登陸區域更新的最佳實務 ](https://docs.aws.amazon.com/controltower/latest/userguide/lz-update-best-practices.html)(AWS Control Tower 文件）

**設定 MongoDB Atlas 和 AWS 環境**
+ [取得 MongoDB Atlas](https://aws.amazon.com/marketplace/pp/prodview-pp445qepfdy34) (AWS Marketplace)
+ [記憶體](https://docs.atlas.mongodb.com/sizing-tier-selection/#memory) (MongoDB Atlas 文件）
+ [使用 Atlas 範例資料集調整大小範例](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--the-service-sample-data-sets) (MongoDB Atlas 文件）
+ [行動應用程式的大小範例 ](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--mobile-app)(MongoDB Atlas 文件）
+ [網路流量](https://docs.atlas.mongodb.com/sizing-tier-selection/#network-traffic) (MongoDB Atlas 文件）
+ [叢集自動擴展 ](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#cluster-auto-scaling)(MongoDB Atlas 文件）
+ [Atlas 大小調整範本](https://www.mongodb.com/docs/atlas/sizing-tier-selection/) (MongoDB Atlas 文件）
+ [設定網路對等互連 ](https://docs.atlas.mongodb.com/security-vpc-peering/)(MongoDB Atlas 文件）
+ [Atlas 中的私有端點](https://docs.atlas.mongodb.com/security-private-endpoint/) (MongoDB Atlas 文件）
+ [用戶端欄位層級加密 ](https://docs.mongodb.com/manual/core/security-client-side-encryption)(MongoDB 資料庫文件）
+ [自動加密](https://docs.mongodb.com/manual/core/security-automatic-client-side-encryption) (MongoDB 資料庫文件）
+ [選取叢集層](https://www.mongodb.com/docs/atlas/manage-clusters/#select-cluster-tier) (MongoDB Atlas 文件）

**部署登陸區域**
+ [上的 Terraform AWS](https://docs.aws.amazon.com/whitepapers/latest/cicd_for_5g_networks_on_aws/terraform.html) （白皮書*上適用於 5G 網路的 CI/CD AWS*)
+ [MongoDB Atlas 搭配 Terraform](https://www.mongodb.com/developer/products/atlas/mongodb-atlas-with-terraform/) (MongoDB 文件）