AWS-CDK:在 AWS-CDK 中的多区域(跨区域)堆栈之间传递跨堆栈引用道具
AWS-CDK: Passing cross-stack references props between multi region (cross-region) stacks in AWS- CDK
我必须部署一个堆栈,我们称它为一个区域的父堆栈
他们需要在另一个区域部署第二个堆栈(子)。
第二个堆栈(子堆栈)的区域不能包括部署父堆栈的区域。第二个堆栈可以部署在多个区域。
但是,第二个堆栈需要第一个堆栈的道具。具体来说,它需要一个 ARN 值。默认区域为 us-east-1
。这就是父堆栈将被部署的地方。
为了解决这个问题,我尝试了以下方法
1- 第一次尝试:使用 cfnOutput
- 在父项和子项中创建了一个
cfnOutput
我用 cdk.Fn.ImportValue()
捕获了值
- 结果:出现错误,因为 cfnOutput 不能在不同区域的堆栈之间使用,如 CloudFormation User Guide
中所述
2- 第二次尝试:使用 StackProps
- 在继承自 StackProps 的父堆栈中创建接口,设置 public 属性 并将 ARN 值放在那里
来自 lib/mystack 文件
export interface myStackProps extends cdk.StackProps {
principalKeyArn: string
}
- 将值作为 props 连同包含以下区域的 env 键传递给第二个堆栈:
来自 bin/myapp 文件
const app = new cdk.App();
const regions = ["us-east-2"]
const primaryMRKey = new KmsMultiregionPrincipalKey(app, 'KmsMultiregionKeyStack')
for (let region of regions){
const envToDeploy = {region: region, account: "123456789123"}
new KmsReplicaKey(app, 'KmsReplicaKey-' + region, {env: envToDeploy, principalKeyArn: primaryMRKey.principalKeyArn } )
}
结果:跨堆栈引用仅支持部署到相同环境或嵌套堆栈与其父堆栈之间的堆栈
问题:
- 如何解决在 CDK 中使用不同区域的堆栈之间传递跨堆栈引用的问题?
[已编辑]
此问题的一种解决方案是使用 SSM,如下所述。
提前致谢
使用带有 CustomResource 的参数存储值。
有一个完整的跨区域引用的 Typescript CDK 示例。
(我最初将此作为评论发布,因为我认为这个问题可能是重复的。但经过反思,我看到链接的 question 和 tags 仅提及 CloudFormation,未提及 CDK。似乎社区从保留此问题中获益最多)。
我必须部署一个堆栈,我们称它为一个区域的父堆栈 他们需要在另一个区域部署第二个堆栈(子)。 第二个堆栈(子堆栈)的区域不能包括部署父堆栈的区域。第二个堆栈可以部署在多个区域。
但是,第二个堆栈需要第一个堆栈的道具。具体来说,它需要一个 ARN 值。默认区域为 us-east-1
。这就是父堆栈将被部署的地方。
为了解决这个问题,我尝试了以下方法
1- 第一次尝试:使用 cfnOutput
- 在父项和子项中创建了一个
cfnOutput
我用cdk.Fn.ImportValue()
捕获了值
- 结果:出现错误,因为 cfnOutput 不能在不同区域的堆栈之间使用,如 CloudFormation User Guide 中所述
2- 第二次尝试:使用 StackProps
- 在继承自 StackProps 的父堆栈中创建接口,设置 public 属性 并将 ARN 值放在那里
来自 lib/mystack 文件
export interface myStackProps extends cdk.StackProps {
principalKeyArn: string
}
- 将值作为 props 连同包含以下区域的 env 键传递给第二个堆栈:
来自 bin/myapp 文件
const app = new cdk.App();
const regions = ["us-east-2"]
const primaryMRKey = new KmsMultiregionPrincipalKey(app, 'KmsMultiregionKeyStack')
for (let region of regions){
const envToDeploy = {region: region, account: "123456789123"}
new KmsReplicaKey(app, 'KmsReplicaKey-' + region, {env: envToDeploy, principalKeyArn: primaryMRKey.principalKeyArn } )
}
结果:跨堆栈引用仅支持部署到相同环境或嵌套堆栈与其父堆栈之间的堆栈
问题:
- 如何解决在 CDK 中使用不同区域的堆栈之间传递跨堆栈引用的问题?
[已编辑] 此问题的一种解决方案是使用 SSM,如下所述。
提前致谢
使用带有 CustomResource 的参数存储值。
(我最初将此作为评论发布,因为我认为这个问题可能是重复的。但经过反思,我看到链接的 question 和 tags 仅提及 CloudFormation,未提及 CDK。似乎社区从保留此问题中获益最多)。