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

如何为单个AWS SAM函数配置两个自定义域名映射

单AWS SAM函数绑定双域名配置方案

AWS::Serverless::Api 内置的Domain属性仅支持配置单个自定义域名,要实现同个函数绑定两个域名可以通过新增独立域名关联资源实现,不需要重复创建API或函数资源,原有运行逻辑不受影响。

配置步骤

  • 为第二个待绑定域名申请独立的ACM证书,证书的域名校验方式和现有证书保持一致即可
  • 单独创建API Gateway自定义域名资源,端点类型和现有API保持一致(当前配置为REGIONAL类型),关联刚申请的第二个域名证书
  • 创建API基础路径映射资源,将第二个自定义域名绑定到已有的RestApi实例和对应部署阶段,完成域名和现有API的流量打通
  • 为第二个域名添加Route53别名解析记录,指向API Gateway为第二个域名分配的访问端点

完整配置示例

以下是调整后可直接使用的模板,新增部分已经和原有配置做了兼容:

Parameters:
  StageName:
    Type: String
    Default: prod
Resources:
  # 原有第一个域名的ACM证书
  ApiCertificate:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: !Sub abc-${StageName}.xyz.com
      ValidationMethod: DNS
  # 新增:第二个域名的ACM证书
  SecondApiCertificate:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: !Sub login-${StageName}.xyz.com
      ValidationMethod: DNS

  RestApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Ref StageName
      EndpointConfiguration: REGIONAL
      Domain:
        DomainName: !Sub abc-${StageName}.xyz.com
        CertificateArn: !Ref ApiCertificate
        Route53:
          HostedZoneName: "xyz.com."

  # 新增:第二个自定义域名配置
  SecondCustomDomain:
    Type: AWS::ApiGateway::DomainName
    Properties:
      RegionalCertificateArn: !Ref SecondApiCertificate
      DomainName: !Sub login-${StageName}.xyz.com
      EndpointConfiguration:
        Types:
          - REGIONAL

  # 新增:第二个域名到现有API的路径映射
  SecondDomainApiMapping:
    Type: AWS::ApiGateway::BasePathMapping
    DependsOn:
      - RestApi
      - SecondCustomDomain
    Properties:
      DomainName: !Ref SecondCustomDomain
      RestApiId: !Ref RestApi
      Stage: !Ref StageName

  # 新增:第二个域名的Route53解析记录
  SecondDomainRoute53Record:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneName: "xyz.com."
      Name: !Sub login-${StageName}.xyz.com
      Type: A
      AliasTarget:
        DNSName: !GetAtt SecondCustomDomain.RegionalDomainName
        HostedZoneId: !GetAtt SecondCustomDomain.RegionalHostedZoneId
        EvaluateTargetHealth: false

  loginFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/handlers/login.loginHandler
      Runtime: nodejs16.x
      Architectures:
        - x86_64
      MemorySize: 128
      Timeout: 100
      Events:
        Api:
          Type: Api
          Properties:
            Path: /login
            Method: POST
            RestApiId: !Ref RestApi

注意事项

  • 示例中第二个域名使用login-${StageName}.xyz.com作为演示,实际使用时替换成你需要绑定的真实域名即可,如果两个域名归属不同的托管区,对应修改证书域名、Route53记录的HostedZoneName配置就行
  • 两个域名最终都映射到同一个API实例,后端login函数不需要做任何代码修改,两个域名的请求都会正常路由到该函数
  • 如果需要给两个域名设置不同的访问路径前缀,只需要在SecondDomainApiMapping资源中添加BasePath属性指定路径即可,不配置该属性时默认做根路径映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:12:26