如何在 cdk 堆栈之间传递变量而不会出现交叉引用错误?

Mar*_*hev 7 amazon-web-services aws-cloudformation aws-cdk clouddevelopmentkit

我需要将 INamespace 传递给 CloudMapOptions 以便 ECS 任务注册到 AWS CloudMap,但出现以下错误。我无法将它们与 CfnOutput 解耦,因为我需要 ECS cloudMapOptions 中的命名空间:

   Stack "users" cannot consume a cross reference from stack "servicediscovery". Cross stack references are only supported for stacks deployed to the same environment or between nested stacks and their parent stack.
Run Code Online (Sandbox Code Playgroud)

我尝试了这个: https: //bobbyhadz.com/blog/aws-cdk-share-vpc- Between-stacks,但没有任何成功。如何在堆栈之间传递 INamespace 类型的变量?

Rya*_*yan 7

此“交叉引用”错误也可能是由于缺少第三个参数而引起的super()

export class MyStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id); // Missing third argument
  }
}
Run Code Online (Sandbox Code Playgroud)


mie*_*sol 5

如果您执行以下操作之一,则可能会发生此错误:

  1. 您尝试在定义为位于两个不同区域的堆栈之间创建引用

请注意,不支持此类跨区域引用

  1. 您向构造函数提供不同的StackProps第三个参数Stack

为了解决这个问题,请确保在例如中传递相同的envStackProps

class MyStack extends Stack {
  constructor(scope: Construct){
    super(scope, "MyStack", {
      env: { 
        account: '123456789', 
        region: 'eu-central-1'
      }
    })
  }
}
Run Code Online (Sandbox Code Playgroud)