首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AWS CDK多个应用程序

AWS CDK多个应用程序
EN

Stack Overflow用户
提问于 2020-12-17 21:27:42
回答 2查看 2K关注 0票数 4

是否有可能在同一项目中有两个CDK应用程序,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
from aws_cdk import core

from stack1 import Stack1
from stack2 import Stack2

app1 = core.App()
Stack1(app1, "CDK1")
app1.synth()

app2 = core.App()
Stack2(app2, "CDK2")
app2.synth()

然后部署它们?同步/异步?

是否可以在一个应用程序中引用另一个应用程序中的一些资源?

EN

回答 2

Stack Overflow用户

发布于 2021-04-15 11:59:39

是的,您可以在一个CDK项目中拥有多个应用程序,但有一些严重的警告。

  1. CDK进程一次只能同步/部署一个应用。

  1. 不能在同一文件中定义它们。

  1. 它们不能直接引用对方的资源。

为了正确地理解这一点,每个应用程序在功能上相互隔离,这大致相当于两个单独的CDK项目共享相同的代码库,因此这方面的用例是有限的。

它们共享资源的唯一方法是要么将其提取到必须首先部署的其他通用应用程序中,要么让您将该资源的ARN存储在某个东西(例如,Parameter Store)中,并在运行时加载它。你不能假设资源将会存在,因为其中一个应用程序可能还没有部署,如果你直接将资源导入到你的Stack中,你已经放弃了将它们分开的整个要点。

也就是说,这是可以的:

stack1.lambda:

代码语言:javascript
代码运行次数:0
运行
复制
    from ssm_parameter_store import SSMParameterStore

    store = SSMParameterStore(prefix='/Prod')
    ssn_arn = store['stack2.sns']
    if !ssn_arn
        // Doesn't matter
        return
    try:
        sns.publish(ssn_arn, 'something')
    except:
        // Doesn't matter

但是,如果来自stack2的资源对于stack1来说很重要,或者您想要将stack2资源导入到stack1中,那么您需要对所有公共资源进行第三次拆分:common-resources.app.py,否则拆分它们是没有意义的。

我们在我们的项目中经常这样做,一个应用程序创建一个自动部署另一个应用程序的CodePipeline。然而,我们这样做只是因为我们更喜欢流水线紧挨着它正在部署的代码,而且将其提取到一个全新的项目中也同样有效。

如果你想这样做,你需要做的是:

app1.py:

代码语言:javascript
代码运行次数:0
运行
复制
from aws_cdk import core

from stack1 import Stack1

app1 = core.App()
Stack1(app1, "CDK1")
app1.synth()

app2.py:

代码语言:javascript
代码运行次数:0
运行
复制
from aws_cdk import core

from stack2 import Stack2

app2 = core.App()
Stack2(app2, "CDK2")
app2.synth()

然后,您可以通过并行或顺序运行来部署它:

  • cdk deploy --app "python app1.py"
  • cdk deploy --app "python app2.py"
票数 4
EN

Stack Overflow用户

发布于 2020-12-18 05:12:45

重读你的问题后,简短的答案是否定的。在测试中,我发现CDK只会创建第二个定义的应用程序。

但是,您可以部署多堆栈应用程序:

https://docs.aws.amazon.com/cdk/latest/guide/stack_how_to_create_multiple_stacks.html

还可以使用core.CfnOutput和core.Fn.importValue从一个堆栈引用另一个堆栈中的资源:

https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.core/CfnOutput.html https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.core/Fn.html

在幕后,这使用了CloudFormation导出输出并将其导入其他堆栈的能力。实际上,你的多协议栈CDK应用将创建嵌套的CloudFormation协议栈。

在部署方面,CDK创建并部署了一个CloudFormation变更集,因此所有变更都将部署在cdk deploy上。从您的角度来看,它将是同步的,但可能会通过CloudFormation在幕后进行一些异步API调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65341642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档