December 26, 2020

MongoDB AtlasのNetwork Containerとは

こんにちは。本記事で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_clustercontainer_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用語でした。 ちょこちょこドキュメントに出るので、参考になれば幸いです。

© KeisukeYamashita 2020