AWS Lambda: ошибка инициализации модуля: ошибка при ошибке (собственная) в Object.fs.openSync (fs.js: 641: 18) - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть лямбда-динамик AWS DynammoDB, который запускается потоком DynamoDB. Вся реализация была сделана в JS с ClaudiJS. При развертывании лямбды с помощью команды claudia create проблем не возникает.

Проблема заключается в том, что при развертывании лямбда-функции возникает ошибка, когда та же функция развернута в конвейере GoCD с использованием докеризованного сервера сборки.

module initialization error: Error
at Error (native)
at Object.fs.openSync (fs.js:641:18)
at Object.fs.readFileSync (fs.js:509:33)
at Object.Module._extensions..js (module.js:578:20)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)

Теперь я потратил более 10 часов, и я понятия не имею, как решить эту проблему. Может кто-нибудь помочь мне?

Лямбда использует узел 6.10, а я использую babel для перехода к узлу 6.10. Пробовал с node:boron и ubuntu:16.04 изображениями как изображениями для Docker.

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Эта ошибка возникает у меня, когда мой серверный экземпляр собирается прочитать файл .json и извлечь из него объект json. поэтому я создал этот объект json внутри скрипта как объект json. тогда все было хорошо .. Я использовал базовую конфигурацию для webpack.config

0 голосов
/ 22 мая 2019

Позвольте мне добавить префикс, сказав, что у меня нет особого опыта работы с GoCD, но я столкнулся с этой ошибкой в ​​других контекстах.

Одной из возможных причин этой ошибки является проблема с правами доступа к файлам при развертывании кода на виртуальной машине.

Ошибка является общей ошибкой, которая означает, что лямбда-функция не может запуститься. Вы также можете получить эту ошибку внутри AWS. К сожалению, уровень журналирования, который вы видите с GoCD, кажется на том же уровне, что и AWS CloudWatch, что не очень хорошо и не говорит вам, что помешало запуску Lambda. Вам нужно больше журналов, чтобы определить точную причину в вашей ситуации.

Если вы столкнулись с этой ошибкой в ​​AWS, откройте функцию Lambda. В верхней части страницы AWS должен быть раскрывающийся список с кнопкой «Тест» рядом с ним.

AWS Lambda Test Dropdown

Откройте раскрывающийся список и выберите «Настроить тестовые события». Вам нужно будет создать этот тест, чтобы он соответствовал вашей конкретной лямбда-функции. Далее выберите новый тест и нажмите кнопку «Тест». Lambda покажет вам сообщение об успехе или неудаче с подробностями звонка.

В моем случае, мы запустили сценарий загрузки с помощью утилиты AWS sam на linux box, и права доступа к файлу были не совсем правильными (ошибка была что-то вроде «отказано в доступе, open» / var / task / index .js' ").

0 голосов
/ 21 мая 2018

Я потратил больше дня на эту проблему. В конце я перепробовал почти все возможные подходы и, наконец, решил проблему, переключившись на Serverless с ClaudiaJS . Для использования всеми я упомяну здесь подходы, которые я попробовал с результатами.

  1. Использовал ту же среду локального хоста внутри контейнера докера сборки, которая использовалась конвейером GoCD (та же версия узла, та же версия пряжи, Ubuntu 16:04). Но проблема все еще была.
  2. Удален Docker и настроен конвейер GoCD для запуска непосредственно на сервере сборки (Снова использовалась та же версия узла, та же версия пряжи, Ubuntu 16:04, которую я использовал на своем локальном компьютере). Но снова не было никакой блокировки, и проблема была там без каких-либо изменений.
  3. Зафиксировал папку node_modules и папку build моего локального компьютера в репозитории git и использовал те же самые node_modules и файлы сборки с конвейером GoCD без выполнения yarn и без передачи кода на сервер сборки. Но ничего не изменилось.

Наконец, я переключился на Serverless Framework. В первой попытке я использовал Serverless с babel и без webpack, хотя без сервера рекомендуется использовать webpack. Но снова та же самая проблема произошла, когда лямбда развернута с конвейером. Я изменил конфигурацию, чтобы использовать веб-пакет с сервером. Затем все проблемы были решены, и лямбда была успешно развернута. Это webpack.config.js, который я использовал в конце.

const path = require('path');

const slsw = require('serverless-webpack');
const nodeExternals = require('webpack-node-externals');

const build = {
  entry: slsw.lib.entries,
  resolve: {
    extensions: ['.js'],
  },
  target: 'node',
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: '[name].js',
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: [
          {
            loader: 'babel-loader',
          },
        ],
      },
    ],
  },
  mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
  optimization: {
    // Do not minimize the code.
    minimize: false,
  },
  performance: {
    // Turn off size warnings for entry points
    hints: false,
  },
  externals: [nodeExternals()],
};

module.exports = build;
...