После создания и развертывания лямбда-функции с помощью aws sam cli я получаю отключенный сетевой сокет клиента в журналах - PullRequest
0 голосов
/ 24 апреля 2020

Обновление: Первоначально я использовал правильный обратный вызов (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, так что я думаю, что это как-то связано с отключением

1 Ответ

0 голосов
/ 24 апреля 2020

Основным решением моей проблемы было выполнение sam init снова, установка узла версии 12

...