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

如何配置AWS Cloud Map为S3静态网站创建DNS别名及Terraform实现

解决方案

你无法手动修改Cloud Map托管的Route53私有托管区记录,可通过注册Cloud Map CNAME类型服务实例的方式实现需求,具体逻辑为:在你的private-namespace私有命名空间下创建对应服务,注册CNAME类型实例指向S3静态网站端点,由Cloud Map自动生成托管区的DNS记录,不需要手动操作Route53。

核心配置说明

  • Cloud Map服务配置DNS记录类型为CNAME
  • 服务实例指定AWS_INSTANCE_CNAME属性为S3静态网站域名mybucket.s3-website-eu-west-1.amazonaws.com
  • 生成的DNS记录自动匹配mys3website.private-namespace指向目标S3端点

Terraform 实现代码

首先如果已经存在现有的Cloud Map私有命名空间,可通过数据源引用,若需新建也可直接定义资源:

# 可选:引用已有的私有DNS命名空间,新建的话替换为aws_service_discovery_private_dns_namespace资源
data "aws_service_discovery_private_dns_namespace" "existing" {
  name = "private-namespace"
  # 替换为你命名空间关联的VPC ID
  vpc = "vpc-xxxxxx"
}

# 创建Cloud Map服务,指定DNS配置为CNAME类型
resource "aws_service_discovery_service" "s3_website" {
  name = "mys3website"
  namespace_id = data.aws_service_discovery_private_dns_namespace.existing.id

  dns_config {
    dns_records {
      ttl  = 300
      type = "CNAME"
    }
    # 私有命名空间默认路由策略为加权,此处可省略
    routing_policy = "WEIGHTED"
  }
}

# 注册服务实例,指向S3静态网站端点
resource "aws_service_discovery_instance" "s3_website" {
  instance_id = "s3-website-instance"
  service_id  = aws_service_discovery_service.s3_website.id

  attributes = {
    AWS_INSTANCE_CNAME = "mybucket.s3-website-eu-west-1.amazonaws.com"
    AWS_INSTANCE_PORT  = "80" # S3静态网站默认HTTP端口为80,HTTPS需搭配CloudFront/ALB使用
  }
}

注意事项

  • 关联该私有命名空间的VPC需开启DNS解析和DNS主机名选项,否则无法正常解析记录
  • 需提前确认S3存储桶已开启静态网站托管,且桶策略允许对应VPC内的IP段访问资源
  • S3静态网站原生仅支持HTTP访问,如需HTTPS可在前端部署ALB或CloudFront,再将Cloud Map CNAME指向ALB/CloudFront域名
  • 配置生效后可在VPC内ECS/EC2实例上直接解析mys3website.private-namespace验证指向是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:03