aws / aws-cdk

The AWS Cloud Development Kit is a framework for defining cloud infrastructure in code
https://aws.amazon.com/cdk
Apache License 2.0
11.63k stars 3.91k forks source link

(stepfunctions): cannot disable StateMachine logging with removing LogGroup #30814

Open Tietew opened 3 months ago

Tietew commented 3 months ago

Describe the bug

When I have a StateMachine with logging enabled, to disable logging still requires an existing LogGroup.

Expected Behavior

This configuration should be correct:

new sfn.StateMachine(stack, 'StateMachine', {
  definitionBody: sfn.DefinitionBody.fromChainable(...),
  logs: { level: sfn.LogLevel.OFF },
});

Current Behavior

TypeScript compile error occurs:

error TS2741: Property 'destination' is missing in type '{ level: sfn.LogLevel.OFF; }' but required in type 'LogOptions'.

Omitting logs property does not modify StateMachine's logging configuration.

Reproduction Steps

Deploy a StateMachine described in Expected Behavior.

Possible Solution

Make LogOptions.destination optional. CDK should also verify destination is specified (or create one) when level is not OFF.

Additional Information/Context

CloudFormation Documentation says: https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-loggingconfiguration.html

Destinations Required, if your log level is not set to OFF.

Workaround (Escape hatch):

const states = new sfn.StateMachine(stack, 'StateMachine', {
  definitionBody: sfn.DefinitionBody.fromChainable(...),
});
(states.node.defaultChild as sfn.CfnStateMachine).addPropertyOverride('LoggingConfiguration', { Level: 'OFF' });

CDK CLI Version

2.148.0

Framework Version

No response

Node.js Version

v20.15.1

OS

Ubuntu

Language

TypeScript

Language Version

No response

Other information

No response

khushail commented 3 months ago

Thanks @Tietew for reporting this issue. I can confirm the issue and appreciate your efforts in PR contribution!

wong-a commented 2 months ago

Does setting logs: undefined not work? By default there is no logging

new sfn.StateMachine(stack, 'StateMachine', {
  definitionBody: sfn.DefinitionBody.fromChainable(...),
});
Tietew commented 2 months ago

@wong-a setting logs: undefined does not render LoggingConfiguration resource property. When updating a StateMachine with logging enabled, CloudFormation does not modify logging configuration when LoggingConfiguration resource property does not exist. We need to specify {"LoggingConfiguration":{"Level":"OFF"}} if we want to change logging from enabled to disabled.

wong-a commented 2 months ago

CloudFormation does not modify logging configuration when LoggingConfiguration resource property does not exist. We need to specify {"LoggingConfiguration":{"Level":"OFF"}} if we want to change logging from enabled to disabled.

If this is true, it sounds like an issue to fix in CloudFormation resource instead of CDK