【问题标题】:Multiple SAM Templates with Same Custom Domain, Different Path Mapping具有相同自定义域、不同路径映射的多个 SAM 模板
【发布时间】:2020-09-18 00:09:35
【问题描述】:

我正在尝试使用不同的存储库创建多个服务; actorsmovies。这些存储库中的每一个都有自己的template.yaml

不幸的是,如果我在这两个template.yaml 中使用相同的域但不同的基本路径,我会遇到错误并且没有部署第二个服务;

actors 存储库中; template.yaml

Mapping:
    Type: AWS::ApiGateway::BasePathMapping
    Properties:
      BasePath: actors
      DomainName: api.example.com
      RestApiId: !Ref Api
      Stage: !Ref Env
  Api:
    Type: AWS::Serverless::Api
    Properties:
     # ... other props

电影存储库中; template.yaml

Mapping:
    Type: AWS::ApiGateway::BasePathMapping
    Properties:
      BasePath: movies
      DomainName: api.example.com
      RestApiId: !Ref Api
      Stage: !Ref Env
  Api:
    Type: AWS::Serverless::Api
    Properties:
     # ... other props

这似乎无法完成。即使我在Apiresource definition 中移动域配置,它也表示该域正在另一个堆栈中使用,因为堆栈名称也不同。

有没有办法解决这个问题?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-sam


    【解决方案1】:

    您不能创建两个具有相同域名的资源。这会导致非常糟糕的事情发生。

    相反,

    选项一:单身AWS::Serverless::Api

    用一个域名和多个事件创建一个AWS::Serverless::Api资源

    选项 2:多个AWS::Serverless::Api

    • 创建多个具有唯一域名的AWS::Serverless::Api 资源(创建时使用默认的)
    • 创建一个具有多个来源的AWS::CloudFront::Distribution 资源,这些来源是您的AWS::Serverless::Api 和您希望它使用的域名。这样,它就会将该域“置于”您的多个来源(api-gateways)

    注意事项:

    如果您决定继续使用多个模板文件,您可能会遇到一些语法问题,我建议您使用nested approach

    【讨论】:

      【解决方案2】:

      @Revenant 现在这似乎是可能的。你现在的做法听起来很合法。

      1. 每个服务都有一个单独的 API
      2. 每个服务都有一个单独的基本路径
      • api.example.com/actors
      • api.example.com/moviews

      只要确保你的服务支持通过根路径调用/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-20
        • 1970-01-01
        相关资源
        最近更新 更多