gpt4 book ai didi

amazon-web-services - CloudFormation::APIGateway 中的 AWS 和 AWS_PROXY 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 02:35:30 25 4
gpt4 key购买 nike

在具有 AWS::ApiGateway::Method - Integration:Type 和 Lambda 后端的 CloudFormation 模板中,AWSAWS_PROXY 有什么区别?我刚才不断收到 502 错误,并意识到我需要使用格式非常特殊的 JSON 响应进行响应。当我从控制台创建 API 网关时,我从未遇到过这个问题。它现在确实有效,但我想知道潜在的差异,以便我可以学习。

这是 CF 模板的部分:

VisitorCounterAPIGatewayRootMethod:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: NONE
HttpMethod: GET
Integration:
IntegrationHttpMethod: POST
Type: AWS_PROXY #THIS is my question. AWS or AWS_PROXY?
Uri: !Sub
- arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${lambdaArn}/invocations
- lambdaArn: !GetAtt VisitorCountLambda.Arn
ResourceId: !GetAtt VisitorCounterAPIGateway.RootResourceId
RestApiId: !Ref VisitorCounterAPIGateway

这是我的 Lambda 函数 (Python3.7) 的响应代码:

apiResponse = {
"isBase64Encoded": False,
"statusCode": 200,
"body": json.dumps({
"visitorCount": int(float(response["Attributes"]["amount"]))
})
}

谢谢。

最佳答案

AWSAWS_PROXY 是 API Gateway 中的两种集成类型。

  • AWS_PROXY 仅与 lambda 一起使用,这是通过 API Gateway 使用 lambda 的最简单方法。它means :

For HTTP proxy integration, API Gateway passes the entire request and response between the frontend and an HTTP backend. For Lambda proxy integration, API Gateway sends the entire request as input to a backend Lambda function. API Gateway then transforms the Lambda function output to a frontend HTTP response.

  • AWS 可与任何 AWS 服务一起使用,包括 lambda。它的设置比较复杂,通常在您想要将 API 网关与 SQS 或 Kinesis 或其他 AWS 服务集成时使用:

This type of integration lets an API expose AWS service actions. In AWS integration, you must configure both the integration request and integration response and set up necessary data mappings from the method request to the integration request, and from the integration response to the method response.

所以回答你的问题:

Type: AWS_PROXY #THIS is my question. AWS or AWS_PROXY?

如果可以,请使用AWS_PROXY。这是最精简、最容易工作和设置的 lambda 集成形式。无论如何,它只适用于 lambda。由于整个响应和回复只是通过 API 网关传递,因此您必须确保 lambda 向调用者返回正确的 header 和状态代码

AWS 与其他服务(例如 SQS)结合使用。您仍然可以使用 lambda,但它需要更多设置。但好处是您可以更好地控制传递到 lambda 的内容,以及如何将响应传递给调用者。如果您有现有的 lambda 并且无法更改它,通常您会将 AWS 与 lambda 一起使用。通过这种方式,在 AWS 集成中,您可以塑造和塑造从调用者到 lambda 的输入和输出,而无需更改 lambda。

CloudFormation 中 AWS 和 AWS_PROXY 集成的简短示例,显示当您使用 AWS 集成时,您可以定义额外参数 (myParam)可以传递给你的 lambda:

AWS_PROXY

MyApiResourceMethod:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: None
HttpMethod: GET
Integration:
IntegrationHttpMethod: POST
Type: AWS_PROXY
Uri: !Sub >-
arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaArn1}/invocations
MethodResponses:
- ResponseModels: {"application/json": "Empty"}
StatusCode: 200
ResourceId: !Ref MyResource
RestApiId: !Ref MyRestApi

AWS

MyApiResourceMethod:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: None
#AuthorizerId: String
HttpMethod: GET
Integration:
IntegrationHttpMethod: POST
- ResponseTemplates:
application/json: ""
StatusCode: 200
PassthroughBehavior: WHEN_NO_TEMPLATES
RequestTemplates:
application/json: |
{
"myParam": "$input.params('myParam')"
}
Type: AWS
Uri: !Sub >-
arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaArn2}/invocations
MethodResponses:
- ResponseModels: {"application/json": "Empty"}
StatusCode: 200
ResourceId: !Ref MyResource
RestApiId: !Ref MyRestApi

关于amazon-web-services - CloudFormation::APIGateway 中的 AWS 和 AWS_PROXY 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62164162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com