【问题标题】:How to create the SAM template block for a Route53 alias record for a custom GatewayAPI domain如何为自定义 GatewayAPI 域的 Route53 别名记录创建 SAM 模板块
【发布时间】:2021-09-01 02:22:50
【问题描述】:

创建 SAM 模板以创建 API + Lambda。简单!

Resources:
  HelloWorldApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      DefinitionBody:
        Fn::Transform:
          Name: AWS::Include
          Parameters:
          Location: ./api.yaml
      

为网关添加一个自定义域并将其映射到 API 的阶段。

Resources:
  HelloWorldApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      DefinitionBody:
        Fn::Transform:
          Name: AWS::Include
          Parameters:
      Domain:
        DomainName:
          Fn::Sub: api-${HelloWorldApi.Stage}.custom-domain.com
        CertificateArn: arn:aws:certificate...

如果我要通过控制台执行此操作,则在创建自定义域并映射阶段后,我必须在 Route53 中为 API 和映射配置 DNS 别名记录

我的问题是如何为自定义 GatewayAPI 域的 Route53 别名记录创建 SAM 模板块

【问题讨论】:

    标签: aws-lambda amazon-cloudformation aws-api-gateway aws-sam


    【解决方案1】:

    您可以使用 CloudFormation 模板创建 Route 53 记录。

    要获取端点,可以使用Ref函数。

    当将此资源的逻辑 ID 提供给 Ref 内部函数时,它会返回底层 API Gateway API 的 ID。

    因此,可以使用区域值重建 api 网关端点。用字符串加入api网关的Ref函数,区域如:

    !Join
    - ''
    - - !Ref HelloWorldApi
      - .execute-api.
      - !Ref AWS::Region (or specific value)
      - .amazonaws.com
    

    然后为 Route 53 托管区域创建 CNAME 记录。请参阅AWS docs

    【讨论】:

    • 资源类型:AWS::Route53::RecordSet 是我需要的,但您建议的参考将是错误的。对于自定义域,目标是映射,而不是 API。如何引用通过在 AWS::Serverless::Api 中指定 Domain 创建的自定义域 url,并将该引用放入 RecordSet 是我挑战的关键。
    • 我错过了自定义域的要点:)
    【解决方案2】:

    感谢 @lamanus 启发我阅读文档并以树见林。

    原始 OP 的症结在于对 AWS::Serverless::Api 创建的映射自定义域的引用 获取该引用并不明显。也就是说,如果您像这样在 AWS::Serverless::Api 块中创建 Route53,则不需要这样做。

    HelloWorldApi:
        Type: AWS::Serverless::Api
        Properties:
          StageName: prod
          Domain:
            DomainName:
              Fn::Sub: api-${HelloWorldApi.Stage}.custom-domain.com
            CertificateArn: arn:cert...
            Route53:
              HostedZoneName: custom-domain.com.
              EvaluateTargetHealth: true
          DefinitionBody:
            Fn::Transform:
              Name: AWS::Include
              Parameters:
                Location: ./api.yaml
    

    此 SAM 资源将创建自定义域、映射和 Route53 目标别名。

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2021-11-15
      • 2020-06-05
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多