标签: aws-lambda-layers

无法导入模块“ lambda_function”:没有名为“ pandas”的模块

START RequestId:3d5691d9-ad79-4eed-a26c-5bc3f1a23a99版本:$ LATEST无法导入模块“ lambda_function”:没有名为“ pandas”的模块
END RequestId:3d5691d9-ad79-4eed-a26c-5bc3f1a23a99

我正在使用Windows 7 64位作为主机OS。

我想做的事

我只想在AWS-Lambda环境中使用熊猫。就像在Windows环境中使用它一样,我正在寻找Lambda的简单解决方案。

到目前为止我尝试过的

  • 在虚拟盒子上安装了Xubuntu。
  • myvenv在virtual-box上的Xubuntu中创建一个虚拟环境。
  • 然后我在中安装了pandas3.6 myvenv
  • 此后,我复制的文件夹的内容myvenv,在位置'/usr/local/lib/python3.6/site-packages/'我的主机操作系统。
  • 在主机操作系统(Windows 7)中,我创建了一个名为的文件夹packs,粘贴了的内容myvenv
  • 在主机OS(Windows 7)中创建了一个lambda_function.py脚本packs
  • 然后我拉上的文件夹packs使用7zip的软件并上传它zipLambda
  • 在Lambda中,lambda函数处理程序名称为lambda_handler()。该代码段如下所示:

将熊猫作为pd导入

def lambda_handler(event, context):

    dates = pd.date_range('2019001', periods=6)

    df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
    print(df)
Run Code Online (Sandbox Code Playgroud)
  • 该处理程序的名称为lambda_function.lambda_handler。我已授予lambda-role AWSLambdaFullAccess许可。
  • 超时设置为4分3秒。
  • 测试事件看起来像

    {“ key1”:“如果一切正常,将打印此内容”}

我尝试了以下解决方案:

  • 这里尝试了针对pandas和numpy的与Linux兼容的预编译二进制文件-真不走运。
  • 拉姆达,改Handler infopython_filename.function_name。对于我来说,这是lambda_function.lambda_handler - …

amazon-s3 python-3.x aws-lambda aws-lambda-layers

6
推荐指数
1
解决办法
1210
查看次数

AWS:使用“sam invoke local”时未找到层代码

我正在处理创建两个 lambda 函数的示例 AWS 项目。这些函数共享node_modules已放置在单独层中的公共代码(特别是AWS::Lambda::LayerVersion,而不是AWS::Serverless::LayerVersion)。我可以部署此代码,并且在测试部署版本时它可以正常工作。

但是,当我尝试使用 本地测试代码时sam invoke local,找不到公共代码。我收到此错误(我正在尝试使用 npm 包“axios”):

{"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'axios'\nRequire stack:\n- /var/task/get-timezone.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js"}

这是我的template.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS Sample

Globals:
  Function:
    Timeout: 30

Resources:
  SampleCommonLayer:
    Type: AWS::Lambda::LayerVersion
    Properties:
      CompatibleRuntimes:
        - nodejs12.x
      Content: nodejs.zip
      Description: Sample Common LayerVersion
      LayerName: SampleCommonLayer

  GetTimezoneFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: dist/get-timezone
      Handler: get-timezone.getTimezone
      Runtime: nodejs12.x
      Layers:
        - !Ref SampleCommonLayer
      Events:
        GetTimezone:
          Type: Api
          Properties:
            Path: /get-timezone
            Method: …
Run Code Online (Sandbox Code Playgroud)

javascript node.js typescript aws-lambda aws-lambda-layers

6
推荐指数
1
解决办法
1746
查看次数

AWS:删除 lambda 层仍保留层版本历史记录

我正在使用 aws cli 部署 AWS Lambda 层:

aws lambda publish-layer-version --layer-name my_layer --zip-file fileb://my_layer.zip
Run Code Online (Sandbox Code Playgroud)

我删除它使用

VERSION=$(aws lambda list-layer-versions --layer-name my_layer | jq '.LayerVersions[0].Version'
aws lambda delete-layer-version --layer-name my_layer --version-number $VERSION
Run Code Online (Sandbox Code Playgroud)

删除成功,确保不存在其他版本的图层。

aws lambda list-layer-versions --layer-name my_layer
>
{
    "LayerVersions": []
}
Run Code Online (Sandbox Code Playgroud)

在下一次发布图层时,它仍然保留以前版本的历史记录。从我读到的如果不存在图层版本并且不存在参考,版本历史应该消失,但我没有看到。有人有解决方案来硬删除图层及其版本吗?

amazon-web-services aws-cli aws-lambda aws-lambda-layers

6
推荐指数
2
解决办法
1547
查看次数

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

当我创建 AWS Lambda 层时,我的 zip 文件的所有内容/模块都会/opt/在 AWS Lambda 执行时转到。这很容易变得麻烦和令人沮丧,因为我必须对我所有的 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
Run Code Online (Sandbox Code Playgroud)

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

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

5
推荐指数
1
解决办法
1468
查看次数

最新的 Lambda 层 ARN

我有一个不断更新的 lambda 层。这个 lambda 层有多个版本。如何使用 aws cli 找到最新版本的 lambda 层 ARN?

amazon-web-services aws-cli aws-lambda aws-lambda-layers

5
推荐指数
2
解决办法
3252
查看次数

AWS Lambda 层没有执行权限

我为包含 bin 可执行文件(texlive)的 Python 运行时(3.6 和 3.7 兼容)创建了一个 lambda lambda

但是当我尝试通过subprocess.run它执行它时,它说它没有执行权限!

我如何才能使该层具有执行权限?我在 Windows 10 上压缩了层文件,所以我不确定如何添加 Linux 执行权限。

此外,据我所知,当您解压缩文件时,它会“重置”权限,因此如果 AWS 在解压缩我的图层时没有设置执行权限,我该怎么办?

顺便说一句,我正在通过 aws 控制台上传我的层

amazon-web-services aws-lambda aws-lambda-layers

5
推荐指数
1
解决办法
567
查看次数

调用 API“找不到模块”时出现 AWS lambda 层错误

我尝试使用无服务器 Lambda 层,我看过有关它的教程,但结果出现错误“找不到模块......”

service: aws-nodejs 

package:
  exclude:
    - .gitignore
    - package.json
    - .git/**

provider:
  name: aws
  profile: sandbox
  runtime: nodejs12.x

layers:
  testLayer:
    path: testLayer
    compatibleRuntimes:
      - nodejs12.x
    allowedAccounts:
      - '*'

functions:
  hello:
    handler: handler.hello
    layers:
      -  arn:aws:lambda:us-east-1:*:layer:testLayer:15
    events:
      - http:
          path: test
          method: get
          cors: true
Run Code Online (Sandbox Code Playgroud)

当我部署它时,我的终端中没有任何错误,在 AWS 上,我看到了我的层,当我下载它时,我有我的 package.json 和 moment 依赖项,以及带有 moment 的 node_modules 文件夹

我的 handler.js 看起来像这样:

'use strict';
module.exports.hello = async (event, context) => {
    const moment = require('moment')
    const a = moment('2016-01-01')
  return {
    statusCode: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-lambda-layers

5
推荐指数
1
解决办法
4246
查看次数

如何使用 selenium 3 和 firefox 创建 lambda 层?

我有一个可用的 docker 容器,想在 Firefox 上迁移到 selenium 3.141 的 lambda 层。工作容器的 Dockerfile 是:

FROM python:3.7-slim

RUN /usr/local/bin/python -m pip install --upgrade pip
RUN pip install selenium==3.141.0

RUN apt-get update
RUN apt-get -y install wget bzip2 firefox-esr #68.12.0esr
WORKDIR /tmp

RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz

RUN tar -zxf geckodriver-v0.26.0-linux64.tar.gz -C /usr/local/bin/
Run Code Online (Sandbox Code Playgroud)

当我在此容器中执行以下操作时,Firefox会创建一个对象。

from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options   import Options
opts = Options()
opts.headless = True
Firefox(options=opts, service_log_path='/home/geckodriver.log')
Run Code Online (Sandbox Code Playgroud)

对于 lambda 层,我使用amazonlinux图像进行本地测试。在 aws 上,我提供的一个 zip 文件将被提取到/opt,所以我想把所有东西都放进去/opt,看看它是否工作。

我的 …

python firefox selenium selenium-webdriver aws-lambda-layers

5
推荐指数
0
解决办法
1239
查看次数

Runtime.ImportModuleError:无法导入模块“lambda_function”:没有名为“httplib2”的模块

我已经安装了所有这些库:

google-api-core 1.22.1
google-api-python-client 1.10.0
google-auth 1.20.1
google-auth-httplib2 0.0.4
google-auth-oauthlib 0.4.1
google-cloud 0.34.0
google-cloud-core 1.4.1
google-cloud-storage 1.31.0
google-crc32c 1.0.0
google-resumable-media 1.0.0
googleapis-common-protos 1.52.0
httplib2 0.18.1
Run Code Online (Sandbox Code Playgroud)

到一个文件夹 --> 压缩它 --> 上传到 AWS lambda 的层。然而,当我[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'httplib2'在本地运行我的 pyhon 文件且此类库位于环境中时,我不断地思考,在调用import httplib2. 注意:所有其他库都适用于 lambda,因此我的上传过程应该是正确的。

python google-api amazon-web-services aws-lambda aws-lambda-layers

5
推荐指数
1
解决办法
8577
查看次数

AWS Lambda 层是否可以拦截 Lambda 函数处理程序,而无需函数/处理程序调用该层?

我正在研究 AWS Lambda Layers 的功能,并尝试确认该层是否可以在 Lambda 函数与该层没有任何知识/交互的情况下添加行为。

我从文档中了解到,层实际上是一个解压到 Lambda 实例的 .zip 文件,主要用于交付资源,而不需要将这些资源直接与 Lambda 函数/处理程序打包。例如,使用层部署运行时(可执行文件)或共享资源(例如二进制依赖项)已有详细记录 - 在这两种情况下,函数本身都会调用或引用层内容。

我的问题是,一个层是否可以完全独立地向 Lambda 函数添​​加行为或围绕 Lambda 函数添​​加行为。例如,假设我想要一个简单地回显“Hello World”的新层 - 是否可以部署一个对现有函数执行此操作的层,而不需要该函数对该层有任何引用?

amazon-web-services aws-lambda aws-lambda-layers

5
推荐指数
1
解决办法
1417
查看次数