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

如何用AWS Route53为用户创建子域名?附Pulumi自动化咨询

实现用户专属子域名跳转的Route53步骤与Pulumi自动化方案

一、AWS Route53手动实现步骤

前置准备

  • 确认developer.com已在Route53中创建托管区域,你拥有该域名的管理权限。
  • 你的应用服务器需支持通过请求的Host头识别子域名对应的用户,比如解析tushar.developer.com中的tushar前缀关联用户账号。

1. 添加通配符DNS记录

在developer.com的托管区域内新增一条通配符A/AAAA记录:

  • 记录类型:根据服务器IP类型选择A(IPv4)或AAAA(IPv6)
  • 名称:*.developer.com(通配符会匹配所有子域名)
  • 值:填写应用服务器的公网IP;若使用ELB/CloudFront,则填写对应服务的域名
  • TTL:建议设为300秒(5分钟),确保变更后快速生效

2. 配置HTTPS与跳转(推荐)

为保障子域名的安全访问或自动跳转,需完成以下操作:

  • 在AWS Certificate Manager(ACM)申请通配符证书,域名填写*.developer.com和developer.com,确保覆盖主域名及所有子域名
  • 配置流量转发服务:
    • 用CloudFront:将源指向应用服务器,配置行为匹配*.developer.com,绑定ACM证书并强制HTTPS访问
    • 用ALB:在HTTPS监听器上绑定证书,设置转发规则将请求导向应用服务器

3. 应用层处理跳转逻辑

用户注册完成后,你的应用需执行:

  • 生成用户专属子域名(如tushar.developer.com)
  • 返回302重定向响应,将用户导向该子域名
  • 服务器解析子域名前缀(如tushar),关联到对应用户账号并加载专属内容

二、Pulumi自动化实现建议

1. 初始化Pulumi项目

  • 运行pulumi new aws-typescript(也可选择Python、Go等你熟悉的语言)创建AWS类型的Pulumi项目
  • 配置AWS凭证:确保Pulumi能访问你的AWS账号,可通过环境变量、AWS CLI配置或Pulumi密钥管理完成

2. 自动化Route53资源

用代码创建托管区域(若未存在)和通配符DNS记录,TypeScript示例:

import * as aws from "@pulumi/aws";

// 获取已有的developer.com托管区域,不存在则创建新区域
const hostedZone = await aws.route53.getZone({ name: "developer.com" }) || new aws.route53.Zone("developer-zone", {
    name: "developer.com",
});

// 创建通配符A记录
const wildcardARecord = new aws.route53.Record("wildcard-record", {
    zoneId: hostedZone.zoneId,
    name: "*.developer.com",
    type: "A",
    ttl: 300,
    records: ["你的服务器公网IP"], // 替换为ELB/CloudFront域名也可
});

3. 自动化证书与CDN/负载均衡配置

申请并自动验证通配符证书

const certificate = new aws.acm.Certificate("wildcard-cert", {
    domainName: "*.developer.com",
    subjectAlternativeNames: ["developer.com"],
    validationMethod: "DNS",
});

// 自动完成DNS验证,无需手动添加记录
const certificateValidation = new aws.acm.CertificateValidation("cert-validation", {
    certificateArn: certificate.arn,
    validationRecordFqdns: certificate.domainValidationOptions.apply(options => options.map(o => o.resourceRecordFqdn)),
});

配置CloudFront分发(可选)

import * as pulumi from "@pulumi/pulumi";

const cloudFrontDistribution = new aws.cloudfront.Distribution("cf-distribution", {
    enabled: true,
    origins: [{
        domainName: "你的应用服务器域名或IP",
        originId: "app-origin",
        customOriginConfig: {
            httpPort: 80,
            httpsPort: 443,
            originProtocolPolicy: "https-only",
        },
    }],
    defaultCacheBehavior: {
        targetOriginId: "app-origin",
        viewerProtocolPolicy: "redirect-to-https",
        allowedMethods: ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"],
        cachedMethods: ["GET", "HEAD", "OPTIONS"],
    },
    viewerCertificate: {
        acmCertificateArn: certificateValidation.certificateArn,
        sslSupportMethod: "sni-only",
        minimumProtocolVersion: "TLSv1.2_2021",
    },
    aliases: ["*.developer.com", "developer.com"],
});

4. 应用与Pulumi集成要点

  • 利用Pulumi Stack输出功能,将CloudFront域名、托管区域ID等资源信息输出,方便应用层调用
  • 由于通配符记录已覆盖所有子域名,用户注册时无需单独创建子域名DNS记录,直接生成子域名并返回重定向即可
  • 若需限制敏感子域名,可在应用层添加校验逻辑,或在Pulumi中实现记录的白/黑名单控制

5. CI/CD集成

  • 将Pulumi代码纳入Git版本控制,配置GitHub Actions、GitLab CI等工具,实现代码变更时自动更新AWS资源
  • 使用Pulumi Stack区分环境,比如dev栈对应dev.developer.com,prod栈对应正式的developer.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:35:56