如何使用AWS CDK访问不同堆栈中的资源?

时间:2020-07-09 00:24:56

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

我的英语可能很奇怪。 如果有些地方没有意义,请问我。

我们想要实现的目标

我想使用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

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

我尝试过的事情

我尝试了一下,并在Cfnoutput中设置了outputSbnt01,但是遇到了同样的错误。 有一个类似的问题↓,我尝试了,但出现了相同的错误。

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

感谢收看。

1 个答案:

答案 0 :(得分:0)

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

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

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

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)

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