11locals {
2+ # Datadog ECS task tags
3+ tags = {
4+ dd_ecs_terraform_module = " 1.0.0"
5+ }
6+
27 # Datadog Firelens log configuration
38 dd_firelens_log_configuration = var. dd_log_collection . enabled ? merge (
49 {
@@ -33,6 +38,17 @@ locals {
3338 is_dsd_socket_mount = var. dd_dogstatsd . enabled && var. dd_dogstatsd . socket_enabled && local. is_linux
3439 is_apm_dsd_volume = local. is_apm_socket_mount || local. is_dsd_socket_mount
3540
41+ cws_entry_point_prefix = [" /cws-instrumentation-volume/cws-instrumentation" , " trace" , " --" ]
42+ is_cws_supported = local. is_linux && var. dd_cws . enabled
43+
44+ cws_mount = local. is_cws_supported ? [
45+ {
46+ sourceVolume = " cws-instrumentation-volume"
47+ containerPath = " /cws-instrumentation-volume"
48+ readOnly = false
49+ }
50+ ] : []
51+
3652 apm_dsd_mount = local. is_apm_dsd_volume ? [
3753 {
3854 containerPath = " /var/run/datadog"
@@ -76,9 +92,17 @@ locals {
7692 }
7793 ] : []
7894
95+ cws_dependency = local. is_cws_supported ? [
96+ {
97+ containerName = " cws-instrumentation-init"
98+ condition = " SUCCESS"
99+ }
100+ ] : []
101+
79102 modified_container_definitions = [
80- for container in var . container_definitions : merge (
103+ for container in jsondecode ( var. container_definitions ) : merge (
81104 container ,
105+ # Note: only configure CWS on container if entryPoint is set
82106 {
83107 # Append new environment variables to any existing ones.
84108 environment = concat (
@@ -90,13 +114,28 @@ locals {
90114 # Append new volume mounts to any existing mountPoints.
91115 mountPoints = concat (
92116 lookup (container, " mountPoints" , []),
93- local. apm_dsd_mount
117+ local. apm_dsd_mount ,
118+ local. is_cws_supported && lookup (container, " entryPoint" , []) != [] ? local. cws_mount : [],
94119 )
95120 dependsOn = concat (
96121 lookup (container, " dependsOn" , []),
97122 local. agent_dependency ,
98123 local. log_router_dependency ,
124+ local. is_cws_supported && lookup (container, " entryPoint" , []) != [] ? local. cws_dependency : [],
99125 )
126+ entryPoint = local.is_cws_supported && lookup (container, " entryPoint" , []) != [] ? concat (
127+ local. cws_entry_point_prefix ,
128+ lookup (container, " entryPoint" , []),
129+ ) : null
130+ linuxParameters = local.is_cws_supported && lookup (container, " entryPoint" , []) != [] ? {
131+ # Note: SYS_PTRACE is the only supported capability on Fargate
132+ capabilities = {
133+ add = [
134+ " SYS_PTRACE" ,
135+ ]
136+ drop = []
137+ }
138+ } : null
100139 },
101140 # Only override the log configuration if the Datadog firelens configuration exists
102141 local . dd_firelens_log_configuration != null ? { logConfiguration = local.dd_firelens_log_configuration } : {}
@@ -110,12 +149,30 @@ locals {
110149 }
111150 ] : []
112151
152+ cws_volume = local. is_cws_supported ? [
153+ {
154+ name = " cws-instrumentation-volume"
155+ }
156+ ] : []
157+
113158 modified_volumes = concat (
114- [for k , v in coalesce (var. volumes , {}) : v ],
115- local. apm_dsd_volume
159+ [for k , v in coalesce (var. volumes , []) : v ],
160+ local. apm_dsd_volume ,
161+ local. cws_volume ,
116162 )
117163
118164 # Datadog Agent container environment variables
165+ base_env = [
166+ {
167+ name = " ECS_FARGATE"
168+ value = " true"
169+ },
170+ {
171+ name = " DD_ECS_TASK_COLLECTION_ENABLED"
172+ value = " true"
173+ }
174+ ]
175+
119176 dynamic_env = [
120177 for pair in [
121178 { key = " DD_API_KEY" , value = var.dd_api_key },
@@ -140,10 +197,23 @@ locals {
140197 }
141198 ] : []
142199
200+ cws_vars = local. is_cws_supported ? [
201+ {
202+ name = " DD_RUNTIME_SECURITY_CONFIG_ENABLED"
203+ value = " true"
204+ },
205+ {
206+ name = " DD_RUNTIME_SECURITY_CONFIG_EBPFLESS_ENABLED"
207+ value = " true"
208+ }
209+ ] : []
210+
143211 dd_agent_env = concat (
144- var . dd_environment ,
212+ local . base_env ,
145213 local. dynamic_env ,
146214 local. origin_detection_vars ,
215+ local. cws_vars ,
216+ var. dd_environment ,
147217 )
148218
149219 # Datadog Agent container definition
@@ -175,6 +245,8 @@ locals {
175245 mountPoints = local.apm_dsd_mount,
176246 logConfiguration = local.dd_firelens_log_configuration,
177247 dependsOn = var.dd_log_collection.is_log_router_dependency_enabled && local.dd_firelens_log_configuration != null ? local.log_router_dependency : [],
248+ systemControls = []
249+ volumesFrom = []
178250 },
179251 var. dd_health_check . command == null ? {} : {
180252 healthCheck = {
@@ -204,6 +276,11 @@ locals {
204276 cpu = var.dd_log_collection.cpu
205277 memory_limit_mib = var.dd_log_collection.memory_limit_mib
206278 user = " 0"
279+ mountPoints = []
280+ environment = []
281+ portMappings = []
282+ systemControls = []
283+ volumesFrom = []
207284 },
208285 var. dd_log_collection . log_router_health_check . command == null ? {} : {
209286 healthCheck = {
@@ -217,4 +294,22 @@ locals {
217294 )
218295 ] : []
219296
297+ # Datadog CWS tracer definition
298+ dd_cws_container = local. is_cws_supported ? [
299+ {
300+ name = " cws-instrumentation-init"
301+ image = " datadog/cws-instrumentation:latest"
302+ cpu = var.dd_cws.cpu
303+ memory_limit_mib = var.dd_cws.memory_limit_mib
304+ user = " 0"
305+ essential = false
306+ entryPoint = []
307+ command = [" /cws-instrumentation" , " setup" , " --cws-volume-mount" , " /cws-instrumentation-volume" ]
308+ mountPoints = local.cws_mount
309+ environment = []
310+ portMappings = []
311+ systemControls = []
312+ volumesFrom = []
313+ }
314+ ] : []
220315}
0 commit comments