Lamnda Python 3.8 Расшифровка GPG не может найти двоичный файл gpg
Я пытаюсь использовать лямбда-функцию для расшифровки файлов, поступающих на S3, я загружаю файлы без проблем, но когда я пытаюсь их расшифровать, gpg не может быть найден. Я пробовал использовать оба
python-gnupg
и
gnupg
но оба не смогли упомянуть, что gnupg недоступен в ОС. Ниже мой код для антивации GPG в python. Он хорошо работает с python 3.7, но если я обновлюсь до 3.8, Lambda будет использовать AMazon Linux 2, который не поставляется с gpg. Как cna заставить его работать с Python 3.8 в Lambda?
gpg = gnupg.GPG(gnupghome='/tmp')
Ошибка:
OSError: Unable to run gpg (gnupg) - it may not be available
Все примеры, которые я нашел, похоже, ничего лишнего не делают. Я упаковываю пакет python-gnugp и все другие пакеты python для своей функции
доступен ли двоичный файл gpg в Lambda? как я могу заставить это работать?
2 ответа
Вам необходимо связать двоичный файл gpg и его зависимости и доставить их в свой пакет. В своем пакете я помещаю их в папку с именем 'gpg', а затем, когда я использую gpg в своей лямбда-функции, я делаю следующее:
def lambda_handler(event, context):
old = os.environ.get("LD_LIBRARY_PATH")
if old:
os.environ["LD_LIBRARY_PATH"] = "./gpg" + ":" + old
else:
os.environ["LD_LIBRARY_PATH"] = "./gpg"
gpg = gnupg.GPG(gnupghome='/tmp', gpgbinary='./gpg/gpg2', verbose=False)
Поскольку существуют некоторые системные зависимости, необходимые для использования gpg в python, т.е.
gnupg
вам нужно будет создать свой лямбда-код, используя среду выполнения контейнера:
Использование docker позволит вам установить базовые системные зависимости, а также импортировать ваши ключи.
Dockerfile будет выглядеть примерно так:
FROM public.ecr.aws/lambda/python:3.8
RUN apt-get update && apt-get install gnupg
# copy handler file
COPY app.py <path-to-keys> ./
# Add keys to gpg
RUN gpg --import <path-to-private-key>
RUN gpg --import <path-to-public-key>
# Install dependencies and open port
RUN pip3 install -r requirements.txt
CMD ["app.lambda_handler"]
app.py
будет вашим лямбда-кодом. Не стесняйтесь копировать любые необходимые файлы, кроме основного обработчика лямбда.
После создания и загрузки образа контейнера. Теперь лямбда может использовать изображение (включая все его зависимости). Лямбда-код будет работать в контейнерной среде, содержащей как gnupg, так и ваши импортированные ключи.
Ресурсы:
https://docs.aws.amazon.com/lambda/latest/dg/python-image.htmlhttps://docs.aws.amazon.com/lambda/latest/dg/lambda-images.htmlhttps://docs.aws.amazon.com/lambda/latest/dg/lambda-images.html https: // medium.com/@julianespinel/how-to-use-python-gnupg-to-decrypt-a-file-into-a-docker-container-8c4fb05a0593