Amazon web services AWS CDK Python-使用Route53进行证书管理器DNS验证

Amazon web services AWS CDK Python-使用Route53进行证书管理器DNS验证,amazon-web-services,certificate,amazon-route53,aws-cdk,aws-acm,Amazon Web Services,Certificate,Amazon Route53,Aws Cdk,Aws Acm,我一直在尝试使用Python中的CDK设置DNS证书验证 我的代码如下所示: 类API服务(core.Construct): def uuu init uuu(self,作用域:core.Construct,id:str,env:str)->无: #为Route53中的现有域设置托管区域 hosted_zone=aws_route53.HostedZone(self,“devHostedZone”,zone_name=“example.com”) #使用托管区域从DNS创建验证 cert\u v

我一直在尝试使用Python中的CDK设置DNS证书验证

我的代码如下所示:

类API服务(core.Construct):
def uuu init uuu(self,作用域:core.Construct,id:str,env:str)->无:
#为Route53中的现有域设置托管区域
hosted_zone=aws_route53.HostedZone(self,“devHostedZone”,zone_name=“example.com”)
#使用托管区域从DNS创建验证
cert\u validation=CertificateValidation.from\u dns(托管区域)
subc_alt_names=['example.com','*.example.com']
#区域中的DNS验证证书,用于指定区域中的域名和备用名称(用于启用边缘的API)
证书\u dns\u val=DnsValidatedCertificate(
自己
“DnsValidation”,
托管分区=托管分区,
域名=“example.com”,
subject\u alternative\u name=subject\u alt\u name,
地区='us-east-1',
验证=证书(验证)
#使用域名设置设置网关
api=apigateway.RestApi(
自己
“我的api”,
rest\u api\u name=“我的api”,
description=“包含我的API的REST API的Lambda。”,
domain\u name=apigateway.DomainNameOptions(证书=cert\u dns\u val,domain\u name=env+“.example.com”)
)
#最后创建一条记录,将传入的请求在内部路由到刚刚创建的API网关
target=aws_route53.RecordTarget.from_别名(alias.ApiGateway(api))
record=ARecord(self'ARecord',target=target,zone=hosted\u zone,record\u name=env+“.example.com”)
我似乎无法解决的问题是

  • 我如何通过CDK告诉AWS设置所需的DNS CNAME记录,以便验证证书和
  • 如何在默认情况下将其设置为TLS 1.2(不是TLS 1.0)
  • 我看到的问题是如何使用它:

  • 控制台中的ACM(AWS证书管理器)中生成了3个证书。 ->这是错误的,它应该只生成一个
  • CDK似乎不会自动添加CNAME记录,所以我尝试在CloudFormation进行期间手动添加它。然而,这也不起作用

  • 需要补充的是,所有6条生成的CNAME记录都是相同的,因此在Route53的托管区域配置中始终只需要一条CNAME记录(我设置了该记录,但似乎没有什么不同)

    我设法找到了一种方法,以便只生成一个证书

    而不是:

    #使用托管区域从DNS创建验证
    cert\u validation=CertificateValidation.from\u dns(托管区域)
    subc_alt_names=['example.com','*.example.com']
    #区域中的DNS验证证书,用于指定区域中的域名和备用名称(用于启用边缘的API)
    证书\u dns\u val=DnsValidatedCertificate(
    自己
    “DnsValidation”,
    托管分区=托管分区,
    域名=“example.com”,
    subject\u alternative\u name=subject\u alt\u name,
    地区='us-east-1',
    验证=证书(验证)
    
    我写

    cert\u dns\u val=DnsValidatedCertificate(
    自己
    “DnsValidation”,
    托管分区=托管分区,
    域名='*.example.com',
    地区(='us-east-1')
    
    我不知道也不理解为什么这样做有效,但无论如何我会接受的

    第二个问题是超时。我在下面的链接中找到了一些关于为什么会发生这种情况的解释

    AWS CDK似乎正在使用Lambda来运行CloudFormation。不幸的是,lambda的最长生存时间是9分30秒。但是,DNS记录可能需要更长的时间,有时甚至更长(最多30分钟)。我不知道如何解决这个问题,但我可能需要创建单独的堆栈(中间有一些等待),因为这将指导单独的Lambda工作人员