最佳实践 - AWS 规范指引

最佳实践

L1 构造

  • 您无法始终避免直接使用 L1 构造,但应尽可能避免这样做。如果特定的 L2 构造不支持您的边缘情况,您可以探索这两个选项,而不是直接使用 L1 构造:

    • 访问defaultChild如果您需要的 CloudFormation 属性在 L2 构造中不可用,则可以使用 L2Construct.node.defaultChild 访问底层 L1 构造。您可以通过此属性访问 L1 构造的任何公共属性来更新它们,而不必费心自己创建 L1 构造。

    • 使用属性覆盖:如果您要更新的属性不是公开的,该怎么办? 允许 AWS CDK 实现 CloudFormation 模板所有功能的终极解决方案是使用每个 L1 构造中都可用的方法:addPropertyOverride。通过将 CloudFormation 属性名称和值直接传递给此方法,您可以在 CloudFormation 模板级别上操作堆栈。

L2 构造

  • 记得利用 L2 构造经常提供的帮助程序方法。在第 2 层中,您不必在实例化时传递每个属性。L2 帮助程序方法可以使资源预调配变得更加方便,尤其是在需要条件逻辑时。最方便的帮助程序方法之一是从 Grant 类派生出来的。这个类不是直接使用的,但是许多 L2 构造使用它来提供帮助程序方法,使权限更容易实现。例如,如果您想授予 L2 Lambda 函数访问某个 L2 S3 存储桶的权限,则可以调用 s3Bucket.grantReadWrite(lambdaFunction) 而不是创建新的角色和策略。

L3 构造

  • 虽然当您想让堆栈更具可重复使用性和可自定义时,L3 构造可能非常方便,但我们建议您谨慎使用它们。考虑您需要哪种类型的 L3 构造,或者您是否需要 L3 构造:

    • 如果您不直接与 AWS 资源交互,则通常更适合创建帮助程序类而不是扩展该 Construct 类。这是因为默认情况下,该 Construct 类会执行许多操作,只有在您直接与 AWS 资源交互时才需要执行这些操作。因此,如果您不需要执行这些操作,则避免这些操作会更有效。

    • 如果您确定创建新的 L3 构造是合适的,那么在大多数情况下,您需要直接扩展该 Construct 类。仅在想要更新其他 L2 构造的默认属性时,才扩展该构造。如果涉及其他 L2 构造或自定义逻辑,请直接扩展 Construct,并实例化构造函数中的所有资源。