【发布时间】:2021-08-05 15:50:03
【问题描述】:
我想将现有的 Rest API 移动到 HTTP API,并在自定义域配置中出错。我的 HTTP API SAM 文件是:
resHttpApiGateway:
Type: AWS::Serverless::HttpApi
Properties:
StageName: !Sub "${paramEnvironment}"
CorsConfiguration:
AllowOrigins:
- "*"
AllowHeaders:
- Content-Type
- X-Amz-Date
- Authorization
- X-Api-Key
- correlation-object
AllowMethods:
- GET
- POST
- PUT
- DELETE
Auth:
Authorizers:
authTokenAuthorizer:
AuthorizerPayloadFormatVersion: 1.0
FunctionArn: !Ref paramLambdaAuthorizer
Identity:
Headers:
- Authorization
ReauthorizeEvery: 0
Domain:
EndpointConfiguration: REGIONAL
DomainName: !If
- condIsLocal
- !Sub "dev.${paramBaseDomain}"
- !Sub "${paramEnvironment}.${paramBaseDomain}"
CertificateArn: arn:aws:acm:xxx
Route53:
HostedZoneId: xxx
BasePath: "company-api"
我在 Cloudformation 中遇到的错误:
The domain name you provided already exists. (Service: AmazonApiGatewayV2; Status Code: 400; Error Code: BadRequestException; Request ID: ddba8c65-63de-4be4-9316-afd777e8b63f; Proxy: null)
因为我在 API Gateway 中配置了现有的自定义域。看起来它试图创建一个自定义域名,有没有办法将 HTTP API 实例映射到现有的自定义域?对于 REST API,我使用 AWS::ApiGateway::BasePathMapping 来映射此任务,但找不到 HTTP API 替代方案。
【问题讨论】:
-
你试过
AWS::ApiGatewayV2::ApiMapping吗? docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… -
感谢@acm 的评论,是的,我确实检查了 ApiMapping 文档,但看不到它的基本路径映射配置,它只有域名配置。在我当前的实现中,我有几个 api(公司 api、用户 api、分析 api 等)使用相同的域名但具有不同的基本路径映射,因此当通过 www.my-api.com/company-api 收到请求时/companies 它命中公司 api 网关实例,你知道我如何使用 ApiMapping 实现相同的结果吗?
-
您使用
ApiMappingKey来表示:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…。实际上,这就是 SAM 为BasePath所做的事情。您可以尝试看看它是否按您的预期工作吗? -
@acm 谢谢,这对我有用!将您的评论作为答案,我会接受它:)
-
很高兴听到它有帮助,将其添加为下面的答案。
标签: amazon-web-services aws-lambda aws-api-gateway aws-sam aws-http-api