【发布时间】:2020-12-16 06:21:44
【问题描述】:
我有一个带有 AWS API Gateway 和 Go Lambda 函数的 API。
我有一个问题,每次我部署新版本的 SAM 时,它都会覆盖 API 网关上的网关响应。
我尝试将其放入 SAM 模板,但它似乎不起作用或我没有正确执行。
这是 SAM 模板:
Resources:
MyGateway:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
Auth:
DefaultAuthorizer: AdminTokenAuthorizer
AddDefaultAuthorizerToCorsPreflight: False
Authorizers:
AdminTokenAuthorizer:
FunctionArn: !GetAtt AdminAuthorizerFunction.Arn
DeviceTokenAuthorizer:
FunctionArn: !GetAtt DeviceAuthorizerFunction.Arn
GatewayResponseDefault4XX:
Type: 'AWS::ApiGateway::GatewayResponse'
Properties:
ResponseParameters:
gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
ResponseType: DEFAULT_4XX
RestApiId: !Ref MyGateway
GatewayResponseDefaultUnauthorized:
Type: 'AWS::ApiGateway::GatewayResponse'
Properties:
ResponseParameters:
gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
ResponseType: UNAUTHORIZED
RestApiId: !Ref MyGateway
GatewayResponseDefault5XX:
Type: 'AWS::ApiGateway::GatewayResponse'
Properties:
ResponseParameters:
gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
ResponseType: DEFAULT_5XX
RestApiId: !Ref MyGateway
这是 AWS 控制台上响应的屏幕截图:
如您所见,DEFAULT_4XX、UNAUTHORIZED 和 DEFAULT_5XX 的标题为空。
我注意到当我在模板中重命名 GatewayResponse 资源时,例如,如果我将 GatewayResponseDefault4XX 重命名为 GatewayResponseDefault4XXRename,它将为 DEFAULT_4XX 正确设置标头,但如果我更改其他内容并再次部署它而不更改 GatewayResponses 资源,它将从所有网关响应。
【问题讨论】:
标签: amazon-web-services aws-lambda aws-api-gateway aws-sam aws-sam-cli