我的英语可能很奇怪。 如果有些地方没有意义,请问我。
我们想要实现的目标
我想使用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?
感谢收看。
答案 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
。