amazon-web-services - 从 cloudformation 在 API Gateway 中获得意外结果

标签 amazon-web-services yaml aws-cloudformation aws-api-gateway api-gateway

我对编写 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 问题?

enter image description here

enter image description here

最佳答案

您必须为不同的环境创建单独的 SAM YAML 文件。您不能在同一个 YAML 文件中指定两个阶段。如果您想在一个 YAML 文件中部署完整的堆栈,我建议您切换到纯 Cloudformation 模板,这样您在定义资源时将拥有更大的灵活性。

您可以查看此link并创建多个阶段。

对于/{proxy+}资源,它将捕获所有请求,例如/products、/users/1。而/资源将仅响应对端点根 url 的请求,即仅/。

关于amazon-web-services - 从 cloudformation 在 API Gateway 中获得意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73437627/

相关文章:

bash - 用 bash 替换 yml 中一行的值

ruby-on-rails - 如何在 rails application.rb 中加载多个 YAML 文件

javascript - Gatsby - 在解析/显示 YAML 文件内容时是否可以保留换行符?

java - 创建标签失败并出现错误 java.lang.NoSuchMethodError

amazon-web-services - API Gateway 中 VPC-Link HTTPS 端点的匹配证书

dns - 您何时会选择 Route 53 别名而不是 CNAME?

amazon-web-services - 无法解析要使用的 AWS 帐户。它必须在定义 CDK 堆栈时配置,或者通过环境配置

json - 模板正文包含无效的 JSON : invalid character

amazon-web-services - 向同一账户中的 iam 用户授予 aws iam 角色权限

amazon-web-services - 如何使用 Cloudformation 模板自动缩放 dynamodb 二级索引?