python - 是否可以通过serverless.yml向PATH环境变量添加路径?

标签 python amazon-web-services aws-lambda aws-lambda-layers

当我创建一个 AWS Lambda 层时,我的 zip 文件的所有内容/模块都会在 AWS Lambda 执行时转到 /opt/。这很容易变得麻烦和令人沮丧,因为我必须在我所有的 lambda 上使用绝对导入。示例:

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

所以我想知道,是否可以通过 serverless.yml 预先将这些/opt/paths 添加到 PATH 环境变量中?这样,我就可以from dynamodb_layer.customer import CustomerManager,而不是那种怪异的丑陋。

最佳答案

我有 Python3.6 运行时的 Lambda 层。我的 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 中,我像导入任何其他包一样导入我的包: 导入客户

关于python - 是否可以通过serverless.yml向PATH环境变量添加路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54152348/

相关文章:

python - 用 beautifulsoup 克隆元素

amazon-web-services - 在 AWS Cloudwatch Logs Insights 中处理单引号

amazon-web-services - 当 Auto Scaling 启动新实例时自动更新 Route 53

python - 将像素指定为 0 和 1

python - Tensorflow:如何使 tf.unique 的返回值与输入的大小相同

python - 大文件中的字符串插入

amazon-web-services - 空的 Cloudformation Stack 会花钱吗?

python - 如何在 AWS Lambda 上对没有 MD5 校验和的 Google Cloud Storage 上传 (PUT) 的 URL 进行签名

java - JsonReaderException ,当从 Android 调用 AWS lambda 函数时

javascript - 如何在 Javascript 中调用 AWS API Gateway?