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

Другие вопросы по тегам