

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 スクリプトを使用して自動的にデプロイされます。

ラン[ディングゾーン](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-migration/aws-landing-zone.html)と呼ばれるよく構造化されたマルチアカウント AWS 環境は、特に企業にスケーラビリティとセキュリティを提供します。これは、ワークロードとアプリケーションを迅速にデプロイするための基盤として機能し、セキュリティとインフラストラクチャの信頼性を確保するのに役立ちます。ランディングゾーンを構築する場合は、アカウント構造、ネットワーク、セキュリティ、アクセス管理などの技術的およびビジネス上の要因を慎重に検討する必要があります。これらの考慮事項を、組織の将来の成長とビジネス目標に一致させる必要があります。

このパターンのユースケースには、次のようなものがあります。
+ **エンタープライズ SaaS および PaaS プラットフォーム:** で実行されるマルチテナント Software as a Service (SaaS) アプリケーションおよび Platform as a Service (PaaS) プラットフォーム AWS は、この設定を使用して、パブリックインターネット経由でデータを公開することなく、MongoDB Atlas への安全なプライベートアクセスを提供できます。
+ **規制の厳しい業界**: Health Insurance Portability and Accountability Act (HIPAA)、Payment Card Industry Data Security Standard (PCI DSS)、System and Organization Controls 2 (SOC2)、一般データ保護規則 (GDPR) などの基準に厳密に準拠する必要がある銀行、金融サービス、医療、政府機関のワークロードには、以下によるメリットがあります。
  + を介した暗号化されたプライベート接続 AWS PrivateLink
  + MongoDB レプリカセットのマルチ AZ 高可用性
+ **安全な AI/ML ワークロード**: Amazon Bedrock、Amazon SageMaker AI、またはカスタム AI モデルのトレーニングパイプラインまたは推論パイプラインは、PrivateLink 経由で MongoDB Atlas にデータを安全に取得して保存できます。
+ **ディザスタリカバリとビジネス継続性**: マルチ AZ 設計により、単一のアベイラビリティーゾーンの障害によってワークロードが中断されることはありません。アベイラビリティーゾーン間で設定された Atlas レプリカにより、自動フェイルオーバーが保証されます。これは、金融技術 (フィンテック) アプリ、デジタルバンキング、医療モニタリングなどの常時稼働サービスにとって重要です。

## 前提条件と制限
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-prereqs"></a>

**前提条件**
+ Atlas API キーを作成するための、MongoDB Atlas への組織所有者アクセス権。この要件の詳細については、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)」を参照して、サービスのリンクを選択してください。

## アーキテクチャ
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-architecture"></a>

次のリファレンスアーキテクチャ図は、MongoDB Atlas プライベートエンドポイントと統合された AWS ランディングゾーンのデプロイ設定を示しています。このリファレンスアーキテクチャは、MongoDB Atlas と統合された安全でスケーラブルで可用性の高い AWS ランディングゾーンを確立する方法を示しています。マルチ AZ 配置、最小特権のセキュリティコントロール、プライベート接続などの AWS ベストプラクティスを組み合わせることで、組織は最新のアプリケーション向けに堅牢な環境をプロビジョニングできます。

![\[MongoDB Atlas と統合された AWS ランディングゾーンのマルチ AZ アーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/72d335b9-b5b1-4fe2-9972-65edbec60ab1/images/82a8cc98-6f22-4e28-a236-57a809930055.png)


このアーキテクチャは以下の要素で構成されます。

**VPC**
+ 単一の仮想プライベートクラウド (VPC) が 3 つのアベイラビリティーゾーンをカバーしています。
+ この VPC は、アベイラビリティーゾーンごとのサブネットとして分割されます。これらのサブネットは、ワークロードを分散して高可用性を実現します。

**インターネットアクセス**
+ インターネットゲートウェイは、アプリケーションや踏み台ホストなど、インターネット接続を必要とするリソースのアウトバウンドインターネット接続を提供します。
+ パブリックサブネットには NAT ゲートウェイを格納できます。こうすることにより、プライベートサブネットワークロードは更新、パッチ、その他の必要なパッケージを、パブリックインターネットに直接公開することなくダウンロードできるようになります。

**プライベートサブネットとルートテーブル**
+ アプリケーションコンポーネント、マイクロサービス、またはその他の機密性の高いリソースは通常、プライベートサブネット内に置かれます。
+ 専用ルートテーブルはトラフィックフローを制御します。プライベートサブネットから NAT ゲートウェイに直接アウトバウンドトラフィックをルーティングして、Egress-Only の安全なインターネットアクセスを実現します。
+ インターネットからのインバウンドリクエストは、パブリックサブネット内の伸縮性のあるロードバランサーまたは踏み台ホスト (使用する場合) を経由し、プライベートサブネットリソースに適切にルーティングされます。

**PrivateLink を介した MongoDB Atlas 接続**
+ このアーキテクチャでは、(VPC エンドポイントを介して) PrivateLink を使用して、データをパブリックインターネットに公開することなく MongoDB Atlas に安全に接続します。
+ リクエストは AWS バックボーンネットワークに残ります。転送中のデータには PrivateLink 暗号化の利点があり、パブリックインターネット経由でルーティングされることはありません。
+ MongoDB Atlas 専用 VPC は、プライマリノードとセカンダリノードをホストし、安全で隔離された環境をマネージドデータベースクラスターに提供します。

**マルチ AZ 配置**
+ 重要なインフラストラクチャコンポーネント (NAT ゲートウェイやアプリケーションサブネットなど) は、少なくとも 3 つのアベイラビリティーゾーンに分散されます。アベイラビリティーゾーンで機能停止が発生した場合、このアーキテクチャにより、残りのアベイラビリティーゾーンのワークロードが引き続き動作します。
+ MongoDB Atlas は、レプリカセットを通じた高可用性をデフォルトで提供し、データベースレイヤーの耐障害性を維持します。重要なインフラストラクチャが少なくとも 3 つのアベイラビリティーゾーンに分散されることいより、レジリエンスを実現します。

## ツール
<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) は、MongoDB データベースをクラウドにデプロイおよび管理するためのフルマネージド型 Database as a Service (DbaaS) です。
+ 「[Terraform](https://www.terraform.io/)」は、HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。このパターンでは、Terraform を使用してスクリプトを実行し、 AWS と MongoDB Atlas に必要なリソースのデプロイを容易にします。

**コードリポジトリ**

このパターンのコードは、GitHub の [AWS and MongoDB Atlas Landing Zone](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone) リポジトリで入手できます。

## エピック
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-epics"></a>

### 検出および評価の完了
<a name="complete-discovery-and-assessment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 主要なステークホルダーを識別 | ランディングゾーンプロジェクトに関与するすべての主要なステークホルダーとチームメンバーを特定します。これには、次のようなロールが含まれる可能性があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html) | 移行リード | 
| 構造ブループリントを作成 |  AWS と MongoDB Atlas 対応ランディングゾーンの必要な構造を概説する設計図を作成します。 | 移行リード | 
| アーキテクチャプランを作成 | アプリケーションアーキテクトと協力して要件を分析し、耐障害性と回復力に優れたアーキテクチャを設計します。このパターンは、参照用のスターターアーキテクチャテンプレートを提供します。このテンプレートは、組織のセキュリティとインフラストラクチャのニーズに合わせてカスタマイズできます。 | クラウドアーキテクト | 
| セットアップとデプロイを計画 | すべてのステークホルダーと共に、アーキテクチャのデプロイ方法、セキュリティ対策の実装方法、その他の側面を決定し、組織の利益とリクエスト元のチームの利益を合致させます。 | 移行リード、DevOps エンジニア、DBA | 

### MongoDB Atlas 環境のセットアップ
<a name="set-up-the-mongodb-atlas-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リポジトリのクローン作成 | コマンドを実行して、[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/ja_jp/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>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Terraform スクリプトを変更 | GitHub リポジトリのローカルコピーで、[Modules/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)必要な最小特権でポリシーを割り当てるのがベストプラクティスですが、この場合は `AdministratorAccess` ポリシーを選択します。アクセスキーを作成したら、「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を読み、アクセスキーを管理するためのベストプラクティスを確認してください。 | DevOps エンジニア | 
| Elastic IP アドレスの割り当て | 少なくとも 2 つの Elastic IP アドレス ID を割り当てます。手順については、[Amazon Virtual Private Cloud (Amazon VPC) のドキュメント](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithEIPs.html)を参照してください。 | DevOps エンジニア | 
| S3 バケットを作成する | [Amazon Simple Storage Service (Amazon S3) ドキュメント](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)の手順に従って、Terraform デプロイの状態を保存する S3 バケットを作成します。 | 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>この例では、キープレフィックス `network/dev` を使用して Terraform 状態ファイルを整理するように Terraform を設定できます。値は、作成する環境に合わせて `prod` または `staging` に変更できます。複数の環境を使用する方法については、このセクションの最後のステップを参照してください。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)を使用して入力変数値を定義します。変数ファイルは [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 リポジトリの [Readme ファイル](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/ja_jp/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html)環境変数の設定の詳細は、[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 リポジトリの [Readme ファイル](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#vpc-configurations)を参照してください。 | DevOps エンジニア | 
| リソースのタグ付け |  AWS リソースにタグを付けて、Terraform スクリプトによってデプロイされたときにモニタリングできます。例については、GitHub リポジトリの [Readme ファイル](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` 環境フォルダを提供します。環境フォルダに独自の環境を追加することもできます。環境を追加するには、`development` フォルダを、`environments` の下位の新しいフォルダ (`prod` や `staging` など) にコピーします。その後、`terraform.tfvars` ファイルを新しい値で更新できます。 | DevOps エンジニア | 

### ランディングゾーンをデプロイする
<a name="deploy-the-landing-zone"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Terraform 作業ディレクトリの初期化 | 作業ディレクトリを初期化し、必要なパッケージをダウンロードするには、次のコマンドを実行します。<pre>terraform init</pre> | DevOps エンジニア | 
| 実行プランの作成 | 実行プランを作成し、Terraform がインフラストラクチャに加える変更を視覚化するには、次のコマンドを実行します。<pre>terraform plan</pre> | DevOps エンジニア | 
| 変更のデプロイ | コードの説明に従ってインフラストラクチャに変更を実装するには、次のコマンドを実行します。<pre>terraform apply</pre> | DevOps エンジニア | 
| デプロイの検証 | Terraform がインフラストラクチャで作成または変更したコンポーネントを検証します。セットアップをテストするには、 または VPC にアタッチされたコンピューティングリソース (Amazon EC2 インスタンスや AWS Lambda 関数など) をプロビジョニングします。 | DevOps エンジニア、アプリケーションデベロッパー | 

### リソースを削除する
<a name="remove-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クリーンアップ | テストが完了したら、次のコマンドを実行して、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 環境のセットアップ**
+ [Getting 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 ドキュメント)

**ランディングゾーンのデプロイ**
+ [AWSの Terraform](https://docs.aws.amazon.com/whitepapers/latest/cicd_for_5g_networks_on_aws/terraform.html) ( AWSでの *5G ネットワーク対応 CI/CD* についてのホワイトペーパー)
+ [MongoDB Atlas with Terraform](https://www.mongodb.com/developer/products/atlas/mongodb-atlas-with-terraform/) (MongoDB ドキュメント)