Skip to content

Commit 28721e3

Browse files
author
Brandon Dahler
committed
fix(core): cross-stack references to NestedStack list values produces 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*
1 parent 87e21d6 commit 28721e3

File tree

16 files changed

+32019
-8
lines changed

16 files changed

+32019
-8
lines changed

packages/@aws-cdk-testing/framework-integ/test/core/test/integ.nested-stack-references.js.snapshot/Consumer.assets.json

+19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"Resources": {
3+
"RequiredResourceA026AF42": {
4+
"Type": "AWS::S3::Bucket",
5+
"UpdateReplacePolicy": "Retain",
6+
"DeletionPolicy": "Retain"
7+
}
8+
},
9+
"Outputs": {
10+
"StringReference": {
11+
"Value": {
12+
"Fn::ImportValue": "Producer:ExportsOutputFnGetAttNestedNestedStackNestedNestedStackResourceDEFDAA4DOutputsProducerNestedNestedString6B1C0634Ref48A5688D"
13+
}
14+
},
15+
"NumberReference": {
16+
"Value": {
17+
"Fn::ImportValue": "Producer:ExportsOutputFnGetAttNestedNestedStackNestedNestedStackResourceDEFDAA4DOutputsProducerNestedNestedNumberEF88914ERefF4C5CBF2"
18+
}
19+
},
20+
"ListReference": {
21+
"Value": {
22+
"Fn::Join": [
23+
"$$",
24+
{
25+
"Fn::Split": [
26+
"||",
27+
{
28+
"Fn::ImportValue": "Producer:ExportsOutputFnGetAttNestedNestedStackNestedNestedStackResourceDEFDAA4DOutputsProducerNestedNestedListCF0BC56DRefE50D3EDA"
29+
}
30+
]
31+
}
32+
]
33+
}
34+
}
35+
},
36+
"Parameters": {
37+
"BootstrapVersion": {
38+
"Type": "AWS::SSM::Parameter::Value<String>",
39+
"Default": "/cdk-bootstrap/hnb659fds/version",
40+
"Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
41+
}
42+
},
43+
"Rules": {
44+
"CheckBootstrapVersion": {
45+
"Assertions": [
46+
{
47+
"Assert": {
48+
"Fn::Not": [
49+
{
50+
"Fn::Contains": [
51+
[
52+
"1",
53+
"2",
54+
"3",
55+
"4",
56+
"5"
57+
],
58+
{
59+
"Ref": "BootstrapVersion"
60+
}
61+
]
62+
}
63+
]
64+
},
65+
"AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
66+
}
67+
]
68+
}
69+
}
70+
}

packages/@aws-cdk-testing/framework-integ/test/core/test/integ.nested-stack-references.js.snapshot/NestedStackReferencesDefaultTestDeployAssertFE4F9D3A.assets.json

+32
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk-testing/framework-integ/test/core/test/integ.nested-stack-references.js.snapshot/NestedStackReferencesDefaultTestDeployAssertFE4F9D3A.template.json

+262
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)