gpt4 book ai didi

amazon-web-services - 具有证书 DNS 验证的 CloudFormation 堆栈托管区域删除

转载 作者:行者123 更新时间:2023-12-03 07:12:20 25 4
gpt4 key购买 nike

我有一个简单的 AWS CloudFormation 模板,用于为 example.com 创建托管区域以及该域的 SSL/TLS 证书。它看起来像这样:



Resources:
HostedZone:
Type: AWS::Route53::HostedZone
Properties:
Name: example.com

Certificate:
Type: AWS::CertificateManager::Certificate
Properties:
DomainName: example.com
ValidationMethod: DNS
DomainValidationOptions:
- DomainName: example.com
HostedZoneId: !Ref HostedZone

我明白,如果我不指定 DeletionPolicyby default CloudFormation deletes resources in a stack当堆栈被删除时。有一些异常(exception),例如非空 S3 存储桶,但这是有道理的,因为在这种情况下,有人进入并将内容添加到存储桶中,我认为与 CloudFormation 堆栈无关。

但是,当我删除上述模板的堆栈时,出现错误:

The specified hosted zone contains non-required resource record sets and so cannot be deleted. (Service: Route53, Status Code: 400, Request ID: …)

当然,错误消息是可以理解的:为了验证证书,向托管区域添加了一条额外记录,并且除非您先删除该额外记录,否则无法删除托管区域。如果我手动创建所有这些,也会发生同样的事情。

这种行为仍然与 DeletionPolicy 的文档(它说资源应该被自动删除)并不真正一致,并且这里没有任何东西不是由堆栈创建的。看起来,尽管所有保证“CloudFormation 是声明性的”和“CloudFormation 确定了做事的顺序”,但至少在删除方面它有很多警告。

在这种情况下,CloudFormation 应该确定它是在创建托管区域后添加了该记录,因此它应该在删除托管区域之前删除该记录。但它无法弄清楚这一点。

CloudFormation 是否可以找出如何删除托管区域(它可以),以及 CloudFormation 是否可以找出如何删除负载均衡器(它可以),以及 CloudFormation 是否可以找出如何删除在删除托管区域之前,托管区域中的记录指向负载均衡器(可以),为什么 CloudFormation 无法弄清楚如何在删除托管区域之前从托管区域中删除证书验证记录? 🤔

是否有一些解决方法可以添加到我的堆栈定义中,以允许在删除堆栈时删除托管区域?如果我每次都必须进去手动删除一条记录,就删除而言,它违背了 CloudFormation 的目的。

最佳答案

您必须创建一个 custom resource以 lambda 函数的形式。该函数将作为堆栈删除过程的一部分执行并清理托管区域。

您的自定义资源必须使用 AWS SDK,例如boto3,从您的区域中删除记录。具体可以使用change_resource_record_sets可以删除记录。

关于amazon-web-services - 具有证书 DNS 验证的 CloudFormation 堆栈托管区域删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75581557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com