我对编写 yaml 文件和部署它们有点陌生。我有一个根据我过去所做的事情构建的,但它产生了我不理解的结果,我相信当我使用 API 网关时,这会导致 CORS 错误(它使用 insomnia/postman 工作) .
这是 YAML 文件。
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: Storygraf backend API
Globals:
Function:
Timeout: 3
Resources:
ExpressApi:
Type: AWS::Serverless::Api
Properties:
StageName: prod
StageName: dev
ExpressLambdaFunction:
Type: AWS::Serverless::Function
Properties:
Environment:
Variables:
CodeUri: ./
Handler: lambda.handler
MemorySize: 512
Runtime: nodejs14.x
Timeout: 30
Events:
ProxyApiRoot:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /
Method: ANY
cors: true
ProxyApiGreedy:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /{proxy+}
Method: ANY
cors: true
我不太了解 ProxyAPIRoot 和 ProxyAPIGreedy 设置,但我已经在有或没有该部分的情况下运行了部署,并得到了相同的结果。
我还尝试在 API 网关上创建两个阶段 - 一个用于生产,一个用于开发,但我发现我不太了解这些阶段,并且我得到的结果有一个“dev” ”阶段(这是正确的)和“Stage”阶段,这是不正确的。
以下是生成的网关的资源和阶段。
为什么有“Stage”阶段而不是“prod”阶段? 什么是代理?它是否导致了我的 CORS 问题?
最佳答案
您必须为不同的环境创建单独的 SAM YAML 文件。您不能在同一个 YAML 文件中指定两个阶段。如果您想在一个 YAML 文件中部署完整的堆栈,我建议您切换到纯 Cloudformation 模板,这样您在定义资源时将拥有更大的灵活性。
您可以查看此link并创建多个阶段。
对于/{proxy+}资源,它将捕获所有请求,例如/products、/users/1。而/资源将仅响应对端点根 url 的请求,即仅/。
关于amazon-web-services - 从 cloudformation 在 API Gateway 中获得意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73437627/