-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Closed
Labels
@aws-cdk/aws-s3-deploymentbugThis issue is a bug.This issue is a bug.duplicateThis issue is a duplicate.This issue is a duplicate.
Description
Describe the bug
using aws-s3-deployment with Source.jsonData() and deploy-time values from different stack(i.e. cross stack references),
deployment fails with Template error: instance of Fn::GetAtt references undefined resource testBucketDF4D7D1A
.
If the referenced resource is declared within the same stack, deploy-time values just resolved normally.
Expected Behavior
cross stack references used as deploy-time values get resolved
Current Behavior
Stack2: deploying...
[0%] start: Publishing 02927fd0ce5bb130cbc8d11f17469e74496526efe5186a9ab36e8a8138e9a557:452187169681-eu-central-1
[0%] start: Publishing f98b78092dcdd31f5e6d47489beb5f804d4835ef86a8085d0a2053cb9ae711da:452187169681-eu-central-1
[0%] start: Publishing e5032a7ed03a7762b99560439c17f58d046a35d40ebf64ba70c63157df388563:452187169681-eu-central-1
[0%] start: Publishing 64dbe1ed56c8fbe09738c86c49833c7c7622d7abb1f3fb35bb9363cb05c6c481:452187169681-eu-central-1
[0%] start: Publishing 5702d929d6c85803b88e19d7a0c96258a615dd17804d9ba37e2a66c77c02ed36:452187169681-eu-central-1
[20%] success: Published 02927fd0ce5bb130cbc8d11f17469e74496526efe5186a9ab36e8a8138e9a557:452187169681-eu-central-1
[40%] success: Published f98b78092dcdd31f5e6d47489beb5f804d4835ef86a8085d0a2053cb9ae711da:452187169681-eu-central-1
[60%] success: Published e5032a7ed03a7762b99560439c17f58d046a35d40ebf64ba70c63157df388563:452187169681-eu-central-1
[80%] success: Published 64dbe1ed56c8fbe09738c86c49833c7c7622d7abb1f3fb35bb9363cb05c6c481:452187169681-eu-central-1
[100%] success: Published 5702d929d6c85803b88e19d7a0c96258a615dd17804d9ba37e2a66c77c02ed36:452187169681-eu-central-1
Stack2: creating CloudFormation changeset...
❌ Stack2 failed: Error [ValidationError]: Template error: instance of Fn::GetAtt references undefined resource testBucketDF4D7D1A
at Request.extractError (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\protocol\query.js:50:29)
at Request.callListeners (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\sequential_executor.js:106:20)
at Request.emit (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\sequential_executor.js:78:10)
at Request.emit (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\request.js:686:14)
at Request.transition (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\request.js:22:10)
at AcceptorStateMachine.runTo (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\state_machine.js:14:12)
at C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\state_machine.js:26:10
at Request.<anonymous> (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\request.js:38:9)
at Request.<anonymous> (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\request.js:688:12)
at Request.callListeners (C:\Users\Yevgen\AppData\Roaming\npm\node_modules\aws-sdk\lib\sequential_executor.js:116:18) {
code: 'ValidationError',
time: 2022-08-08T10:51:34.543Z,
requestId: 'ef63e968-fd5b-4848-ab66-1c43ff646193',
statusCode: 400,
retryable: false,
retryDelay: 790.27434638688
}
Template error: instance of Fn::GetAtt references undefined resource testBucketDF4D7D1A
Reproduction Steps
stack1:
@Getter
@ToString
public class Stack1 extends Stack {
private final Bucket testBucket;
@SneakyThrows
@lombok.Builder
Stack1(
@NonNull Construct scope,
@NonNull StackProps props
) {
super(scope, "Stack1", props);
testBucket = Bucket.Builder.create(this, "testBucket").build();
}
}
Stack2:
@Getter
@ToString
public class Stack2 extends Stack {
private final BucketDeployment dwcWebDeployment;
@SneakyThrows
@lombok.Builder
Stack2(
@NonNull Construct scope,
@NonNull StackProps props,
@NonNull Stack1 stack1
) {
super(scope, "Stack2", props);
Bucket testBucket = stack1.getTestBucket();
WebConfig webConfig = WebConfig.builder()
.hostUrl(testBucket.getBucketDomainName())
.s3HostUrl(testBucket.getBucketRegionalDomainName())
.build();
dwcWebDeployment = BucketDeployment.Builder.create(this, "deployment")
.destinationBucket(testBucket)
.logRetention(RetentionDays.ONE_MONTH)
.sources(asList(
Source.jsonData("config.json", webConfig)
))
.build();
}
@lombok.Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class WebConfig {
@NonNull String hostUrl;
@NonNull String s3HostUrl;
}
}
Possible Solution
workaround: define resources in Stack2. for example create ssm parameters and reference them:
...
Bucket testBucket = stack1.getTestBucket();
StringParameter hostUrl = StringParameter.Builder.create(this, "hostUrl")
.stringValue(testBucket.getBucketDomainName())
.build();
StringParameter s3HostUrl = StringParameter.Builder.create(this, "s3HostUrl")
.stringValue(testBucket.getBucketRegionalDomainName())
.build();
WebConfig webConfig = WebConfig.builder()
.hostUrl(hostUrl.getStringValue())
.s3HostUrl(s3HostUrl.getStringValue())
.build();
...
Additional Information/Context
No response
CDK CLI Version
2.35.0 (build 5c23578)
Framework Version
No response
Node.js Version
v18.7.0
OS
Windows 10
Language
Java
Language Version
No response
Other information
No response
PadenZach and revmischa
Metadata
Metadata
Assignees
Labels
@aws-cdk/aws-s3-deploymentbugThis issue is a bug.This issue is a bug.duplicateThis issue is a duplicate.This issue is a duplicate.