amazon-web-services - removalPolicy : cdk. RemovalPolicy.DESTROY 是如何工作的?

标签 amazon-web-services aws-cdk

我正在使用removalPolicy:cdk.RemovalPolicy.DESTROY。

另外两个选项是“保留”和“快照”。

如果我从控制台删除表并尝试使用 cdk 创建表,则会出现错误,提示找不到资源。

问题 - 如果脚本无法找到它应该创建的表,我可以使用什么选项?

最佳答案

RemovalPolicy 与您从 CDK 之外删除的内容无关。这是一个坏主意(在某些情况下是不允许的),因为您应该通过更新 CDK 代码来删除该资源,然后重新部署它来删除资源。

RemovalPolicy 告诉 CloudFormation 如果您更改 CDK 代码以使资源不再是 CDK 堆栈的一部分该怎么做。

例如,如果您有一个 S3 存储桶,则无法重命名它,但您仍然可以在 CDK 堆栈中更改其名称。如果这样做,CDK 将需要删除旧的 S3 存储桶并使用新名称创建一个新存储桶。这同样适用于许多其他无法重命名的资源,例如 DynamoDB 表。

CDK 如何处理删除这个旧资源就是 RemovalPolicy 的用途。如果您将其设置为 RETAIN,它就会忘记它并让您稍后手动清理。使用 DESTROY 策略告诉 CDK 尝试自动删除您的资源及其包含的所有数据。

通常,如果数据不重要并且可以轻松重新创建(例如缓存数据),您会使用 DESTROY;如果数据很重要并且您不想丢失它(例如用户数据),则通常会使用 RETAIN。

通常,始终使用 RETAIN 是一个好主意。这样,如果您不小心在 CDK 堆栈中输入错误并错误地重命名了资源,其中的所有数据都不会被删除!

what option I can use if the script is unable to find the table then it should create ?

您只需正常创建资源即可。当您编写 CDK 堆栈时,您并不是告诉它要做什么(创建此 S3 存储桶、创建此 DynamoDB 表),而是告诉它您想要什么(我想要一个具有此名称的 S3 存储桶,以及一个具有以下名称的 DynamoDB 表):那个名字)。 CDK 将确定需要创建哪些资源来满足您的请求,如果 CDK 已在早期部署中创建了这些资源,则如果需要更改,它只会更新它们,如果不需要更改,则不会更改它们。

手动删除资源后出现错误的原因是 CDK 试图找到它以确定是否需要更新。这就是为什么您永远不应该手动更改由 CDK 配置的任何 AWS 资源 - 始终更新 CDK 模板并重新部署。如果你手动摆弄资源,很容易破坏CDK,在这种情况下,唯一的解决方案是销毁堆栈,手动清理所有无法销毁的资源,然后从头开始重新部署(然后重新上传您可能拥有的任何用户数据,通常很重要!)

关于amazon-web-services - removalPolicy : cdk. RemovalPolicy.DESTROY 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66944201/

相关文章:

amazon-web-services - 使用客户端应用程序更新非 SSL 中的 Amazon RDS SSL/TLS 证书

amazon-web-services - 应用程序负载均衡器的 SurgeQueueLength 等效项

typescript - 如何在 aws cdk 2.61.1 中将架构迁移到 ISchema

amazon-web-services - 向 Application Load Balancer (ALB) 注册 EC2 实例的问题

java - 将应用程序部署到 AWS Lambda 会引发 Postgres 驱动程序错误

python - 尝试使用 python AWS CDK 创建空堆栈时返回 JSII 错误

amazon-web-services - 为什么 Elastic Beanstalk 的 CloudFormation 堆栈 (aws-cdk) 会删除以前的 AppVersion?

amazon-web-services - AWS SQS - CDK - 如何创建主题过滤器

amazon-web-services - AWS Cloudwatch 事件规则 : Start and stop time

aws-cdk - 使用 aws cdk 创建具有 s3 权限的 aws 用户