Можно ли добавить пути к переменной среды PATH через serverless.yml? - PullRequest
0 голосов
/ 11 января 2019

Когда я создаю лямбда-слой AWS, все содержимое / модули моего zip-файла переходят на /opt/ при запуске лямбда-AWS. Это легко становится громоздким и разочаровывающим, потому что я должен использовать абсолютный импорт для всех моих лямбд. Пример:

import json
import os
import importlib.util
spec = importlib.util.spec_from_file_location("dynamodb_layer.customer", "/opt/dynamodb_layer/customer.py")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

def fetch(event, context):

    CustomerManager = module.CustomerManager
    customer_manager = CustomerManager()

    body = customer_manager.list_customers(event["queryStringParameters"]["acquirer"])

    response = {
        "statusCode": 200,
        "headers": {
            "Access-Control-Allow-Origin": "*"
        },
        "body": json.dumps(body)
    }

    return response

Так что мне было интересно, возможно ли добавить эти / opt / paths в переменную окружения PATH заранее через serverless.yml? Таким образом, я мог бы просто from dynamodb_layer.customer import CustomerManager вместо этого чудовищного уродства.

Ответы [ 3 ]

0 голосов
/ 12 января 2019

У меня есть лямбда-слой для Python3.6. Моя структура my_package.zip:

my_package.zip
 - python
   - lib
     - python3.6
       - site-packages
         - customer

Все зависимости находятся в папке build в корневом каталоге проекта: например build/python/lib/python3.6/site-packages/customer

Соответствующий раздел моего serverless.yml

layers:
  my_package:
    path: build             
    compatibleRuntimes:     
      - python3.6

В своей Lambda я импортирую свой пакет, как если бы я делал любой другой пакет: import customer

0 голосов
/ 12 января 2019

В zip-архиве модуль необходимо поместить в подкаталог python, чтобы при извлечении его в виде слоя в Lambda он находился в /opt/python. Таким образом, вы сможете напрямую импортировать свой модуль без необходимости importlib.

Это задокументировано здесь или посмотрите этот подробный пост блога от евангелиста разработчиков AWS для получения дополнительной информации.

0 голосов
/ 11 января 2019

Вы пытались установить вашу PYTHONPATH env var? https://stackoverflow.com/a/5944201/6529424

Вы пытались добавить в sys.path? https://stackoverflow.com/a/12257807/6529424

...