AWS CDK,为 Route53 中的现有托管区域创建别名记录



我正在使用 AWS CDK(使用 Python 作为我的部署语言(,并且正在尝试将现有 cloudfront 分配的别名记录添加到现有托管区域。虽然我可以让cdk synth工作,但cdk deploy找不到托管区域失败。

我使用 AWS CDK 版本 1.5.0(内部版本 c020efa(和 1.6.0(内部版本 3a0cde0(进行了测试。

我尝试像这样找到区域:

zone = route53.HostedZone.from_hosted_zone_attributes(
self,
'MyHostedZone',
zone_name = props.domainName,
hosted_zone_id = 'Z1XXXXXXXXXS1'
)

像这样:

zone = route53.HostedZone.from_lookup(
self,
'MyHostedZone',
domain_name = props.domainName
)

并将其与(如果创建新的托管区域则有效(:

route53.ARecord(
self,
'SiteAliasRecord',
record_name = siteDomain,
target = route53.RecordTarget(alias_target=target),
zone = zone
)

在这两种情况下,错误消息都是:

StaticSiteHTTPS/SiteAliasRecord (StaticSiteHTTPSSiteAliasRecord9BXXXXX(未找到具有 ID 的托管区域: Z2XXX6BQ9TEB5H(服务:亚马逊路线53;状态代码:404;错误代码: NoSuchHostedZone;请求 ID:

我不知道 IDZ2XXX6BQ9TEB5H来自哪里,它不在我的模板中,也没有具有此 ID 的托管区域。 两者都会生成一个 .template.json,其中包含:

"StaticSiteHTTPSSiteAliasRecord9BXXXXX": {
"Type": "AWS::Route53::RecordSet",
"Properties": {
"Name": "dev.mydomain.com.",
"Type": "A",
"AliasTarget": {
"DNSName": {
"Fn::GetAtt": [
"StaticSiteHTTPSSiteDistributionCFDistribution3BXXXXX",
"DomainName"
]
},
"HostedZoneId": "Z2YYYYYYYYYW2"
},
"HostedZoneId": "Z1XXXXXXXXXXS1"
},

from_lookup生成"HostedZoneId": "/hostedzone/Z1XXXXXXXXXXS1",而from_hosted_zone_attributes在 template.json 中生成"HostedZoneId": "Z1XXXXXXXXXXS1",但无论哪种方式deploy都找不到托管区域。但是,这似乎表明synth发现托管区域正常,正在运行cdk context条目也由synth创建。

我还尝试通过from_hosted_zone_idfrom_hosted_zone_attributes获取托管区域,这也引发了错误,但我的理解是他们实际上并没有在我的帐户中查找任何内容。

附带说明一下,使用 CDK 创建新的托管区域是有效的,并且它包含别名记录。

如何进一步调试?我是否应该使用其他机制来提供或查找我的托管区域?

很抱歉在 Python 中没有这个,但我之前已经得到了一个 Route53 别名来用于 CloudFront 发行版。

我会尝试通过首先导入 Route53 目标模块来创建您的别名记录目标:

...
import route53 = require('@aws-cdk/aws-route53');
import targets = require('@aws-cdk/aws-route53-targets');

然后,当您实例化分配后,您可以使用以下内容创建别名记录目标:

const hostedZoneId; // get from props or SSM lookup (Z****)
const zoneName; // get from props or SSM lookup (mydomain.com)
const myHostedZone = route53.HostedZone.fromHostedZoneAttributes(this, 'MyImportedHostedZone', {
hostedZoneId,
zoneName,
});
aliasRecord = new route53.ARecord(this, 'MyAliasRecord', {
target: route53.RecordTarget.fromAlias(new targets.CloudFrontTarget(distribution)),
zone: myHostedZone,
recordName: 'SiteAliasRecord',
};

这可能无法完全解决您的问题,但from_hosted_zone_id似乎在 python 中工作正常。

zone = route53.HostedZone.from_hosted_zone_id(self, "existing-zone", 
hosted_zone_id = MyHostedZoneId)

record = route53.ARecord(self, 'AliasRecord',
record_name = MyRecordName,
target = route53.RecordTarget(alias_target = target), zone = zone)

为我工作。

最新更新