【问题标题】:How to accessing resources in a different stack using aws cdk?如何使用 aws cdk 访问不同堆栈中的资源?
【发布时间】:2020-10-29 11:59:03
【问题描述】:

我的英语可能很奇怪。 如果有不明白的地方,请追问。

我们想要实现的目标

我想使用 aws cdk(python) 构建环境。 我想将 vpc 堆栈与 aurora 堆栈分开。 为此,我想将在 vpc 的堆栈上创建的资源(子网 id)添加到 aurora 我想在堆栈中引用它。

问题

#!/usr/bin/env python3
from aws_cdk import core
from test.aurora import auroraStack
from test.vpc import vpcStack
app = core.App()
prod = core.Environment(account="123456789012", region="us-east-1")
vpcStack(app, "Vpc", env=prod)
auroraStack(app, "Aurora", env=prod, sbntid=vpcStack.outputSbnt01)
app.synth()

我已经根据↓文档编写了代码,但是运行时出现错误。

https://docs.aws.amazon.com/cdk/latest/guide/resources.html#resource_stack

我已经确认我将使用 vpcStack 进行部署,仅 auroraStack。 但是,我收到以下错误。 AttributeError:“vpcStack”对象没有属性“outputSbnt01”

我的尝试

我尝试过并在 Cfnoutput 中设置了 outputSbnt01,但我得到了同样的错误。 有一个类似的问题↓我试过了,但我得到了同样的错误。

AWS CDK: how do I reference cross-stack resources in same app?

感谢收看。

【问题讨论】:

标签: python amazon-web-services aws-cdk


【解决方案1】:

你在 app.py 中的调用看起来和你之前的一样:

vpcStack(app, "Vpc", env=prod)
auroraStack(app, "Aurora", env=prod, sbntid=vpcStack.outputSbnt01)

验证您是否已在堆栈vpcStack 中分配了outputSbnt01 变量:

class vpcStack(core.Stack):
    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)
        outputSbnt01 = ec2.Subnet()
        self.outputSbnt01 = outputSbnt01

接受auroraStack中的对象

class auroraStack(core.Stack):
    def __init__(self, scope: core.Construct, id: str, sbntid, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

您现在可以在auroraStack 中将变量引用为sbntid

【讨论】:

  • 不要忘记在另一个堆栈中引用sbntid。因为仅仅传递参数是行不通的,你必须引用它以便 CDK 理解执行 CFN 堆栈的顺序
猜你喜欢
  • 2020-12-19
  • 1970-01-01
  • 2020-08-12
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2021-02-18
  • 2022-11-04
相关资源
最近更新 更多