我的目标是允许几个独立的lambda资源(微服务)共享测试环境的公共自定义域。使用下面的模板,部署微服务#1没有问题。但是,在部署微服务#2时,CloudFormation会失败并回滚,因为域名已分配给微服务#1。
当然,必须能够在具有独特路径的多个微服务中共享一个共同的自定义域吗?
服务#1 template.yaml
Resources:
ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
StageName: !Sub ${apiGatewayStageName}
DefinitionBody:
swagger: "2.0"
info:
title: !Sub ${functionName}
paths:
"/service_one":
post:
responses: {}
x-amazon-apigateway-integration:
uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${functionName}:live/invocations"
httpMethod: POST
type: aws_proxy
ApiGatewayCustomDomainName:
Type: AWS::ApiGateway::DomainName
Properties:
CertificateArn: !Sub "arn:aws:acm:${AWS::Region}:${AWS::AccountId}:certificate/${apiGatewayCDNCertificateId}"
DomainName: !Sub "${envName}.${apiGatewayCustomDomainNameSuffix}"
DependsOn:
- "LogsSubscriptionFilter"
- "ApiGatewayApi"
ApiGatewayBasePathMapping:
Type: AWS::ApiGateway::BasePathMapping
Properties:
DomainName: !Ref ApiGatewayCustomDomainName
RestApiId: !Ref ApiGatewayApi
Stage: !Ref apiGatewayStageName
DependsOn: "ApiGatewayCustomDomainName"
Service#2模板是相同的,但路径不同(.e.g。/service_two
。
答案 0 :(得分:1)
使用AWS支持来深入了解这一支持。在当前形式(2018年5月)中,如果出于部署原因需要为每个lambda分别使用SAM模板,但是为这些lambda拥有共享API网关资源,则必须具有单独的专用API网关SAM模板。此外,必须排除AWS :: Serverless :: Function中的Events参数,以支持AWS :: Serverless :: Api中的路径定义。
最后,AWS :: Serverless :: Function必须在Output下导出,然后由AWS :: Serverless :: Api资源导入。