組織、プロジェクト、クラスターは、Atlas の企業資産における基盤です。
組織レベルでは、セキュリティ制御を実装し、1 つ以上のプロジェクトに取り組むユーザーを作成できます。
プロジェクトは、より細かいセキュリティの分離と承認の境界を提供します。
クラスター は、Atlas のクラウドデータベースです。
このページの基本的なガイダンスを使用して、貴社の階層と予想されるクラスターおよびプロジェクトの数に基づいて、組織、プロジェクト、クラスターのレイアウトを設計してください。このガイダンスは、貴社の請求およびアクセスのニーズに合わせながら、セキュリティとパフォーマンスを当初から最適化するために役立ちます。
Atlas の組織、プロジェクト、およびクラスターの機能
Atlas エンタープライズプロパティのセキュリティ設定とガバナンスを定義するには、次のレベルの階層を使用します。
Atlas 階層のレベル | 説明 |
---|---|
(任意)支払い組織 | 1 つの組織が他の組織の支払い組織になることができます。支払い組織では、組織横断請求を設定して、複数の組織で請求サブスクライブを共有できます。Atlasサブスクライブを確立するときに支払い組織を設定する方法の詳細については、「 請求の管理 」を参照してください。組織間請求を有効にするには、アクションを実行するユーザーが、リンクする両方の組織の組織オーナーまたは請求管理者ロールを持っている必要があります。詳しくは、「 ユーザー ロール 」を参照してください。 支払い組織は、多数の BU または独立して運用される部門を持つ大規模なエンタープライズに一般的ですが、契約や請求書は中央認証局が所有します。 |
組織 | 組織には多くのプロジェクトを含めることができ、それらのプロジェクトとその中のクラスター全体に共有統合とセキュリティ設定を適用するためのコンテナが提供されます。複数の Atlas 組織を管理する場合、Atlas フェデレーション管理コンソールは、 組織所有者 ロールを持つユーザーが SSO の IdP を管理し、それらを複数の組織にリンクします。組織は多くの場合、 会社内の BU または部門にマッピングされます。組み込みの Atlas Cost Explorer は、組織レベルでクラウド費を集計し、その下にあるプロジェクト レベルとクラスター レベルの明細項目をの内訳します。請求APIを活用して、さらにカスタマイズできます。 |
プロジェクト | データプレーンのセキュリティ構成(データベースクラスター、ネットワークセキュリティ、その他のデータサービスを含む)は、プロジェクトレベルで行われます。プロジェクトは多くの場合、アプリケーションと環境(例:カスタマーポータルアプリケーションと本番環境)にマッピングされます。各プロジェクトごとに、選択したクラウドプロバイダーに基づいて、AWS および Azure の各リージョンに1つの専用 VPC または VNet があります。 |
クラスター | Atlas は、プロジェクト用に専用の VPC/VNet 内の各クラスターをプロビジョニングします。セキュリティ構成は、クラスター、データベース、およびコレクション・レベルのアクションに適用できるデータベース・ユーザのロールと権限を除き、プロジェクト内のクラスタ間で共有されます。 |

Atlas の組織、プロジェクト、クラスターに関する推奨事項
マルチリージョンおよびマルチクラウド配置の推奨事項
マルチリージョンおよびマルチクラウド配置の場合は、地理的境界全体でパフォーマンス、セキュリティ、コンプライアンスを最適化するために、次の追加の推奨事項を検討してください。
ネットワーク アーキテクチャとレイテンシ
データローカリティとコンプライアンス
クロスリージョン障害復旧
複数のリージョンに読み取りレプリカを持つクラスターを配置して、フェイルオーバー機能を有効にします。
同じアプリケーション環境内のすべてのリージョンで一貫したバックアップスケジュールを維持します。
リージョン全体で障害復旧手順を定期的にテストして、ビジネス継続を確保します。
マルチクラウドに関する考慮事項
管理とモニタリングを簡素化するために、クラウドプロバイダー間で一貫した命名規則を使用します。
同じプロジェクト内のすべてのクラウド環境でセキュリティ構成を標準化します。
クロスクラウドデータレプリケーションとネットワーク接続を計画する際には、クラウドプロバイダー固有の機能と制限を考慮してください。
すべての配置パラダイムの推奨事項
次の推奨事項は、すべての 配置パラダイムに適用されます。
開発環境、テスト環境、ステージング環境、本番環境
サンドボックス、テストプロジェクトおよびクラスターを、アプリケーションプロジェクトおよびクラスターから分離するために、次の 4 つの環境を使用することを推奨いたします。
environment | 説明 |
---|---|
開発(Dev) | 開発者が安全なサンドボックス環境で新しいことを自由に試すことができます。 |
テスト(テスト) | 開発環境で作成された特定のコンポーネントまたは関数をテストします。 |
ステージング | すべてのコンポーネントと機能をステージングして、本番にデプロイする前にアプリケーション全体が期待どおりに動作することを確認します。ステージングはテスト環境と似ていますが、新しいコンポーネントが既存のコンポーネントと連携することが保証されます。 |
本番環境(Prod) | エンドユーザー向けに稼働中のアプリケーションのバックエンドです。 |
Atlas のローカル配置
開発者は開発やテストのために、Atlas CLI を使用してAtlas のローカル配置を作成できます。自分のマシンからローカルで作業することで、外部の開発・テスト環境にかかるコストを削減できます。
開発者は、Dockerで Atlas CLI コマンドを実行し、コンテナを使用してローカル Atlas 配置を構築、実行、管理することもできます。コンテナは、アプリケーションの実行に必要なすべてのソフトウェアを含む標準化されたユニットです。コンテナ化により、開発者は、安全、信頼、移植性のあるテスト環境でローカル Atlas 配置を構築できます。詳細については、 Dockerを使用したローカル Atlas 配置の作成 を参照してください。
組織およびプロジェクトの階層
一般的には、一元的に管理される支払い組織と、支払い組織にリンクされている BU または部門ごとに 1 つの組織とすることを推奨します。次に、下位環境(開発環境またはテスト環境)と上位環境用にそれぞれ1つのクラスターを含むプロジェクトを作成してください。これらのプロジェクトでクラスターを作成できます。詳細については、推奨階層に関する次の情報を参照してください。
組織ごとに 250プロジェクトの制限に簡単に達する場合は、環境ごとに 1 つの組織を作成することをお勧めします。たとえば、下位環境と上位環境用に 1 つずつ、または開発、テスト、ステージング、本番環境でそれぞれ 1 つなどです。この設定には、追加の分離の利点があります。制限を増やすこともできます。詳細については、「 Atlas サービスの制限 」を参照してください。
推奨階層
BU全体で共通のチームと権限を持ち、組織ごとに発生可能な プロジェクトの上限より小さい場合は、Atlas250 組織の作成数が少なくなる次の階層を考慮してください。
推奨階層 2:分散型ビジネスユニット/部門
組織が非常に分散化されており、契約および請求の責任者としての役割を果たすための一元化された機能がない場合は、次の階層を検討してください。この階層では、各 BU、部門、またはチームがそれぞれの Atlas 組織を持っています。この階層は、各チームがかなり独立しており、社内で人員や権限を共有していない場合、またはクラウドプロバイダーのマーケットプレイスを通じて、もしくは独自の契約で直接クレジットを購入したい場合に役立ちます。この階層には支払い組織が存在しません。
Cluster Hierarchy
各環境が分離している状態を維持するには、各クラスターをその独自のプロジェクト内に配置することをお勧めします(下図を参照)。このように配置することで、管理者は各環境で異なるプロジェクト構成を維持したうえで、役割に最小限必要なアクセス権のみをユーザーに付与するという最小権限の原則を徹底できます。
クラスターの作成時に、Terraform などのオートメーションツールを使用して、プライベートエンドポイントや CMK などのプロジェクトレベルの構成をクラスター全体で共有できます。さらに、クラスター作成を自動化すると、それぞれ本番環境と開発環境向けの並列高環境と低環境の作成が標準化され、コストが節約されます。
詳細については、「 プロジェクトごとに複数のクラスターを考慮する必要がある場合 」を参照してください。
単一プロジェクトに複数のクラスターが効果的なケース
次の図は、それぞれのプロジェクトに複数の Atlas クラスターが環境別にグループ化されている組織を示しています。同じプロジェクト内に複数のクラスターを配置すると、1 つのアプリケーションが複数のバッキング クラスターを使用する場合や、同じチームが環境全体で複数のアプリケーションを担当する場合に、管理が簡素化されます。これにより、同じプロジェクト内のすべてのクラスターが同じプロジェクト構成を共有するため、プライベートエンドポイントやカスタマーが管理するキーなどの機能のセットアップコストが簡素化されます。
しかし、このクラスター階層は最小権限の原則に違反する可能性があります。
次の両方が当てはまる場合にのみ、同じプロジェクト内に複数のクラスターを配置します。
プロジェクトにアクセスできる各チームノードは、プロジェクト内の他のすべてのアプリケーションとクラスターで作業しています。
開発環境およびテスト環境用のクラスターを作成しています。ステージング環境と本番環境では、同じプロジェクト内のクラスターは同じアプリケーションに属し、 同じチームによって管理される ことをお勧めします。
リソースタグの付与
レポートおよび統合のための解析を容易にするために、次の詳細を使用してクラスターまたはプロジェクトにタグを付けることをお勧めします。
BU または部門
teamName
ApplicationName
environment
バージョン
メールでの問い合わせ
重要度(PII や PHI などの機密性の高い分類を含む、クラスターに保存されているデータの階層を示す)
タグを使用した請求データの解析について詳しくは、「Atlas 請求データの機能」を参照してください。
Atlas クラスター サイズ ガイド
専用配置(クラスター サイズ M10
以上)では、Atlas はリソースを排他的に割り当てます。共有クラスターより安全性とパフォーマンスに優れているため、本番環境でのユースケースには専用配置がお勧めです。
次のクラスター サイズガイドでは、ソフトウェア開発やインフラストラクチャに使用される一般的な例えである「t シャット サイジング」を使用して、簡素化された方法でキャパシティープランニングを説明します。T シャットのサイズ設定に関する推奨事項は、サイズ分析のおおよその開始点としてのみ使用してください。クラスターのサイズ設定は、リソースニーズ、パフォーマンス要件、ワークロード特性、増加予想の変化に基づいて行われる反復的なプロセスです。
重要
このガイダンスは、重要なアプリケーション、大メモリのワークロード、高 CPU のワークロードを除外します。このようなユースケースは、 カスタマイズされたガイダンスについては、 MongoDBサポート にお問い合わせください。
配置に必要なクラスター リソースは、組織のおおよそのデータ サイズとワークロードを使用して推定できます。
必要なストレージの合計:未加工データ全体の 50%
必要な RAM の合計: 未加工データ全体の 10%
必要な CPU コアの合計 :データベース操作 1 秒あたりの予想ピーク読み取り/書込み操作数 割かつ 4000
必要なストレージ IOPS の合計:データベースの読み取り/書き込み操作の数が 1 秒あたりに増加することが予想されます(最小 IOPS = 5%、最大 IOPS = 95%)
次のクラスター サイズガイドを使用して、オーバープロビジョニングせずにパフォーマンスを確保するクラスター層を選択します。この表には、各クラスター層のデフォルトのストレージとパフォーマンス機能、およびクラスター層がステージングおよび本番環境に適しているかどうかが表示されています。
クラスター サイズガイドには、クラスターの合計データ サイズとデフォルトIOPS の期待値も含まれています。これらは追加の構成で増やすことができます。次のストレージ推奨事項は、クラスター全体ではなく、シャードごとであることに注意してください。詳しくは、「 Atlas のスケーラビリティに関するガイダンス 」を参照してください。
T シャードのサイズ | クラスター階層 | ストレージ範囲: AWS/Google Cloud/ Azure | CPUs (#) | デフォルトの RAM | デフォルトの IOPS | 予想される合計データサイズ | 予想されるピーク読み取り /書込み | に適しています |
---|---|---|---|---|---|---|---|---|
小 |
| 2 GBから 128 GB | 2 | 2 GB | 1000 | 1 GBから 10 GB | 120 | 開発/テストのみ |
Med |
| 8 GB から 512 GB | 2 | 8 GB | 3000 | 20 GBから 50 GB | 3000 | Prod |
大 |
| 8 GB から 4 TB | 16 | 32 GB | 3000 | 360 GBから 420 GB | 3000 | Prod |
X-Large |
| 8 GB から 4 TB | 32 | 128 GB | 3000 | 1200 GBから 1750 GB | 6000 | Prod |
[1] | M10 は、共有 CPU 階層であり、高度に規制されたセカンダリまたは機密データの場合、最小かつ最小の開始階層は M30 である必要があります。 |
例、架空の finnish会社、MongoFinance が、合計で 400 GBの処理データを保存する必要があるとします。ピークアクティビティでは、MongoFinance の従業員とカスタマーは、MongoFinance データベースへの 1 秒あたり最大 3000 の読み取りまたは書込みを実行します。 MongoFinance のストレージとパフォーマンス要件は、大規模なまたは M50
のクラスター層で最適に満たされます。
クラスター階層とそれをサポートするリージョンの詳細については、各クラウドプロバイダーに関する Atlas ドキュメントをご覧ください。
オートメーションの例: Atlas の組織、プロジェクト、クラスター
Tip
すべてのピリオドにわたって推奨事項を強制する Terraform の例については、 Githubの次のいずれかの例を参照してください。
次の例では、オートメーション用の Atlas ツール を使用して組織、プロジェクト、クラスターを作成します。
これらの例では、次のようなその他の推奨される構成も適用されます。
開発用またはテスト環境では、クラスター階層が
M10
に設定されています。アプリケーションサイズに推奨されるクラスター層については、 クラスター サイズガイドを使用してください。単一リージョン、3 ノード レプリカ セットまたはシャード配置トポロジー。
この例では、 AWS、 Azure、Google Cloud をどちらも使用しています。これら 3 つのクラウドプロバイダーのいずれかを使用できますが、クラウドプロバイダーと一致するようにリージョン名を変更する必要があります。クラウドプロバイダーとそのリージョンの詳細については、「 クラウドプロバイダー 」を参照してください。
中規模アプリケーション用のクラスター階層が
M30
に設定されました。クラスターサイズガイドを使用して、アプリケーションのサイズに応じた推奨クラスター階層を確認してください。単一リージョン、3 ノード レプリカ セットまたはシャード配置トポロジー。
この例では、 AWS、 Azure、Google Cloud をどちらも使用しています。これら 3 つのクラウドプロバイダーのいずれかを使用できますが、クラウドプロバイダーと一致するようにリージョン名を変更する必要があります。クラウドプロバイダーとそのリージョンの詳細については、「 クラウドプロバイダー 」を参照してください。
注意
Atlas CLI を使用してリソースを作成する前に、次の手順を実行する必要があります。
Programmatic Useの手順に従って Atlas CLI から接続します。
組織を作成
各 BU に対して次のコマンドを実行します。ID と名前を変更して、実際の 値を使用します。
atlas organizations create ConsumerProducts --ownerId 508bb8f5f11b8e3488a0e99e --apiKeyRole ORG_OWNER --apiKeyDescription consumer-products-key
この例に関する構成オプションと詳細については、atlas organizations create を参照してください。
Atlas Administration APIを使用して、組織を作成し、支払い組織にプログラムでリンクすることができます。そのためには、https://cloud.mongodb.com/api/atlas/v2/orgs
エンドポイントに POST
リクエストを送信し、federationSettingsId
フィールドに支払い組織IDを指定します。リクエストのサービス アカウントまたはAPIキーには「組織オーナー」のロールがあり、リクエストする組織は支払い組織である必要があります。
次の例では、cURL
を使用してリクエストを送信します。
curl --location '/api/atlas/v2/orgs?envelope=false&pretty=false' \ --header 'Content-Type: application/vnd.atlas.2023-01-01+json' \ --header 'Accept: application/vnd.atlas.2023-01-01+json' \ --data '{ "name": "<organization name>", "apiKey": { "desc": "<organization description>", "roles": [ "ORG_MEMBER" ] }, "federationSettingsId": "<ID of org to link to>", "orgOwnerId": "<organization owners ID>", "skipDefaultAlertsSettings": false }'
上記のAPI呼び出しの詳細については、「 Atlas 組織がAPIドキュメントを作成 」を参照してください。
ユーザー ID と組織 ID を取得するには、次のコマンドをご覧ください。
プロジェクトを作成する
アプリケーションと環境のペアごとに次のコマンドを実行します。ID と名前を変更して、 値を使用します。
atlas projects create "Customer Portal - Prod" --tag environment=production --orgId 32b6e34b3d91647abb20e7b8
その他の構成オプションとこの例に関する情報については、「 Atlas プロジェクト作成 」を参照してください。
プロジェクト ID を取得するには、次のコマンドをご覧ください。
カスタマー キー管理による暗号化の設定
ステージング環境と本番環境では、クラスターをプロビジョニングする際に、カスタマー キー管理による暗号化を有効にすることを推奨します。規制の厳しい業界にいる場合や機密データを保存している場合を除き、開発およびテスト環境では、コストを削減するためにカスタマー キー管理による暗号化を省略することを検討してください。詳細については、「Atlas の組織、プロジェクト、およびクラスターに関する推奨事項」をご覧ください。
Atlas CLI を使用して、カスタマーキー管理で暗号化を管理することはできません。代わりに、次のメソッドを使用してください。
プロジェクトごとに 1 つのクラスターを作成する
開発環境とテスト環境用の単一リージョン クラスターを作成するには、作成したプロジェクトごとに次のコマンドを実行します。 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=Production \ --tag version=8.0 \ --tag email=marissa@acme.com \ --watch
マルチリージョンクラスターを構成するには、作成したプロジェクトごとに次の cluster.json
ファイルを作成します。 ID と名前を変更して、 値を使用します。
{ "name": "CustomerPortalDev", "projectId": "56fd11f25f23b33ef4c2a331", "clusterType": "REPLICASET", "diskSizeGB": 30, "mongoDBMajorVersion": "8.0", "backupEnabled": true, "replicationSpecs": [ { "numShards": 1, "regionConfigs": [ { "providerName": "GCP", "regionName": "EASTERN_US", "members": 3, "priority": 7 }, { "providerName": "GCP", "regionName": "CENTRAL_US", "members": 2, "priority": 5 }, { "providerName": "GCP", "regionName": "WESTERN_US", "members": 2, "priority": 4 } ] } ], "tags": [ { "key": "bu", "value": "ConsumerProducts" }, { "key": "teamName", "value": "TeamA" }, { "key": "appName", "value": "ProductManagementApp" }, { "key": "env", "value": "Production" }, { "key": "version", "value": "8.0" }, { "key": "email", "value": "marissa@acme.com" } ] }
上記の構成ファイルを作成したら、次のコマンドを実行してクラスターを作成します。
atlas clusters create --file <path to your configuration file>
ステージング環境と本番環境用の単一リージョンクラスターを作成するには、作成したプロジェクトごとに次の 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": false, "scaleDownEnabled": false }, "diskGB": { "enabled": false } }, "readOnlySpecs": { "nodeCount": 0, "instanceSize": "M30" } } ], "zoneName": "Zone 1" } ], "tag" : [{ "bu": "ConsumerProducts", "teamName": "TeamA", "appName": "ProductManagementApp", "env": "Production", "version": "8.0", "email": "marissa@acme.com" }] }
cluster.json
ファイルを作成した後、作成した各プロジェクトに対して次のコマンドを実行します。このコマンドは、cluster.json
ファイルを使用してクラスターを作成します。
atlas cluster create --projectId 5e2211c17a3e5a48f5497de3 --file cluster.json
マルチリージョンクラスターを構成するには、次の例に示すように、前述の cluster.json
ファイルの replicationSpecs
配列を変更して、複数のリージョンを指定します。
{ … "replicationSpecs": [ { "numShards": 1, "regionConfigs": [ { "electableSpecs": { "instanceSize": "M30", "nodeCount": 3 }, "priority": 7, "providerName": "GCP", "regionName": "EASTERN_US", "analyticsSpecs": { "nodeCount": 0, "instanceSize": "M30" }, "autoScaling": { "compute": { "enabled": false, "scaleDownEnabled": false }, "diskGB": { "enabled": false } }, "readOnlySpecs": { "nodeCount": 0, "instanceSize": "M30" } }, { "electableSpecs": { "instanceSize": "M30", "nodeCount": 3 }, "priority": 5, "providerName": "GCP", "regionName": "CENTRAL_US", "analyticsSpecs": { "nodeCount": 0, "instanceSize": "M30" }, "autoScaling": { "compute": { "enabled": false, "scaleDownEnabled": false }, "diskGB": { "enabled": false } }, "readOnlySpecs": { "nodeCount": 0, "instanceSize": "M30" } }, { "electableSpecs": { "instanceSize": "M30", "nodeCount": 3 }, "priority": 6, "providerName": "GCP", "regionName": "WESTERN_US", "analyticsSpecs": { "nodeCount": 0, "instanceSize": "M30" }, "autoScaling": { "compute": { "enabled": false, "scaleDownEnabled": false }, "diskGB": { "enabled": false } }, "readOnlySpecs": { "nodeCount": 0, "instanceSize": "M30" } } ], "zoneName": "Zone 1" } ], … }
上記の構成ファイルを作成したら、次のコマンドを実行してクラスターを作成します。
atlas clusters create --file <path to your configuration file>
その他の構成オプションとこれらの例については、「 Atlas クラスターの作成 」を参照してください。
注意
プロジェクトとデプロイメントを作成する
開発環境およびテスト環境では、アプリケーションと環境のペアごとに次のファイルを作成します。各アプリケーションと環境ペアのファイルを 独自のディレクトリに配置します。ID と名前を変更して、 値を使用します。
main.tf
# 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 replication_specs { region_configs { electable_specs { instance_size = var.cluster_instance_size_name node_count = 3 } priority = 7 provider_name = var.cloud_provider region_name = var.atlas_region } } tags { key = "BU" value = "ConsumerProducts" } tags { key = "TeamName" value = "TeamA" } tags { key = "AppName" value = "ProductManagementApp" } tags { key = "Env" value = "Test" } tags { key = "Version" value = "8.0" } tags { key = "Email" value = "marissa@acme.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 } provider_name = "GCP" priority = 7 region_name = "NORTH_AMERICA_NORTHEAST_1" } region_configs { electable_specs { instance_size = "M10" node_count = 3 } provider_name = "GCP" priority = 6 region_name = "WESTERN_US" } }
variables.tf
# 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" }
terraform.tfvars
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"
provider.tf
# Define the MongoDB Atlas Provider terraform { required_providers { mongodbatlas = { source = "mongodb/mongodbatlas" } } required_version = ">= 0.13" }
ステージング環境と本番環境において、各アプリケーションと環境のペアごとに以下のファイルを作成します。各アプリケーションと環境のペアごとに、それぞれのディレクトリ内でファイルを配置します。ID と名前を変更して、自分の値を使用します。
main.tf
# 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 Project the Group with Specific Roles teams { 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 replication_specs { region_configs { electable_specs { instance_size = var.cluster_instance_size_name node_count = 3 } priority = 7 provider_name = var.cloud_provider region_name = var.atlas_region } } tags { key = "BU" value = "ConsumerProducts" } tags { key = "TeamName" value = "TeamA" } tags { key = "AppName" value = "ProductManagementApp" } tags { key = "Env" value = "Production" } tags { key = "Version" value = "8.0" } tags { key = "Email" value = "marissa@acme.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
オブジェクトにネストします。
replication_specs { region_configs { electable_specs { instance_size = "M10" node_count = 2 } provider_name = "GCP" priority = 7 region_name = "NORTH_AMERICA_NORTHEAST_1" } region_configs { electable_specs { instance_size = "M10" node_count = 3 } provider_name = "GCP" priority = 6 region_name = "WESTERN_US" } }
variables.tf
# 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" }
terraform.tfvars
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"
provider.tf
# Define the MongoDB Atlas Provider terraform { required_providers { mongodbatlas = { source = "mongodb/mongodbatlas" } } required_version = ">= 0.13" }
この例に関するその他の設定オプションや情報については、「MongoDB & HashiCorp Terraform」およびMongoDB Terraform のブログ記事をご覧ください。
ファイルを作成した後、各アプリケーションと環境ペアのディレクトリに移動し、次のコマンドを実行して Terraform を初期化します。
terraform init
Terraform プランを表示するには、次のコマンドを実行します。
terraform plan
次のコマンドを実行して、アプリケーションと環境のペアに対して 1 つのプロジェクトと 1 つのデプロイメントを作成します。コマンドは、ファイルと MongoDB & HashiCorp Terraform を使用して、プロジェクトとクラスターを作成します。
terraform apply
プロンプトが表示されたら、yes
を入力し、Enter
を押して設定を適用します。
次のステップ
組織、プロジェクト、クラスターの階層とサイズを計画した後、次の推奨リソースを参照するか、左側のナビゲーションを使用して、Well-Architected Framework の各柱の機能とベスト プラクティスを見つけます。