Skip to content
v2.274.0

Experimental

@aws-cdk/aws-applicationsignals-alpha is an experimental (alpha) package: its API may change in any release, without a major version bump.

CloudWatchAgentIntegrationProps Struct ​

Properties for integrating CloudWatch Agent into an ECS task definition.

Example ​

ts
import { Construct } from 'constructs';
import * as appsignals from '@aws-cdk/aws-applicationsignals-alpha';
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as ecs from 'aws-cdk-lib/aws-ecs';

class MyStack extends cdk.Stack {
  public constructor(scope?: Construct, id?: string, props: cdk.StackProps = {}) {
    super(scope, id, props);

    const vpc = new ec2.Vpc(this, 'TestVpc', {});
    const cluster = new ecs.Cluster(this, 'TestCluster', { vpc });

    // Define Task Definition for CloudWatch agent (Daemon)
    const cwAgentTaskDefinition = new ecs.Ec2TaskDefinition(this, 'CloudWatchAgentTaskDefinition', {
      networkMode: ecs.NetworkMode.HOST,
    });

    new appsignals.CloudWatchAgentIntegration(this, 'CloudWatchAgentIntegration', {
      taskDefinition: cwAgentTaskDefinition,
      containerName: 'ecs-cwagent',
      enableLogging: false,
      cpu: 128,
      memoryLimitMiB: 64,
      portMappings: [
        {
          containerPort: 4316,
          hostPort: 4316,
        },
        {
          containerPort: 2000,
          hostPort: 2000,
        },
      ],
    });

    // Create the CloudWatch Agent daemon service
    new ecs.Ec2Service(this, 'CloudWatchAgentDaemon', {
      cluster,
      taskDefinition: cwAgentTaskDefinition,
      daemon: true,  // Runs one container per EC2 instance
    });

    // Define Task Definition for user application
    const sampleAppTaskDefinition = new ecs.Ec2TaskDefinition(this, 'SampleAppTaskDefinition', {
      networkMode: ecs.NetworkMode.HOST,
    });

    sampleAppTaskDefinition.addContainer('app', {
      image: ecs.ContainerImage.fromRegistry('test/sample-app'),
      cpu: 0,
      memoryLimitMiB: 512,
    });

    // No CloudWatch Agent side car is needed as application container communicates to CloudWatch Agent daemon through host network
    new appsignals.ApplicationSignalsIntegration(this, 'ApplicationSignalsIntegration', {
      taskDefinition: sampleAppTaskDefinition,
      instrumentation: {
        sdkVersion: appsignals.PythonInstrumentationVersion.V0_8_0
      },
      serviceName: 'sample-app'
    });

    new ecs.Ec2Service(this, 'MySampleApp', {
      cluster,
      taskDefinition: sampleAppTaskDefinition,
      desiredCount: 1,
    });
  }
}

Properties ​

agentConfigstringagent_configstragentConfigStringAgentConfigstringAgentConfig*string#
Custom agent configuration in JSON format.

Default: Uses default configuration for Application Signals

containerNamestringcontainer_namestrcontainerNameStringContainerNamestringContainerName*stringrequired#
Name of the CloudWatch Agent container.
cpunumbercpuint | floatcpuNumberCpudoubleCpu*float64#
The minimum number of CPU units to reserve for the container.

Default: No minimum CPU units reserved.

enableLoggingbooleanenable_loggingboolenableLoggingBooleanEnableLoggingboolEnableLogging*bool= false#
Whether to enable logging for the CloudWatch Agent.
essentialbooleanessentialboolessentialBooleanEssentialboolEssential*bool= true#
Start as an essential container.
memoryLimitMiBnumbermemory_limit_mi_bint | floatmemoryLimitMiBNumberMemoryLimitMiBdoubleMemoryLimitMiB*float64#
The amount (in MiB) of memory to present to the container.

Default: No memory limit.

memoryReservationMiBnumbermemory_reservation_mi_bint | floatmemoryReservationMiBNumberMemoryReservationMiBdoubleMemoryReservationMiB*float64#
The soft limit (in MiB) of memory to reserve for the container.

Default: No memory reserved.

operatingSystemFamilyOperatingSystemFamilyoperating_system_familyOperatingSystemFamilyoperatingSystemFamilyOperatingSystemFamilyOperatingSystemFamilyOperatingSystemFamilyOperatingSystemFamilyOperatingSystemFamily= Linux#
Operating system family for the CloudWatch Agent.
portMappingsPortMapping[]port_mappingstyping.List[PortMapping]portMappingsList<PortMapping>PortMappingsPortMapping[]PortMappings*[]PortMapping#
The port mappings to add to the container definition.

Default: No ports are mapped.

taskDefinitionTaskDefinitiontask_definitionTaskDefinitiontaskDefinitionTaskDefinitionTaskDefinitionTaskDefinitionTaskDefinitionTaskDefinitionrequired#
The task definition to integrate CloudWatch agent into.

[disable-awslint:ref-via-interface]