| 
 | 1 | +data "sysdig_fargate_workload_agent" "containers_instrumented" {  | 
 | 2 | +  container_definitions = jsonencode([  | 
 | 3 | +    {  | 
 | 4 | +      "name" : "event-gen-1",  | 
 | 5 | +      "image" : "falcosecurity/event-generator",  | 
 | 6 | +      "command" : ["run", "syscall", "--all", "--loop"],  | 
 | 7 | +      "logConfiguration" : {  | 
 | 8 | +        "logDriver" : "awslogs",  | 
 | 9 | +        "options" : {  | 
 | 10 | +          "awslogs-group" : aws_cloudwatch_log_group.instrumented_logs.name,  | 
 | 11 | +          "awslogs-region" : var.region,  | 
 | 12 | +          "awslogs-stream-prefix" : "task"  | 
 | 13 | +        },  | 
 | 14 | +      }  | 
 | 15 | +    },  | 
 | 16 | +    {  | 
 | 17 | +      "name" : "event-gen-2",  | 
 | 18 | +      "image" : "falcosecurity/event-generator",  | 
 | 19 | +      "command" : ["run", "syscall", "--all", "--loop"],  | 
 | 20 | +      "logConfiguration" : {  | 
 | 21 | +        "logDriver" : "awslogs",  | 
 | 22 | +        "options" : {  | 
 | 23 | +          "awslogs-group" : aws_cloudwatch_log_group.instrumented_logs.name,  | 
 | 24 | +          "awslogs-region" : var.region,  | 
 | 25 | +          "awslogs-stream-prefix" : "task"  | 
 | 26 | +        },  | 
 | 27 | +      }  | 
 | 28 | +    }  | 
 | 29 | +  ])  | 
 | 30 | + | 
 | 31 | +  workload_agent_image = var.agent_workload_image  | 
 | 32 | + | 
 | 33 | +  sysdig_access_key = var.access_key  | 
 | 34 | +  orchestrator_host = var.orchestrator_host  | 
 | 35 | +  orchestrator_port = var.orchestrator_port  | 
 | 36 | + | 
 | 37 | +  log_configuration {  | 
 | 38 | +    group         = aws_cloudwatch_log_group.instrumented_logs.name  | 
 | 39 | +    stream_prefix = "instrumentation"  | 
 | 40 | +    region        = var.region  | 
 | 41 | +  }  | 
 | 42 | +}  | 
 | 43 | + | 
 | 44 | +resource "aws_ecs_task_definition" "task_definition" {  | 
 | 45 | +  family             = "${var.prefix}-instrumented-task-definition"  | 
 | 46 | +  task_role_arn      = aws_iam_role.task_role.arn  | 
 | 47 | +  execution_role_arn = aws_iam_role.execution_role.arn  | 
 | 48 | + | 
 | 49 | +  cpu                      = "256"  | 
 | 50 | +  memory                   = "512"  | 
 | 51 | +  network_mode             = "awsvpc"  | 
 | 52 | +  requires_compatibilities = ["FARGATE"]  | 
 | 53 | +  pid_mode                 = "task"  | 
 | 54 | + | 
 | 55 | +  container_definitions = data.sysdig_fargate_workload_agent.containers_instrumented.output_container_definitions  | 
 | 56 | +}  | 
 | 57 | + | 
 | 58 | + | 
 | 59 | +resource "aws_ecs_cluster" "cluster" {  | 
 | 60 | +  name = "${var.prefix}-instrumented-workload"  | 
 | 61 | +}  | 
 | 62 | + | 
 | 63 | +resource "aws_cloudwatch_log_group" "instrumented_logs" {  | 
 | 64 | +}  | 
 | 65 | + | 
 | 66 | +data "aws_iam_policy_document" "assume_role_policy" {  | 
 | 67 | +  statement {  | 
 | 68 | +    actions = ["sts:AssumeRole"]  | 
 | 69 | + | 
 | 70 | +    principals {  | 
 | 71 | +      type        = "Service"  | 
 | 72 | +      identifiers = ["ecs-tasks.amazonaws.com"]  | 
 | 73 | +    }  | 
 | 74 | +  }  | 
 | 75 | +}  | 
 | 76 | + | 
 | 77 | +resource "aws_iam_role" "execution_role" {  | 
 | 78 | +  assume_role_policy = data.aws_iam_policy_document.assume_role_policy.json  | 
 | 79 | + | 
 | 80 | +  managed_policy_arns = ["arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"]  | 
 | 81 | +}  | 
 | 82 | + | 
 | 83 | +resource "aws_iam_role" "task_role" {  | 
 | 84 | +  assume_role_policy = data.aws_iam_policy_document.assume_role_policy.json  | 
 | 85 | + | 
 | 86 | +  inline_policy {  | 
 | 87 | +    name   = "root"  | 
 | 88 | +    policy = data.aws_iam_policy_document.task_policy.json  | 
 | 89 | +  }  | 
 | 90 | +}  | 
 | 91 | + | 
 | 92 | +data "aws_iam_policy_document" "task_policy" {  | 
 | 93 | +  statement {  | 
 | 94 | +    actions = [  | 
 | 95 | +      "ecr:GetAuthorizationToken",  | 
 | 96 | +      "ecr:BatchCheckLayerAvailability",  | 
 | 97 | +      "ecr:GetDownloadUrlForLayer",  | 
 | 98 | +      "ecr:BatchGetImage",  | 
 | 99 | +      "logs:CreateLogGroup",  | 
 | 100 | +      "logs:CreateLogStream",  | 
 | 101 | +      "logs:PutLogEvents",  | 
 | 102 | +    ]  | 
 | 103 | + | 
 | 104 | +    resources = ["*"]  | 
 | 105 | +  }  | 
 | 106 | +}  | 
 | 107 | + | 
 | 108 | +resource "aws_ecs_service" "service" {  | 
 | 109 | +  name = "${var.prefix}-instrumented-service"  | 
 | 110 | + | 
 | 111 | +  cluster          = aws_ecs_cluster.cluster.id  | 
 | 112 | +  task_definition  = aws_ecs_task_definition.task_definition.arn  | 
 | 113 | +  desired_count    = var.replicas  | 
 | 114 | +  launch_type      = "FARGATE"  | 
 | 115 | +  platform_version = "1.4.0"  | 
 | 116 | + | 
 | 117 | +  network_configuration {  | 
 | 118 | +    subnets          = [var.subnet_1, var.subnet_2]  | 
 | 119 | +    security_groups  = [aws_security_group.security_group.id]  | 
 | 120 | +    assign_public_ip = true  | 
 | 121 | +  }  | 
 | 122 | +}  | 
 | 123 | + | 
 | 124 | +resource "aws_security_group" "security_group" {  | 
 | 125 | +  description = "${var.prefix}-security-group"  | 
 | 126 | +  vpc_id      = var.vpc_id  | 
 | 127 | +}  | 
 | 128 | + | 
 | 129 | +resource "aws_security_group_rule" "orchestrator_agent_ingress_rule" {  | 
 | 130 | +  type              = "ingress"  | 
 | 131 | +  protocol          = "tcp"  | 
 | 132 | +  from_port         = 0  | 
 | 133 | +  to_port           = 0  | 
 | 134 | +  cidr_blocks       = ["0.0.0.0/0"]  | 
 | 135 | +  security_group_id = aws_security_group.security_group.id  | 
 | 136 | +}  | 
 | 137 | + | 
 | 138 | +resource "aws_security_group_rule" "orchestrator_agent_egress_rule" {  | 
 | 139 | +  type              = "egress"  | 
 | 140 | +  protocol          = "all"  | 
 | 141 | +  from_port         = 0  | 
 | 142 | +  to_port           = 0  | 
 | 143 | +  cidr_blocks       = ["0.0.0.0/0"]  | 
 | 144 | +  security_group_id = aws_security_group.security_group.id  | 
 | 145 | +}  | 
0 commit comments