我是CDK的新手,需要了解高级结构与低级结构之间的区别。 有人可以用简单的话来解释:)
热烈的问候。
答案 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 资源的强大方法。