@@ -213,3 +213,95 @@ resource "aws_ecs_service" "this" {
213
213
data "aws_secretsmanager_secret_version" "this" {
214
214
secret_id = aws_secretsmanager_secret. this . id
215
215
}
216
+
217
+ # Grafana
218
+
219
+ resource "aws_ecs_cluster" "grafana" {
220
+ count = var. enable_grafana ? 1 : 0
221
+ name = " grafana-cluster"
222
+ }
223
+
224
+ resource "aws_iam_role" "ecs_task_execution" {
225
+ count = var. enable_grafana ? 1 : 0
226
+ name = " ecsTaskExecutionRole-grafana"
227
+
228
+ assume_role_policy = jsonencode ({
229
+ Version = " 2012-10-17" ,
230
+ Statement = [{
231
+ Action = " sts:AssumeRole" ,
232
+ Effect = " Allow" ,
233
+ Principal = {
234
+ Service = " ecs-tasks.amazonaws.com"
235
+ }
236
+ }]
237
+ })
238
+ }
239
+
240
+ resource "aws_iam_role_policy_attachment" "ecs_task_execution_attach" {
241
+ count = var. enable_grafana ? 1 : 0
242
+ role = aws_iam_role. ecs_task_execution [0 ]. name
243
+ policy_arn = " arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
244
+ }
245
+
246
+ resource "aws_ecs_task_definition" "grafana" {
247
+ count = var. enable_grafana ? 1 : 0
248
+ family = " grafana-task"
249
+ network_mode = " awsvpc"
250
+ requires_compatibilities = [" FARGATE" ]
251
+ # This is a lightweight image so running the minimum allowed fargate container
252
+ cpu = " 256"
253
+ memory = " 512"
254
+
255
+ execution_role_arn = aws_iam_role. ecs_task_execution [0 ]. arn
256
+
257
+ container_definitions = jsonencode ([
258
+ {
259
+ name = " grafana"
260
+ image = " grafana/grafana:latest"
261
+ essential = true
262
+ portMappings = [
263
+ {
264
+ containerPort = 3000
265
+ protocol = " tcp"
266
+ }
267
+ ]
268
+ environment = [
269
+ {
270
+ name = " GF_SECURITY_ADMIN_PASSWORD"
271
+ value = var.grafana_admin_password
272
+ },
273
+ {
274
+ name = " GF_SERVER_ROOT_URL"
275
+ value = " https://${ var . custom_domain_name } /grafana/"
276
+ },
277
+ {
278
+ name = " GF_SERVER_SERVE_FROM_SUB_PATH"
279
+ value = " true"
280
+ }
281
+ ]
282
+ }
283
+ ])
284
+ }
285
+
286
+ resource "aws_ecs_service" "grafana" {
287
+ count = var. enable_grafana ? 1 : 0
288
+ name = " grafana-service"
289
+ cluster = aws_ecs_cluster. grafana [0 ]. id
290
+ task_definition = aws_ecs_task_definition. grafana [0 ]. arn
291
+ desired_count = 1
292
+ launch_type = " FARGATE"
293
+
294
+ network_configuration {
295
+ security_groups = [data . aws_security_group . app . id ]
296
+ subnets = [data . aws_subnet . a . id , data . aws_subnet . b . id ]
297
+ assign_public_ip = false
298
+ }
299
+
300
+ load_balancer {
301
+ target_group_arn = aws_lb_target_group. grafana [0 ]. arn
302
+ container_name = " grafana"
303
+ container_port = 3000
304
+ }
305
+
306
+ depends_on = [aws_alb_listener_rule . grafana ]
307
+ }
0 commit comments