从同一堆栈中的 HttpApi 获取 dnsName 和 hostedZoneId
Get dnsName and hostedZoneId from HttpApi in the same stack
我正在使用 aws cdk 创建一个由 lambda 函数支持的 apigatewayv2.HttpApi
。
我想为这个创建的 API 设置自定义域 (apiCustomDomain
) 名称,但是我似乎找不到检索 dnsName
和 hostedZoneId
从创建的 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
)
),
});
我正在使用 aws cdk 创建一个由 lambda 函数支持的 apigatewayv2.HttpApi
。
我想为这个创建的 API 设置自定义域 (apiCustomDomain
) 名称,但是我似乎找不到检索 dnsName
和 hostedZoneId
从创建的 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
)
),
});