AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

Atlas の高可用性に関するガイダンス

高可用性とは、インフラストラクチャの停止、システムメンテナンス、その他の中断時に、アプリケーションが継続的に稼働し、ダウンタイムを最小限に抑える能力です。MongoDB のデフォルトの配置アーキテクチャは、高可用性を実現するように設計されており、データ冗長性や自動フェイルオーバーの機能が組み込まれています。

High availability differs from disaster recovery. High availability protects against infrastructure failures like node, zone, region, or cloud provider outages through automatic failover that recovers to the exact moment of failure with no data loss (RPO = 0) and RTO in seconds. Disaster recovery protects against data integrity issues like corruption or accidental deletion, which require restoration from backups. To learn more about disaster recovery, see Guidance for Atlas Disaster Recovery.

このページでは、ゾーン、リージョン、クラウドプロバイダーの停止時に中断を防ぎ、堅牢なフェイルオーバー メカニズムをサポートするために選択できる追加の構成オプションと配置アーキテクチャの強化について説明します。

MongoDB のデフォルトの配置アーキテクチャは、冗長性を確保するように設計されています。Atlas は各クラスターを、選択したクラウドプロバイダーリージョン内の個別のアベイラビリティーゾーンに分散された、少なくとも 3 つのデータベースインスタンス(ノードまたはレプリカセットノードとも)を含むレプリカセットとして配置します。アプリケーションによりレプリカセットのプライマリノードにデータが書き込まれます。その後、Atlas はそのデータを複製して保存し、クラスター内のすべてのノードに保存します。データストレージの耐久性を制御するには、アプリケーションコードの書込み保証 (write concern)を調整して、特定の数のセカンダリが書込み (write) をコミットした後にのみ書込みを完了します。デフォルトの動作では、アクションを確認する前に、選挙可能なノードの過半数にデータを保持します。

次の図は、デフォルトの 3 ノードレプリカセットにおけるレプリケーションの動作を示しています。

3 ノードのレプリカセットにおけるレプリケーションプロセスを示す画像。
クリックして拡大します

インフラストラクチャの停止時、定期メンテナンス、またはその他の中断によりレプリカセット内のプライマリノードが利用できなくなったイベント、Atlas はレプリカセットの選挙において既存のセカンダリノードをプライマリノードのロールに昇格させることで、クラスターの自己修復を行います。このフェイルオーバープロセスは完全に自動であり、秒単位でデータを失うことなく、障害が発生した正確な時点まで回復します(RPO =0 )。再試行可能な書込み が有効になっている場合は、障害時に実行中だった操作は、障害後に再試行されます。レプリカセットの選挙後、Atlas は失敗したノードを復元または置換して、クラスターができるだけ早くターゲット構成に戻るようにします。 MongoDBクライアントドライバーも、障害中と障害後にすべてのクライアント接続を自動的に切り替えます。

次の図は、レプリカセットの選挙プロセスを示しています。

3 ノードのレプリカセットにおける自己修復プライマリ選挙プロセスを示す画像。
クリックして拡大します

最も重要なアプリケーションの可用性を向上させるために、ノード、リージョン、またはクラウドプロバイダーを追加して、ゾーン、リージョン、またはプロバイダーの停止にそれぞれ耐えられるように配置を増やすことができます。詳細については、以下の「フォールトトレランスに向けた配置パラダイムのスケーリング」の推奨事項を参照してください。

次の推奨事項では、配置の可用性を高めるための追加の設定オプションと配置アーキテクチャの強化について説明します。

専用、フレキシブル、または無料の配置タイプで使用可能なクラスター階層の範囲から選択できます。MongoDB Atlasのクラスター階層は、クラスター内の各ノードで使用可能なリソース(メモリ、ストレージ、 vCPU 、 IOPS )を指定します。より高い階層に拡大すると、クラスターのトラフィックの急増を取り扱う能力が向上し、高いワークロードへの応答がより高速になることでシステムの信頼性が向上します。アプリケーションサイズに推奨されるクラスター階層を決定するには、Atlas クラスター サイズ ガイド を参照してください。

Atlas は、クラスターが需要の急増に対応できるようにするためのオートスケーリングもサポートしています。 Atlas は、現在のリソース使用量に基づいてトリガーするリアクティブなオートスケーリングと、予測される定期的需要の急増が発生する前に適格なクラスターを積極的にスケールアップする予測型のオートスケーリングの両方を使用します。スケーリング アクションを自動化すると、リソースの制約による停止時のリスクを軽減できます。詳細については、「 Atlas 自動インフラストラクチャのプロビジョニング 」に関するガイダンスを参照してください。

Atlas 配置のフォールトトレランスとは、配置が引き続き機能している間に使用できなくなる可能性のあるレプリカセットノードの数です。アベイラビリティーゾーン、リージョン、またはクラウドプロバイダーが停止時イベント、Atlas はレプリカセットの選挙で既存のセカンダリノードを プライマリノードのロールに昇格させ、クラスターの自己修復を行います。プライマリノードが停止時ときにレプリカセット選挙を実行するには、レプリカセット内の投票ノードの過半数が稼働中である必要があります。

部分的なリージョン停止が発生した場合でも、レプリカセットがプライマリを選出できるようにするには、少なくとも 3 つのアベイラビリティゾーンにわたってクラスターを配置する必要があります。アベイラビリティゾーン は、単一のクラウドプロバイダー リージョン内で電源、冷却、ネットワーク インフラを個別に備えたデータセンターのグループとして区分されています。Atlas は、クラウドプロバイダー リージョンが対応している場合、クラスターを複数のアベイラビリティゾーンに自動的に分散します。これにより、1 つのゾーンで停止が発生しても、残りのノードが引き続きリージョナル サービスをサポートします。Atlas が対応するほとんどのクラウドプロバイダー リージョンには、少なくとも 3 つのアベイラビリティゾーンがあります。これらのリージョンは、Atlas UI 内で星アイコン付きで表示されます。

各クラウドプロバイダーは、アベイラビリティーゾーン内でデフォルトのデータ冗長性を提供します。

  • AWS は、 AWSリージョン内の少なくとも 3 つのアベイラビリティーゾーンにわたって複数のデバイスのデータを保存します。

  • Microsoft Azure は、選択したリージョン内の単一のデータセンター内でデータを 3 回複製するローカル冗長ストレージ(LRS)を使用します。

  • Google Cloud は、リージョン内の複数のゾーンにデータを分散します。

推奨リージョンの詳細については、「クラウドプロバイダーとリージョン」を参照してください。

最も重要なアプリケーションの耐障害性をさらに向上させるには、ノード、リージョン、またはクラウドプロバイダーを追加して、アベイラビリティーゾーン、リージョン、またはプロバイダーの停止にそれぞれ耐えられるように配置を増やすことができます。ノード数を任意の奇数に増やすことができます。選挙可能なノードの最大数は 7、合計ノード数は 50 です。クラスターを複数のリージョンに配置することで、広域にわたる可用性を高め、プライマリ リージョン内のすべてのアベイラビリティゾーンが無効になるような全リージョン停止の際にも、自動フェイルオーバーを可能にします。同様のパターンは、クラスターを複数のクラウドプロバイダーに配置する場合にも適用され、クラウドプロバイダー全体の停止に耐えられるようにします。

高可用性、低レイテンシ、コンプライアンス、コストのニーズをバランスよく満たす配置を選択するためのガイダンスについては、「Atlas 配置パラダイム」のドキュメントをご覧ください。

次の表は、さまざまな配置パラダイムの RTO と RPO の特性を比較したものです。majority書込み保証 (write concern)では、これらのすべてのアプローチにより RPO = 0(データ損失なし)と RTO が秒単位で実現されます。配置の複雑さと クラスターのコスト のトレードオフが行われます。

配置パラダイム
カバーされた障害シナリオ
一般的な RTO
RPO (過半数の書込み保証 (write concern)) )
相対的な複雑さ
相対的なクラスターコスト

単一リージョン配置(1 リージョンの 3 ノード)

単一リージョン内でのノードまたは AZ の障害

秒(自動フェイルオーバー)

0(データの損失なし)

低

$

マルチリージョン、単一クラウド

1 つの地理的における AZ またはリージョンの停止時

秒(自動フェイルオーバー)

0(データの損失なし)

平均

$$

マルチリージョン、マルチジオメトリ

複数の地域にわたるリージョンまたはリージョンの停止時

秒(自動フェイルオーバー)

0(データの損失なし)

中~高

$$–$$$

マルチクラウド(2–3 プロバイダー)

1 つのプロバイダーに影響するクラウドプロバイダーまたはマルチリージョンの停止時

秒(自動フェイルオーバー)

0(データの損失なし)

高

$$$

終了保護を有効にすると、クラスターが誤って終了してバックアップからの復元にダウンタイムが必要になることがなくなります。終了保護が有効になっているクラスターを削除するには、まず終了保護を無効にする必要があります。デフォルトでは、Atlas はすべてのクラスターの終了保護を無効にします。

終了保護は、Terraform などの IaC ツールを使用して再配置によって新しいインフラストラクチャがプロビジョニングされないようにする場合に特に重要です。

アプリケーションを本番にデプロイする前に、自動ノードフェイルオーバーを必要とするさまざまなシナリオをシミュレートして、このようなイベントへの準備状況を測定することを強くお勧めします。 Atlas を使用すると、レプリカセットのプライマリノードのフェイルオーバーをテストし、マルチリージョン配置のリージョン停止をシミュレートできます。

MongoDB、書込み保証 (write concern)を使用して、書込み (write) 操作に要求される確認応答のレベルを指定できます。 Atlas のデフォルトの書込み保証 (write concern)はmajority です。つまり、Atlas が成功を報告する前に、クラスター内の 5 つ以上のノードにデータが複製されている必要があります。majority のような明確な数値ではなく を使用すると、一時的なノード停止時が発生した場合に、Atlas2 はより少ないノードのレプリケーションを必要とするように自動的に調整され、 自動フェイルオーバー後も書込みを継続できます。これにより、すべての環境で一貫した 設定が提供されるため、テスト環境に 3 つのノードがある場合でも、本番環境に多数のノードがある場合でも、接続文字列は同じままです。

Atlas は、 再試行可能な読み取り と 再試行可能な書込み操作 をサポートしています。有効にすると、Atlas は読み取りおよび書込み操作を 1 回再試行し、断続的なネットワーク停止やレプリカセットの選挙でアプリケーションが正常な プライマリノード を一時的に見つけられない場合を防ぎます。再試行可能な書き込みには、確認済みの書込み保証 (write concern)が必要です。つまり、書込み保証 (write concern)が{w: 0} になることはできません。

リソース容量の問題を回避するため、リソース利用状況を監視し、定期的にキャパシティー プラン セッションを実施することを推奨します。MongoDB のProfessional Services では、これらのセッションを提供しています。また、リソース容量障害復旧プランに関する推奨事項を確認し、リソース容量の問題からの復旧方法をご参照ください。。

リソース使用率に関するアラートとモニタリングのベストプラクティスについては、Atlas のモニタリングとアラートのガイダンスを参照してください。

新機能を活用し、セキュリティ保証を強化するために、最新の MongoDB バージョンを使用することを推奨します。また、現在使用しているバージョンが終了に到達する前に、常に最新の MongoDB メジャー バージョンにアップグレードするようにしてください。

Atlas UIを使用して MongoDB のバージョンをダウングレードすることはできません。このため、MongoDB の Professional Services またはテクニカル サービスと直接連携し、メジャーバージョンのアップグレードを計画・実行することを推奨します。これにより、アップグレード プロセス中に発生し得る問題を回避できます。

Atlas は、一度に 1 つのノードにローリング方式で更新を適用することで、スケジュールされたメンテナンス中にアップタイムを維持します。メンテナンス中に現在のプライマリがオフラインになると、Atlas は新しいプライマリを自動レプリカセット選挙により選出します。これは、計画外のプライマリ ノード停止に対応する自動フェイルオーバー中に発生するプロセスと同じです。

プロジェクトにカスタム メンテナンスウィンドウを構成し、ビジネスに重要な時間帯におけるメンテナンス関連のレプリカセット選挙を回避することを推奨します。メンテナンスウィンドウ設定で保護時間を指定し、標準アップデートを開始できない日次の時間帯を定義することも可能です。標準更新には、クラスターの再起動や再同期は含まれません。

次の例では、Atlas のオートメーション用ツールを使用して、単一リージョン、3 ノード レプリカセット / シャード配置トポロジーを構成します。

これらの例では、次のようなその他の推奨される構成も適用されます。

  • 開発およびテスト環境用にクラスター階層が M10 に設定されました。クラスター サイズ ガイドを使用して、アプリケーションのサイズに合った推奨クラスター階層を確認してください。

  • 単一リージョン、3 ノード レプリカ セットまたはシャード配置トポロジー。

当社の例では、AWS、Azure、および Google Cloud を互換的に使用します。これら 3 つのクラウドプロバイダーのいずれかを使用できますが、クラウドプロバイダーに一致するようにリージョン名を変更する必要があります。クラウドプロバイダーとそのリージョンに関する詳細は、「クラウドプロバイダー」を参照してください。

  • 中規模アプリケーション用のクラスター階層が M30 に設定されました。クラスター サイズ ガイドを使用して、アプリケーションのサイズに合った推奨クラスター階層を確認してください。

  • 単一リージョン、3 ノード レプリカ セットまたはシャード配置トポロジー。

当社の例では、AWS、Azure、および Google Cloud を互換的に使用します。これら 3 つのクラウドプロバイダーのいずれかを使用できますが、クラウドプロバイダーに一致するようにリージョン名を変更する必要があります。クラウドプロバイダーとそのリージョンに関する詳細は、「クラウドプロバイダー」を参照してください。

注意

Atlas CLI を使用してリソースを作成する前に、次の手順を実行する必要があります。

開発環境およびテスト環境においては、各プロジェクトに対して以下のコマンドを実行してください。以下の例では、ID や名前を変更し、お使いの値に置き換えてください。

注意

次の例では、開発およびテスト環境におけるコスト管理のため、オートスケーリングは有効になっていません。ステージングおよび本番環境では、オートスケーリングを有効にする必要があります。オートスケーリングを有効にした例については、「ステージングと本番環境」タブをご参照ください。

atlas clusters create CustomerPortalDev \
--projectId 56fd11f25f23b33ef4c2a331 \
--region EASTERN_US \
--members 3 \
--tier M10 \
--provider GCP \
--mdbVersion 8.0 \
--diskSizeGB 30 \
--tag bu=ConsumerProducts \
--tag teamName=TeamA \
--tag appName=ProductManagementApp \
--tag env=dev \
--tag version=8.0 \
--tag email=marissa@example.com \
--watch

ステージング環境と本番環境において、各プロジェクトごとに次の cluster.json ファイルを作成します。ID と名前を変更して、自分の値を使用します。

{
"clusterType": "REPLICASET",
"links": [],
"name": "CustomerPortalProd",
"mongoDBMajorVersion": "8.0",
"replicationSpecs": [
{
"numShards": 1,
"regionConfigs": [
{
"electableSpecs": {
"instanceSize": "M30",
"nodeCount": 3
},
"priority": 7,
"providerName": "GCP",
"regionName": "EASTERN_US",
"analyticsSpecs": {
"nodeCount": 0,
"instanceSize": "M30"
},
"autoScaling": {
"compute": {
"enabled": true,
"scaleDownEnabled": true
},
"diskGB": {
"enabled": true
}
},
"readOnlySpecs": {
"nodeCount": 0,
"instanceSize": "M30"
}
}
],
"zoneName": "Zone 1"
}
],
"tag" : [{
"bu": "ConsumerProducts",
"teamName": "TeamA",
"appName": "ProductManagementApp",
"env": "Production",
"version": "8.0",
"email": "marissa@example.com"
}]
}

cluster.json ファイルを作成した後、各プロジェクトで次のコマンドを実行します。このコマンドは、cluster.json ファイルを使用してクラスターを作成します。

atlas cluster create --projectId 5e2211c17a3e5a48f5497de3 --file cluster.json

この例に関する追加の構成オプションや情報については、atlas clusters create コマンドを参照してください。

注意

Terraform でリソースを作成する前に、次の手順を実行する必要があります。

  • 支払い組織を作成し、その支払い組織の API キーを作成します。ターミナルで次のコマンドを実行し、API キーを環境変数として保存します。

    export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>"
    export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"

重要

以下の例は、MongoDB Atlas Terraform プロバイダー バージョン 2.x(~> 2.2)を使用しています。プロバイダーのバージョン1.x からアップグレードする場合は、「2.0.0 アップグレードガイド」を参照してください。このガイドには、重大な変更点や移行手順が記載されています。例では、mongodbatlas_advanced_cluster リソースが v2.x 構文で使用されています。

開発環境およびテスト環境では、アプリケーションと環境のペアごとに次のファイルを作成します。各アプリケーションと環境ペアのファイルを 独自のディレクトリに配置します。ID と名前を変更して、 値を使用します。

# Create a Project
resource "mongodbatlas_project" "atlas-project" {
org_id = var.atlas_org_id
name = var.atlas_project_name
}
# Create an Atlas Advanced Cluster
resource "mongodbatlas_advanced_cluster" "atlas-cluster" {
project_id = mongodbatlas_project.atlas-project.id
name = "ClusterPortalDev"
cluster_type = "REPLICASET"
mongo_db_major_version = var.mongodb_version
# MongoDB recommends enabling auto-scaling
# When auto-scaling is enabled, Atlas may change the instance size, and this use_effective_fields
# block prevents Terraform from reverting Atlas auto-scaling changes
use_effective_fields = true
replication_specs = [
{
region_configs = [
{
electable_specs = {
instance_size = var.cluster_instance_size_name
node_count = 3
}
auto_scaling = {
compute_enabled = true
compute_scale_down_enabled = true
compute_max_instance_size = "M60"
compute_min_instance_size = "M10"
}
priority = 7
provider_name = var.cloud_provider
region_name = var.atlas_region
}
]
}
]
tags = {
BU = "ConsumerProducts"
TeamName = "TeamA"
AppName = "ProductManagementApp"
Env = "Test"
Version = "8.0"
Email = "marissa@example.com"
}
}
# Outputs to Display
output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.0.standard_srv }
output "project_name" { value = mongodbatlas_project.atlas-project.name }

注意

マルチリージョンクラスターを作成するには、各リージョンをそれぞれの region_configs オブジェクトに指定し、それらを replication_specs オブジェクトにネストします。priority フィールドは降順で定義され、次の例に示すように 7 から 1 までの値で構成される必要があります。

replication_specs = [
{
region_configs = [
{
electable_specs = {
instance_size = "M10"
node_count = 2
}
auto_scaling = {
compute_enabled = true
compute_scale_down_enabled = true
compute_max_instance_size = "M60"
compute_min_instance_size = "M10"
}
provider_name = "GCP"
priority = 7
region_name = "NORTH_AMERICA_NORTHEAST_1"
},
{
electable_specs = {
instance_size = "M10"
node_count = 3
}
auto_scaling = {
compute_enabled = true
compute_scale_down_enabled = true
compute_max_instance_size = "M60"
compute_min_instance_size = "M10"
}
provider_name = "GCP"
priority = 6
region_name = "WESTERN_US"
}
]
}
]
# MongoDB Atlas Provider Authentication Variables
# Legacy API key authentication (backward compatibility)
variable "mongodbatlas_public_key" {
type = string
description = "MongoDB Atlas API public key"
sensitive = true
}
variable "mongodbatlas_private_key" {
type = string
description = "MongoDB Atlas API private key"
sensitive = true
}
# Recommended: Service account authentication
variable "mongodb_service_account_id" {
type = string
description = "MongoDB service account ID for authentication"
sensitive = true
default = null
}
variable "mongodb_service_account_key_file" {
type = string
description = "Path to MongoDB service account private key file"
sensitive = true
default = null
}
# Atlas Organization ID
variable "atlas_org_id" {
type = string
description = "Atlas Organization ID"
}
# Atlas Project Name
variable "atlas_project_name" {
type = string
description = "Atlas Project Name"
}
# Atlas Project Environment
variable "environment" {
type = string
description = "The environment to be built"
}
# Cluster Instance Size Name
variable "cluster_instance_size_name" {
type = string
description = "Cluster instance size name"
}
# Cloud Provider to Host Atlas Cluster
variable "cloud_provider" {
type = string
description = "AWS or GCP or Azure"
}
# Atlas Region
variable "atlas_region" {
type = string
description = "Atlas region where resources will be created"
}
# MongoDB Version
variable "mongodb_version" {
type = string
description = "MongoDB Version"
}
# Atlas Group Name
variable "atlas_group_name" {
type = string
description = "Atlas Group Name"
}
atlas_org_id = "32b6e34b3d91647abb20e7b8"
atlas_project_name = "Customer Portal - Dev"
environment = "dev"
cluster_instance_size_name = "M10"
cloud_provider = "AWS"
atlas_region = "US_WEST_2"
mongodb_version = "8.0"
# Define the MongoDB Atlas Provider
terraform {
required_providers {
mongodbatlas = {
source = "mongodb/mongodbatlas"
version = "~> 2.2"
}
}
required_version = ">= 1.0"
}
# Configure the MongoDB Atlas Provider
provider "mongodbatlas" {
# Legacy API key authentication (backward compatibility)
public_key = var.mongodbatlas_public_key
private_key = var.mongodbatlas_private_key
# Recommended: Service account authentication
# Uncomment and configure the following for service account auth:
# service_account_id = var.mongodb_service_account_id
# private_key_file = var.mongodb_service_account_key_file
}

ファイルを作成した後、各アプリケーションと環境ペアのディレクトリに移動し、次のコマンドを実行して Terraform を初期化します。

terraform init

Terraform プランを表示するには、次のコマンドを実行します。

terraform plan

次のコマンドを実行して、アプリケーションと環境のペアに対して 1 つのプロジェクトと 1 つのデプロイメントを作成します。コマンドは、ファイルと MongoDB & HashiCorp Terraform を使用して、プロジェクトとクラスターを作成します。

terraform apply

プロンプトが表示されたら、yesと入力し、Enterを押して設定を適用してください。

ステージング環境と本番環境において、各アプリケーションと環境のペアごとに以下のファイルを作成します。各アプリケーションと環境のペアごとに、それぞれのディレクトリ内でファイルを配置します。ID と名前を変更して、自分の値を使用します。

# Create a Group to Assign to Project
resource "mongodbatlas_team" "project_group" {
org_id = var.atlas_org_id
name = var.atlas_group_name
usernames = [
"user1@example.com",
"user2@example.com"
]
}
# Create a Project
resource "mongodbatlas_project" "atlas-project" {
org_id = var.atlas_org_id
name = var.atlas_project_name
}
# Assign the team to project with specific roles
resource "mongodbatlas_team_project_assignment" "project_team" {
project_id = mongodbatlas_project.atlas-project.id
team_id = mongodbatlas_team.project_group.team_id
role_names = ["GROUP_READ_ONLY", "GROUP_CLUSTER_MANAGER"]
}
# Create an Atlas Advanced Cluster
resource "mongodbatlas_advanced_cluster" "atlas-cluster" {
project_id = mongodbatlas_project.atlas-project.id
name = "ClusterPortalProd"
cluster_type = "REPLICASET"
mongo_db_major_version = var.mongodb_version
use_effective_fields = true
replication_specs = [
{
region_configs = [
{
electable_specs = {
instance_size = var.cluster_instance_size_name
node_count = 3
disk_size_gb = var.disk_size_gb
}
auto_scaling = {
disk_gb_enabled = var.auto_scaling_disk_gb_enabled
compute_enabled = var.auto_scaling_compute_enabled
compute_max_instance_size = var.compute_max_instance_size
}
priority = 7
provider_name = var.cloud_provider
region_name = var.atlas_region
}
]
}
]
tags = {
BU = "ConsumerProducts"
TeamName = "TeamA"
AppName = "ProductManagementApp"
Env = "Production"
Version = "8.0"
Email = "marissa@example.com"
}
}
# Outputs to Display
output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.standard_srv }
output "project_name" { value = mongodbatlas_project.atlas-project.name }

注意

マルチリージョンクラスターを作成するには、各リージョンをそれぞれ独自のregion_configs で指定し、それらをreplication_specs オブジェクトにネストします。以下の例をご覧ください。

replication_specs = [
{
region_configs = [
{
electable_specs = {
instance_size = "M10"
node_count = 2
}
provider_name = "GCP"
priority = 7
region_name = "NORTH_AMERICA_NORTHEAST_1"
},
{
electable_specs = {
instance_size = "M10"
node_count = 3
}
provider_name = "GCP"
priority = 6
region_name = "WESTERN_US"
}
]
}
]
# MongoDB Atlas Provider Authentication Variables
# Legacy API key authentication (backward compatibility)
variable "mongodbatlas_public_key" {
type = string
description = "MongoDB Atlas API public key"
sensitive = true
}
variable "mongodbatlas_private_key" {
type = string
description = "MongoDB Atlas API private key"
sensitive = true
}
# Recommended: Service account authentication
variable "mongodb_service_account_id" {
type = string
description = "MongoDB service account ID for authentication"
sensitive = true
default = null
}
variable "mongodb_service_account_key_file" {
type = string
description = "Path to MongoDB service account private key file"
sensitive = true
default = null
}
# Atlas Organization ID
variable "atlas_org_id" {
type = string
description = "Atlas Organization ID"
}
# Atlas Project Name
variable "atlas_project_name" {
type = string
description = "Atlas Project Name"
}
# Atlas Project Environment
variable "environment" {
type = string
description = "The environment to be built"
}
# Cluster Instance Size Name
variable "cluster_instance_size_name" {
type = string
description = "Cluster instance size name"
}
# Cloud Provider to Host Atlas Cluster
variable "cloud_provider" {
type = string
description = "AWS or GCP or Azure"
}
# Atlas Region
variable "atlas_region" {
type = string
description = "Atlas region where resources will be created"
}
# MongoDB Version
variable "mongodb_version" {
type = string
description = "MongoDB Version"
}
# Atlas Group Name
variable "atlas_group_name" {
type = string
description = "Atlas Group Name"
}
atlas_org_id = "32b6e34b3d91647abb20e7b8"
atlas_project_name = "Customer Portal - Prod"
environment = "prod"
cluster_instance_size_name = "M30"
cloud_provider = "AWS"
atlas_region = "US_WEST_2"
mongodb_version = "8.0"
atlas_group_name = "Atlas Group"
# Define the MongoDB Atlas Provider
terraform {
required_providers {
mongodbatlas = {
source = "mongodb/mongodbatlas"
version = "~> 2.2"
}
}
required_version = ">= 1.0"
}
# Configure the MongoDB Atlas Provider
provider "mongodbatlas" {
# Legacy API key authentication (backward compatibility)
public_key = var.mongodbatlas_public_key
private_key = var.mongodbatlas_private_key
# Recommended: Service account authentication
# Uncomment and configure the following for service account auth:
# service_account_id = var.mongodb_service_account_id
# private_key_file = var.mongodb_service_account_key_file
}

ファイルを作成した後、各アプリケーションと環境ペアのディレクトリに移動し、次のコマンドを実行して Terraform を初期化します。

terraform init

Terraform プランを表示するには、次のコマンドを実行します。

terraform plan

次のコマンドを実行して、アプリケーションと環境のペアに対して 1 つのプロジェクトと 1 つのデプロイメントを作成します。コマンドは、ファイルと MongoDB & HashiCorp Terraform を使用して、プロジェクトとクラスターを作成します。

terraform apply

プロンプトが表示されたら、yesと入力し、Enterを押して設定を適用してください。

この例に関する詳細な設定オプションや情報については、「MongoDB & HashiCorp Terraform」を参照してください。