从同一堆栈中的 HttpApi 获取 dnsName 和 hostedZoneId

Get dnsName and hostedZoneId from HttpApi in the same stack

我正在使用 aws cdk 创建一个由 lambda 函数支持的 apigatewayv2.HttpApi

我想为这个创建的 API 设置自定义域 (apiCustomDomain) 名称,但是我似乎找不到检索 dnsNamehostedZoneId 从创建的 API 到创建一个 ARecord.

    import * as apigateway2 from '@aws-cdk/aws-apigatewayv2';

    const apiCustomDomain = new apigateway2.DomainName(this, 'api-custom-domain', {
        domainName: subDomainName,
        certificate: certificate
    });

    const api = new apigateway2.HttpApi(this, 'my-api', {
        apiName: 'my-api',
        defaultDomainMapping: {
            domainName: apiCustomDomain
        },
        createDefaultStage: true,
        disableExecuteApiEndpoint: false,
        defaultAuthorizer: new HttpIamAuthorizer()
    });

    new route53.ARecord(this, 'a-api-record', {
        zone: hostedZone,
        recordName: subDomainName,
        target: route53.RecordTarget.fromAlias({
            bind(record: IRecordSet, zone?: IHostedZone): AliasRecordTargetConfig {
                return {
                     dnsName: api.?????, // what to put here 
                     hostedZoneId: api.????? // what to put here
                }
            }
        })
    });

现在在 apigateway 的 v1 中,很简单,我们将从 api 的 domainName 属性 中获取这些值,例如:

   dnsName = api.domainName!.domainNameAliasDomainName
   hostedZoneId = api.domainName!.domainNameAliasHostedZoneId

但我找不到 apigatewayv2 库的相同内容。

将使用 fromLookup 检索到的现有托管区域和 ApiGatewayv2DomainProperties 目标从 Route53 targets module 传递到 ARecord

const zone = route53.HostedZone.fromLookup(this, 'HostedZone', {
  domainName: domain,
});

new route53.ARecord(this, 'AliasRecord', {
  recordName: subdomain,
  zone,
  target: route53.RecordTarget.fromAlias(
    new targets.ApiGatewayv2DomainProperties(
      apiCustomDomain.regionalDomainName,
      apiCustomDomain.regionalHostedZoneId
    )
  ),
});