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

Suh*_*has 3 aws-cdk

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

温暖的问候。

cap*_*ack 7

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

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

如果您要使用较低级别资源(L1),CloudFormation 模板将如下所示:

CDK Python(L1 构造):

s3.CfnBucket(self, 's3_bucket_l1')
Run Code Online (Sandbox Code Playgroud)

云形成模板:

s3bucketl1:
  Type: AWS::S3::Bucket
Run Code Online (Sandbox Code Playgroud)

如果您要使用更高级别构造(L2) 创建相同的资源,CDK 会向它创建的资源添加一些默认值,下面是使用 L2 资源的相同示例:

CDK Python(L2 构造):

s3.Bucket(self, 's3_bucket_l2')
Run Code Online (Sandbox Code Playgroud)

云形成模板:

s3bucketl249651147:
  Type: AWS::S3::Bucket
  UpdateReplacePolicy: Retain
  DeletionPolicy: Retain
Run Code Online (Sandbox Code Playgroud)

同样扩展一下,如果我要添加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
    )
)
Run Code Online (Sandbox Code Playgroud)

云形成模板:

s3bucketl1:
  Type: AWS::S3::Bucket
  Properties:
    PublicAccessBlockConfiguration:
      BlockPublicAcls: true
      BlockPublicPolicy: true
      IgnorePublicAcls: true
      RestrictPublicBuckets: true
Run Code Online (Sandbox Code Playgroud)

CDK Python(L2 构造):

s3.Bucket(
    self,
    's3_bucket_l2',
    block_public_access=s3.BlockPublicAccess.BLOCK_ALL
)
Run Code Online (Sandbox Code Playgroud)

云形成模板:

  s3bucketl249651147:
    Type: AWS::S3::Bucket
    Properties:
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
Run Code Online (Sandbox Code Playgroud)

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

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