Я пытаюсь создать образ Docker для AWS SAM CLI , но при вызове любой функции выдается ошибка: «Невозможно импортировать модуль« index »».Я могу успешно запустить тот же тест за пределами Docker.Вы можете клонировать контрольный пример здесь или просмотреть файлы ниже.
Я уже попробовал следующее:
- Установка разрешений для файлов и родительской папки на 777 (или 755).
- Отключение SELinux в демоне Docker (или его включение).
- Запуск Docker в привилегированном режиме (или нет).
- Я получаю ту же ошибку, используястарый (SAM 0.22) Образ Docker .
- Локальное выполнение той же функции, как описано ниже (работает).
- Архивирование папки и запуск в AWS (работает).
Эти решения, вероятно, не применяются:
- Неправильный формат файла zip, включая родительскую папку (файл zip не используется).
- Проблемы, связанные с зависимостями NPM или node_modules (index.js не имеет зависимостей).
- Ошибки компиляции в index.js (синтаксис правильный, работает вне Docker и на AWS).
- Том монтируется на хост, как описано здесь .
Dockerfile
FROM alpine:3.6
WORKDIR /usr/src/app
RUN apk add --no-cache py-pip
RUN pip install --no-cache-dir aws-sam-cli
event.json
{}
index.js
exports.handler = function(event, context, callback) {
return callback(null, {
'body': 'Hello, World!'
});
};
template.yml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
HelloWorld:
Type: AWS::Serverless::Function
Properties:
FunctionName: HelloWorld
CodeUri: .
Handler: index.handler
Runtime: nodejs6.10
Timeout: 300
Для запускаSAM локально:
sam local invoke -t template.yml -e event.json HelloWorld
Запуск SAM локально успешен:
{"body":"Hello, World!"}
Для запуска SAM под Docker:
docker build -t hello .
docker run \
-v $(pwd):/usr/src/app \
-v /var/run/docker.sock:/var/run/docker.sock \
hello sam local invoke -t template.yml -e event.json HelloWorld
Ошибка запуска SAM под Docker:
Unable to import module 'index': Error
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
ОС: Ubuntu 16.04.1 x86_64
Версия Docker: 18.03.1-ce
Версия SAM CLI: 0.3.0