我发现每次我部署时,cdk都会尝试重新创建S3存储桶。如果不指定存储桶名称,则每次都会生成一个新的垃圾存储桶名称。如果我指定了一个名称,它将拒绝部署,因为存储桶已经存在。我怎么才能把它"upsert“成一个桶呢?
下面是我使用的代码:
const dataIngestBucket = new Bucket(this, 'data-lake', {
bucketName: `${this.props.environmentName}-my-company-data-lake`
});发布于 2021-07-28 17:14:50
只要我看不到您要使用的语言,我就会使用python给出答案。它可以很容易地跟踪和转换为任何其他语言。
在那里您可以找到在类创建过程中指定的参数,即auto_delete_objects=True和removal_policy=cdk.RemovalPolicy.DESTROY,这些参数可以帮助您实现目标。
发布于 2021-07-19 14:36:50
如果CDK代码更新,CDK会自动更新您的堆栈资源。例如,当您第一次执行创建存储桶的CDK堆栈时,会使用提供的配置创建存储桶。当您更新CDK代码以更新存储桶的生命周期策略或添加CORS时,作为相同堆栈的一部分,堆栈的更新将自动更新存储桶-它不会重新创建存储桶,因为云形成知道现有堆栈上有更新。
在您的例子中,当堆栈资源仍然存在时,似乎在删除之后重新创建了堆栈。这会导致云形成创建一个新的堆栈及其资源,当堆栈被销毁时,这些堆栈及其资源没有被移除。
通常,例如,当堆栈更新失败并且处于回滚状态时,就会出现问题。在这种情况下,重新部署会再次尝试创建存储桶,但失败了。在这种情况下,可能的选项可能是:
很多时候,我们不想删除资源,因为它们包含数据;在这种情况下,您可以在CDK代码中使用另一个库,例如boto3 for python,以检查资源是否存在-如果不是通过CDK创建的话。这将导致CDK代码不会尝试创建存储桶( CDK本身不能用于查看S3资源是否已经存在--至少还没有看到如何实现这一点)。
另一个要点是与资源关联的删除策略
troubleshooting_resource_not_deleted
当我发出cdk
命令时,我的S3存储桶、DynamoDB表或其他资源未被删除
默认情况下,可以包含用户数据的资源有一个保留的removalPolicy (Python: removal_policy)属性,当堆栈被销毁时,资源不会被删除。相反,资源是从堆栈中孤立出来的。然后,必须在销毁堆栈后手动删除资源。在此之前,重新部署堆栈将失败,因为在部署期间创建的新资源的名称与孤立资源的名称冲突。
如果将资源的删除策略设置为销毁,则在销毁堆栈时将删除该资源。
但是,即使删除策略为销毁,云形成也无法删除非空存储桶。从下面的相同链接摘录-
亚马逊亚马逊网络服务CloudFormation不能删除非空的
S3存储桶。如果您将亚马逊S3存储桶的删除策略设置为销毁,并且该存储桶包含数据,则尝试销毁堆栈将失败,因为无法删除该存储桶。您可以让AWS CDK在尝试销毁存储桶之前删除存储桶中的对象,方法是将存储桶的autoDeleteObjects属性设置为true。
最佳实践是
的堆栈资源
发布于 2020-06-04 20:52:40
摆脱固定的名字!
使用
final IBucket myBucket = Bucket.Builder.create(this, "mybucket")
.bucketName(PhysicalName.GENERATE_IF_NEEDED).build();(Java,但无关紧要)
你会得到一个“随机命名”的Bucket吗?在这里描述:https://docs.aws.amazon.com/cdk/latest/guide/resources.html
像这样在你的模板中使用它(这里是嵌套栈)
@Nullable NestedStackProps templateProps = NestedStackProps.builder()
.parameters(new HashMap<String, String>(){{
put("S3Bucket", myBucket.getBucketName());
}})
.build();或者你还有一个固定的名字(去掉!!)然后通过以下方式获取它们:
final IBucket myBucket = Bucket.fromBucketName(this, "mybucket", "my-hold-bucket-name");但是你不能这样做:
if (!myBucket) then create(伪代码)
编译/运行时无ressource-check!
https://stackoverflow.com/questions/60199739
复制相似问题