Skip to content

Commit 0e28eaf

Browse files
feat: add rofs configuration option
1 parent 5d8e248 commit 0e28eaf

File tree

3 files changed

+82
-68
lines changed

3 files changed

+82
-68
lines changed

modules/ecs_fargate/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ No modules.
255255
| <a name="input_dd_is_datadog_dependency_enabled"></a> [dd\_is\_datadog\_dependency\_enabled](#input\_dd\_is\_datadog\_dependency\_enabled) | Whether the Datadog Agent container is a dependency for other containers | `bool` | `false` | no |
256256
| <a name="input_dd_log_collection"></a> [dd\_log\_collection](#input\_dd\_log\_collection) | Configuration for Datadog Log Collection | <pre>object({<br/> enabled = optional(bool, false)<br/> fluentbit_config = optional(object({<br/> registry = optional(string, "public.ecr.aws/aws-observability/aws-for-fluent-bit")<br/> image_version = optional(string, "stable")<br/> cpu = optional(number)<br/> memory_limit_mib = optional(number)<br/> is_log_router_essential = optional(bool, false)<br/> is_log_router_dependency_enabled = optional(bool, false)<br/> environment = optional(list(object({<br/> name = string<br/> value = string<br/> })), [])<br/> log_router_health_check = optional(object({<br/> command = optional(list(string))<br/> interval = optional(number)<br/> retries = optional(number)<br/> start_period = optional(number)<br/> timeout = optional(number)<br/> }),<br/> {<br/> command = ["CMD-SHELL", "exit 0"]<br/> interval = 5<br/> retries = 3<br/> start_period = 15<br/> timeout = 5<br/> }<br/> )<br/> firelens_options = optional(object({<br/> config_file_type = optional(string)<br/> config_file_value = optional(string)<br/> }))<br/> log_driver_configuration = optional(object({<br/> host_endpoint = optional(string, "http-intake.logs.datadoghq.com")<br/> tls = optional(bool)<br/> compress = optional(string)<br/> service_name = optional(string)<br/> source_name = optional(string)<br/> message_key = optional(string)<br/> }),<br/> {<br/> host_endpoint = "http-intake.logs.datadoghq.com"<br/> }<br/> )<br/> mountPoints = optional(list(object({<br/> sourceVolume : string,<br/> containerPath : string,<br/> readOnly : bool<br/> })), [])<br/> dependsOn = optional(list(object({<br/> containerName : string,<br/> condition : string<br/> })), [])<br/> }),<br/> {<br/> fluentbit_config = {<br/> registry = "public.ecr.aws/aws-observability/aws-for-fluent-bit"<br/> image_version = "stable"<br/> log_driver_configuration = {<br/> host_endpoint = "http-intake.logs.datadoghq.com"<br/> }<br/> }<br/> }<br/> )<br/> })</pre> | <pre>{<br/> "enabled": false,<br/> "fluentbit_config": {<br/> "is_log_router_essential": false,<br/> "log_driver_configuration": {<br/> "host_endpoint": "http-intake.logs.datadoghq.com"<br/> }<br/> }<br/>}</pre> | no |
257257
| <a name="input_dd_memory_limit_mib"></a> [dd\_memory\_limit\_mib](#input\_dd\_memory\_limit\_mib) | Datadog Agent container memory limit in MiB | `number` | `null` | no |
258+
| <a name="input_dd_readonly_root_filesystem"></a> [dd\_readonly\_root\_filesystem](#input\_dd\_readonly\_root\_filesystem) | Datadog Agent container runs with read-only root filesystem enabled | `bool` | `true` | no |
258259
| <a name="input_dd_registry"></a> [dd\_registry](#input\_dd\_registry) | Datadog Agent image registry | `string` | `"public.ecr.aws/datadog/agent"` | no |
259260
| <a name="input_dd_service"></a> [dd\_service](#input\_dd\_service) | The task service name. Used for tagging (UST) | `string` | `null` | no |
260261
| <a name="input_dd_site"></a> [dd\_site](#input\_dd\_site) | Datadog Site | `string` | `"datadoghq.com"` | no |

modules/ecs_fargate/datadog.tf

Lines changed: 74 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ locals {
244244
)
245245
]
246246

247-
rofs_volumes = [
247+
rofs_volumes = var.dd_readonly_root_filesystem ? [
248248
{
249249
name = "agent-config"
250250
},
@@ -254,7 +254,14 @@ locals {
254254
{
255255
name = "agent-run"
256256
}
257-
]
257+
] : []
258+
259+
rofs_agent_depends_on = var.dd_readonly_root_filesystem ? [
260+
{
261+
condition = "SUCCESS"
262+
containerName = "init-volume"
263+
}
264+
] : []
258265

259266
# Volume configuration for task
260267
apm_dsd_volume = local.is_apm_dsd_volume ? [
@@ -347,77 +354,76 @@ locals {
347354
)
348355

349356
# Datadog Agent container definition
350-
dd_agent_container = [
351-
{
352-
cpu = 0
353-
memory = 128
354-
name = "init-volume"
355-
image = "${var.dd_registry}:${var.dd_image_version}"
356-
essential = false
357-
readOnlyRootFilesystem = true
358-
command = ["/bin/sh", "-c", "cp -vnR /etc/datadog-agent/* /agent-config/ && exit 0"]
359-
mountPoints = [
360-
{
361-
sourceVolume = "agent-config"
362-
containerPath = "/agent-config"
363-
readOnly = false
364-
}
365-
]
366-
},
367-
merge(
357+
dd_agent_container = concat(
358+
var.dd_readonly_root_filesystem ? [
368359
{
369-
name = "datadog-agent"
370-
image = "${var.dd_registry}:${var.dd_image_version}"
371-
essential = var.dd_essential
372-
environment = local.dd_agent_env
373-
dockerLabels = var.dd_docker_labels
374-
cpu = var.dd_cpu
375-
memory = var.dd_memory_limit_mib
376-
377-
readonlyRootFilesystem = true
378-
secrets = var.dd_api_key_secret != null ? [
379-
{
380-
name = "DD_API_KEY"
381-
valueFrom = var.dd_api_key_secret.arn
382-
}
383-
] : []
384-
portMappings = [
360+
cpu = 0
361+
memory = 128
362+
name = "init-volume"
363+
image = "${var.dd_registry}:${var.dd_image_version}"
364+
essential = false
365+
readOnlyRootFilesystem = true
366+
command = ["/bin/sh", "-c", "cp -vnR /etc/datadog-agent/* /agent-config/ && exit 0"]
367+
mountPoints = [
385368
{
386-
containerPort = 8125
387-
hostPort = 8125
388-
protocol = "udp"
389-
},
390-
{
391-
containerPort = 8126
392-
hostPort = 8126
393-
protocol = "tcp"
394-
}
395-
],
396-
397-
dependsOn = [
398-
{
399-
condition = "SUCCESS"
400-
containerName = "init-volume"
369+
sourceVolume = "agent-config"
370+
containerPath = "/agent-config"
371+
readOnly = false
401372
}
402373
]
403-
404-
mountPoints = local.dd_agent_mount,
405-
logConfiguration = local.dd_firelens_log_configuration,
406-
dependsOn = try(var.dd_log_collection.fluentbit_config.is_log_router_dependency_enabled, false) && local.dd_firelens_log_configuration != null ? local.log_router_dependency : [],
407-
systemControls = []
408-
volumesFrom = []
409-
},
410-
try(var.dd_health_check.command == null, true) ? {} : {
411-
healthCheck = {
412-
command = var.dd_health_check.command
413-
interval = var.dd_health_check.interval
414-
timeout = var.dd_health_check.timeout
415-
retries = var.dd_health_check.retries
416-
startPeriod = var.dd_health_check.start_period
417-
}
418374
}
419-
)
420-
]
375+
] : [],
376+
[
377+
merge(
378+
{
379+
name = "datadog-agent"
380+
image = "${var.dd_registry}:${var.dd_image_version}"
381+
essential = var.dd_essential
382+
environment = local.dd_agent_env
383+
dockerLabels = var.dd_docker_labels
384+
cpu = var.dd_cpu
385+
memory = var.dd_memory_limit_mib
386+
387+
readonlyRootFilesystem = var.dd_readonly_root_filesystem
388+
secrets = var.dd_api_key_secret != null ? [
389+
{
390+
name = "DD_API_KEY"
391+
valueFrom = var.dd_api_key_secret.arn
392+
}
393+
] : []
394+
portMappings = [
395+
{
396+
containerPort = 8125
397+
hostPort = 8125
398+
protocol = "udp"
399+
},
400+
{
401+
containerPort = 8126
402+
hostPort = 8126
403+
protocol = "tcp"
404+
}
405+
],
406+
407+
dependsOn = local.rofs_agent_depends_on,
408+
409+
mountPoints = local.dd_agent_mount,
410+
logConfiguration = local.dd_firelens_log_configuration,
411+
dependsOn = try(var.dd_log_collection.fluentbit_config.is_log_router_dependency_enabled, false) && local.dd_firelens_log_configuration != null ? local.log_router_dependency : [],
412+
systemControls = []
413+
volumesFrom = []
414+
},
415+
try(var.dd_health_check.command == null, true) ? {} : {
416+
healthCheck = {
417+
command = var.dd_health_check.command
418+
interval = var.dd_health_check.interval
419+
timeout = var.dd_health_check.timeout
420+
retries = var.dd_health_check.retries
421+
startPeriod = var.dd_health_check.start_period
422+
}
423+
}
424+
)
425+
]
426+
)
421427

422428
dd_log_environment = var.dd_log_collection.fluentbit_config.environment != null ? var.dd_log_collection.fluentbit_config.environment : []
423429

modules/ecs_fargate/variables.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ variable "dd_is_datadog_dependency_enabled" {
6565
nullable = false
6666
}
6767

68+
variable "dd_readonly_root_filesystem" {
69+
description = "Datadog Agent container runs with read-only root filesystem enabled"
70+
type = bool
71+
default = true
72+
nullable = false
73+
}
74+
6875
variable "dd_health_check" {
6976
description = "Datadog Agent health check configuration"
7077
type = object({

0 commit comments

Comments
 (0)