在 / 使用 CF 为 API Gateway 创建方法
Posted
技术标签:
【中文标题】在 / 使用 CF 为 API Gateway 创建方法【英文标题】:Create methods under / using CF for API Gateway 【发布时间】:2019-09-22 02:58:59 【问题描述】:如何使用 CF 在 API Gateway 的根/文件夹下创建方法?例如,我有一个如下所示的网关:
/ 选项 发布
但是,当尝试使用 CF 执行此操作时,我得到: 资源的路径部分只允许在开头和结尾使用 a-zA-Z0-9._- 和花括号。所以我的 PathPart 是有问题的线。
ApiGate:
Type: AWS::ApiGateway::Resource
Properties:
ParentId: !GetAtt
- ApiGateApi
- RootResourceId
PathPart: '/'
RestApiId: !Ref ApiGateApi
我可以将 PathPart 更改为其他内容,但随后它将它创建为 / 下的子对象,这是我不想要的。
【问题讨论】:
空字符串?或者
?
不幸的是,我已经尝试了这两种方法。大括号导致:属性 PathPart 的值必须是字符串类型。当我使用空字符串时:[/Resources/ApiGatewayResource/Type/PathPart/] 模板中不允许使用“null”值。
【参考方案1】:
将以下内容添加到我的AWS::ApiGateway::Method
后,结果现在可以使用了。
MyMethodOPTIONS:
Type: 'AWS::ApiGateway::Method'
Properties:
ResourceId: !GetAtt MyRestApi.RootResourceId
这是我模板中的更多上下文:
ApiGatewayMethodOPTIONS:
Type: 'AWS::ApiGateway::Method'
Properties:
ResourceId: !GetAtt ApiGatewayRestApi.RootResourceId
RestApiId: !Ref ApiGatewayRestApi
AuthorizationType: NONE
HttpMethod: OPTIONS
Integration:
Type: MOCK
IntegrationResponses:
- ResponseParameters:
method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
method.response.header.Access-Control-Allow-Methods: "'POST,OPTIONS'"
method.response.header.Access-Control-Allow-Origin: "'*'"
ResponseTemplates:
application/json: ''
StatusCode: '200'
PassthroughBehavior: NEVER
RequestTemplates:
application/json: '"statusCode": 200'
MethodResponses:
- ResponseModels:
application/json: Empty
ResponseParameters:
method.response.header.Access-Control-Allow-Headers: true
method.response.header.Access-Control-Allow-Methods: true
method.response.header.Access-Control-Allow-Origin: true
StatusCode: '200'
ApiGatewayRestApi:
Type: AWS::ApiGateway::RestApi
Properties:
ApiKeySourceType: HEADER
EndpointConfiguration:
Types:
- REGIONAL
Name: SearchAPI
【讨论】:
您能否添加更多细节来解决这个问题?可能是周围 CloudFormation 内容的更多上下文。 我在原始解决方案中添加了更多模板【参考方案2】:这解决了我的问题,在我的情况下,我需要两种方法:
1.将响应对root的请求,例如https://<api-url>/prod
或 https://<api-url>/prod/
。这将使用 API Gateway 的 RootResourceId:
ResourceId: !GetAtt myApiGateway.RootResourceId
-
这将响应在
https://<api-url>/prod/
下设置的任何请求。可能是petstore
,或者如果使用proxy+
,那么后端工作负载将尝试解析请求。它将引用模板中定义的资源类型:
ResourceId: !Ref myResource
【讨论】:
以上是关于在 / 使用 CF 为 API Gateway 创建方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 BOTO3 为 AWS Api Gateway 自动化 CORS
如何使用 AWS Cloudformer 为现有 API Gateway 创建云形成模板?
在 API Gateway 中设置阶段 » 为 REST API 部署设置阶段变量Stage variables
是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?