Я поддерживаю AWS Поддержка, но они еще не решили мою проблему.
Моя настройка AWS API GW v2 -> AWS Lambda (nodejs12 express)
Я могу работать с моим API с помощью Почтальона, я получаю правильные заголовки и ответы от каждого вызова с помощью методов GET, PUT, POST, DELETE, кроме моего вызова OPTIONS.
Вызов параметров возвращает это:
Мой код имеет очень простой вывод журнала в начале (в целях отладки):
exports.handler = (event, context) => {
console.log('httpMethod', event.httpMethod)
return awsServerlessExpress.proxy(server, event, context, 'PROMISE').promise.then(data => {
console.log('returning data \n', data)
return data
})
}
Я вызываю свою лямбда-службу локально, используя это:
sam local invoke "Test" -e event.json
Это вывод терминала:
Invoking index.handler (nodejs10.x)
Fetching lambci/lambda:nodejs10.x Docker container image......
Mounting /Users/simon/Git/server-service as /var/task:ro,delegated inside runtime container
START RequestId: 5c30f5a3-8006-1ba2-6e99-0c96ba3e7c76 Version: $LATEST
2020-04-14T18:00:24.398Z 5c30f5a3-8006-1ba2-6e99-0c96ba3e7c76 INFO httpMethod OPTIONS
2020-04-14T18:00:24.421Z 5c30f5a3-8006-1ba2-6e99-0c96ba3e7c76 INFO returning data
{ statusCode: 200,
body: 'PUT,POST,GET,HEAD,DELETE',
headers:
{ 'x-powered-by': 'Express',
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'false',
'access-control-allow-methods': '*',
'access-control-allow-headers':
'Content-Type, Authorization, cache-control, X-Frame-Options, If-Modified-Since',
allow: 'PUT,POST,GET,HEAD,DELETE',
'content-type': 'text/html; charset=utf-8',
'content-length': '24',
etag: 'W/"18-NOIbTUNpYRs55uZrUoLiPa8oj0c"',
date: 'Tue, 14 Apr 2020 18:00:24 GMT',
connection: 'close' },
isBase64Encoded: false }
Поэтому я предполагаю, что моя интеграция API GW удаляет эти заголовки.
Это мой API GW Ресурс:
ApiGatewayV2:
Type: AWS::ApiGatewayV2::Api
Properties:
Name: Lambda Proxy
Description: "Lambda Proxy Manual API"
ProtocolType: HTTP
CorsConfiguration:
AllowCredentials: false
AllowHeaders:
- "Authorization"
- "*"
AllowMethods:
- "*"
AllowOrigins:
- "*"
ExposeHeaders:
- "*"
MaxAge: 300
Мой клиент показывает эту ошибку:
РЕДАКТИРОВАТЬ:
I в нескольких местах прочитайте, что если я настрою CORS на своем ресурсе AWS, он ответит на них, не обращаясь к лямбде, однако он все равно будет лямбда?
Я также удалил конфигурацию CORS из своего ресурса API GW:
ApiGatewayV2:
Type: AWS::ApiGatewayV2::Api
Properties:
Name: Lambda Proxy
Description: "Lambda Proxy Manual API"
ProtocolType: HTTP
В надежде, что моя лямбда должна вместо этого доставлять заголовки. Не повезло.