Обновление: Первоначально я использовал правильный обратный вызов (null, response), но мне нужно было также выполнить sam init снова для нового проекта, установить другую версию узла с помощью nvm.
У меня есть следующая лямбда-функция это создает новый элемент в datocms, используя там API, я получил его для локальной работы, используя aws sam cli.
Я настроил его на получение запросов на получение или публикацию, в любом случае он отправляет фиктивный контент в dato. В запросе Get, если я просматриваю его в браузере, я получаю тест сообщения, который я написал, однако, если я sam build
и sam deploy
, он говорит, что все правильно развернуто в моей консоли, однако, когда я go посещаю http получить URL в лямбде в консоли aws. Я получаю сообщение о внутренней ошибке сервера.
Вот моя функция
// const axios = require('axios')
// const url = 'http://checkip.amazonaws.com/';
const SiteClient = require('datocms-client').SiteClient;
const client = new SiteClient('codegoeshere');
let response;
/**
*
* Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
* @param {Object} event - API Gateway Lambda Proxy Input Format
*
* Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html
* @param {Object} context
*
* Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
* @returns {Object} object - API Gateway Lambda Proxy Output Format
*
*/
exports.lambdaHandler = async (event, context, callback) => {
//console.log(JSON.parse(event.body).data.object.amount);
console.log(SiteClient);
client.items.create({
title: 'Post Request From Stripe',
itemType: '223937'
})
.then((item) => {
console.log(item);
})
.catch((error) => {
console.error(error);
});
try {
// const ret = await axios(url);
response = {
'statusCode': 200,
"body" : {"message":"test"}
}
} catch (err) {
console.log(err);
return err;
}
callback(null, response);
};
Вот мой template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
test
Sample SAM Template for test
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs12.x
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: get
HelloWorld1:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: post
Outputs:
# ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
# Find out more about other implicit resources you can reference within SAM
# https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
HelloWorldApi:
Description: "API Gateway endpoint URL for Prod stage for Hello World function"
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
HelloWorldFunction:
Description: "Hello World Lambda Function ARN"
Value: !GetAtt HelloWorldFunction.Arn
HelloWorldFunctionIamRole:
Description: "Implicit IAM Role created for Hello World function"
Value: !GetAtt HelloWorldFunctionRole.Arn
Это мои журналы, вы можете видеть, что это консоль, регистрирующая переменную siteClient и он возвращает функцию, поэтому кажется, что lamda запускается, но client.items.create не запускается и ничего не возвращается из функции. Если вызов данных был неудачным, он должен был войти в консоль, и я должен увидеть это, поэтому я не уверен, что происходит.
START RequestId: 060bef82-7b0d-46d0-82c9-515e41ff8945 Version: $LATEST
2020-04-24T15:08:27.414Z 060bef82-7b0d-46d0-82c9-515e41ff8945 INFO [Function: Client]
END RequestId: 060bef82-7b0d-46d0-82c9-515e41ff8945
REPORT RequestId: 060bef82-7b0d-46d0-82c9-515e41ff8945 Duration: 3001.87 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 104 MB Init Duration: 572.60 ms
2020-04-24T15:08:30.396Z 060bef82-7b0d-46d0-82c9-515e41ff8945 Task timed out after 3.00 seconds
ОБНОВЛЕНИЕ:
Так что я смог просто сделать новый sam init, и на этот раз я сделал другое: я удостоверился, что у меня установлен узел 12 локально, когда я установил пакеты в лямбду, удалил обратный вызов и только что вернулся. Сообщение работает сейчас. Единственная ошибка, которую я получаю сейчас, это
request to https://site-api.datocms.com/docs/site-api-hyperschema.json failed, reason: Client network socket disconnected before secure TLS connection was established
Я помню, как смотрел видео на aws лямбда-то о настройке времени, но не уверен, что, и если это относится к этому .
Я использовал return response
вместо обратного вызова в новом проекте sam init, так что я думаю, что это как-то связано с отключением