gpt4 book ai didi

typescript - 如何设计CDK项目?

转载 作者:行者123 更新时间:2023-12-05 03:41:27 26 4
gpt4 key购买 nike

最近开始从事一个 CDK 项目,想了解一下大家对如何构建它的看法。我会列出我的想法。

将有 2 个单独的包。

  1. ApplicationCommonsPackage
  2. SpecificApplicationCDKPackage(可以是很多这样的包),这些将取决于ApplicationCommonsPackage

ApplicationCommonsPackage 将包含我们所有应用程序的所有通用逻辑(到目前为止已经想到了配置、通用构造、用于创建构造的工厂方法)

后者 (SpecificApplicationCDKPackage) 将保存构造的配置,并将使用 ApplicationCommonsPackage 中的工厂来创建东西。

您如何看待在 ApplicationCommonsPackage 中使用工厂模式?我面临的一个问题是我不能为工厂公开一个带有泛型方法的公共(public)接口(interface)(或者不能?)。原因是每个构造都需要非常特定类型的 Prop ,我不能将它们概括为 any或诸如此类将失去 typescript 的好处。所以我有像createLambda(scope: Stack, id: string, props: LambdaProps): Function这样的功能在我的工厂。我不太喜欢这种结构,我会喜欢采用 Function 的通用函数作为输入,并会从中确定 Prop 的类型。类似于 create<T>(scope: Stack, id: string, props: <U derived from T => some methodology to get this?>): T这样当我像这样在 SpecificApplicationCDKPackage 中实际使用它时 - this.factory.create<Function>(this, 'SampleLambda', {})我得到了 props 参数 ({}) 的所有编译时错误

最佳答案

在使用 aws-cdk 时,请务必牢记我们如何将资源收集到 Stack 中。一旦将资源放入 cdk Stack,然后映射到 CloudFormation Stack,在初始生产部署后将其移动到不同的堆栈可能会更加复杂。

决定两个资源是否应该在同一个堆栈中的最佳方法是应用模块设计启发式。换句话说,如果资源在 Stack(模块)内比在不同 Stack(模块)之间具有更多耦合,则更好。

例如,我们经常有一个数据库(例如 RDS)和一些连接到它的服务。与数据库通信时的服务需要其主机名、用户名、密码,并且数据库需要在 AWS 安全组级别允许这些。因此,服务和数据库之间的引用数量很高,它们应该存在于单个模块 (CDK Stack) 中。

另一方面,如果我们有 2 个服务,它们通过 http 相互通信,那么一个服务可能只需要知道另一个服务的 DNS 名称。在这种情况下,这 2 个服务可能更适合放在单独的 Stack 中。

我们显然可以拥有辅助库来帮助创建通用结构。但是,请务必记住,在 cdk 中构造的对象映射到 AWS 资源。一旦部署了 CDK 应用程序,看似无害的重构可能会导致资源在后续部署中被替换。

关于typescript - 如何设计CDK项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67757745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com