forked from ulamlabs/terraform-aws-rabbitmq
-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.tf
74 lines (68 loc) · 3.01 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
locals {
feature_flag_template = (
# if a minor version number we know is passed then populate and use the template
contains([8, 11, 12], var.upgrading_minor_version_number)
? "{forced_feature_flags_on_init, [${local.ffs}]}"
: "" # otherwise leave it blank so it does not cause errors
)
ffs = join(",", flatten([ # finally flatten and join with commas
for ff_key in keys(local.ff_version) # for each key
: ff_key <= var.upgrading_minor_version_number # if its <= pass minor version
? local.ff_version[ff_key] : [] # return it otherwise return empty
]))
# an object containing key pairs for the correct minor version feature flags
# https://www.rabbitmq.com/feature-flags.html#core-feature-flags
ff_version = {
8 = [
"drop_unroutable_metric", "empty_basic_get_metric", "implicit_default_bindings",
"quorum_queue", "virtual_host_metadata",
],
11 = ["user_limits", "maintenance_mode_status", ],
12 = [
"classic_mirrored_queue_version", "classic_queue_type_delivery_support",
"direct_exchange_routing_v2", "feature_flags_v2", "listener_records_in_ets",
"stream_queue", "stream_single_active_consumer", "tracking_records_in_ets",
],
}
}
resource "aws_launch_template" "rabbitmq" {
name_prefix = var.name
image_id = data.aws_ami.amazon_linux_2.image_id
instance_type = var.instance_type
key_name = var.ssh_key_name
vpc_security_group_ids = flatten([
aws_security_group.rabbitmq_nodes.id, var.nodes_additional_security_group_ids,
])
user_data = base64encode(templatefile("${path.module}/cloud-init.yaml", {
sync_node_count = var.max_size
asg_name = var.name
region = data.aws_region.current.name
admin_password = aws_ssm_parameter.rabbit_admin_password.name
rabbit_password = aws_ssm_parameter.rabbit_password.name
secret_cookie = aws_ssm_parameter.secret_cookie.name
message_timeout = 3 * 24 * 60 * 60 * 1000 # 3 days
rabbitmq_image = var.rabbitmq_image
rabbitmq_version = join(",", regex("^.+:(.+)$", var.rabbitmq_image))
ecr_registry_id = var.ecr_registry_id
dd_api_key = aws_ssm_parameter.datadog_api_key.name
dd_env = var.dd_env
dd_site = var.dd_site
dd_password = aws_ssm_parameter.datadog_user_password.name
app_name = var.name
region = data.aws_region.current.name
feature_flags = local.feature_flag_template
}))
block_device_mappings {
device_name = data.aws_ami.amazon_linux_2.root_device_name
ebs {
volume_type = var.instance_volume_type
volume_size = var.instance_volume_size
iops = var.instance_volume_iops
delete_on_termination = true
encrypted = var.encrypted_ebs_instance_volume
}
}
metadata_options { http_tokens = "required" }
iam_instance_profile { arn = aws_iam_instance_profile.iam_profile.arn }
lifecycle { create_before_destroy = true }
}