建造一个包含 MongoDB Atlas 的 AWS 着陆区 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

建造一个包含 MongoDB Atlas 的 AWS 着陆区

Igor Alekseev,Amazon Web Services

摘要

此模式描述了如何构建与 MongoDB Atlas 集群集集成的 AWS 着陆区。基础架构是使用 Terraform 脚本自动部署的。

结构良好的多账户 AWS 环境(称为 landing zon e)可提供可扩展性和安全性,尤其适合企业。它为快速部署工作负载和应用程序奠定了基础,有助于确保人们对安全和基础设施的信心。建立 landing zone 需要仔细考虑技术和业务因素,包括账户结构、网络、安全和访问管理。这些考虑因素应与贵组织未来的发展和业务目标保持一致。

此模式的用例包括以下内容。

  • 企业 SaaS 和 PaaS 平台:运行的多租户软件即服务 (SaaS) 应用程序和平台即服务 (PaaS) 平台 AWS 可以使用此设置来帮助提供对 MongoDB Atlas 的安全、私密访问,而无需通过公共互联网暴露数据。

  • 高度监管的行业:银行、金融服务、医疗保健和政府工作负荷要求严格遵守健康保险便携性和责任法案 (HIPAA)、支付卡行业数据安全标准 (PCI DSS)、系统和组织控制2 () 和《通用数据保护条例》(GDPRSOC2) 等标准将受益于:

    • 通过加密的私有连接 AWS PrivateLink

    • MongoDB 副本集的多可用区高可用性

  • 安全 AI/ML 工作负载:Amazon Bedrock、Amazon AI 或自定义 A SageMaker I 模型中的训练或推理管道可以安全地在 MongoDB Atlas 中获取和存储数据。 PrivateLink

  • 灾难恢复和业务连续性:多可用区设计可确保单个可用区故障不会中断工作负载。跨可用区的 Atlas 副本集可确保自动故障转移。这对于金融科技 (fintech) 应用程序、数字银行或医疗保健监控等始终在线的服务至关重要。

先决条件和限制

先决条件

  • 组织所有者可以访问 MongoDB Atlas,因此您可以创建 Atlas API 密钥。有关此要求的信息,请参阅 MongoDB 文档中的管理组织访问权限

  • 活跃AWS 账户的.

  • Terraform,已安装和配置。

  • 使用 MongoDB 版本 6.0 或更高版本创建的 MongoDB Atlas 集群。

  • 熟悉 MongoDB 和 MongoDB Atlas。有关更多信息,请参阅 MongoDB Atlas 文档。

限制

架构

以下参考架构图说明了与 MongoDB Atlas 私有端点集成的 AWS 着陆区的部署设置。该参考架构演示了如何建立与 MongoDB Atlas 集成的安全、可扩展且高度可用的 AWS 着陆区。通过结合多可用区部署、最低权限安全控制和私有连接等 AWS 最佳实践,该设计使组织能够为现代应用程序提供强大的环境。

与 MongoDB Atlas 集成的 AWS landing zone 的多可用区架构。

该架构包括以下内容:

VPC

  • 单个虚拟私有云 (VPC) 跨越三个可用区。

  • VPC 被细分为与每个可用区对齐的子网。这些子网分发工作负载以实现高可用性。

互联网访问

  • 互联网网关为需要的资源(例如应用程序或堡垒主机)提供出站互联网连接。

  • 公有子网可以容纳 NAT 网关,允许私有子网工作负载下载更新、补丁和其他必需的软件包,而无需将其直接暴露在公共 Internet 上。

私有子网和路由表

  • 应用程序组件、微服务或其他敏感资源通常位于私有子网中。

  • 专用路由表控制流量。将私有子网的出站流量定向到 NAT 网关,以实现安全、仅限出站的互联网访问。

  • 来自 Internet 的入站请求流经公有子网中的弹性负载均衡器或堡垒主机(如果使用),然后相应地路由到私有子网资源。

通过 MongoDB Atlas 进行连接 PrivateLink

  • 该架构使用 PrivateLink (通过 VPC 终端节点)安全地连接到 MongoDB Atlas,而无需将您的数据暴露给公共互联网。

  • 请求仍保留在主 AWS 干网络上。传输中的数据受益于 PrivateLink 加密,并且永远不会通过公共互联网路由。

  • MongoDB Atlas 专用 VPC 托管您的主节点和辅助节点,并为您的托管数据库集群提供安全、隔离的环境。

多可用区部署

  • 关键基础设施组件(例如 NAT 网关和应用程序子网)分布在至少三个可用区中。如果可用区出现中断,该架构可确保其余可用区中的工作负载保持正常运行。

  • 默认情况下,MongoDB Atlas 通过副本集提供高可用性,并确保您的数据库层保持容错能力。关键基础设施分布在至少三个可用区中,以实现弹性。

工具

AWS 服务

  • AWS Secrets Manager帮助您将代码中的硬编码凭证(包括密码)替换为以编程方式检索密钥的 API 调用。

其他产品和工具

  • MongoDB Atlas 是一种完全托管的数据库即服务 (DBaaS),用于在云中部署和管理 MongoDB 数据库。

  • Terraform 是一款基础设施即代码 (IaC) 工具 HashiCorp ,可帮助您创建和管理云和本地资源。在这种模式中,您可以使用 Terraform 运行脚本,以便在和 AWS MongoDB Atlas 上部署所需资源。

代码存储库

此模式的代码可在AWS 和 MongoDB Atlas 着陆区存储库中找到。 GitHub

操作说明

Task描述所需技能

确定关键利益相关者。

确定参与您的 landing zone 项目的所有关键利益相关者和团队成员。这可能包括以下角色:

  • 数据库管理员 (DBAs)

  • DevOps 工程师

  • 应用程序开发人员

  • 应用程序架构师

迁移主管

创建结构蓝图。

创建一份蓝图,概述您 AWS 和 MongoDB Atlas 启用的着陆区的所需结构。

迁移主管

制定架构计划。

与您的应用程序架构师合作,分析需求并设计一个容错、有弹性的架构。此模式提供了一个入门架构模板供您参考。您可以自定义此模板以满足您组织的安全和基础架构需求。

云架构师

规划设置和部署。

与所有利益相关者一起确定架构将如何部署、如何实施安全措施以及任何其他方面,以确保与组织和请求团队的利益保持一致。

迁移主管、 DevOps 工程师、数据库管理员
Task描述所需技能

克隆存储库。

通过运行以下命令从GitHub 存储库中克隆代码:

git clone https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone
应用程序开发者、 DevOps 工程师

获取您的 Atlas 组织 ID。

  1. 如果你没有 MongoDB Atlas 账户,请注册一个。

  2. 按照 MongoDB 文档中的步骤创建组织。

  3. 复制组织 ID。

数据库管理员

生成 Atlas 组织级 API 密钥。

要在 Atlas 中生成组织级 API 密钥,请按照 MongoDB 文档中的说明进行操作。

数据库管理员

在中创建密钥 AWS Secrets Manager。

将上一步中生成的 MongoDB Atlas API 密钥作为密钥值密钥存储在 Secrets Manager 中。有关说明,请参阅 Secrets Manager 文档

DevOps 工程师

选择 Atlas 集群等级。

要选择正确的 Atlas 集群层,请按照 MongoDB 文档中的说明进行操作。

数据库管理员
Task描述所需技能

修改 Terraform 脚本。

在存储 GitHub 库的本地副本中,更新 modules/mongodb-atlas/main.tf 文件中的密钥名称(第 12 行),这样 Terraform 就可以在部署期间从 Secrets Manager 检索凭证。

DevOps 工程师

创建 AWS 访问密钥 ID 和私有密钥。

要创建您的 AWS 访问密钥 ID 和密钥,请按照 re AWS : Post 文章中的说明如何创建 AWS 访问密钥?

最佳做法是为策略分配所需的最低权限,但对于这种情况,请选择AdministratorAccess策略。

创建访问密钥后,请查看 IAM 中的安全最佳实践,了解管理访问密钥的最佳实践。

DevOps 工程师

分配弹性 IP 地址。

分配至少两个弹性 IP 地址 IDs。有关说明,请参阅亚马逊 Virtual Private Cloud(亚马逊 VPC)文档

DevOps 工程师

创建 S3 存储桶。

按照亚马逊简单存储服务 (Amazon S3) Service 文档中的说明创建一个 S3 存储桶来存储 Terraform 部署的状态。

DevOps 工程师

更新 S3 存储桶以进行存储。

更新本地版本 environments/development/main.tf 中的 S3 存储桶信息,使其与您在上一步中创建的存储桶的名称和区域相匹配,并指定 key prefix。例如:

terraform { ... backend "s3" { bucket = "startup-name-product-terraform" key = "network/dev" region = "ap-southeast-1" } }

在本示例中,您可以将 Terraform 配置为使用密钥前缀network/dev来组织 Terraform 状态文件。您可以将该值更改为prodstaging与要创建的环境相匹配。有关使用多个环境的信息,请参阅本节的最后一步。

有关 Amazon S3 密钥前缀的更多信息,请参阅 Amazon S3 文档中的使用前缀组织对象

DevOps 工程师

设置 Terraform 变量。

示例着陆区使用 Terraform 变量定义文件定义输入变量值。

变量文件位于 environments/development/variables.tf。可以在 environments/development/terraform.tfv ars 文件中设置变量值。按照 GitHub 存储库的自述文件中所述配置这些变量。

DevOps 工程师

设置环境变量。

如果您计划在本地计算机上运行 Terraform 脚本,请设置以下环境变量:

  • AWS_ACCESS_KEY_ID: AWS 访问密钥 ID

  • AWS_SECRET_ACCESS_KEY: AWS 私有访问密钥

  • AWS_DEFAULT_REGION: AWS 区域

  • TF_LOG: Terraform 日志级别(或DEBUGINFO

有关设置环境变量的更多信息,请参阅 AWS Command Line Interface (AWS CLI) 文档。

DevOps 工程师

检查 VPC 配置。

要遵循推荐的最佳实践 AWS,请在 Terraform 脚本中配置 VPC 和子网 CIDRs、NAT 网关、路由和路由表的设置以满足组织的需求。有关详细信息,请参阅存储库的自述文件。 GitHub

DevOps 工程师

标记 资源。

在 Terraform 脚本部署 AWS 资源时,您可以标记资源以对其进行监控。有关示例,请参阅 GitHub 存储库的自述文件。有关通过成本和使用率等标签监控资源的信息,请参阅 AWS Billing 文档中的激活用户定义的成本分配标签

DevOps 工程师

使用多个环境。

GitHub 存储库提供了一个development环境文件夹。您也可以在环境文件夹中添加自己的环境。

要添加环境,请将该development文件夹复制到下的新文件夹(例如prodstagingenvironments。然后,您可以使用新值更新该terraform.tfvars文件。

DevOps 工程师
Task描述所需技能

初始化 Terraform 工作目录。

要初始化工作目录并下载必要的软件包,请运行以下命令:

terraform init
DevOps 工程师

创建执行计划。

要创建执行计划并可视化 Terraform 将对您的基础架构所做的更改,请运行以下命令:

terraform plan
DevOps 工程师

部署更改。

要按照代码中所述对基础架构进行更改,请运行以下命令:

terraform apply
DevOps 工程师

验证部署。

验证 Terraform 在您的基础架构中创建或修改的组件。

要测试设置,请在 VPC 中或连接到 VPC 中配置计算资源(例如,Amazon EC2 实例或 AWS Lambda 函数)。

DevOps 工程师,应用程序开发人员
Task描述所需技能

清理。

完成测试后,运行以下命令来销毁 Terraform 在您的基础架构中部署的资源:

terraform destroy
DevOps 工程师

相关资源

发现与评测

设置 MongoDB 地图集和环境 AWS

部署着陆区