diff --git a/packages/@aws-cdk/aws-codeguruprofiler/README.md b/packages/@aws-cdk/aws-codeguruprofiler/README.md index 5fcb3137d296b..cf18c19ae296a 100644 --- a/packages/@aws-cdk/aws-codeguruprofiler/README.md +++ b/packages/@aws-cdk/aws-codeguruprofiler/README.md @@ -32,3 +32,14 @@ const publishAppRole = new Role(stack, 'PublishAppRole', { const profilingGroup = new ProfilingGroup(stack, 'MyProfilingGroup'); profilingGroup.grantPublish(publishAppRole); ``` + +### Compute Platform configuration + +Code Guru Profiler supports multiple compute environments. +They can be configured when creating a Profiling Group by using the `computePlatform` property: + +```ts +const profilingGroup = new ProfilingGroup(stack, 'MyProfilingGroup', { + computePlatform: ComputePlatform.AWS_LAMBDA, +}); +``` diff --git a/packages/@aws-cdk/aws-codeguruprofiler/lib/profiling-group.ts b/packages/@aws-cdk/aws-codeguruprofiler/lib/profiling-group.ts index f4d356e093204..2a28fdcaa7822 100644 --- a/packages/@aws-cdk/aws-codeguruprofiler/lib/profiling-group.ts +++ b/packages/@aws-cdk/aws-codeguruprofiler/lib/profiling-group.ts @@ -2,6 +2,22 @@ import { Grant, IGrantable } from '@aws-cdk/aws-iam'; import { Construct, IResource, Lazy, Resource, Stack } from '@aws-cdk/core'; import { CfnProfilingGroup } from './codeguruprofiler.generated'; +/** + * The compute platform of the profiling group. + */ +export enum ComputePlatform { + /** + * Use AWS_LAMBDA if your application runs on AWS Lambda. + */ + AWS_LAMBDA = 'AWSLambda', + + /** + * Use Default if your application runs on a compute platform that is not AWS Lambda, + * such an Amazon EC2 instance, an on-premises server, or a different platform. + */ + DEFAULT = 'Default', +} + /** * IResource represents a Profiling Group. */ @@ -97,6 +113,13 @@ export interface ProfilingGroupProps { */ readonly profilingGroupName?: string; + /** + * The compute platform of the profiling group. + * + * @default ComputePlatform.DEFAULT + */ + readonly computePlatform?: ComputePlatform; + } /** @@ -158,6 +181,7 @@ export class ProfilingGroup extends ProfilingGroupBase { const profilingGroup = new CfnProfilingGroup(this, 'ProfilingGroup', { profilingGroupName: this.physicalName, + computePlatform: props.computePlatform, }); this.profilingGroupName = this.getResourceNameAttribute(profilingGroup.ref); diff --git a/packages/@aws-cdk/aws-codeguruprofiler/test/profiling-group.test.ts b/packages/@aws-cdk/aws-codeguruprofiler/test/profiling-group.test.ts index 8b26f916d26f1..27dc281589172 100644 --- a/packages/@aws-cdk/aws-codeguruprofiler/test/profiling-group.test.ts +++ b/packages/@aws-cdk/aws-codeguruprofiler/test/profiling-group.test.ts @@ -1,7 +1,7 @@ -import { expect } from '@aws-cdk/assert'; +import { expect, haveResourceLike } from '@aws-cdk/assert'; import { AccountRootPrincipal, Role } from '@aws-cdk/aws-iam'; import { Stack } from '@aws-cdk/core'; -import { ProfilingGroup } from '../lib'; +import { ProfilingGroup, ComputePlatform } from '../lib'; /* eslint-disable quote-props */ @@ -188,6 +188,18 @@ describe('profiling group', () => { }); }); + test('allows setting its ComputePlatform', () => { + const stack = new Stack(); + new ProfilingGroup(stack, 'MyProfilingGroup', { + profilingGroupName: 'MyAwesomeProfilingGroup', + computePlatform: ComputePlatform.AWS_LAMBDA, + }); + + expect(stack).to(haveResourceLike('AWS::CodeGuruProfiler::ProfilingGroup', { + 'ComputePlatform': 'AWSLambda', + })); + }); + test('default profiling group without name', () => { const stack = new Stack(); new ProfilingGroup(stack, 'MyProfilingGroup', {