GVKun编程网logo

在pom中添加selenium依赖项后,AWS Lambda Jar无法压缩(pom添加依赖报错)

19

针对在pom中添加selenium依赖项后,AWSLambdaJar无法压缩和pom添加依赖报错这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展AWSLambdaJava:Lambda无法解

针对在pom中添加selenium依赖项后,AWS Lambda Jar无法压缩pom添加依赖报错这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展AWS Lambda Java:Lambda无法解压缩文件、AWS Lambda-无法导入模块lambda函数、AWS Lambda-无法导入模块“ lambda_function”、AWS lambda的aws-lambda-node_module错误,依赖关系的最佳实践是什么?等相关知识,希望可以帮助到你。

本文目录一览:

在pom中添加selenium依赖项后,AWS Lambda Jar无法压缩(pom添加依赖报错)

在pom中添加selenium依赖项后,AWS Lambda Jar无法压缩(pom添加依赖报错)

这是一个奇怪的错误。将selenium依赖项添加到我的maven项目的pom中并将其上传到lambda之后,它说无法解压缩文件。但是,在删除依赖项之后,lambda可以很好地解压缩文件(但是它附带了后来找不到的类)。我尝试过一个接一个地删除依赖项,但是每一个都会触发错误。

关于如何解决这个问题的任何想法?

找不到类错误

org/openqa/selenium/WebDriver: java.lang.NoClassDefFoundErrorjava.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver

Lambda无法压缩错误

Calling the invoke API action failed with this message: Lambda was not able to unzip the file

导致问题的依赖项

    <dependency>        <groupId>org.seleniumhq.webdriver</groupId>        <artifactId>webdriver-common</artifactId>        <version>0.9.7376</version>    </dependency>    <dependency>        <groupId>org.seleniumhq.selenium</groupId>        <artifactId>selenium-chrome-driver</artifactId>        <version>3.141.59</version>    </dependency>    <dependency>        <groupId>org.seleniumhq.selenium</groupId>        <artifactId>selenium-java</artifactId>        <version>3.141.59</version>    </dependency>

更新的依赖关系(对于Vishal)

    <dependency>        <groupId>org.seleniumhq.webdriver</groupId>        <artifactId>webdriver-common</artifactId>        <version>0.9.7376</version>    </dependency>    <dependency>        <groupId>org.seleniumhq.selenium</groupId>        <artifactId>selenium-chrome-driver</artifactId>        <version>3.141.59</version>    </dependency>    <dependency>        <groupId>org.seleniumhq.selenium</groupId>        <artifactId>selenium-java</artifactId>        <version>3.141.59</version>    </dependency>    <dependency>        <groupId>org.seleniumhq.selenium</groupId>        <artifactId>selenium-api</artifactId>        <version>2.0rc2</version>    </dependency>    <dependency>        <groupId>org.seleniumhq.selenium</groupId>        <artifactId>selenium-remote-driver</artifactId>        <version>3.141.59</version>    </dependency>    <dependency>        <groupId>org.seleniumhq.selenium</groupId>        <artifactId>selenium-support</artifactId>        <version>3.141.59</version>    </dependency>

组态

 <build>    <plugins>      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-compiler-plugin</artifactId>        <version>3.6.0</version>        <configuration>          <source>1.8</source>          <target>1.8</target>          <encoding>UTF-8</encoding>          <forceJavacCompilerUse>true</forceJavacCompilerUse>        </configuration>      </plugin>      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-shade-plugin</artifactId>        <version>3.0.0</version>        <executions>          <execution>            <phase>package</phase>            <goals>              <goal>shade</goal>            </goals>          </execution>        </executions>      </plugin>    </plugins>  </build>

答案1

小编典典

阴影插件将所有依赖项与开发的代码结合在一起,并在一个Uber
JAR中对其进行加密。缺点是它可以覆盖资源文件,并且不能与签名的jar一起很好地使用(至少以我的经验)。

如果可能的话,我建议远离阴影插件。

就是说,如果您必须使用它-您可能会遇到合并jar资源的问题。您可以使用许多变压器来解决此问题,并且您需要研究确实需要哪一个。我将从这样的事情开始

<plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-shade-plugin</artifactId>    <version>2.4.3</version>    <configuration>        <shadedArtifactAttached>true</shadedArtifactAttached>        <shadedClassifierName>${executable.classifier}</shadedClassifierName>        <filters>            <filter>                <artifact>*:*</artifact>                <excludes>                    <exclude>META-INF/*.SF</exclude>                    <exclude>META-INF/*.DSA</exclude>                    <exclude>META-INF/*.RSA</exclude>                </excludes>            </filter>        </filters>    </configuration>    <executions>        <execution>            <phase>package</phase>            <goals>                <goal>shade</goal>            </goals>            <configuration>                <transformers>                    <transformer                        implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />                    <transformer                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">                        <mainClass>fully.qualified.ClassName</mainClass>                    </transformer>                </transformers>            </configuration>        </execution>    </executions></plugin>

你可以找到关于Apache更发电产品的插件这里

我建议的替代方法是Spring Boot,它使用Jar-in-Jar结构和自定义ClassLoader来从内部jar中加载类。

由于不必像Shade插件方法那样重写文件,因此这是一种更简单的方法,它可以更好地处理依赖项。

<plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-maven-plugin</artifactId>    <version>1.3.6.RELEASE</version>    <configuration>        <classifier>${executable.classifier}</classifier>        <layout>ZIP</layout>        <mainClass>fully.qualified.ClassName</mainClass>    </configuration>    <executions>        <execution>            <phase>package</phase>            <goals>                <goal>repackage</goal>            </goals>        </execution>    </executions></plugin>

认真地看一下简单的配置!

注意:大部分内容来自我自己的注释-版本号可能有点旧…

AWS Lambda Java:Lambda无法解压缩文件

AWS Lambda Java:Lambda无法解压缩文件

我正在尝试将Java与AWS Lambda结合使用。我创建了一个具有所有依赖项的jar文件(使用maven-assembly-
plugin)。上传后,我无法调用lambda。我收到错误消息Calling the Invoke API failed with message:Lambda was not able to unzip the file。jar文件为11 MB。我可以用java -jar

答案1

小编典典

maven-assemply-plugin需要被告知输出a zip而不是a jar。(我什至不知道有什么区别!)

将此添加到其配置中:

<plugin>     <groupId>org.apache.maven.plugins</groupId>     <artifactId>maven-assembly-plugin</artifactId>     ...     <configuration>         ...         <formats>            <format>zip</format>         </formats>     </configuration></plugin>

AWS Lambda-无法导入模块lambda函数

AWS Lambda-无法导入模块lambda函数

如何解决AWS Lambda-无法导入模块lambda函数?

我正在尝试编写一个简单的Lambda函数来连接和执行aurora MysqL数据库操作。

函数的名称为LogStream,Python文件为lambda_function.py,其中有我的handler function

我已经从CLI更新了处理程序,并成功完成了

{
"FunctionName": "LogStream","FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxx:function:LogStream","Runtime": "python3.6","Role": "arn:aws:iam::xxxxxxx:role/LambdaRole","Handler": "lambda_function.handler","CodeSize": 777,"Description": "","Timeout": 3,"MemorySize": 128,"LastModified": "2020-10-14T16:26:20.733+0000","CodeSha256": "gEM+bUdubHBGiwPecUv+IT0QEBzR28Ave94F8hc=","Version": "$LATEST","TracingConfig": {
    "Mode": "Passthrough"
},"RevisionId": "7403730c-5349-4766-a11f-c68d66420a4a","Layers": [
    {
        "Arn": "arn:aws:lambda:us-east-1:xxxxxx:layer:pyMysqL:1","CodeSize": 1621906
    }
],"State": "Active","LastUpdateStatus": "Successful"
}

这是完整的代码:

import sys
import logging
import rds_config
import pyMysqL
#rds settings
rds_host  = "aurora-MysqL-instance-1.xxxxxx.us-east-1.rds.amazonaws.com"
name = "admin"
password = "xxxxxx"
db_name = "Test"

logger = logging.getLogger()
logger.setLevel(logging.INFO)

try:
    conn = pyMysqL.connect(rds_host,user=name,passwd=password,db=db_name,connect_timeout=5)
except pyMysqL.MysqLError as e:
    logger.error("ERROR: Unexpected error: Could not connect to MysqL instance.")
    logger.error(e)
    sys.exit()

logger.info("SUCCESS: Connection to RDS MysqL instance succeeded")
def handler(event,context):
    """
    This function fetches content from MysqL RDS instance
    """

    item_count = 0

    with conn.cursor() as cur:


cur.execute("create table Employee ( EmpID  int NOT NULL,Name varchar(255) NOT NULL,PRIMARY KEY (EmpID))")
    cur.execute(''insert into Employee (EmpID,Name) values(1,"Joe")'')
    cur.execute(''insert into Employee (EmpID,Name) values(2,"Bob")'')
    cur.execute(''insert into Employee (EmpID,Name) values(3,"Mary")'')
    conn.commit()
    cur.execute("select * from Employee")
    for row in cur:
        item_count += 1
        logger.info(row)
        #print(row)
conn.commit()

return "Added %d items from RDS MysqL table" %(item_count)

我添加了一个Layer依赖项的pyMysqL

我无法弄清为什么调用失败并出现错误:

{"errorMessage": "Unable to import module ''lambda_function''"}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

AWS Lambda-无法导入模块“ lambda_function”

AWS Lambda-无法导入模块“ lambda_function”

像我之前的许多其他人一样,我正在尝试运行一个AWS Lambda函数,当我尝试对其进行测试时,

“ errorMessage”:“无法导入模块’lambda_function’”

我的处理程序设置为lambda_function.lambda_handler,我确实有一个名为lambda_function.py的文件,其中包含一个名为lambda_handler的函数。这是屏幕截图作为证明:
在此处输入图片说明

当我在随附的IDE中内联编写代码片段时,一切工作正常,但是当我将完整程序及其所有依赖项压缩并上传后,出现上述错误。

我正在使用Numpy和Scipy程序包,它们非常大。我的压缩目录为34 MB,未压缩的目录为122 MB。我认为这应该没问题,因为压缩目录的限制为50
MB。似乎上传正常,因为我看到以下消息:

Lambda函数“单镜头图像分类”的部署包太大,无法启用内联代码编辑。但是,您仍然可以立即调用函数。

我已经看到一些帖子通过使用virtualenv解决了这个问题,但是我对这种技术并不熟悉,我不确定如何正确使用它。

我也看到一些帖子说,有时依赖项具有依赖项,我可能需要包括这些依赖项,但是我不确定如何找到它。

这是lambda_function.py的顶部,应该足以查看我正在使用的库,并且确实具有lambda_handler函数:

import os
import boto3
import numpy as np
from scipy.ndimage import imread
from scipy.spatial.distance import cdist

def lambda_handler(event,context):

    s3 = boto3.resource('s3')

这是我要上传的目录的未压缩版本的屏幕截图:
在此处输入图片说明

如果这可能是一个问题,我还可以发布Lambda使用的策略角色。

非常感谢任何见解!

更新:

这是我尝试的一种解决方案:1. git clone https://github.com/Miserlou/lambda-packages
2.在Documents中创建一个名为new_lambda的文件夹3.将我的lambda_function.py和numpy文件夹从lambda软件包复制到new_lambda中,以及我使用Docker
for AWS编译的scipy库文章:https : //serverlesscode.com/post/scikitlearn-with-amazon-
linux-container/ 4.右键单击new_lambda文件夹并选择“ compress”压缩它

我的结果:

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

重申一下,我的文件名为lambda_function.py,并包含一个名为lambda_handler的函数,该函数接受两个参数(如上所示)。此信息与在Handler中看到的信息相同,也与上面看到的信息相同。

如果这很重要,我正在使用Mac计算机。

更新2

如果我按照上述步骤操作,而是直接选择要压缩的文件来压缩文件,然后右键单击并选择“压缩”,则会出现错误

无法导入模块“ lambda_function”:无法导入名称“ show_config”

另外,预编译的lambda软件包表示它们是为“至少Python 2.7”编译的,但是我的lambda运行时是3.6。这可能是个问题吗?

AWS lambda的aws-lambda-node_module错误,依赖关系的最佳实践是什么?

AWS lambda的aws-lambda-node_module错误,依赖关系的最佳实践是什么?

我一直在尝试将我们的一个node.js应用程序转换并部署到lambda函数中,并且遇到了node_modules依赖项的一些问题 – 说它无法找到某些模块.我首先创建了一个package.json,然后在本地安装依赖项,然后将节点模块文件夹复制到lambda.

例如,我有一个需要sequelize和convict的项目,并且一直在收到错误,说它无法找到moment模块作为子依赖项.我看到那个时刻包含在我的node_modules的根目录中,但它没有包含在sequelize模块下的子文件夹中.

但是,这个项目在当地运行良好. lambda有什么区别,用它来部署一些有点长的节点模块的最佳实践是什么 – 只是node_modules文件夹的一个副本?在我所拥有的一些其他更简单的项目中,可以复制少量的node_modules而没有任何问题.

{
  "errorMessage": "Cannot find module ''moment''","errorType": "Error","stackTrace": [
    "Function.Module._resolveFilename (module.js:338:15)","Function.Module._load (module.js:280:25)","Module.require (module.js:364:17)","require (module.js:380:17)","VERSION (/var/task/node_modules/sequelize/node_modules/moment-timezone/moment-timezone.js:14:28)","Object. (/var/task/node_modules/sequelize/node_modules/moment-timezone/moment-timezone.js:18:2)","Module._compile (module.js:456:26)","Object.Module._extensions..js (module.js:474:10)","Module.load (module.js:356:32)","Function.Module._load (module.js:312:12)"
  ]
}

解决方法

我通过从zip文件上传所有内容解决了这个问题,该文件包含了我的lambda函数所需的所有数据.

您可以在本地计算机上创建项目并进行所需的所有更改,然后您要压缩的文件应该具有相同的结构,并且还可以看到有一个选项可以从zip文件加载代码.

enter image description here

enter image description here

今天关于在pom中添加selenium依赖项后,AWS Lambda Jar无法压缩pom添加依赖报错的介绍到此结束,谢谢您的阅读,有关AWS Lambda Java:Lambda无法解压缩文件、AWS Lambda-无法导入模块lambda函数、AWS Lambda-无法导入模块“ lambda_function”、AWS lambda的aws-lambda-node_module错误,依赖关系的最佳实践是什么?等更多相关知识的信息可以在本站进行查询。

本文标签: