AWS CDK高级别构造与低级别构造之间的差异

时间:2020-05-19 06:32:34

标签: aws-cdk

我是CDK的新手,需要了解高级结构与低级结构之间的区别。 有人可以用简单的话来解释:)

热烈的问候。

1 个答案:

答案 0 :(得分:2)

CDK 旨在让任何人都可以轻松创建具有预配置默认值的组件。这意味着您可以(使用更高级别的构造)创建资源,使用默认值,并由 AWS(以及整个社区)批准。

例如,使用 CDK,如果您要使用低级构造创建 S3 存储桶,则必须完全像定义 CloudFormation 模板一样定义资源,这意味着您选择选项并为这些设置值选项。

如果您要使用低级资源 (L1),则 CloudFormation 模板的外观如下:

CDK Python(L1 构造):

s3.CfnBucket(self, 's3_bucket_l1')

CloudFormation 模板:

s3bucketl1:
  Type: AWS::S3::Bucket

如果您要使用高级结构 (L2) 创建相同的资源,CDK 会为其创建的资源添加一些默认值,以下是使用 L2 资源的相同示例:

CDK Python(L2 构造):

s3.Bucket(self, 's3_bucket_l2')

CloudFormation 模板:

s3bucketl249651147:
  Type: AWS::S3::Bucket
  UpdateReplacePolicy: Retain
  DeletionPolicy: Retain

同样的扩展,如果我将 PublicAccessBlockConfiguration 添加到这些 S3 存储桶中,L2 构造以更少的代码行做同样的事情:

CDK Python(L1 构造):

s3.CfnBucket(
    self, 
    's3_bucket_l1',
    public_access_block_configuration=s3.CfnBucket.PublicAccessBlockConfigurationProperty(
        block_public_acls=True,
        block_public_policy=True,
        ignore_public_acls=True,
        restrict_public_buckets=True
    )
)

CloudFormation 模板:

s3bucketl1:
  Type: AWS::S3::Bucket
  Properties:
    PublicAccessBlockConfiguration:
      BlockPublicAcls: true
      BlockPublicPolicy: true
      IgnorePublicAcls: true
      RestrictPublicBuckets: true

CDK Python(L2 构造):

s3.Bucket(
    self,
    's3_bucket_l2',
    block_public_access=s3.BlockPublicAccess.BLOCK_ALL
)

CloudFormation 模板:

  s3bucketl249651147:
    Type: AWS::S3::Bucket
    Properties:
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain

这只是使用 S3 作为资源的一个示例。在 Lambda 函数的情况下,事情变得非常有趣。使用 L2 构造,只需几行代码,即可创建 Lambda 函数,CDK 还会生成具有默认权限的 IAM 角色。如果您要对 L1 构造执行相同的操作,则必须同时定义 Lambda 构造和 IAM 角色构造以生成 CloudFormation 模板。

本质上,这两个构造都创建了 CloudFormation 模板,但更高级的构造为用户提供了使用预配置默认值和更少代码创建 AWS 资源的强大方法。