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.

PythonInstrumentationVersion Class ​

Available versions for Python instrumentation.

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,
    });
  }
}
python
from constructs import Construct
import aws_cdk.aws_applicationsignals_alpha as appsignals
import aws_cdk as cdk
import aws_cdk.aws_ec2 as ec2
import aws_cdk.aws_ecs as ecs

class MyStack(cdk.Stack):
    def __init__(self, scope=None, id=None, *, description=None, env=None, stackName=None, tags=None, notificationArns=None, synthesizer=None, terminationProtection=None, analyticsReporting=None, crossRegionReferences=None, permissionsBoundary=None, suppressTemplateIndentation=None, propertyInjectors=None):
        super().__init__(scope, id, description=description, env=env, stackName=stackName, tags=tags, notificationArns=notificationArns, synthesizer=synthesizer, terminationProtection=terminationProtection, analyticsReporting=analyticsReporting, crossRegionReferences=crossRegionReferences, permissionsBoundary=permissionsBoundary, suppressTemplateIndentation=suppressTemplateIndentation, propertyInjectors=propertyInjectors)

        vpc = ec2.Vpc(self, "TestVpc")
        cluster = ecs.Cluster(self, "TestCluster", vpc=vpc)

        # Define Task Definition for CloudWatch agent (Daemon)
        cw_agent_task_definition = ecs.Ec2TaskDefinition(self, "CloudWatchAgentTaskDefinition",
            network_mode=ecs.NetworkMode.HOST
        )

        appsignals.CloudWatchAgentIntegration(self, "CloudWatchAgentIntegration",
            task_definition=cw_agent_task_definition,
            container_name="ecs-cwagent",
            enable_logging=False,
            cpu=128,
            memory_limit_mi_b=64,
            port_mappings=[ecs.PortMapping(
                container_port=4316,
                host_port=4316
            ), ecs.PortMapping(
                container_port=2000,
                host_port=2000
            )
            ]
        )

        # Create the CloudWatch Agent daemon service
        ecs.Ec2Service(self, "CloudWatchAgentDaemon",
            cluster=cluster,
            task_definition=cw_agent_task_definition,
            daemon=True
        )

        # Define Task Definition for user application
        sample_app_task_definition = ecs.Ec2TaskDefinition(self, "SampleAppTaskDefinition",
            network_mode=ecs.NetworkMode.HOST
        )

        sample_app_task_definition.add_container("app",
            image=ecs.ContainerImage.from_registry("test/sample-app"),
            cpu=0,
            memory_limit_mi_b=512
        )

        # No CloudWatch Agent side car is needed as application container communicates to CloudWatch Agent daemon through host network
        appsignals.ApplicationSignalsIntegration(self, "ApplicationSignalsIntegration",
            task_definition=sample_app_task_definition,
            instrumentation=appsignals.InstrumentationProps(
                sdk_version=appsignals.PythonInstrumentationVersion.V0_8_0
            ),
            service_name="sample-app"
        )

        ecs.Ec2Service(self, "MySampleApp",
            cluster=cluster,
            task_definition=sample_app_task_definition,
            desired_count=1
        )
java
import software.constructs.Construct;
import software.amazon.awscdk.services.applicationsignals.alpha.*;
import software.amazon.awscdk.*;
import software.amazon.awscdk.services.ec2.*;
import software.amazon.awscdk.services.ecs.*;

public class MyStack extends Stack {
    public MyStack() {
        this(null);
    }

    public MyStack(Construct scope) {
        this(scope, null);
    }

    public MyStack(Construct scope, String id) {
        this(scope, id, StackProps.builder().build());
    }

    public MyStack(Construct scope, String id, StackProps props) {
        super(scope, id, props);

        Vpc vpc = Vpc.Builder.create(this, "TestVpc").build();
        Cluster cluster = Cluster.Builder.create(this, "TestCluster").vpc(vpc).build();

        // Define Task Definition for CloudWatch agent (Daemon)
        Ec2TaskDefinition cwAgentTaskDefinition = Ec2TaskDefinition.Builder.create(this, "CloudWatchAgentTaskDefinition")
                .networkMode(NetworkMode.HOST)
                .build();

        CloudWatchAgentIntegration.Builder.create(this, "CloudWatchAgentIntegration")
                .taskDefinition(cwAgentTaskDefinition)
                .containerName("ecs-cwagent")
                .enableLogging(false)
                .cpu(128)
                .memoryLimitMiB(64)
                .portMappings(List.of(PortMapping.builder()
                        .containerPort(4316)
                        .hostPort(4316)
                        .build(), PortMapping.builder()
                        .containerPort(2000)
                        .hostPort(2000)
                        .build()))
                .build();

        // Create the CloudWatch Agent daemon service
        // Create the CloudWatch Agent daemon service
        Ec2Service.Builder.create(this, "CloudWatchAgentDaemon")
                .cluster(cluster)
                .taskDefinition(cwAgentTaskDefinition)
                .daemon(true)
                .build();

        // Define Task Definition for user application
        Ec2TaskDefinition sampleAppTaskDefinition = Ec2TaskDefinition.Builder.create(this, "SampleAppTaskDefinition")
                .networkMode(NetworkMode.HOST)
                .build();

        sampleAppTaskDefinition.addContainer("app", ContainerDefinitionOptions.builder()
                .image(ContainerImage.fromRegistry("test/sample-app"))
                .cpu(0)
                .memoryLimitMiB(512)
                .build());

        // No CloudWatch Agent side car is needed as application container communicates to CloudWatch Agent daemon through host network
        // No CloudWatch Agent side car is needed as application container communicates to CloudWatch Agent daemon through host network
        ApplicationSignalsIntegration.Builder.create(this, "ApplicationSignalsIntegration")
                .taskDefinition(sampleAppTaskDefinition)
                .instrumentation(InstrumentationProps.builder()
                        .sdkVersion(PythonInstrumentationVersion.V0_8_0)
                        .build())
                .serviceName("sample-app")
                .build();

        Ec2Service.Builder.create(this, "MySampleApp")
                .cluster(cluster)
                .taskDefinition(sampleAppTaskDefinition)
                .desiredCount(1)
                .build();
    }
}
csharp
// Install: dotnet add package Amazon.CDK.AWS.ApplicationSignals.Alpha
using Constructs;
using Amazon.CDK.AWS.ApplicationSignals.Alpha;
using Amazon.CDK;
using Amazon.CDK.AWS.EC2;
using Amazon.CDK.AWS.ECS;

class MyStack : Stack
{
    public MyStack(Construct? scope=null, string? id=null, StackProps props=new StackProps { }) : base(scope, id, props)
    {

        var vpc = new Vpc(this, "TestVpc", new VpcProps { });
        var cluster = new Cluster(this, "TestCluster", new ClusterProps { Vpc = vpc });

        // Define Task Definition for CloudWatch agent (Daemon)
        var cwAgentTaskDefinition = new Ec2TaskDefinition(this, "CloudWatchAgentTaskDefinition", new Ec2TaskDefinitionProps {
            NetworkMode = NetworkMode.HOST
        });

        new CloudWatchAgentIntegration(this, "CloudWatchAgentIntegration", new CloudWatchAgentIntegrationProps {
            TaskDefinition = cwAgentTaskDefinition,
            ContainerName = "ecs-cwagent",
            EnableLogging = false,
            Cpu = 128,
            MemoryLimitMiB = 64,
            PortMappings = new [] { new PortMapping {
                ContainerPort = 4316,
                HostPort = 4316
            }, new PortMapping {
                ContainerPort = 2000,
                HostPort = 2000
            } }
        });

        // Create the CloudWatch Agent daemon service
        // Create the CloudWatch Agent daemon service
        new Ec2Service(this, "CloudWatchAgentDaemon", new Ec2ServiceProps {
            Cluster = cluster,
            TaskDefinition = cwAgentTaskDefinition,
            Daemon = true
        });

        // Define Task Definition for user application
        var sampleAppTaskDefinition = new Ec2TaskDefinition(this, "SampleAppTaskDefinition", new Ec2TaskDefinitionProps {
            NetworkMode = NetworkMode.HOST
        });

        sampleAppTaskDefinition.AddContainer("app", new ContainerDefinitionOptions {
            Image = 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
        // No CloudWatch Agent side car is needed as application container communicates to CloudWatch Agent daemon through host network
        new ApplicationSignalsIntegration(this, "ApplicationSignalsIntegration", new ApplicationSignalsIntegrationProps {
            TaskDefinition = sampleAppTaskDefinition,
            Instrumentation = new InstrumentationProps {
                SdkVersion = PythonInstrumentationVersion.V0_8_0
            },
            ServiceName = "sample-app"
        });

        new Ec2Service(this, "MySampleApp", new Ec2ServiceProps {
            Cluster = cluster,
            TaskDefinition = sampleAppTaskDefinition,
            DesiredCount = 1
        });
    }
}
go
// Install: go get github.com/aws/aws-cdk-go/awscdkapplicationsignalsalpha/v2
import "github.com/aws/constructs-go/constructs"
import "github.com/aws/aws-cdk-go/awscdkapplicationsignalsalpha"
import cdk "github.com/aws/aws-cdk-go/awscdk"
import ec2 "github.com/aws/aws-cdk-go/awscdk"
import "github.com/aws/aws-cdk-go/awscdk"

type myStack struct {
	Stack
}

func newMyStack(scope Construct, id *string, props StackProps) *myStack {
	if props == nil {
		props = &StackProps{
		}
	}
	this := &myStack{}
	cdk.NewStack_Override(this, scope, id, props)

	vpc := ec2.NewVpc(this, jsii.String("TestVpc"), &VpcProps{
	})
	cluster := ecs.NewCluster(this, jsii.String("TestCluster"), &ClusterProps{
		Vpc: Vpc,
	})

	// Define Task Definition for CloudWatch agent (Daemon)
	cwAgentTaskDefinition := ecs.NewEc2TaskDefinition(this, jsii.String("CloudWatchAgentTaskDefinition"), &Ec2TaskDefinitionProps{
		NetworkMode: ecs.NetworkMode_HOST,
	})

	appsignals.NewCloudWatchAgentIntegration(this, jsii.String("CloudWatchAgentIntegration"), &CloudWatchAgentIntegrationProps{
		TaskDefinition: cwAgentTaskDefinition,
		ContainerName: jsii.String("ecs-cwagent"),
		EnableLogging: jsii.Boolean(false),
		Cpu: jsii.Number(128),
		MemoryLimitMiB: jsii.Number(64),
		PortMappings: []PortMapping{
			&PortMapping{
				ContainerPort: jsii.Number(4316),
				HostPort: jsii.Number(4316),
			},
			&PortMapping{
				ContainerPort: jsii.Number(2000),
				HostPort: jsii.Number(2000),
			},
		},
	})

	// Create the CloudWatch Agent daemon service
	// Create the CloudWatch Agent daemon service
	ecs.NewEc2Service(this, jsii.String("CloudWatchAgentDaemon"), &Ec2ServiceProps{
		Cluster: Cluster,
		TaskDefinition: cwAgentTaskDefinition,
		Daemon: jsii.Boolean(true),
	})

	// Define Task Definition for user application
	sampleAppTaskDefinition := ecs.NewEc2TaskDefinition(this, jsii.String("SampleAppTaskDefinition"), &Ec2TaskDefinitionProps{
		NetworkMode: ecs.NetworkMode_HOST,
	})

	sampleAppTaskDefinition.AddContainer(jsii.String("app"), &ContainerDefinitionOptions{
		Image: ecs.ContainerImage_FromRegistry(jsii.String("test/sample-app")),
		Cpu: jsii.Number(0),
		MemoryLimitMiB: jsii.Number(512),
	})

	// No CloudWatch Agent side car is needed as application container communicates to CloudWatch Agent daemon through host network
	// No CloudWatch Agent side car is needed as application container communicates to CloudWatch Agent daemon through host network
	appsignals.NewApplicationSignalsIntegration(this, jsii.String("ApplicationSignalsIntegration"), &ApplicationSignalsIntegrationProps{
		TaskDefinition: sampleAppTaskDefinition,
		Instrumentation: &InstrumentationProps{
			SdkVersion: appsignals.PythonInstrumentationVersion_V0_8_0(),
		},
		ServiceName: jsii.String("sample-app"),
	})

	ecs.NewEc2Service(this, jsii.String("MySampleApp"), &Ec2ServiceProps{
		Cluster: Cluster,
		TaskDefinition: sampleAppTaskDefinition,
		DesiredCount: jsii.Number(1),
	})
	return this
}

Initializer ​

ts
new PythonInstrumentationVersion(imageRepo: string, version: string, memoryLimit: number)
python
PythonInstrumentationVersion(image_repo: str, version: str, memory_limit: int | float)
java
new PythonInstrumentationVersion(String imageRepo, String version, Number memoryLimit)
csharp
new PythonInstrumentationVersion(string imageRepo, string version, double memoryLimit)
go
NewPythonInstrumentationVersion(ImageRepo *string, Version *string, MemoryLimit *float64)

Properties ​

DEFAULT_MEMORY_LIMIT_MIBnumberdefault_memory_limit_mibint | floatDEFAULT_MEMORY_LIMIT_MIBNumberDEFAULT_MEMORY_LIMIT_MIBdoubleDEFAULT_MEMORY_LIMIT_MIB*float64requiredstatic#
The default memory limit of the Python instrumentation.
IMAGE_REPOstringimage_repostrIMAGE_REPOStringIMAGE_REPOstringIMAGE_REPO*stringrequiredstatic#
The image repository for Python instrumentation.

Methods ​

imageURI(): stringdef image_uri(self, ) -> strpublic String imageURI()public string ImageURI()func ImageURI() *string#
Get the image URI for the instrumentation version.
returns

Returns: The image URI.

memoryLimitMiB(): numberdef memory_limit_mi_b(self, ) -> int | floatpublic Number memoryLimitMiB()public double MemoryLimitMiB()func MemoryLimitMiB() *float64#
Get the memory limit in MiB for the instrumentation version.
returns

Returns: The memory limit