|
1 | 1 | locals { |
2 | | - enabled = module.this.enabled |
| 2 | + enabled = module.this.enabled |
| 3 | + lambda_arn_enabled = local.enabled && var.lambda_arn_enabled |
| 4 | + |
| 5 | + # If any keys contain name_suffix, then use a null label to get the label prefix, and create |
| 6 | + # the appropriate input for the upstream module. |
| 7 | + cloudwatch_forwarder_log_groups = { |
| 8 | + for k, v in var.cloudwatch_forwarder_log_groups : |
| 9 | + k => { |
| 10 | + name : lookup(v, "name_suffix", null) != null ? format( |
| 11 | + "%s%s%s%s", |
| 12 | + lookup(v, "name_prefix", "/aws/"), |
| 13 | + module.log_group_prefix.id, |
| 14 | + module.log_group_prefix.delimiter, |
| 15 | + lookup(v, "name_suffix") |
| 16 | + ) : lookup(v, "name") |
| 17 | + filter_pattern : lookup(v, "filter_pattern", "") |
| 18 | + } |
| 19 | + } |
| 20 | + |
| 21 | + # Only return context tags that are specified |
| 22 | + # NOTE: Tags are lowercased automatically by Datadog |
| 23 | + # See https://docs.datadoghq.com/developers/guide/what-best-practices-are-recommended-for-naming-metrics-and-tags/#rules-and-best-practices-for-naming-tags |
| 24 | + context_tags = var.context_tags_enabled ? { |
| 25 | + for k, v in module.this.tags : |
| 26 | + k => v |
| 27 | + if contains(var.context_tags, lower(k)) |
| 28 | + } : {} |
| 29 | + |
| 30 | + dd_tags_map = merge(var.dd_tags_map, local.context_tags) |
| 31 | +} |
| 32 | + |
| 33 | +module "log_group_prefix" { |
| 34 | + source = "cloudposse/label/null" |
| 35 | + version = "0.25.0" |
| 36 | + |
| 37 | + label_order = ["namespace", "tenant", "environment", "stage"] |
| 38 | + |
| 39 | + context = module.this.context |
| 40 | +} |
| 41 | + |
| 42 | +module "datadog_lambda_forwarder" { |
| 43 | + source = "cloudposse/datadog-lambda-forwarder/aws" |
| 44 | + version = "1.5.3" |
| 45 | + |
| 46 | + cloudwatch_forwarder_log_groups = local.cloudwatch_forwarder_log_groups |
| 47 | + cloudwatch_forwarder_event_patterns = var.cloudwatch_forwarder_event_patterns |
| 48 | + dd_api_key_kms_ciphertext_blob = var.dd_api_key_kms_ciphertext_blob |
| 49 | + dd_api_key_source = { |
| 50 | + resource = lower(module.datadog_configuration.datadog_secrets_store_type) |
| 51 | + identifier = module.datadog_configuration.datadog_api_key_location |
| 52 | + } |
| 53 | + dd_artifact_filename = var.dd_artifact_filename |
| 54 | + dd_forwarder_version = var.dd_forwarder_version |
| 55 | + dd_module_name = var.dd_module_name |
| 56 | + dd_tags_map = local.dd_tags_map |
| 57 | + forwarder_lambda_datadog_host = module.datadog_configuration.datadog_site |
| 58 | + forwarder_lambda_debug_enabled = var.forwarder_lambda_debug_enabled |
| 59 | + forwarder_log_artifact_url = var.forwarder_log_artifact_url |
| 60 | + forwarder_log_enabled = var.forwarder_log_enabled |
| 61 | + forwarder_log_layers = var.forwarder_log_layers |
| 62 | + forwarder_log_retention_days = var.forwarder_log_retention_days |
| 63 | + forwarder_rds_artifact_url = var.forwarder_rds_artifact_url |
| 64 | + forwarder_rds_enabled = var.forwarder_rds_enabled |
| 65 | + forwarder_rds_filter_pattern = var.forwarder_rds_filter_pattern |
| 66 | + forwarder_rds_layers = var.forwarder_rds_layers |
| 67 | + forwarder_vpc_logs_artifact_url = var.forwarder_vpc_logs_artifact_url |
| 68 | + forwarder_vpc_logs_enabled = var.forwarder_vpc_logs_enabled |
| 69 | + forwarder_vpc_logs_layers = var.forwarder_vpc_logs_layers |
| 70 | + forwarder_vpclogs_filter_pattern = var.forwarder_vpclogs_filter_pattern |
| 71 | + kms_key_id = var.kms_key_id |
| 72 | + lambda_policy_source_json = var.lambda_policy_source_json |
| 73 | + lambda_reserved_concurrent_executions = var.lambda_reserved_concurrent_executions |
| 74 | + lambda_runtime = var.lambda_runtime |
| 75 | + s3_bucket_kms_arns = var.s3_bucket_kms_arns |
| 76 | + s3_buckets = var.s3_buckets |
| 77 | + s3_buckets_with_prefixes = var.s3_buckets_with_prefixes |
| 78 | + security_group_ids = var.security_group_ids |
| 79 | + subnet_ids = var.subnet_ids |
| 80 | + tracing_config_mode = var.tracing_config_mode |
| 81 | + vpclogs_cloudwatch_log_group = var.vpclogs_cloudwatch_log_group |
| 82 | + |
| 83 | + datadog_forwarder_lambda_environment_variables = var.datadog_forwarder_lambda_environment_variables |
| 84 | + |
| 85 | + api_key_ssm_arn = module.datadog_configuration.api_key_ssm_arn |
| 86 | + |
| 87 | + context = module.this.context |
| 88 | +} |
| 89 | + |
| 90 | +# Create a new Datadog - Amazon Web Services integration Lambda ARN |
| 91 | +resource "datadog_integration_aws_lambda_arn" "rds_collector" { |
| 92 | + count = local.lambda_arn_enabled && var.forwarder_rds_enabled ? 1 : 0 |
| 93 | + |
| 94 | + account_id = module.datadog-integration.outputs.aws_account_id |
| 95 | + lambda_arn = module.datadog_lambda_forwarder.lambda_forwarder_rds_function_arn |
3 | 96 | } |
4 | 97 |
|
| 98 | +resource "datadog_integration_aws_lambda_arn" "vpc_logs_collector" { |
| 99 | + count = local.lambda_arn_enabled && var.forwarder_vpc_logs_enabled ? 1 : 0 |
5 | 100 |
|
| 101 | + account_id = module.datadog-integration.outputs.aws_account_id |
| 102 | + lambda_arn = module.datadog_lambda_forwarder.lambda_forwarder_vpc_log_function_arn |
| 103 | +} |
6 | 104 |
|
| 105 | +resource "datadog_integration_aws_lambda_arn" "log_collector" { |
| 106 | + count = local.lambda_arn_enabled && var.forwarder_log_enabled ? 1 : 0 |
7 | 107 |
|
| 108 | + account_id = module.datadog-integration.outputs.aws_account_id |
| 109 | + lambda_arn = module.datadog_lambda_forwarder.lambda_forwarder_log_function_arn |
| 110 | +} |
8 | 111 |
|
| 112 | +resource "datadog_integration_aws_log_collection" "main" { |
| 113 | + count = local.lambda_arn_enabled ? 1 : 0 |
| 114 | + account_id = module.datadog-integration.outputs.aws_account_id |
| 115 | + services = var.log_collection_services |
| 116 | + |
| 117 | + depends_on = [module.datadog_lambda_forwarder] |
| 118 | +} |
0 commit comments