CDK Route53 CNAME测试失败:预期与接收名称看似一致却不匹配
AWS CDK Route53 CNAME测试失败排查(预期与接收值看似一致)
问题核心原因
你遇到的测试失败,本质是Route53的RecordSet资源中,Name字段会自动包含域名的根后缀(即末尾的英文点),但你的测试用例里未添加这个点,导致字符串字面量匹配失败——看似完全相同的域名,实际差了一个末尾的点。
当你用CnameRecord创建记录时,CDK会根据传入的hostedZone自动补全根后缀,最终生成的CloudFormation模板中,Name字段值为presentation.cloud101.nl.(注意末尾的点),而测试用例里写的是presentation.cloud101.nl,两者字符串不相等,导致断言失败。
解决方案
方法1:修改测试用例,补全末尾的点
直接在测试的Name字段值后添加英文点,与CDK生成的模板值匹配:
test('Test if the CNAME record is created', () => { template.resourceCountIs('AWS::Route53::RecordSet', 1); template.hasResourceProperties('AWS::Route53::RecordSet', { Name: 'presentation.cloud101.nl.', // 添加末尾的点 Type: 'CNAME', TTL: '300', }); });
方法2:用正则匹配灵活校验
如果不想硬编码带点的域名,可以使用CDK断言工具的Match类做模糊匹配:
import { Match } from '@aws-cdk/assert'; test('Test if the CNAME record is created', () => { template.resourceCountIs('AWS::Route53::RecordSet', 1); template.hasResourceProperties('AWS::Route53::RecordSet', { Name: Match.stringLikeRegexp('presentation.cloud101.nl\\.'), // 正则匹配带点后缀 Type: 'CNAME', TTL: '300', }); });
验证方式
可以运行cdk synth命令查看生成的CloudFormation模板,找到AWS::Route53::RecordSet资源的Name字段,确认其值确实带有末尾的点。
内容的提问来源于stack exchange,提问作者Randy
相关产品推荐
相关产品推荐

