Skip to main content

Module: nlb

Terraform module to create an NLB and a default NLB target and related security groups.

Usage

For a complete example, see examples/complete.

For automated test of the complete example using bats and Terratest, see test.

  provider "aws" {
region = var.region
}

module "vpc" {
source = "cloudposse/vpc/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"

cidr_block = var.vpc_cidr_block

context = module.this.context
namespace = "eg"

}

module "subnets" {
source = "cloudposse/dynamic-subnets/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"

availability_zones = var.availability_zones
vpc_id = module.vpc.vpc_id
igw_id = module.vpc.igw_id
cidr_block = module.vpc.vpc_cidr_block
nat_gateway_enabled = false
nat_instance_enabled = false

context = module.this.context
namespace = "eg"
}

module "nlb" {
source = "cloudposse/nlb/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
vpc_id = module.vpc.vpc_id
subnet_ids = module.subnets.public_subnet_ids
internal = var.internal
tcp_enabled = var.tcp_enabled
access_logs_enabled = var.access_logs_enabled
nlb_access_logs_s3_bucket_force_destroy = var.nlb_access_logs_s3_bucket_force_destroy
nlb_access_logs_s3_bucket_force_destroy_enabled = var.nlb_access_logs_s3_bucket_force_destroy_enabled
cross_zone_load_balancing_enabled = var.cross_zone_load_balancing_enabled
idle_timeout = var.idle_timeout
ip_address_type = var.ip_address_type
deletion_protection_enabled = var.deletion_protection_enabled
deregistration_delay = var.deregistration_delay
health_check_path = var.health_check_path
health_check_timeout = var.health_check_timeout
health_check_threshold = var.health_check_healthy_threshold
health_check_unhealthy_threshold = var.health_check_unhealthy_threshold
health_check_interval = var.health_check_interval
target_group_port = var.target_group_port
target_group_target_type = var.target_group_target_type

context = module.this.context
}

Requirements

NameVersion
terraform>= 1.0
aws>= 2.0
local>= 1.3
null>= 2.0
template>= 2.0

Providers

NameVersion
aws>= 2.0

Modules

NameSourceVersion
access_logscloudposse/lb-s3-bucket/aws0.16.4
default_target_group_labelcloudposse/label/null0.25.0
eip_labelcloudposse/label/null0.25.0
lb_labelcloudposse/label/null0.25.0
thiscloudposse/label/null0.25.0

Resources

NameType
aws_eip.lbresource
aws_lb.defaultresource
aws_lb_listener.defaultresource
aws_lb_listener.tlsresource
aws_lb_listener_certificate.https_sniresource
aws_lb_target_group.defaultresource
aws_security_group.defaultresource
aws_security_group_rule.default_ingressresource
aws_security_group_rule.egressresource
aws_security_group_rule.tls_ingressresource

Inputs

NameDescriptionTypeDefaultRequired
access_logs_enabledA boolean flag to enable/disable access_logsbooltrueno
access_logs_prefixThe S3 log bucket prefixstring""no
access_logs_s3_bucket_idAn external S3 Bucket name to store access logs in. If specified, no logging bucket will be created.stringnullno
additional_certsA list of additonal certs to add to the https listernerlist(string)[]no
additional_tag_mapAdditional key-value pairs to add to each map in tags_as_list_of_maps. Not added to tags or id.
This is for some rare cases where resources want additional configuration of tags
and therefore take a list of maps with tag key, value, and additional configuration.
map(string){}no
allow_ssl_requests_onlySet to true to require requests to use Secure Socket Layer (HTTPS/SSL) on the access logs S3 bucket. This will explicitly deny access to HTTP requestsboolfalseno
attributesID element. Additional attributes (e.g. workers or cluster) to add to id,
in the order they appear in the list. New attributes are appended to the
end of the list. The elements of the list are joined by the delimiter
and treated as a single ID element.
list(string)[]no
certificate_arnThe ARN of the default SSL certificate for HTTPS listenerstring""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,
"descriptor_formats": {},
"enabled": true,
"environment": null,
"id_length_limit": null,
"label_key_case": null,
"label_order": [],
"label_value_case": null,
"labels_as_tags": [
"unset"
],
"name": null,
"namespace": null,
"regex_replace_chars": null,
"stage": null,
"tags": {},
"tenant": null
}
no
cross_zone_load_balancing_enabledA boolean flag to enable/disable cross zone load balancingbooltrueno
default_listener_ingress_cidr_blocksList of CIDR blocks to allow in TLS security grouplist(string)
[
"0.0.0.0/0"
]
no
default_listener_ingress_prefix_list_idsList of prefix list IDs for allowing access to TLS ingress security grouplist(string)[]no
deletion_protection_enabledA boolean flag to enable/disable deletion protection for NLBboolfalseno
delimiterDelimiter to be used between ID elements.
Defaults to - (hyphen). Set to "" to use no delimiter at all.
stringnullno
deregistration_delayThe amount of time to wait in seconds before changing the state of a deregistering target to unusednumber15no
descriptor_formatsDescribe additional descriptors to be output in the descriptors output map.
Map of maps. Keys are names of descriptors. Values are maps of the form
{<br/> format = string<br/> labels = list(string)<br/>}
(Type is any so the map values can later be enhanced to provide additional options.)
format is a Terraform format string to be passed to the format() function.
labels is a list of labels, in order, to pass to format() function.
Label values will be normalized before being passed to format() so they will be
identical to how they appear in id.
Default is {} (descriptors output will be empty).
any{}no
eip_additional_tagsThe additional tags to apply to the generated eipmap(string){}no
eip_allocation_idsAllocation ID for EIP for subnets.
The length of the list must correspond to the number of defined subnents.
If the subnet_mapping_enabled variable is not defined and enabled subnet_mapping_enabled, EIPs will be created
list(string)[]no
enable_glacier_transition(Deprecated, use lifecycle_configuration_rules instead)
Enables the transition to AWS Glacier which can cause unnecessary costs for huge amount of small files
booltrueno
enabledSet to false to prevent the module from creating any resourcesboolnullno
enforce_security_group_inbound_rules_on_private_link_trafficIndicates whether inbound security group rules are enforced for traffic originating from a PrivateLink. Only valid for Load Balancers of type network. The possible values are on and off.stringnullno
environmentID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT'stringnullno
expiration_days(Deprecated, use lifecycle_configuration_rules instead)
Number of days after which to expunge the objects
number90no
glacier_transition_days(Deprecated, use lifecycle_configuration_rules instead)
Number of days after which to move the data to the Glacier Flexible Retrieval storage tier
number60no
health_check_enabledA boolean flag to enable/disable the NLB health checksbooltrueno
health_check_intervalThe duration in seconds in between health checksnumber10no
health_check_pathThe destination for the health check requeststring"/"no
health_check_portThe port to send the health check request to (defaults to traffic-port)numbernullno
health_check_protocolThe protocol to use for the health check requeststringnullno
health_check_thresholdThe number of consecutive health checks successes required before considering an unhealthy target healthy.number2no
health_check_timeoutThe amount of time, in seconds, during which no response means a failed health checknumbernullno
health_check_unhealthy_thresholdThe number of consecutive health check failures required before considering the target unhealthy. If not set using value from health_check_thresholdnumbernullno
id_length_limitLimit id to this many characters (minimum 6).
Set to 0 for unlimited length.
Set to null for keep the existing setting, which defaults to 0.
Does not affect id_full.
numbernullno
internalA boolean flag to determine whether the NLB should be internalboolfalseno
ip_address_typeThe type of IP addresses used by the subnets for your load balancer. The possible values are ipv4 and dualstack.string"ipv4"no
label_key_caseControls the letter case of the tags keys (label names) for tags generated by this module.
Does not affect keys of tags passed in via the tags input.
Possible values: lower, title, upper.
Default value: title.
stringnullno
label_orderThe order in which the labels (ID elements) appear in the id.
Defaults to ["namespace", "environment", "stage", "name", "attributes"].
You can omit any of the 6 labels ("tenant" is the 6th), but at least one must be present.
list(string)nullno
label_value_caseControls the letter case of ID elements (labels) as included in id,
set as tag values, and output by this module individually.
Does not affect values of tags passed in via the tags input.
Possible values: lower, title, upper and none (no transformation).
Set this to title and set delimiter to "" to yield Pascal Case IDs.
Default value: lower.
stringnullno
labels_as_tagsSet of labels (ID elements) to include as tags in the tags output.
Default is to include all labels.
Tags with empty values will not be included in the tags output.
Set to [] to suppress all generated tags.
Notes:
The value of the name tag, if included, will be the id, not the name.
Unlike other null-label inputs, the initial setting of labels_as_tags cannot be
changed in later chained modules. Attempts to change it will be silently ignored.
set(string)
[
"default"
]
no
lifecycle_configuration_rulesA list of S3 bucket v2 lifecycle rules, as specified in terraform-aws-s3-bucket"
These rules are not affected by the deprecated lifecycle_rule_enabled flag.
NOTE: Unless you also set lifecycle_rule_enabled = false you will also get the default deprecated rules set on your bucket.
list(object({
enabled = bool
id = string

abort_incomplete_multipart_upload_days = number

# filter_and is the and configuration block inside the filter configuration.
# This is the only place you should specify a prefix.
filter_and = any
expiration = any
transition = list(any)

noncurrent_version_expiration = any
noncurrent_version_transition = list(any)
}))
[]no
lifecycle_rule_enabledDEPRECATED: Defaults to false, use lifecycle_configuration_rules instead.
When true, configures lifecycle events on this bucket using individual (now deprecated) variables."
boolfalseno
nameID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.
This is the only ID element not also included as a tag.
The "name" tag is set to the full id string. There is no tag with the value of the name input.
stringnullno
namespaceID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally uniquestringnullno
nlb_access_logs_s3_bucket_force_destroyA boolean that indicates all objects should be deleted from the NLB access logs S3 bucket so that the bucket can be destroyed without errorboolfalseno
noncurrent_version_expiration_days(Deprecated, use lifecycle_configuration_rules instead)
Specifies when non-current object versions expire (in days)
number90no
noncurrent_version_transition_days(Deprecated, use lifecycle_configuration_rules instead)
Specifies (in days) when noncurrent object versions transition to Glacier Flexible Retrieval
number30no
regex_replace_charsTerraform regular expression (regex) string.
Characters matching the regex will be removed from the ID elements.
If not set, "/[^a-zA-Z0-9-]/" is used to remove all characters other than hyphens, letters and digits.
stringnullno
security_group_enabledEnables the security groupboolfalseno
security_group_idsA list of additional security group IDs to allow access to NLBlist(string)[]no
slow_startAmount time for targets to warm up before the load balancer sends them a full share of requests. The range is 30-900 seconds or 0 to disable.number0no
stageID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release'stringnullno
standard_transition_days(Deprecated, use lifecycle_configuration_rules instead)
Number of days to persist in the standard storage tier before moving to the infrequent access tier
number30no
subnet_idsA list of subnet IDs to associate with NLBlist(string)n/ayes
subnet_mapping_enabledEnable generate EIP for defined subnet idsboolfalseno
tagsAdditional tags (e.g. {'BusinessUnit': 'XYZ'}).
Neither the tag keys nor the tag values will be modified by this module.
map(string){}no
target_group_additional_tagsThe additional tags to apply to the default target groupmap(string){}no
target_group_enabledWhether or not to create the default target group and listenerbooltrueno
target_group_ip_address_typeThe type of IP addresses used by the target group. The possible values are ipv4 and ipv6.string"ipv4"no
target_group_nameThe name for the default target group, uses a module label name if left emptystring""no
target_group_portThe port for the default target groupnumber80no
target_group_preserve_client_ipA boolean flag to enable/disable client IP preservation.boolfalseno
target_group_proxy_protocol_v2A boolean flag to enable/disable proxy protocol v2 supportboolfalseno
target_group_target_typeThe type (instance, ip or lambda) of targets that can be registered with the default target groupstring"ip"no
tcp_enabledA boolean flag to enable/disable TCP listenerbooltrueno
tcp_portThe port for the TCP listenernumber80no
tenantID element _(Rarely used, not included by default)_. A customer identifier, indicating who this instance of a resource is forstringnullno
tls_enabledA boolean flag to enable/disable TLS listenerboolfalseno
tls_ingress_cidr_blocksList of CIDR blocks to allow in TLS security grouplist(string)
[
"0.0.0.0/0"
]
no
tls_ingress_prefix_list_idsList of prefix list IDs for allowing access to TLS ingress security grouplist(string)[]no
tls_portThe port for the TLS listenernumber443no
tls_ssl_policyThe name of the SSL Policy for the listenerstring"ELBSecurityPolicy-2016-08"no
udp_enabledA boolean flag to enable/disable UDP listenerboolfalseno
udp_portThe port for the UDP listenernumber53no
vpc_idVPC ID to associate with NLBstringn/ayes

Outputs

NameDescription
access_logs_bucket_idThe S3 bucket ID for access logs
default_listener_arnThe ARN of the default listener
default_target_group_arnThe default target group ARN
listener_arnsA list of all the listener ARNs
nlb_arnThe ARN of the NLB
nlb_arn_suffixThe ARN suffix of the NLB
nlb_dns_nameDNS name of NLB
nlb_nameThe ARN suffix of the NLB
nlb_zone_idThe ID of the zone which NLB is provisioned
security_group_idThe security group ID of the NLB
tls_listener_arnThe ARN of the TLS listener