You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Boto3创建Route53别名记录映射S3静态网站报错

问题分析

错误提示明确指向两个核心问题:

  • 别名目标不在指定的托管区域内
  • 无法找到该别名目标

根本原因是你在AliasTarget配置中错误使用了自身域名的托管区ID,而S3静态网站端点的别名记录必须使用AWS为对应区域S3服务分配的固定托管区ID,而非你自己域名的托管区ID。

解决方案

1. 获取对应区域的S3托管区ID

每个AWS区域的S3静态网站服务都有固定的托管区ID,例如ap-south-1区域对应的ID为Z32UQ3MIXQ8Y4H(不同区域的ID可通过AWS官方文档确认)。

2. 修改代码关键配置

将AliasTarget中的HostedZoneId替换为S3对应区域的托管区ID,同时确保DNSName以.结尾(符合Route53的DNS规范)。

修改后的完整代码

import boto3

def create_route53_alias_record(domain_name, record_name, s3_website_endpoint, my_hosted_zone_id, s3_hosted_zone_id):
    try:
        # 推荐使用IAM角色或环境变量管理凭证,避免硬编码密钥
        route53_client = boto3.client('route53')

        print(s3_website_endpoint)
        changes = [{
            'Action': 'CREATE',
            'ResourceRecordSet': {
                'Name': f'{record_name}.{domain_name}.',
                'Type': 'A',
                'AliasTarget': {
                    'DNSName': f"{s3_website_endpoint}.",
                    'EvaluateTargetHealth': False,
                    'HostedZoneId': s3_hosted_zone_id,  # 使用S3的托管区ID
                },
            },
        }]

        response = route53_client.change_resource_record_sets(
            HostedZoneId=my_hosted_zone_id,  # 自身域名的托管区ID
            ChangeBatch={
                'Changes': changes
            }
        )

        print(f"A record '{record_name}.{domain_name}' created successfully.")
        return True
    except Exception as e:
        print(f"Error creating A record: {e}")
        return False

# 配置参数
domain_name = "domainname.com"
record_name = "sp19"
AWS_REGION = "ap-south-1"
s3_bucket_name = "sp19.domainname.com"
my_hosted_zone_id = "Z32UXXX"  # 自身域名托管区ID
s3_hosted_zone_id = "Z32UQ3MIXQ8Y4H"  # ap-south-1区域S3托管区ID

# 生成S3网站端点
s3_website_endpoint = f"{s3_bucket_name}.s3-website-{AWS_REGION}.amazonaws.com"

# 执行创建操作
create_route53_alias_record(domain_name, record_name, s3_website_endpoint, my_hosted_zone_id, s3_hosted_zone_id)

额外注意事项

  • 避免硬编码AWS密钥,优先使用IAM角色(如在EC2/ECS等AWS服务中运行)或环境变量管理凭证,提升安全性。
  • 确保S3桶名称与待创建的子域名完全一致(示例中sp19.domainname.com符合要求),这是S3绑定自定义域名的必要条件。
  • 确认S3桶已正确启用静态网站托管,若需公共访问需配置对应的桶权限策略。

内容的提问来源于stack exchange,提问作者psp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:23:20