Skip to main content

Component: elasticsearch

This component is responsible for provisioning an Elasticsearch cluster with built-in integrations with Kibana and Logstash.

Usage

Stack Level: Regional

Here's an example snippet for how to use this component.

components:
terraform:
elasticache-redis:
vars:
enabled: true
instance_type: "t3.medium.elasticsearch"
elasticsearch_version: "7.9"
encrypt_at_rest_enabled: false
dedicated_master_enabled: false
elasticsearch_subdomain_name: "es"
kibana_subdomain_name: "kibana"
ebs_volume_size: 40
create_iam_service_linked_role: true
kibana_hostname_enabled: true
domain_hostname_enabled: true

Requirements

NameVersion
terraform>= 0.13.0
aws>= 3.8

Providers

NameVersion
aws>= 3.8
randomn/a

Modules

NameSourceVersion
dns_delegatedcloudposse/stack-config/yaml//modules/remote-state1.4.1
elasticsearchcloudposse/elasticsearch/aws0.33.0
elasticsearch_log_cleanupcloudposse/lambda-elasticsearch-cleanup/aws0.12.3
iam_roles../account-map/modules/iam-rolesn/a
thiscloudposse/label/null0.24.1
vpccloudposse/stack-config/yaml//modules/remote-state1.4.1

Resources

NameType
aws_ssm_parameter.admin_passwordresource
aws_ssm_parameter.elasticsearch_domain_endpointresource
aws_ssm_parameter.elasticsearch_kibana_endpointresource
random_password.elasticsearch_passwordresource

Inputs

NameDescriptionTypeDefaultRequired
additional_tag_mapAdditional tags for appending to tags_as_list_of_maps. Not added to tags.map(string){}no
attributesAdditional attributes (e.g. 1)list(string)[]no
contextSingle object for setting entire context at once.
See description of individual variables for details.
Leave string and numeric variables as null to use default value.
Individual variable settings (non-null) override settings in context object,
except for attributes, tags, and additional_tag_map, which are merged.
any
{
"additional_tag_map": {},
"attributes": [],
"delimiter": null,
"enabled": true,
"environment": null,
"id_length_limit": null,
"label_key_case": null,
"label_order": [],
"label_value_case": null,
"name": null,
"namespace": null,
"regex_replace_chars": null,
"stage": null,
"tags": {}
}
no
create_iam_service_linked_roleWhether to create AWSServiceRoleForAmazonElasticsearchService service-linked role.
Set this to false if you already have an ElasticSearch cluster created in the AWS account and AWSServiceRoleForAmazonElasticsearchService already exists.
See https://github.com/terraform-providers/terraform-provider-aws/issues/5218 for more information.
booln/ayes
dedicated_master_enabledIndicates whether dedicated master nodes are enabled for the clusterbooln/ayes
delimiterDelimiter to be used between namespace, environment, stage, name and attributes.
Defaults to - (hyphen). Set to "" to use no delimiter at all.
stringnullno
domain_hostname_enabledExplicit flag to enable creating a DNS hostname for ES. If true, then var.dns_zone_id is required.booln/ayes
ebs_volume_sizeEBS volumes for data storage in GBnumbern/ayes
elasticsearch_iam_actionsList of actions to allow for the IAM roles, e.g. es:ESHttpGet, es:ESHttpPut, es:ESHttpPostlist(string)
[
"es:ESHttpGet",
"es:ESHttpPut",
"es:ESHttpPost",
"es:ESHttpHead",
"es:Describe",
"es:List
"
]
no
elasticsearch_iam_role_arnsList of additional IAM role ARNs to permit access to the Elasticsearch domainlist(string)[]no
elasticsearch_passwordPassword for the elasticsearch userstring""no
elasticsearch_subdomain_nameThe name of the subdomain for Elasticsearch in the DNS zone (_e.g._ elasticsearch, ui, ui-es, search-ui)stringn/ayes
elasticsearch_versionVersion of Elasticsearch to deploy (_e.g._ 7.1, 6.8, 6.7, 6.5, 6.4, 6.3, 6.2, 6.0, 5.6, 5.5, 5.3, 5.1, 2.3, 1.5stringn/ayes
enabledSet to false to prevent the module from creating any resourcesboolnullno
encrypt_at_rest_enabledWhether to enable encryption at restbooln/ayes
environmentEnvironment, e.g. 'uw2', 'us-west-2', OR 'prod', 'staging', 'dev', 'UAT'stringnullno
id_length_limitLimit id to this many characters (minimum 6).
Set to 0 for unlimited length.
Set to null for default, which is 0.
Does not affect id_full.
numbernullno
import_profile_nameIAM Profile to use when importing a resourcestringnullno
instance_typeThe type of the instancestringn/ayes
kibana_hostname_enabledExplicit flag to enable creating a DNS hostname for Kibana. If true, then var.dns_zone_id is required.booln/ayes
kibana_subdomain_nameThe name of the subdomain for Kibana in the DNS zone (_e.g._ kibana, ui, ui-es, search-ui, kibana.elasticsearch)stringn/ayes
label_key_caseThe letter case of label keys (tag names) (i.e. name, namespace, environment, stage, attributes) to use in tags.
Possible values: lower, title, upper.
Default value: title.
stringnullno
label_orderThe naming order of the id output and Name tag.
Defaults to ["namespace", "environment", "stage", "name", "attributes"].
You can omit any of the 5 elements, but at least one must be present.
list(string)nullno
label_value_caseThe letter case of output label values (also used in tags and id).
Possible values: lower, title, upper and none (no transformation).
Default value: lower.
stringnullno
nameSolution name, e.g. 'app' or 'jenkins'stringnullno
namespaceNamespace, which could be your organization name or abbreviation, e.g. 'eg' or 'cp'stringnullno
regex_replace_charsRegex to replace chars with empty string in namespace, environment, stage and name.
If not set, "/[^a-zA-Z0-9-]/" is used to remove all characters other than hyphens, letters and digits.
stringnullno
regionAWS regionstringn/ayes
stageStage, e.g. 'prod', 'staging', 'dev', OR 'source', 'build', 'test', 'deploy', 'release'stringnullno
tagsAdditional tags (e.g. map('BusinessUnit','XYZ')map(string){}no

Outputs

NameDescription
domain_arnARN of the Elasticsearch domain
domain_endpointDomain-specific endpoint used to submit index, search, and data upload requests
domain_hostnameElasticsearch domain hostname to submit index, search, and data upload requests
domain_idUnique identifier for the Elasticsearch domain
elasticsearch_user_iam_role_arnThe ARN of the IAM role to allow access to Elasticsearch cluster
elasticsearch_user_iam_role_nameThe name of the IAM role to allow access to Elasticsearch cluster
kibana_endpointDomain-specific endpoint for Kibana without https scheme
kibana_hostnameKibana hostname
master_password_ssm_keySSM key of Elasticsearch master password
security_group_idSecurity Group ID to control access to the Elasticsearch domain

References