// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 using Amazon.CDK.AWS.IAM; using System.Collections.Generic; namespace Amazon.CDK.AWS.ECS.MyExtensions { public static class TaskDefinitionExtensions { /// /// Add Sidecar container with X-Ray daemon /// to gathers raw segment data, and relays it to the AWS X-Ray API. /// learn more at /// /// /// /// public static TaskDefinition AddXRayDaemon(this TaskDefinition taskDefinition, XRayDaemonProps xRayDaemonProps) { taskDefinition.AddContainer("x-ray-daemon", new ContainerDefinitionOptions { ContainerName = xRayDaemonProps.XRayDaemonContainerName, Cpu = 32, MemoryLimitMiB = 256, PortMappings = new PortMapping[]{ new PortMapping{ ContainerPort = 2000, Protocol = Protocol.UDP }}, Image = ContainerImage.FromRegistry("public.ecr.aws/xray/aws-xray-daemon:latest"), Logging = xRayDaemonProps.LogDriver }); //Grant permission to write X-Ray segments taskDefinition.TaskRole .AddManagedPolicy(ManagedPolicy.FromAwsManagedPolicyName("AWSXRayDaemonWriteAccess")); return taskDefinition; } /// /// Add Sidecar container with CloudWatch agent /// to send embedded metrics format logs. /// Learn more at /// /// /// /// public static TaskDefinition AddCloudWatchAgent(this TaskDefinition taskDefinition, CloudWatchAgentProps agentProps) { //Sidecar container with CloudWatch agent // to send embedded metrics format logs // learn more at https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Generation_CloudWatch_Agent.html taskDefinition .AddContainer("cwagent", new ContainerDefinitionOptions { ContainerName = agentProps.AgentContainerName, Cpu = 32, MemoryLimitMiB = 256, PortMappings = new PortMapping[]{ new PortMapping{ ContainerPort = 25888, Protocol = Amazon.CDK.AWS.ECS.Protocol.TCP }, new PortMapping{ ContainerPort = 25888, Protocol = Amazon.CDK.AWS.ECS.Protocol.UDP }}, Image = ContainerImage.FromRegistry("public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest"), Environment = new Dictionary() { { "CW_CONFIG_CONTENT", "{\"logs\":{\"metrics_collected\":{\"emf\":{}}}}" } }, Logging = agentProps.LogDriver }); //Grant permission to the cw agent taskDefinition.TaskRole .AddManagedPolicy(ManagedPolicy.FromAwsManagedPolicyName("CloudWatchAgentServerPolicy")); return taskDefinition; } } }