Code Monkey home page Code Monkey logo

terraform-aws-elasticsearch's Introduction

Terraform

terraform-aws-elasticsearch

Terraform module to create Amazon Elasticsearch Service clusters, following the Well-Architected Framework and best AWS practices.

Amazon Elasticsearch Service is a fully managed service that makes it easy to deploy, operate, and scale Elasticsearch clusters in the AWS Cloud. Elasticsearch is a popular open-source search and analytics engine for use cases such as log analytics, real-time application monitoring, and clickstream analysis. With Amazon ES, you get direct access to the Elasticsearch APIs; existing code and applications work seamlessly with the service.

Examples

Check the examples folder where you can see how to configure a public ES cluster, and another example showing how to set it with VPC options.

Usage

You can use this module to create your Amazon ES cluster by defining each parameters blocks as follows:

module "aws_es" {

  source  = "lgallard/elasticsearch/aws"

  domain_name           = "elasticsearch_public"
  elasticsearch_version = "7.1"

  cluster_config = {
    dedicated_master_enabled = true
    instance_count           = 3
    instance_type            = "r5.large.elasticsearch"
    zone_awareness_enabled   = true
    availability_zone_count  = 3
  }

  ebs_options = {
    ebs_enabled = "true"
    volume_size = "25"
  }

  encrypt_at_rest = {
    enabled    = true
    kms_key_id = "arn:aws:kms:us-east-1:123456789101:key/cccc103b-4ba3-5993-6fc7-b7e538b25fd8"
  }

  log_publishing_options = {
    index_slow_logs = {
      enabled                          = true
      cloudwatch_log_group_arn         = "arn:aws:logs:us-east-1:123456789101:log-group:/aws/elasticsearch/index_slow_logs:*"
      log_publishing_options_retention = 90
    }
    search_slow_logs = {
      enabled                  = true
      cloudwatch_log_group_arn = "arn:aws:logs:us-east-1:123456789101:log-group:/aws/elasticsearch/search_slow_logs:*"
    }
    es_application_logs = {
      enabled                   = true
      cloudwatch_log_group_name = "es_application_logs_dev"
    }
    audit_logs = {
      enabled                   = false
      cloudwatch_log_group_name = "audit_logs_dev"
    }
  }

  advanced_options = {
    "rest.action.multi.allow_explicit_index" = true
  }

  domain_endpoint_options = {
    enforce_https                   = true
    custom_endpoint_enabled         = true
    custom_endpoint                 = "lgallardo.com"
    custom_endpoint_certificate_arn = "arn:aws:acm:us-east-1:123456789101:certificate/abcd1234-ef11-abcd-1234-abcd1234efef"
  }

  node_to_node_encryption_enabled                = true
  snapshot_options_automated_snapshot_start_hour = 23

  tags = {
    Owner = "sysops"
    env   = "dev"
  }

Note: You can also define the above ElasticSearch cluster using just the module variables. Instead of defining a cluster_config block (list of map), you can set each of the cluster_config_* variables, as shown below:

module "aws_es" {

  source  = "lgallard/elasticsearch/aws"

  domain_name           = "elasticsearch_public"
  elasticsearch_version = "7.1"

  cluster_config_dedicated_master_enabled = true
  cluster_config_instance_count           = 3
  cluster_config_instance_type            = "r5.large.elasticsearch"
  cluster_config_zone_awareness_enabled   = "true"
  cluster_config_availability_zone_count  = 3

  ebs_options_ebs_enabled = true
  ebs_options_volume_size = 25

  encrypt_at_rest_enabled    = true
  encrypt_at_rest_kms_key_id = "alias/aws/es"

  log_publishing_options_enabled  = true
  log_publishing_options_log_type = "INDEX_SLOW_LOGS"

  advanced_options = {
    "rest.action.multi.allow_explicit_index" = true
  }

  node_to_node_encryption_enabled                = true
  snapshot_options_automated_snapshot_start_hour = 23

  tags = {
    Owner = "sysops"
    env   = "dev"
  }

Requirements

Name Version
terraform >= 0.12.9
aws >= 3.35.0
random >=3.1.2

Providers

Name Version
aws 4.18.0
random 3.3.1

Modules

No modules.

Resources

Name Type
aws_cloudwatch_log_group.es_cloudwatch_log_group resource
aws_cloudwatch_log_resource_policy.es_aws_cloudwatch_log_resource_policy resource
aws_elasticsearch_domain.es_domain resource
aws_iam_service_linked_role.es resource
random_password.master_password resource
aws_kms_key.aws_es data source

Inputs

Name Description Type Default Required
access_policies IAM policy document specifying the access policies for the domain string "" no
advanced_options Key-value string pairs to specify advanced configuration options. Note that the values for these configuration options must be strings (wrapped in quotes) or they may be wrong and cause a perpetual diff, causing Terraform to want to recreate your Elasticsearch domain on every apply map(string) {} no
advanced_security_options Options for fine-grained access control any {} no
advanced_security_options_create_random_master_password Whether to create random master password for Elasticsearch master user bool false no
advanced_security_options_enabled Whether advanced security is enabled (Forces new resource) bool false no
advanced_security_options_internal_user_database_enabled Whether the internal user database is enabled. If not set, defaults to false by the AWS API. bool false no
advanced_security_options_master_user_arn ARN for the master user. Only specify if internal_user_database_enabled is not set or set to false) string null no
advanced_security_options_master_user_password The master user's password, which is stored in the Amazon Elasticsearch Service domain's internal database. Only specify if internal_user_database_enabled is set to true. string null no
advanced_security_options_master_user_username The master user's username, which is stored in the Amazon Elasticsearch Service domain's internal database. Only specify if internal_user_database_enabled is set to true. string null no
advanced_security_options_random_master_password_length Length of random master password to create number 16 no
cloudwatch_log_enabled Change to false to avoid deploying any Cloudwatch Logs resources bool true no
cluster_config Cluster configuration of the domain any {} no
cluster_config_availability_zone_count Number of Availability Zones for the domain to use with number 3 no
cluster_config_cold_storage_options_enabled Indicates whether to enable cold storage for an Elasticsearch domain bool false no
cluster_config_dedicated_master_count Number of dedicated master nodes in the cluster number 3 no
cluster_config_dedicated_master_enabled Indicates whether dedicated master nodes are enabled for the cluster bool true no
cluster_config_dedicated_master_type Instance type of the dedicated master nodes in the cluster string "r5.large.elasticsearch" no
cluster_config_instance_count Number of instances in the cluster number 3 no
cluster_config_instance_type Instance type of data nodes in the cluster string "r5.large.elasticsearch" no
cluster_config_warm_count The number of warm nodes in the cluster number null no
cluster_config_warm_enabled Indicates whether to enable warm storage bool false no
cluster_config_warm_type The instance type for the Elasticsearch cluster's warm nodes string null no
cluster_config_zone_awareness_enabled Indicates whether zone awareness is enabled. To enable awareness with three Availability Zones bool false no
cognito_options Options for Amazon Cognito Authentication for Kibana any {} no
cognito_options_enabled Specifies whether Amazon Cognito authentication with Kibana is enabled or not bool false no
cognito_options_identity_pool_id ID of the Cognito Identity Pool to use string "" no
cognito_options_role_arn ARN of the IAM role that has the AmazonESCognitoAccess policy attached string "" no
cognito_options_user_pool_id ID of the Cognito User Pool to use string "" no
create_service_link_role Create service link role for AWS Elasticsearch Service bool true no
domain_endpoint_options Domain endpoint HTTP(S) related options. any {} no
domain_endpoint_options_custom_endpoint Fully qualified domain for your custom endpoint string null no
domain_endpoint_options_custom_endpoint_certificate_arn ACM certificate ARN for your custom endpoint string null no
domain_endpoint_options_custom_endpoint_enabled Whether to enable custom endpoint for the Elasticsearch domain bool false no
domain_endpoint_options_enforce_https Whether or not to require HTTPS bool false no
domain_endpoint_options_tls_security_policy The name of the TLS security policy that needs to be applied to the HTTPS endpoint. Valid values: Policy-Min-TLS-1-0-2019-07 and Policy-Min-TLS-1-2-2019-07 string "Policy-Min-TLS-1-2-2019-07" no
domain_name Name of the domain string n/a yes
ebs_enabled Whether EBS volumes are attached to data nodes in the domain bool true no
ebs_options EBS related options, may be required based on chosen instance size any {} no
ebs_options_iops The baseline input/output (I/O) performance of EBS volumes attached to data nodes. Applicable only for the Provisioned IOPS EBS volume type number 0 no
ebs_options_volume_size The size of EBS volumes attached to data nodes (in GB). Required if ebs_enabled is set to true number 10 no
ebs_options_volume_type The type of EBS volumes attached to data nodes string "gp2" no
elasticsearch_version The version of Elasticsearch to deploy. string "7.1" no
enabled Change to false to avoid deploying any AWS ElasticSearch resources bool true no
encrypt_at_rest Encrypt at rest options. Only available for certain instance types any {} no
encrypt_at_rest_enabled Whether to enable encryption at rest bool true no
encrypt_at_rest_kms_key_id The KMS key id to encrypt the Elasticsearch domain with. If not specified then it defaults to using the aws/es service KMS key string "alias/aws/es" no
log_publishing_options Options for publishing slow logs to CloudWatch Logs any {} no
log_publishing_options_retention Retention in days for the created Cloudwatch log group number 90 no
node_to_node_encryption Node-to-node encryption options any {} no
node_to_node_encryption_enabled Whether to enable node-to-node encryption bool true no
snapshot_options Snapshot related options any {} no
snapshot_options_automated_snapshot_start_hour Hour during which the service takes an automated daily snapshot of the indices in the domain number 0 no
tags A mapping of tags to assign to the resource map(any) {} no
timeouts Timeouts map. map(any) {} no
timeouts_update How long to wait for updates. string null no
vpc_options VPC related options, see below. Adding or removing this configuration forces a new resource any {} no
vpc_options_security_group_ids List of VPC Security Group IDs to be applied to the Elasticsearch domain endpoints. If omitted, the default Security Group for the VPC will be used list(any) [] no
vpc_options_subnet_ids List of VPC Subnet IDs for the Elasticsearch domain endpoints to be created in list(any) [] no

Outputs

Name Description
arn Amazon Resource Name (ARN) of the domain
domain_id Unique identifier for the domain
endpoint Domain-specific endpoint used to submit index, search, and data upload requests
kibana_endpoint Domain-specific endpoint for kibana without https scheme
master_password Master password
master_username Master username
vpc_options_availability_zones If the domain was created inside a VPC, the names of the availability zones the configured subnet_ids were created inside
vpc_options_vpc_id If the domain was created inside a VPC, the ID of the VPC

terraform-aws-elasticsearch's People

Contributors

alkapkone avatar ayakovlev-mwb avatar jlfowle avatar juansaavedrauy avatar lackita avatar lgallard avatar mcook-bison avatar serge-r avatar venky999 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

terraform-aws-elasticsearch's Issues

How to configure multiple AWS ElasticSearchlogs?

Hi!
I would like to configure all the AWS ES supported log types. How can I achieve this feature using your scripts?
Can you please provide an example?
I have tried this configuration, but it takes only one configuration not all of them
log_publishing_options = { enabled = "true" log_type = "INDEX_SLOW_LOGS" } log_publishing_options= { enabled = "true" log_type = "ES_APPLICATION_LOGS" } log_publishing_options= { enabled = "true" log_type = "SEARCH_SLOW_LOGS" }

Thank you

Issue with VPC config on 0.9.0

Hi,

Using the VPC example fails when trying to plan with the following error:

Error: Unsupported argument
  on .terraform/modules/elasticsearch.elasticsearch/main.tf line 38, in resource "aws_elasticsearch_domain" "es_domain":
  38:       custom_endpoint_enabled         = lookup(domain_endpoint_options.value, "custom_endpoint_enabled")
An argument named "custom_endpoint_enabled" is not expected here.
Error: Unsupported argument
  on .terraform/modules/elasticsearch.elasticsearch/main.tf line 39, in resource "aws_elasticsearch_domain" "es_domain":
  39:       custom_endpoint                 = lookup(domain_endpoint_options.value, "custom_endpoint")
An argument named "custom_endpoint" is not expected here.
Error: Unsupported argument
  on .terraform/modules/elasticsearch.elasticsearch/main.tf line 40, in resource "aws_elasticsearch_domain" "es_domain":
  40:       custom_endpoint_certificate_arn = lookup(domain_endpoint_options.value, "custom_endpoint_certificate_arn")
An argument named "custom_endpoint_certificate_arn" is not expected here.

Trying to specify version "0.8.0" in the module definition also results in an error:

Error: Unresolvable module version constraint
There is no available version of module "lgallard/elasticsearch/aws"
(../../../modules/aws/elasticsearch/main.tf:1) which matches the given version
constraint. The newest available version is 0.9.0.

Specifying 0.7.1 works and plans successfully.

Wrong master_user_name var when enabling advanced_security_options_internal_user_database_enabled

Hi folks!
I'm using your module trying to create an ES with internal master user enabled, but Im receiving this error:

module.elasticsearch.aws_cloudwatch_log_resource_policy.es_aws_cloudwatch_log_resource_policy: Creating...
module.elasticsearch.aws_cloudwatch_log_group.es_cloudwatch_log_group: Creating...
module.elasticsearch.aws_cloudwatch_log_resource_policy.es_aws_cloudwatch_log_resource_policy: Creation complete after 1s [id=data-elasticsearch-policy]
module.elasticsearch.aws_cloudwatch_log_group.es_cloudwatch_log_group: Creation complete after 2s [id=data-elasticsearch-log_group]
module.elasticsearch.aws_elasticsearch_domain.es_domain: Creating...

Error: Error creating ElasticSearch domain: ValidationException: You must provide a master username and password together.

Here is a piece of my code as an example:

module "elasticsearch" {

  source  = "lgallard/elasticsearch/aws"
  version = "0.7.0"
  
  domain_name = "test"
  elasticsearch-version = "6.7"

  advanced_security_options_enabled = true
  advanced_security_options_internal_user_database_enabled = true
  advanced_security_options_master_user_username = "admin"
  advanced_security_options_master_user_password = "password"
}

When looking at the terraform plan, we can check that the user name is coming as a null (only password is being filled):

      + advanced_security_options {
          + enabled                        = true
          + internal_user_database_enabled = true

          + master_user_options {
              + master_user_password = (sensitive value)
            }
        }

If you take a look on main.tf, we can see that in line 23:

master_user_name     = lookup(lookup(advanced_security_options.value, "master_user_options"), "master_user_name", null)

its trying to find a master_user_name variable under master_user_options, which does not exists:

  master_user_options = lookup(var.advanced_security_options, "master_user_options", null) != null ? lookup(var.advanced_security_options, "master_user_options") : {
    master_user_arn      = var.advanced_security_options_internal_user_database_enabled == false ? var.advanced_security_options_master_user_arn : null
    master_user_username = var.advanced_security_options_internal_user_database_enabled == true ? var.advanced_security_options_master_user_username : null
    master_user_password = var.advanced_security_options_internal_user_database_enabled == true ? var.advanced_security_options_master_user_password : null
  }

the right name for this variable is master_user_username under master_user_options, not master_user_name.
Am I right or missing something?

PS.: This is the first fix I open for open source projects, so pardon me if I'm missing some information.

Getting clodstorage block error

error output:


Error: Unsupported block type

  on .terraform/modules/search/main.tf line 86, in resource "aws_elasticsearch_domain" "es_domain":
  86:       dynamic "cold_storage_options" {

Blocks of type "cold_storage_options" are not expected here.

log_type wont accept mutiple

log_publishing_options = { enabled = "true" log_type = "INDEX_SLOW_LOGS" log_type = "ES_APPLICATION_LOGS" }

error: expected log_publishing_options.0.log_type to be one of [INDEX_SLOW_LOGS SEARCH_SLOW_LOGS ES_APPLICATION_LOGS], got INDEX_SLOW_LOGS, ES_APPLICATION_LOGS

Module fails if we create cloudwatch log group in same stack where we call the module

Module fails if we create cloudwatch log group in same stack. We get the following error

│ Error: Invalid for_each argument

│ on .terraform/modules/aws_es/iam.tf line 8, in resource "aws_cloudwatch_log_group" "es_cloudwatch_log_group":
│ 8: for_each = local.options
│ ├────────────────
│ │ local.options will be known only after apply

│ The "for_each" value depends on resource attributes that cannot be
│ determined until apply, so Terraform cannot predict how many instances will
│ be created. To work around this, use the -target argument to first apply
│ only the resources that the for_each depends on.

Example

`module "aws_es" {

source = "lgallard/elasticsearch/aws"

domain_name = "elasticsearch_public"
elasticsearch_version = "7.1"

cluster_config = {
dedicated_master_enabled = true
instance_count = 3
instance_type = "r5.large.elasticsearch"
zone_awareness_enabled = true
availability_zone_count = 3
}

ebs_options = {
ebs_enabled = "true"
volume_size = "25"
}

encrypt_at_rest = {
enabled = true
kms_key_id = "arn:aws:kms:us-east-1:123456789101:key/cccc103b-4ba3-5993-6fc7-b7e538b25fd8"
}

log_publishing_options = {
index_slow_logs = {
enabled = true
cloudwatch_log_group_arn = "${aws_cloudwatch_log_group.es.arn}:"
log_publishing_options_retention = 90
}
search_slow_logs = {
enabled = true
cloudwatch_log_group_arn = "${aws_cloudwatch_log_group.es.arn}:
"
}
es_application_logs = {
enabled = true
cloudwatch_log_group_arn = "${aws_cloudwatch_log_group.es.arn}:"
}
audit_logs = {
enabled = false
cloudwatch_log_group_arn = "${aws_cloudwatch_log_group.es.arn}:
"
}
}

advanced_options = {
"rest.action.multi.allow_explicit_index" = true
}

domain_endpoint_options = {
enforce_https = true
custom_endpoint_enabled = true
custom_endpoint = "lgallardo.com"
custom_endpoint_certificate_arn = "arn:aws:acm:us-east-1:123456789101:certificate/abcd1234-ef11-abcd-1234-abcd1234efef"
}

node_to_node_encryption_enabled = true
snapshot_options_automated_snapshot_start_hour = 23

tags = {
Owner = "sysops"
env = "dev"
}

resource "aws_cloudwatch_log_group" "es" {
name = "test"
retention_in_days = 90
}

`

Fixed here #46

Validation Exception when using master_user_arn

when applying I can see this from the plan

  • advanced_security_options {
    + enabled = true
    + internal_user_database_enabled = true

       + master_user_options {
           + master_user_arn = "arn:aws:iam::123456:user/[email protected]"
         }
     }
    

however I get the following error

aws_elasticsearch_domain.es_domain: Creating...

Error: Error creating ElasticSearch domain: ValidationException: You must provide a master username and password when the internal user database is enabled.

Error: error creating IAM Service Linked Role

Hi,

Getting below error while deploying 2 domains in the same account:

Error: error creating IAM Service Linked Role (es.amazonaws.com): InvalidInput: Service role name AWSServiceRoleForAmazonElasticsearchService has been taken in this account, please try a different suffix. │ status code: 400, request id: fb0ed8e1-352d-40d6-87bd-0d96d7ba7415 │ │ with module.aws_es.aws_iam_service_linked_role.es[0], │ on .terraform/modules/aws_es/iam.tf line 38, in resource "aws_iam_service_linked_role" "es": │ 38: resource "aws_iam_service_linked_role" "es" {

Please help.

Thanks,
RR

Add vpc_id to vpc_options

I'm relatively new to implementing custom terraform modules, so forgive me if I'm missing something here.

I'm attempting to use this module to create an elasticsearch cluster in a particular vpc (we have multiple within an account). When I run a plan, I see that it should be associating a vpc with the elasticsearch cluster.

image

When I look at the options taken by this module, however, vpc_id is not one. I looked at your main.tf, and can see that it's simply not being looked for in in the code.

# vpc_options
  dynamic "vpc_options" {
    for_each = local.vpc_options
    content {
      security_group_ids = lookup(vpc_options.value, "security_group_ids")
      subnet_ids         = lookup(vpc_options.value, "subnet_ids")
    }
  }

Is this a relatively simple update to the code, or am I overlooking something that would allow me to do this without changing your module?

Thanks!

cannot enable multiple log types

the following construct should be supported ...

log_publishing_options = [
{
log_type = "INDEX_SLOW_LOGS"
enabled = true
},
{
log_type = "SEARCH_SLOW_LOGS"
enabled = true
},
{
log_type = "ES_APPLICATION_LOGS"
enabled = true
}
]
}

Domain is getting recreated

Hi,

Every time I run terraform apply, its deleting the existing domain and recreating a completely new one. Is there a way we can avoid this?

Thanks,
RR

Configuration drift for a warm node in module 0.6.0

The new module version (0.6.0) leads to a configuration drift for a warm node.

Configuration drift

      ~ cluster_config {
            dedicated_master_count   = 0
            dedicated_master_enabled = false
            instance_count           = 2
            instance_type            = "t3.small.elasticsearch"
          ~ warm_count               = 0 -> 2
            warm_enabled             = false
          + warm_type                = "ultrawarm1.medium.elasticsearch"
            zone_awareness_enabled   = true

            zone_awareness_config {
                availability_zone_count = 2
            }
        }

How to reproduce

  1. create Elasticsearch using module with no warm nodes configuration (or set cluster_config_warm_enabled=false as an option).
  2. terraform apply: resources were created.
  3. terraform plan: shows the configuration drift above.
  4. terraform apply: changes are applied.
  5. terraform plan: shows the configuration drift again.

When switching back to the previous module version (0.5.1) problem disappears.

Terraform & provider version

terraform {
  required_version = "= 0.13.3"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "3.7.0"
    }
  }
}

Code to reproduce

module "es" {
  # newer module version (0.6.0) shows configuration drift for warm nodes
  source                          = "git::https://github.com/lgallard/terraform-aws-elasticsearch?ref=0.6.0"
  domain_name                     = "es_domain_name"
  elasticsearch_version           = "7.7"
  node_to_node_encryption_enabled = true
  vpc_options_security_group_ids = ["sg-03333333333333333"]
  vpc_options_subnet_ids         =  ["subnet-09999999999999999", "subnet-02222222222222222", "subnet-05555555555555555"]

  cluster_config = {
    dedicated_master_enabled = false
    instance_count           = 2
    instance_type            = "t3.small.elasticsearch"
    zone_awareness_enabled   = true
    availability_zone_count  = 2
  }

  ebs_enabled = true
  ebs_options_volume_size = 20
  encrypt_at_rest_enabled = true
}

advanced_security_options_enabled

When setting the option: advanced_security_options_enabled = "true"

Terraform states that:
Error: Error creating ElasticSearch domain: ValidationException: You must enable EnforceHTTPS in the domain endpoint options to use advanced security.

but there is no option to enable EnforceHTTPS on the module

On the resource "aws_elasticsearch_domain" definition it is possible to add:

domain_endpoint_options {
    enforce_https = true
  }

New Feature: variable create.

This could be usefull.

A variable to choose if the resources are gonna be created.

// Elasticsearch service
module "aws_es0" {
  source  = "lgallard/elasticsearch/aws"
  version = "~> 0.6.1"

  create = var.environment == "PRO" ? true : false

  domain_name                                    = "elasticsearch0"
  elasticsearch_version                          = "7.8"
  vpc_options_subnet_ids                         = module.my_vpc.private_subnets
  node_to_node_encryption_enabled                = "true"
  snapshot_options_automated_snapshot_start_hour = "23"


  cluster_config = {
    dedicated_master_enabled = "true"
    instance_count           = "3"
    instance_type            = "t3.medium.elasticsearch"
    zone_awareness_enabled   = "true"
    availability_zone_count  = "3"
  }
.
.
.
}

Elasticsearch with Cognito

Hi,

When setting cognito enabled
and completing variables.
cognito_options_enabled = true
cognito_options_identity_pool_id = "${local.cognito_options_identity_pool_id}"
cognito_options_role_arn = "${local.cognito_options_role_arn}"
cognito_options_user_pool_id = "${local.cognito_options_user_pool_id}"

terraform/terragrunt fails with

Error: Error creating ElasticSearch domain: ValidationException: Enable fine-grained access control or apply a restrictive access policy to your domain

on main.tf line 1, in resource "aws_elasticsearch_domain" "es_domain":
1: resource "aws_elasticsearch_domain" "es_domain" {

although I have a policy specified.

access_policies = templatefile("access_policies.tpl", {
region = "${local.aws_region}",
account = "${local.aws_account_id}",
domain_name = "${local.elastic_domain}"
})

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.