Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(apprunner): add ObservabilityConfiguration for AppRunner Service #30359

Merged
merged 25 commits into from
Jun 24, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a4e11b4
add ObservabilityConfiguration for AppRunner Service
mazyu36 May 28, 2024
e73b10d
feat: add fromArn method
mazyu36 May 28, 2024
0027a86
Merge branch 'main' into apprunner-observability-22985
mazyu36 May 28, 2024
78629f1
Merge branch 'main' into apprunner-observability-22985
mazyu36 May 30, 2024
10277c4
Update packages/@aws-cdk/aws-apprunner-alpha/lib/service.ts
mazyu36 Jun 1, 2024
4af4868
Update packages/@aws-cdk/aws-apprunner-alpha/lib/service.ts
mazyu36 Jun 1, 2024
c532781
Update packages/@aws-cdk/aws-apprunner-alpha/README.md
mazyu36 Jun 1, 2024
8a7f2f7
Update packages/@aws-cdk/aws-apprunner-alpha/lib/observability-config…
mazyu36 Jun 1, 2024
b0cc774
Update packages/@aws-cdk/aws-apprunner-alpha/lib/observability-config…
mazyu36 Jun 1, 2024
71da222
Update packages/@aws-cdk/aws-apprunner-alpha/test/service.test.ts
mazyu36 Jun 1, 2024
b93cd9b
fix: incorporate review comments
mazyu36 Jun 2, 2024
d525912
Update packages/@aws-cdk/aws-apprunner-alpha/lib/observability-config…
mazyu36 Jun 2, 2024
4812423
Update packages/@aws-cdk/aws-apprunner-alpha/lib/observability-config…
mazyu36 Jun 2, 2024
d667bb4
Update packages/@aws-cdk/aws-apprunner-alpha/lib/observability-config…
mazyu36 Jun 2, 2024
f6e9e2c
Update packages/@aws-cdk/aws-apprunner-alpha/test/service.test.ts
mazyu36 Jun 2, 2024
2481648
Update packages/@aws-cdk/aws-apprunner-alpha/lib/observability-config…
mazyu36 Jun 2, 2024
8ac81d3
fix: incorporate review comments
mazyu36 Jun 2, 2024
0594cd0
Update packages/@aws-cdk/aws-apprunner-alpha/lib/observability-config…
mazyu36 Jun 3, 2024
6d5a86c
Merge branch 'main' into apprunner-observability-22985
mazyu36 Jun 11, 2024
1e5f12e
fix: update from method
mazyu36 Jun 19, 2024
db48ffe
add tag test
mazyu36 Jun 20, 2024
6eaaee0
Merge branch 'main' into apprunner-observability-22985
mergify[bot] Jun 20, 2024
8459f87
resolve conflict
mazyu36 Jun 21, 2024
4718de2
Merge branch 'main' into apprunner-observability-22985
mazyu36 Jun 21, 2024
c850eb3
Merge branch 'main' into apprunner-observability-22985
mergify[bot] Jun 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/@aws-cdk/aws-apprunner-alpha/lib/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// AWS::AppRunner CloudFormation Resources:
export * from './observability-configuration';
export * from './service';
export * from './vpc-connector';
export * from './observability-configuration';
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ export interface ObservabilityConfigurationProps {
/**
* The implementation provider chosen for tracing App Runner services.
*
* @default Vendor.AWSXRAY
* You can not attach ObservabilityConfiguration with no vendor to the App Runner Service.
*
* @default - tracing is not enabled for the service
*/
readonly vendor?: Vendor;
}
Expand Down Expand Up @@ -143,15 +145,25 @@ export class ObservabilityConfiguration extends cdk.Resource implements IObserva
physicalName: props.observabilityConfigurationName,
});

if (props.observabilityConfigurationName !== undefined) {
Copy link
Contributor Author

@mazyu36 mazyu36 Jun 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a validation for observabilityConfigurationName and unit tests.

if (props.observabilityConfigurationName.length < 4 || props.observabilityConfigurationName.length > 32) {
throw new Error(`observabilityConfigurationName must be between 4 and 32 characters long, but it has ${props.observabilityConfigurationName.length} characters.`);
}

if (!/^[A-Za-z0-9][A-Za-z0-9\-_]{3,31}$/.test(props.observabilityConfigurationName)) {
throw new Error(`observabilityConfigurationName ${props.observabilityConfigurationName} must start with a letter or number, and can contain only letters, numbers, hyphens, and underscores.`);
}
}

const resource = new CfnObservabilityConfiguration(this, 'Resource', {
observabilityConfigurationName: props.observabilityConfigurationName,
traceConfiguration: {
vendor: props.vendor ?? Vendor.AWSXRAY,
},
traceConfiguration: props.vendor ? {
vendor: props.vendor,
} : undefined,
});

this.observabilityConfigurationArn = resource.attrObservabilityConfigurationArn;
this.observabilityConfigurationRevision = resource.attrObservabilityConfigurationRevision;
this.observabilityConfigurationName = resource.ref;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,37 @@ beforeEach(() => {
stack = new cdk.Stack();
});

test('create a Observability Configuration with all properties', () => {
test.each([
['MyObservabilityConfiguration'],
['my-observability-configuration_1'],
])('create a ObservabilityConfiguration with all properties (name: %s)', (observabilityConfigurationName: string) => {
// WHEN
new ObservabilityConfiguration(stack, 'ObservabilityConfiguration', {
observabilityConfigurationName: 'MyObservabilityConfiguration',
observabilityConfigurationName,
vendor: Vendor.AWSXRAY,
});

// THEN
Template.fromStack(stack).hasResourceProperties('AWS::AppRunner::ObservabilityConfiguration', {
ObservabilityConfigurationName: 'MyObservabilityConfiguration',
ObservabilityConfigurationName: observabilityConfigurationName,
TraceConfiguration: {
Vendor: 'AWSXRAY',
},
});
});

test('create a ObservabilityConfiguration without all properties', () => {
// WHEN
new ObservabilityConfiguration(stack, 'ObservabilityConfiguration', {
});

// THEN
Template.fromStack(stack).hasResourceProperties('AWS::AppRunner::ObservabilityConfiguration', {
ObservabilityConfigurationName: Match.absent(),
TraceConfiguration: Match.absent(),
});
});

test('create a Observability Configuration without all properties', () => {
// WHEN
new ObservabilityConfiguration(stack, 'ObservabilityConfiguration', {
Expand All @@ -31,8 +46,28 @@ test('create a Observability Configuration without all properties', () => {
// THEN
Template.fromStack(stack).hasResourceProperties('AWS::AppRunner::ObservabilityConfiguration', {
ObservabilityConfigurationName: Match.absent(),
TraceConfiguration: {
Vendor: 'AWSXRAY',
},
TraceConfiguration: Match.absent(),
});
});

test.each([
['tes'],
['test-observability-configuration-name-over-limitation'],
])('observabilityConfigurationName over length limitation (name: %s)', (observabilityConfigurationName: string) => {
expect(() => {
new ObservabilityConfiguration(stack, 'ObservabilityConfiguration', {
observabilityConfigurationName,
});
}).toThrow(`observabilityConfigurationName must be between 4 and 32 characters long, but it has ${observabilityConfigurationName.length} characters.`);
});

test.each([
['-test'],
['test-?'],
])('invalid observabilityConfigurationName (name: %s)', (observabilityConfigurationName: string) => {
expect(() => {
new ObservabilityConfiguration(stack, 'ObservabilityConfiguration', {
observabilityConfigurationName,
});
}).toThrow(`observabilityConfigurationName ${observabilityConfigurationName} must start with a letter or number, and can contain only letters, numbers, hyphens, and underscores.`);
});
Loading