具有自定义域的 AWS SAM API

AWS SAM API with custom domain

我将 Jersey API 迁移到 Cloudformation(使用 AWS SAM)并且它在 amazonaws 域中正常工作...像 https://xxxxx.execute-api.us-east-1.amazonaws.com/Stage/endpoint

一样可访问

现在我需要能够使用我自己的域访问它,例如 https://api.mydomain.com/endpoint

我在证书管理器 (api.mydomain.com) 中配置了证书并将 CNAME 记录添加到我的 route53 托管区域。然后,我将这部分添加到我的 YML 文件中:

  Api:
    EndpointConfiguration: REGIONAL
    Domain:
      DomainName: api.mydomain.com
      CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb

这是我的 YML 部分:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS Serverless Jersey API - com.mydomain::mydomain
Globals:
  Function:
    Environment:
      Variables:
        •••
  Api:
    EndpointConfiguration: REGIONAL
    Domain:
      DomainName: api.mydomain.com
      CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb
  
Resources:
  MyServiceFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: com.mydomain.app.StreamLambdaHandler::handleRequest
      Runtime: java8
      CodeUri: .
      MemorySize: 512
      Policies: AWSLambdaBasicExecutionRole
      Timeout: 30
      Events:
        ProxyResource:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: any
      Policies:
        •••

Outputs:
  MyServiceApi:
    Description: URL for application
    Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Stage/endpoint'
    Export:
      Name: MyServiceApi

它只是不能与我的自定义域一起使用。无法访问请求的 URL。请帮助:(

好的,最后我通过这些步骤解决了问题

  1. Certificate Manager 中创建一个证书,其中 url 需要: api.mydomain.com
  2. 将创建的DomainName和CertificateArn添加到 yml 文件
  3. 转到 API 网关 -> 自定义域名 和 select 域。然后,从配置中复制 API 网关域名
  4. 转到Route53,并添加一个带有域的A记录 api.mydomain.com 值为 API 网关域名