fix(core): apps that use token-aware-stringify are construct-instantiation-order-dependent #31470
+5,581
−8
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue # (if applicable)
Closes #31345.
Reason for this change
Any stringified value containing an intrinsic will use a custom resource to resolve this value at deploy time.
Today, this custom resource's logical ID will take the form
'CDKJsonStringify<number>'
,where is a counter incremented for each stringified value. This results in resource replacement updates for the custom resource when the order of construct instantiation is changed, like changing this:
to:
This only happens if
SomeStack
stringifies a token, which some CDK constructs will do automatically. These resource replacements won't affect customer infrastructure, but customers using a common setup as in #31345 will see diffs on the same application in different environments, which violates the repeatability promise of CDK.Description of changes
Add a feature flag which, when enabled, will generate a unique identifier from the token's value instead of a counter. This makes this logical ID no longer instantiation-order dependent.
Description of how you validated changes
Unit, integration, and manual tests.
Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license