Контейнерная AWS Lambda: обработчик python не может получить доступ к /home/app (но он МОЖЕТ получить доступ к /tmp)

#docker #aws-lambda #file-permissions

#docker #aws-lambda #файл-разрешения

Вопрос:

Я развертываю контейнер Docker в AWS Lambda, следуя https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/

Я сталкиваюсь с каким-то сбоем в разрешениях на доступ к файлам.

Если образ Docker развернут на AWS, мой обработчик python не может получить доступ /home/app (но он МОЖЕТ получить доступ /tmp ).

На моем локальном компьютере оба пути работают нормально.

Dockerfile

 ENTRYPOINT [ "/entry.sh" ]
CMD [ "app.handler" ]
 

entry.sh

 #!/bin/sh
echo foo > /home/app/f
exec python -m awslambdaric $1
 

app.py

 def handler(event, context):
    with open('/home/app/f', 'r') as file:
        data = file.read()
    return { "response" : data }
 

Развернутый в AWS Lambda, он возвращает:

 {
  "errorMessage": "[Errno 2] No such file or directory: '/home/app/f'",
  "errorType": "FileNotFoundError",
  "stackTrace": [
    "  File "/home/app/app.py", line 25, in handlern    with open('/home/app/f', 'r') as file:n"
  ]
}
 

Изменение /home/app на /tmp исправление.

Есть ли какой-либо способ снять это ограничение?

 RUN mkdir -p /home/app
RUN chmod a rwx /home/app
 

^ chmod это не исправляет.

PS Интересно, должен ли я подать это как ошибку. Как правильно сообщить об этом инженеру Amazon, ответственному за контейнерные лямбды?

Ответ №1:

Традиционно у Lambda всегда был только каталог /tmp (512 мб) для операций rw. Когда вы запускаете код на своем локальном хосте, у вас есть разрешения на использование каталога /home/app .