-
Notifications
You must be signed in to change notification settings - Fork 4k
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
fix(core): cross-stack references to NestedStack list values produces invalid outputs #32575
base: main
Are you sure you want to change the base?
fix(core): cross-stack references to NestedStack list values produces invalid outputs #32575
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mostly nits about coverage, LGTM overall though 👍
packages/@aws-cdk-testing/framework-integ/test/core/test/integ.nested-stack-references.ts
Outdated
Show resolved
Hide resolved
packages/@aws-cdk-testing/framework-integ/test/core/test/integ.nested-stack-references.ts
Outdated
Show resolved
Hide resolved
… invalid outputs Referencing a list attribute of a resource defined within a NestedStack synthesizes successfully but the nested stack will fail deployment with the error: ``` Template format error: Every Value member must be a string. ``` This prevents deploying resources such into NestedStack instances if a reference to that resource's list attribute needs to be referenced in a cross-stack context. For example, deploying a `InterfaceVpcEndpoint` instance in a nested stack and attempting to reference its `vpcEndpointDnsEntries` property within a different stack will cause this error. To fix this issue, a similar strategy to `exportStringListValue` is used to join the reference's values into a string and expose that value as the output from the nested stack. The reference to the serialized value is then re-exported as normally needed to hoist it to the top-level parent stack. The final reference that imports the value is then re-written to also deserialize the imported string back to the original list. fixes aws#27233 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
8219bff
to
28721e3
Compare
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks for the changes
Issue
Closes #27233.
Reason for this change
Referencing a list attribute of a resource defined within a
NestedStack
synthesizes successfully but the nested stack will fail deployment with the error:This prevents deploying resources into a
NestedStack
instance if a reference to one of that resource's list attribute exists within a cross-stack context. For example, deploying aInterfaceVpcEndpoint
instance in a nested stack and attempting to reference itsvpcEndpointDnsEntries
property within a different stack will cause this error.See new integration test at
packages/@aws-cdk-testing/framework-integ/test/core/test/integ.nested-stack-references.ts
for minimal reproduction.Description of changes
A similar strategy to
exportStringListValue
is used to serialized the reference's values into a string and expose that value as the output from the nested stack. The reference to the serialized value is then made exportable as normally needed to hoist it to the top-level parent stack. The final reference that imports the value is then re-written to also deserialize the imported string back to the original list.The return types of some internal methods were modified to handle the fact that core/lib/private/refs.ts's
getExportable
no longer necessarily returns a Reference. This was needed because an exportable may now be a value derived from a reference instead of only a direct reference.Describe any new or updated permissions being added
N/A
Description of how you validated changes
Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license