Based on docker-compose.yml from OpenSearch: https://opensearch.org/samples/docker-compose.yml
terraform init
terraform plan
terraform apply
Based on docker-compose.yml from OpenSearch: https://opensearch.org/samples/docker-compose.yml
terraform init
terraform plan
terraform apply
terraform { | |
required_providers { | |
docker = { | |
source = "kreuzwerker/docker" | |
version = "~> 2.13.0" | |
} | |
} | |
} | |
provider "docker" {} |
locals { | |
opensearch_node_count = 2 | |
opensearch_nodes = { | |
for index in range(1, local.opensearch_node_count + 1) : index => "${var.project_name}-opensearch-node${index}" | |
} | |
} | |
resource "docker_image" "opensearch" { | |
name = "opensearchproject/opensearch:latest" | |
keep_locally = false | |
} | |
resource "docker_image" "opensearch_dashboards" { | |
name = "opensearchproject/opensearch-dashboards:latest" | |
keep_locally = false | |
} | |
resource "docker_network" "opensearch_network" { | |
name = "${var.project_name}-opensearch-net" | |
} | |
resource "docker_container" "opensearch_node" { | |
for_each = local.opensearch_nodes | |
image = docker_image.opensearch.latest | |
name = each.value | |
env = [ | |
"cluster.name=opensearch-cluster", | |
"node.name=${each.value}", | |
"discovery.seed_hosts=${join(",", [for k, v in local.opensearch_nodes : v])}", | |
"cluster.initial_master_nodes=${join(",", [for k, v in local.opensearch_nodes : v])}", | |
"bootstrap.memory_lock=true", | |
"OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" | |
] | |
ulimit { | |
name = "memlock" | |
soft = -1 | |
hard = -1 | |
} | |
ulimit { | |
name = "nofile" | |
soft = 65536 | |
hard = 65536 | |
} | |
volumes { | |
container_path = "/usr/share/opensearch/data" | |
volume_name = "opensearch-data${each.key}" | |
} | |
ports { | |
internal = 9200 | |
external = 9200 + each.key - 1 | |
} | |
ports { | |
internal = 9600 | |
external = 9600 + each.key - 1 | |
} | |
networks_advanced { | |
name = docker_network.opensearch_network.name | |
} | |
} | |
resource "docker_container" "opensearch_dashboards" { | |
image = docker_image.opensearch_dashboards.latest | |
name = "${var.project_name}-opensearch-dashboards" | |
env = ["OPENSEARCH_HOSTS=${jsonencode([for k, v in docker_container.opensearch_node : "https://${v.name}:9200"])}"] | |
ports { | |
internal = 5601 | |
external = 5601 | |
} | |
networks_advanced { | |
name = docker_network.opensearch_network.name | |
} | |
} | |
output "opensearch_nodes" { | |
value = [for index, node in docker_container.opensearch_node : node.name] | |
} | |
output "opensearch_dashboards" { | |
value = [docker_container.opensearch_dashboards.name] | |
} |
variable "project_name" { | |
description = "Name of the project" | |
type = string | |
default = "foo" | |
} |