«Сетевой сокет клиента отключен до того, как было установлено безопасное соединение TLS» при запуске AWS SQS из Lambda

#aws-lambda #amazon-sqs #amazon-cloudwatch #aws-step-functions

#aws-lambda #amazon-sqs #amazon-cloudwatch #aws-step-функции

Вопрос:

У меня есть правило событий Cloudwatch, которое периодически вызывает AWS Lambda. Этот лямбда-код пытается извлечь сообщение из очереди AWS SQS с помощью метода ReceiveMessage SDK. Затем, если появляется сообщение, оно вызывает функцию AWS Step. Этот процесс работает при локальном вызове. Однако, когда Cloudwatch запускает его, я получаю сообщение об ошибке Client network socket disconnected before secure TLS connection was established . Смотрите мой код ниже:

 module.exports.triggerStepFunction = () => {
  let sqs = new AWS.SQS({apiVersion: '2012-11-05'})

  let params = {
    QueueUrl: 'my_endpoint',
    AttributeNames: [
      'All'
    ],
    MessageAttributeNames: [
      'All'
    ],
    MaxNumberOfMessages: 1,
    ReceiveRequestAttemptId: Date.now().toString(),
    VisibilityTimeout: 10,
    WaitTimeSeconds: 6
  }
  sqs.receiveMessage(params, function(err, receiveMessageData) {
    if (err) {
      return err
    } else {
      return receiveMessageData
    }
  })
}
  

Что происходит и как мне это исправить?

Ответ №1:

Похоже, решение состояло в том, чтобы создать новую роль IAM с надлежащими разрешениями и прикрепить ее к lambda. Я использую бессерверный, поэтому я добавил следующее в свой serverless.yml файл и прикрепил его к lambda:

 resources:
  Resources:
    SQSLambdaRole: 
      Type: AWS::IAM::Role
      Properties: 
        AssumeRolePolicyDocument: 
          Version: '2012-10-17'
          Statement: 
          - Effect: Allow
            Principal: 
              Service: lambda.amazonaws.com
            Action: 
            - sts:AssumeRole
        Path: '/'
        Policies: 
        - PolicyName: logs
          PolicyDocument: 
            Statement: 
            - Effect: Allow
              Action: 
              - logs:CreateLogGroup
              - logs:CreateLogStream
              - logs:PutLogEvents
              Resource: arn:aws:logs:*:*:*
        - PolicyName: sqs
          PolicyDocument: 
            Statement: 
            - Effect: Allow
              Action: 
              - sqs:ReceiveMessage
              - sqs:SendMessage
              - sqs:DeleteMessage
              Resource: <MY_SQS_RESOURCE_ARN>