Terrform AWS Elasticsearch service
provider "aws" {}
terraform {}
data "aws_iam_policy_document" "domain_access_policy" {
statement {
sid = "allow_access_from_specific_ips"
actions = ["es:*"]
condition {
test = "IpAddress"
variable = "aws:SourceIp"
values = "${var.allowed_ipaddresses}"
}
}
}
resource "aws_elasticsearch_domain" "takeaway" {
domain_name = "${var.domain_name}"
elasticsearch_version = "5.5"
cluster_config {
instance_type = "${var.node_size}.elasticsearch"
instance_count = "${var.node_count}"
}
advanced_options {
"rest.action.multi.allow_explicit_index" = "true"
}
ebs_options {
ebs_enabled = true
volume_size = "${var.node_volume_size}"
}
access_policies = "${data.aws_iam_policy_document.domain_access_policy.json}"
snapshot_options {
automated_snapshot_start_hour = 23
}
tags {
Domain = "${var.domain_name}"
Name = "${var.domain_name}"
}
}
output "endpoint" {
value = "${aws_elasticsearch_domain.takeaway.endpoint}"
}
output "domain_id" {
value = "${aws_elasticsearch_domain.takeaway.domain_id}"
}
output "arn" {
value = "${aws_elasticsearch_domain.takeaway.arn}"
}
variable "domain_name" {
default = "testdomain"
}
variable "node_size" {
default = "t2.medium"
}
variable "node_count" {
default = "1"
}
variable "node_volume_size" {
default = "20"
}
variable "allowed_ipaddresses" {
type = "list"
default = [
"62.96.159.233/32"
]
}