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

Kid*_*g_C 0 amazon-web-services amazon-elb aws-cloudformation amazon-vpc aws-api-gateway

这对后端来说是一件非常痛苦的事情,浪费了好几个小时,而且仍然无法弄清楚 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}"
Run Code Online (Sandbox Code Playgroud)

然而,这失败了,它抱怨错误的Type值:Member must satisfy enum value set: [HTTP, AWS_PROXY, HTTP_PROXY, AWS]

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

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

Boh*_*sov 5

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

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

  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}"
Run Code Online (Sandbox Code Playgroud)