es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener dnsName y hostedZoneId de HttpApi en la misma pila.

Usando aws cdk, estoy creando un apigatewayv2.HttpApi respaldado por funciones lambda.

Me gustaría configurar un dominio personalizado (apiCustomDomain) para esta API creada, sin embargo, no puedo encontrar una manera de recuperar el dnsName y hostedZoneId de la API creada para crear un 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.?????, // ¿qué poner aquí? 
                 hostedZoneId: api.????? // ¿qué poner aquí? 
            }
        }
    })
});

Ahora, en la versión 1 de apigateway, era sencillo, obtendríamos esos valores de la propiedad domainName de la api, algo como:

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

Pero no puedo encontrar lo mismo para la biblioteca apigatewayv2.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para recuperar el dnsName y el hostedZoneId del apigatewayv2.HttpApi creado, puedes usar las propiedades apiCustomDomain.regionalDomainName y apiCustomDomain.regionalHostedZoneId, respectivamente. A continuación se muestra un fragmento de código actualizado:

    import * as apigateway2 from '@aws-cdk/aws-apigatewayv2';
    import * as route53 from '@aws-cdk/aws-route53';
    import { IRecordSet, IHostedZone } from '@aws-cdk/aws-route53';
    import { AliasRecordTargetConfig, RecordTarget } from '@aws-cdk/aws-route53-targets';
    
    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: apiCustomDomain.regionalDomainName,
                    hostedZoneId: apiCustomDomain.regionalHostedZoneId
                }
            }
        })
    });
    

    Aquí, utilizamos la variable apiCustomDomain para recuperar las propiedades dnsName y hostedZoneId del objeto ARecord.

Comments are closed.