Skip to content

Instantly share code, notes, and snippets.

@jakzal
Created January 12, 2022 14:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jakzal/9452701ea5e5dc8a9954abaeea82b3e7 to your computer and use it in GitHub Desktop.
Save jakzal/9452701ea5e5dc8a9954abaeea82b3e7 to your computer and use it in GitHub Desktop.
OpenSearch terraform configuration for local development
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"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment