Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/

Terraform モジュールを使用してMongoDB Atlas を配置する

このガイドでは、公式の Terraform MongoDB Atlasモジュール を使用して、エンタープライズ対応の MongoDB Atlas 環境を配置する方法を説明します。これにより、Terraform を使用して、ゼロから完全な Atlas 配置への移行が容易になります。

各モジュールは、クラウドプロバイダーとの安全でプライベートな接続に必要な依存関係とともに Atlas リソースをプロビジョニングする再利用可能なビルド ブロックです。

このガイドでは、 AWSAzure、または Google Cloud に次のリソースを配置する例を示します。

  • Atlasプロジェクトとシャーディングされたクラスター。

  • PrivateLink 接続によるクラウドプロバイダー ネットワーク。

  • クラウドストレージへのバックアップのエクスポート 。

  • エンドツーエンドの接続を確認するための任意の検証仮想マシン(現在、Google Cloud では利用できません)。仮想マシンは将来の更新で利用可能になる予定です)。

注意

このガイドの例では、必要なクラウドプロバイダーリソースすべてをデフォルトで 作成しています。既存のリソースを使用する必要がある場合は、クラウドプロバイダーに対応する「独自のリソースの移行」セクションを参照してください。

このチュートリアルを開始する前に、次の前提条件があることを確認してください。

このガイドで説明されているプロセスを実行するには、次のツールが必要です。

  • Terraform(v1.9 以降以降)

  • mongosh (検証ステップでのみ必要です。検証 VM を配置すると、mongosh がデフォルトでインストールされます()

このガイドでは、認証に Atlas サービス アカウントを使用します。サービス アカウントは、プログラムによるアクセスに推奨される認証方法です。

  1. MongoDB Atlasアカウントにサインインするか、作成してください。

  2. サービス アカウントの認証情報を環境変数として設定します。

    export MONGODB_ATLAS_CLIENT_ID="<your-client-id>"
    export MONGODB_ATLAS_CLIENT_SECRET="<your-client-secret>"

    注意

    サービス アカウントは、Terraform へのプログラムによるアクセスに推奨される認証方法です。サービス アカウントの設定の詳細については、組織へのプログラムによるアクセスの付与 を参照してください。

次のいずれかの方法を使用してAWSの認証情報を設定します。

  • 環境変数:

    export AWS_ACCESS_KEY_ID="<your-access-key-id>"
    export AWS_SECRET_ACCESS_KEY="<your-secret-access-key>"
  • AWS CLI プロファイル:aws configure AWS CLI の認証情報を保存するには、 を実行します。

  • IAM ロール: AWSで実行中の場合、適切な権限を持つインスタンスまたはタスクに IAM ロールをアタッチします。

    注意

    詳しくは、AWS IAM 認証 を参照してください。

次のいずれかの方法を使用してAzure認証情報を構成します。

  • Azure CLI:

    az login
  • サービスプリンシパルの環境変数:

    export ARM_CLIENT_ID="<your-client-id>"
    export ARM_CLIENT_SECRET="<your-client-secret>"
    export ARM_SUBSCRIPTION_ID="<your-subscription-id>"
    export ARM_TENANT_ID="<your-tenant-id>"

注意

詳しくは、 Azure Service Principal Access の設定と管理 を参照してください。

次のいずれかの方法を使用して、Google Cloud の認証情報を設定します。

  • アプリケーションのデフォルトの認証情報:

    gcloud auth application-default login
  • サービス アカウント キーファイル:

    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
  • サービスメールの引き受けservice_account_emailterraform.tfvars

1

Atlas の例のリポジトリからクラウドプロバイダーの完全な例をダウンロードし、例ディレクトリに移動します。

git clone https://github.com/terraform-mongodbatlas-modules/atlas-examples.git
cd atlas-examples/aws/atlas-aws-module-complete
git clone https://github.com/terraform-mongodbatlas-modules/atlas-examples.git
cd atlas-examples/azure/atlas-azure-module-complete
git clone https://github.com/terraform-mongodbatlas-modules/atlas-examples.git
cd atlas-examples/gcp/atlas-gcp-module-complete
2

terraform.tfvarsファイルをコピーし、値を入力します。

cp terraform.tfvars.example terraform.tfvars

次の表では、必要な変数について説明します。使用可能な変数の完全なリストについては、クラウドプロバイダーに対応する例ディレクトリ内の variables.tfファイルを参照してください。

一般的な変数

変数
説明

atlas_org_id

MongoDB Atlas組織ID。これを見つけるには、Atlas UIで Organization > Settings に移動します。

atlas_project_name

新しい Atlasプロジェクトの名前。

atlas_cluster_name

Atlas クラスターの名前。

regions

クラスターと PrivateLink エンドポイントとなる接続されたデバイスが配置されるリージョンのリスト。クラウドプロバイダー固有の詳細については、以下を参照してください。

クラウドプロバイダー固有の変数

変数
説明

aws_region

プロバイダー操作のプライマリAWSリージョン(例: us-east-1)。

regions[].name

クラスター シャードの Atlas リージョン名(例: 、US_EAST_1)。サポートされているすべての値については、クラウドプロバイダーとリージョン を参照してください。

regions[].vpc_id

このリージョンに既存のVPCのID 。VPCで DNS ホスト名と DNS 解決を有効にする必要があります。

regions[].subnet_ids

VPC内の異なるアベイラビリティーゾーンにある少なくとも 2 つのプライベート サブネット ID のリスト。PrivateLink エンドポイントとなる接続されたデバイス配置に使用されます。

次の例は、AWSの最小の terraform.tfvars を示しています。

atlas_org_id = "<YOUR_ATLAS_ORG_ID>"
atlas_project_name = "my-atlas-project"
atlas_cluster_name = "my-atlas-cluster"
aws_region = "us-east-1"
regions = [
{
name = "US_EAST_1"
vpc_id = "<YOUR_VPC_ID>"
subnet_ids = ["<YOUR_SUBNET_ID_1>", "<YOUR_SUBNET_ID_2>"]
}
]
変数
説明

azure_resource_group_name

Azureプライベートエンドポイント、バックアップストレージ、任意の 検証 VM が作成されるAzureリソース グループ。リソース グループはすでに存在している必要があります。

azure_subscription_id

Your AzureサブスクリプションID。省略した場合、モジュールはAzure認証情報のデフォルトのサブスクリプションを使用します。

regions[].name

クラスター シャードの Atlas リージョン名(例: 、US_EAST_2)。サポートされているすべての値については、クラウドプロバイダーとリージョン を参照してください。

regions[].azure_location

このリージョンのAzureロケーション(例: eastus2)。最初のリージョンエントリにのみ必要です。

regions[].subnet_id

プライベートエンドポイントと検証AzureのサブネットIDが作成される。

次の例は、最小の terraform.tfvarsAzure を示しています。

atlas_org_id = "<YOUR_ATLAS_ORG_ID>"
atlas_project_name = "my-atlas-project"
atlas_cluster_name = "my-atlas-cluster"
azure_resource_group_name = "<YOUR_RESOURCE_GROUP>"
regions = [
{
name = "US_EAST_2"
azure_location = "eastus2"
subnet_id = "<YOUR_SUBNET_ID>"
}
]
変数
説明

gcp_project_id

Google Cloudグループ ID。

regions[].name

Atlas形式(例: 、US_EAST_4)または Google Cloud形式(例: 、us-east4)のリージョン名。モジュールは両方の形式を内部的に正規化します。サポートされているすべての値については、クラウドプロバイダーとリージョン を参照してください。

regions[].subnetwork

PSC 転送ルールが作成されるサブネットワーク self_link(例: 、https://www.googleapis.com/compute/v1/projects/<PROJECT>/regions/<REGION>/subnetworks/<NAME>)。VPCネットワークは、サブネットワークから自動的に派生します。

次の例は、Google Cloud の最小の terraform.tfvars を示しています。

atlas_org_id = "<YOUR_ATLAS_ORG_ID>"
atlas_project_name = "my-atlas-project"
atlas_cluster_name = "my-atlas-cluster"
gcp_project_id = "<YOUR_GCP_PROJECT_ID>"
regions = [
{
name = "US_EAST_4"
subnetwork = "<YOUR_SUBNETWORK_SELF_LINK>"
}
]
3

次の Terraform コマンドを実行して、作業ディレクトリを初期化し、インフラストラクチャを配置します。

terraform init
terraform plan -var-file terraform.tfvars
terraform apply -var-file terraform.tfvars

terraform init は、必要なプロバイダーとモジュール プラグインをダウンロードします。terraform plan は作成されるリソースをプレビューします。適用する前に、プランを慎重に確認してください。

terraform apply が完了すると、アカウントに次のリソースがプロビジョニングされます。

  • MongoDB Atlas: 組織アクセス、新しいプロジェクト、およびマルチリージョンのシャーディングされたクラスター。

  • AWS IAM ロール:Atlas が AWS アカウントと交流するために想定するロール(クラウドプロバイダーアクセス用)。

  • AWS VPCエンドポイント: リージョンごとに 1 つのVPCエンドポイント。プライベートで安全な接続のために Atlas PrivateLink サービスに接続されます。

  • AWS S3 バケット: Atlasバックアップエクスポート 用のバケット。

  • 検証 VM (任意、デフォルトで有効になっている ): PrivateLink 経由で Atlas 接続を検証するための最初のリージョンのサブネットの EC2インスタンス。

  • MongoDB Atlas: 組織アクセス、新しいプロジェクト、およびマルチリージョンのシャーディングされたクラスター。

  • Azure Service Principal: Atlas がお客様の Azure サブスクリプションを操作するために使用する Azure AD サービス プリンシパル。

  • Azureプライベートエンドポイント: リージョンごとに 1 つのプライベートエンドポイント。プライベートで安全な接続のために Atlas PrivateLink サービスに接続されます。

  • Azure ストレージアカウント:Atlasバックアップエクスポート用のストレージアカウントと Blobコンテナ。

  • 検証仮想マシン(任意、デフォルトで有効になっている):PrivateLink 経由の Atlas 接続を検証するための最初のリージョンのサブネット内の Linux VM。

  • MongoDB Atlas: 組織アクセス、新しいプロジェクト、およびマルチリージョンのシャーディングされたクラスター。

  • GCPアクセス: Google Cloudプロジェクトと交流するために許可された Atlas サービス アカウント。

  • PSC 転送ルール: リージョンごとに 1 つの Google Cloud 転送ルールとコンピュート アドレス。プライベートで安全な接続のために Private Service Connect(PSC)経由で Atlas PrivateLink サービスに接続されます。

  • GCPストレージ バケット: Atlasバックアップエクスポート用の Google Cloud ストレージ バケット。

4

配置は、例が作成する仮想マシン(VM)を使用するか、PrivateLink接続文字列を使用して mongosh に直接接続することで検証できます。

仮想マシンによる接続とテスト

検証 VM(デフォルトで有効)を配置した場合は、それを使用してプライベート ネットワーク内から Atlas 接続を検証できます。VM には mongosh が事前インストールされ、接続文字列が事前構成されています。

  1. インスタンスIDとアクセス コマンドの validation_vm 出力に注目してください。

    terraform output validation_vm
  2. AWS Systems Manager(SSM)セッション マネージャー経由で接続します(デフォルト、SSH は必要ありません)。

    aws ssm start-session --target <instance-id>

    あるいは、validation_vm_create_ec2_instance_connect_endpoint = true を設定した場合は、EC2 インスタンス Connect 経由で接続します。

    aws ec2-instance-connect ssh --instance-id <instance-id> --os-user ubuntu
  3. VM で検証スクリプトを実行して接続をテストします。

    ./validate-atlas

    スクリプトは、mongosh が接続できることを確認し、クラスターに対してCRUD操作を実行します。

  1. VM 名とユーザー名の validation_vm 出力に注目してください。

    terraform output validation_vm
  2. Retrieve the VM password:

    terraform output -raw validation_vm_password
  3. Azure portal のAzureシリアル コンソール経由で接続します。または、 で SSH キーを提供した場合は、 Azure Bastionvalidation_vm_ssh_key 経由で接続します。

  4. VM で検証スクリプトを実行して接続をテストします。

    ./validate-atlas

    スクリプトは、mongosh が接続できることを確認し、クラスターに対してCRUD操作を実行します。

Google Cloud の例には現在、検証 VM が含まれていません。以下の mongosh 接続方法を使用して配置を確認します。このメソッドを成功させるには、Google Cloud サブネットワークのいずれかから mongosh を実行する必要があります。

を使用した接続とテスト mongosh

また、プライベート ネットワークへのアクセス権を持つ任意のホストからの接続をテストすることもできます。

  1. 接続文字列を取得します。

    配置が完了したら、Terraform の出力から PrivateLink接続文字列を取得します。

    terraform output connection_string

    接続文字列はプライベートエンドポイント SRV形式を使用し、PrivateLink 接続を介してトラフィックをルーティングします。

  2. 次のコマンドを実行し、<connection-string>terraform output connection_string コマンドの値に置き換えます。

    mongosh "<connection-string>"
  3. 接続後、次のコマンドを実行することで、テストドキュメントを書き込み、検索します。

    db.test.insertOne({ msg: "Hello Atlas" })
    db.test.findOne()

応答が成功させると、クラスターにアクセス可能で、読み取りおよび書き込み (write) 操作が受け入れられることを確認します。

5

この配置によってプロビジョニングされたすべてのリソースを破棄し、不要な料金を回避するには、次のコマンドを実行します。

terraform destroy -var-file terraform.tfvars

警告

terraform destroy は、Atlas クラスターとそのデータを含む、この構成によってマネージドされるすべてのリソースを永続的に削除します。このコマンドを実行中前に、保持したいデータをバックアップしてください。

戻る

Terraform を使い始める

項目一覧