こんにちは。本記事でMongoDB Atlas上での「Network Container」が何であるかを紹介しようと思います。
Network Containerとは
正確には「Network Peering Container」と呼ばれるものです。 Network Peering Containerとは、任意のクラウドプロバイダのVirtual Private Cloud (VPC)、またはVirtual Network (Vnet)を表現するものです。 つまり、MongoDBクラスタがホスティングされているVPC/Vnetです。これからは簡略化のためにVPC/VnetをVPCと記述します。
私はAWS ECS/FargateからMongoDB AltasのMongoDBクラスタにPrivate IPによって接続をしていますが、これもVPC Peeringによって接続をしています。 VPC Peering Connectionとは、2つのVPC間の接続を示すので、接続を申請するRequesterと承認するAcceptorがいます。
2つのVPC間であるからこそ、開発者のアプリケーション・サーバーとそれが接続するためのMongoDBクラスタのVPCが必要になります。そのMongoDBクラスタのVPCこそがPeering Network Containerです。
いつ作成されるのか
MongoDBクラスタを先に作成した場合、そのときに作成されます。
VPC PeeringのTerraformによる定義
TerraformのMongoDB Providerにはmongodbatlas_network_peering
resouceがNetwork Peeringを定義します。
すでにMongoDBクラスタを作成している場合は、先程も紹介したようにNetwork Containerを作成する必要はありません。
resource "mongodbatlas_network_peering" "peering" {
accepter_region_name = "ap-northeast-1"
project_id = var.mongodbatlas_project_id
provider_name = "AWS"
vpc_id = aws_vpc.vpc.id
container_id = mongodbatlas_cluster.cluster.container_id
route_table_cidr_block = aws_vpc.vpc.cidr_block
aws_account_id = var.aws_account_id
}
このようにして、mongodbatlas_cluster
のcontainer_id
アトリビュートを参照することによって、VPC Peeringを作成することができます。
いつNetwork Containerを作成しないといけないのか
Network Containerは自分で作成をすることもできます。ユースケースとしてはVPC Peeringをクラスタ作成前から作りたいときです。 そのようなときには、Network Containerを作成したのちに、VPC Peeringを作成する必要があります。
Terraformでは以下のように作成をすることができます。
resource "mongodbatlas_network_container" "test" {
project_id = var.mongodbatlas_project_id
atlas_cidr_block = "10.8.0.0/21"
provider_name = "AWS"
region_name = "US_EAST_1"
}
このリソースを先程のmongodbatlas_network_peering
に使うことによってクラスタを作成するまえでもVPC Peeringを行うことができます。この場合、クラスタ作成時にこのNetwork Containerを使用する必要があるのでmongodb_atlas_cluster.x.container_id = mongodbatlas_network_peering.container_id
と指定しましょう。
まとめ
「Network Container」と聞いてもよく分かりませんよね、MongoDBクラスタのVPCを表すMongoDB Atlas用語でした。 ちょこちょこドキュメントに出るので、参考になれば幸いです。