【问题标题】:AWS-CDK: Passing cross-stack references props between multi region (cross-region) stacks in AWS- CDKAWS-CDK:在 AWS-CDK 中的多区域(跨区域)堆栈之间传递跨堆栈引用道具
【发布时间】:2022-01-03 21:16:24
【问题描述】:

我要部署一个栈,我们称它为一个区域的父栈 他们需要在另一个区域部署第二个堆栈(子)。 第二个堆栈(子堆栈)的区域不能包括部署父级的区域。第二个堆栈可以部署在多个区域。

但是,第二个堆栈需要来自第一个堆栈的道具。具体来说,它需要一个 ARN 值。默认区域为us-east-1。这就是父堆栈将被部署的地方。

为了解决这个问题,我尝试了以下方法

1- 第一次尝试:使用 cfnOutput

  • 在父级和子级中创建了一个cfnOutput,我使用cdk.Fn.ImportValue() 捕获了该值
  • 结果:出现错误,因为 cfnOutput 无法在不同区域的堆栈之间使用,如 CloudFormation User Guide 中所述

2- 第二次尝试:使用 StackProps

  • 在继承自 StackProps 的父堆栈中创建了一个接口,设置一个公共属性并将 ARN 值放在那里

来自 lib/mystack 文件

export interface myStackProps extends cdk.StackProps {
 principalKeyArn: string
}
  • 将值与包含以下区域的 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 的参数存储值。这个answer 有一个完整的跨区域引用的 Typescript CDK 示例。
  • 以上链接是正确的方法,我确实使用该链接实现了解决方案。为清楚起见,我将尽快发布回复。感谢@fedonev

标签: amazon-web-services amazon-cloudformation aws-cdk amazon-kms


【解决方案1】:

使用带有CustomResource 的参数存储值。

This answer 有一个完整的 Typescript CDK 跨区域引用示例。

(我最初将此作为评论发布,因为我认为这个问题可能是重复的。但经过反思,我发现链接的 questiontags 只提到 CloudFormation ,而不是 CDK。似乎社区从保留这个问题中获得了最大的好处)。

【讨论】:

  • 是的,以澄清上述链接中所做的事情:在父堆栈中,您构建一个 SSM 资源并将 ARN 写入它。在子堆栈中,您创建一个 SSM 读取器并读取值。没有任何道具通过。创建一个辅助类作为从子级读取 SSM 的助手
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2021-02-18
  • 2020-12-13
  • 2021-08-14
  • 2020-08-12
  • 1970-01-01
  • 2017-03-14
  • 2018-07-10
相关资源
最近更新 更多