amazon-web-services - AWS Cloudformation - 如何将 vpc 链接/NLB 附加到 api 网关中的方法?

标签 amazon-web-services aws-cloudformation aws-api-gateway amazon-vpc amazon-elb

这对后端来说是一件非常痛苦的事情,浪费了数小时,而且仍然无法弄清楚 AWS CloudFormation 的一行语法。

如果 AWS 人员可以稍微写得更好一点 - 只要多花一点注意力 - 这对开发人员来说会更容易。

我正在尝试使用 CloudFormation 来部署具有 VPC Link 和 NLB 的 API Gateway。目标是将所有请求代理传递到 NLB:

  ApiProxyMethod: 
    Type: AWS::ApiGateway::Method
    Properties: 
      RestApiId: !Ref ApiGatewayRestApi
      ResourceId: !Ref ApiProxyResource
      # AuthorizationScopes: # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-authorizationscopes
      AuthorizationType: COGNITO_USER_POOLS
      AuthorizerId: !Ref ApiAuthorizer
      HttpMethod: ANY
      OperationName: "ProxyAllRequests"
      Integration: 
        ConnectionType: VPC_LINK
        ConnectionId: !Ref ApiGatewayVpcLink
        IntegrationHttpMethod: ANY
        PassthroughBehavior: String
        Type: "VPC_LINK" # Member must satisfy enum value set: [HTTP, AWS_PROXY, HTTP_PROXY, AWS] 
        Uri: "http://NLB-myapp-internal-beta-12345.elb.ap-northeast-1.amazonaws.com/{proxy}"

但是,这会失败,并且会提示错误的 Type 值:成员必须满足枚举值集:[HTTP、AWS_PROXY、HTTP_PROXY、AWS]

现在,其中哪一个适用于 VPC_Link/NLB?

他们本可以在 AWS::ApiGateway::Method Integration 的文档中列出这些值,但他们选择不这样做。

最佳答案

为了将所有请求代理传递到 NLB,您需要将 Type 字段指定为 HTTP_PROXY

Here您可以找到有关集成参数的更多有用文档

  ApiProxyMethod: 
    Type: AWS::ApiGateway::Method
    Properties: 
      RestApiId: !Ref ApiGatewayRestApi
      ResourceId: !Ref ApiProxyResource
      AuthorizationType: COGNITO_USER_POOLS
      AuthorizerId: !Ref ApiAuthorizer
      HttpMethod: ANY
      OperationName: "ProxyAllRequests"
      Integration: 
        ConnectionType: VPC_LINK
        ConnectionId: !Ref ApiGatewayVpcLink
        IntegrationHttpMethod: ANY
        PassthroughBehavior: String
        Type: HTTP_PROXY
        Uri: "http://NLB-myapp-internal-beta-12345.elb.ap-northeast-1.amazonaws.com/{proxy}"

关于amazon-web-services - AWS Cloudformation - 如何将 vpc 链接/NLB 附加到 api 网关中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72014326/

相关文章:

python - 无服务器并将图像从 Lambda 端点上传到 S3

java - 使用 ResteasyClient 时 AWS API Gateway 出现 SSLHandShakeException

java - 一个简单的 AWS Lambda maven 项目超出了最大大小限制?

amazon-web-services - 如何在cfn模板的bucketpolicy中指定多个bucket?

amazon-web-services - 如何在CloudFormation模板中描述AWS Lambda函数测试事件?

list - 如何在 Cloudformation 中使用嵌套列表或附加到列表?

swift - 使用生成的 SDK 处理 AWS API Gateway 错误 (Swift)

amazon-web-services - 尝试使用标签名称作为过滤器在AWS cli中获取路由表ID

amazon-web-services - AWS SDK Go Lambda 单元测试

amazon-ec2 - Cloudformation - 如何在 Windows 2012 实例上安装 cfn 帮助程序脚本