问题描述
我正在尝试使用不同的存储库创建多个服务; actors
和movies
。每个存储库都有自己的template.yaml
不幸的是,如果我在这两个template.yaml
中使用相同的域但使用不同的基本路径,则我会出错,并且第二个服务未部署;
在演员存储库中; 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
似乎无法完成。即使我在Api
resource definition中移动域配置,它也表示域正在另一个堆栈中使用,因为堆栈名称也不同。
有什么办法解决吗?
解决方法
您不能创建两个具有相同域名的资源。这将允许非常糟糕的事情。
相反,
选项1 1:单个AWS::Serverless::Api
使用一个域名和多个事件创建一个AWS::Serverless::Api
资源
选项2:多个AWS::Serverless::Api
- 使用唯一的域名创建多个
AWS::Serverless::Api
资源(创建时使用默认资源) - 创建一个具有多个“起源”的单个
AWS::CloudFront::Distribution
资源,这些起源是您的AWS::Serverless::Api
和您要使用的域名。通过这种方式,它将使该域“到达”您的许多起源(api网关)
注释:
如果您决定继续使用多个模板文件,则可能会遇到一些语法问题,我建议您使用nested approach
,@Revenant现在看来这是可能的。您现在的做法听起来很合法。
- 每个服务具有单独的API
- 每个服务具有单独的基本路径
- api.example.com/actors
- api.example.com/moviews
只需确保您的服务支持通过根路径/
进行调用