如何正确创建可以使用 Eclipse 上传到 AWS lambda 的 zip 文件?

     2023-03-28     48

关键词:

【中文标题】如何正确创建可以使用 Eclipse 上传到 AWS lambda 的 zip 文件?【英文标题】:How to correctly create a zip file that can be uploaded to AWS lambda using Eclipse? 【发布时间】:2021-12-08 13:05:55 【问题描述】:

如何从可以上传到 AWS Lambda 函数的现有 Java 项目创建 zip 文件?

我找不到有关如何执行此操作的任何明确步骤。我想将我的 Eclipse 项目导出为 zip 文件,然后将其上传到 AWS Lambda。目前,我使用 Eclipse 中的 AWS Toolkit 上传项目,但现在我想使用 zip 文件手动完成。

步骤是什么?

这就是我尝试的方式。这是我将项目导出为 zip 的地方:

然后,我去 AWS 并选择上传一个 zip 文件:

我选择我的 zip 文件,然后测试代码,这是我得到的错误:


  "errorMessage": "Error loading class com.amazonaws.lambda.demo.LambdaFunctionHandler: com/amazonaws/auth/AWSCredentialsProvider",
  "errorType": "java.lang.NoClassDefFoundError"

编辑:如果我使用 Toolkit 上传,则该功能有效,因此我知道所有资源都在文件夹中,我只需要弄清楚如何使用它。 这是函数的代码:

public class LambdaFunctionHandler extends IOException implements RequestHandler<SNSEvent, String> 

    private static AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1)
            .withCredentials(DefaultAWSCredentialsProviderChain.getInstance()).build();

    public LambdaFunctionHandler() 
    

    @Override
    public String handleRequest(SNSEvent event, Context context) 
        try 
            System.out.println("Hello world");
            return "SUCCESS2";
         catch (Exception e) 
            System.out.println("caught exception");
        
        return "FAILURE2";
    
    




编辑#2:这是我的pom.xml 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.amazonaws.lambda</groupId>
  <artifactId>demo</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

  <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.2.2</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-bom</artifactId>
        <version>1.12.91</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-events</artifactId>
      <version>1.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-core</artifactId>
      <version>1.1.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.hierynomus/sshj -->
    <dependency>
        <groupId>com.hierynomus</groupId>
        <artifactId>sshj</artifactId>
        <version>0.29.0</version>
    </dependency>
    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.55</version>
    </dependency>
  </dependencies>
</project>

【问题讨论】:

【参考方案1】:

您可以在 Eclipse 中创建一个 Maven 项目,然后将其导出为可以上传到 AWS 管理控制台的 JAR 文件。这样做很容易。要了解如何执行此用例,请参阅此 AWS 教程。它使用 IntelliJ(只需将其切换为 Eclipse),并遵循文档的其余部分。

此 Lambda 函数的示例用例是检测位于 Amazon Simple Storage Service (Amazon S3) 存储桶中的图像中的个人防护装备 (PPE)。它会引导您完成所有步骤,包括部署 Lambda 函数。

Creating an AWS Lambda function that detects images with Personal Protective Equipment

在通过控制台构建和部署时,您永远不会遇到在此工具中看到的问题。

更新 这个 Lambda 函数有效——刚刚测试过。以下是 Lambda 控制台中的结果。

放置在 DynamoDB 表中的数据:

您的错误是找不到信用提供者。使用 Lambda 时,您无需在 Java 代码中设置凭据。权限在 IAM 角色中设置。您需要为 IAM 角色设置策略,以便它可以调用服务。所以在这个示例用例中,我们为 lambda-support 设置策略。

另一个更新

在 Eclipse 中,我使用您的代码构建了一个项目(我认为这个 PPE 非常先进 - 所以我们将创建一个名为 Getting Started with Lambda 的新项目)。效果很好:

【讨论】:

我已经尝试过了,但没有成功。我完全按照该链接中的说明进行操作。我导出到 .jar。我去了AWS并上传了.jar,但仍然是同样的错误。 部署此 JAR 文件时,您会看到什么。您是否正确设置了 IAM 角色 什么意思?我单击上传 .zip 文件或 .jar 文件(我都尝试过),然后我尝试对其进行测试,但我收到了一个错误,如我的问题所示。我相信我的 IAM 角色设置得很好,因为我可以通过 Toolkit 上传。我还能如何检查?但我认为这不是问题。 另外,当我部署时,它说它是成功的,但是当我运行它时,我得到了错误。我正在做你提到的一切,但没有任何帮助。 我将尝试使用您的 Eclipse 代码执行此 Lambda 函数。我想知道使用我的 IDE 是否还有其他问题。

如何使用 PhpMyAdmin 下载上传到 BLOB 字段的文件?

】如何使用PhpMyAdmin下载上传到BLOB字段的文件?【英文标题】:HowtodownloadthefileuploadedtoaBLOBfieldusingPhpMyAdmin?【发布时间】:2014-07-2417:40:15【问题描述】:我正在使用PhpMyAdmin4.2版运行localhostmysql服务器。我创建了一个带有MEDIUMBLOB列... 查看详情

如何使用指定版本2.3的jsffacet创建eclipse动态web项目?

我正在使用EclipseOxygen3.在配置JavaServerFaces方面时,可以选择的最高版本号是2.2。告诉Eclipse我使用2.3版的正确方法是什么?答案告诉Eclipse我使用2.3版的正确方法是什么?你不能。您基本上需要将Eclipse升级到更新的版本。但由于它... 查看详情

如何批准上传到 CloudKit

】如何批准上传到CloudKit【英文标题】:HowtoapproveuploadstoCloudKit【发布时间】:2015-06-1304:41:28【问题描述】:在创建使用CloudKit的应用程序时,有时您允许用户创建数据并将其上传到公共数据库,一旦创建,每个人都可以公开使用... 查看详情

如何制作window移动的动画效果

参考技术A分类:电脑/网络>>程序设计>>其他编程语言问题描述:delphi,vc代码都可以或思路,关键api-----不要用循环生生的移动窗口的代码如果有专门的api更好谢解析:在VC中可以使用AnimateWidow函数实现动画。该函数在Windows98... 查看详情

如何使用 axios 将文件数据正确上传到 rails 5 后端

】如何使用axios将文件数据正确上传到rails5后端【英文标题】:Howtocorrectlyuploadfiledatausingaxiostorails5backend【发布时间】:2022-01-0511:09:03【问题描述】:我希望用户能够在我的项目上上传照片并将其添加到他们的个人资料中。我想... 查看详情

eclipsegit如何拉取代码

使用Git拉取了远端的代码,但是到Eclipse中不能执行,请问各位大神,这中间是不是要一个桥接的介质啊!我要怎么才能正确使用这个介质才能在Eclipse中正确执行这个代码?求大神赐教...eclipse中用git拉取代码步骤:1、eclipse创建... 查看详情

如何使用git上传项目代码到github

github是一个基于Git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。这对于一般人来说公共仓库就已经足够了。 注册账户以及创建仓库 要想使用github第一步当然是... 查看详情

如何制作可以使用 React.js 捕获图像然后将其上传到 firebase 的相机?

】如何制作可以使用React.js捕获图像然后将其上传到firebase的相机?【英文标题】:HowdoImakeacamerathatcancaptureimagesusingReact.jsandthenuploadittofirebase?【发布时间】:2020-11-1322:46:57【问题描述】:我尝试了多种方法,最终创建了一个可以... 查看详情

git的使用--如何将本地项目上传到github(代码片段)

第一步:我们需要先创建一个本地的版本库(其实也就是一个文件夹)。    你可以直接右击新建文件夹,也可以右击打开Gitbash命令行窗口通过命令来创建。    现在我通过命令行在桌面新建一个TEST... 查看详情

如何使用 Eclipse 创建“testng.xml”

】如何使用Eclipse创建“testng.xml”【英文标题】:Howtocreate\'testng.xml\'usingEclipse【发布时间】:2015-08-0307:52:07【问题描述】:我是TestNG和SeleniumWebdriver的新手,我正在尝试使用eclipse创建一个testng.xml。在www做了一些研究,了解到这... 查看详情

如何使用 Cloudinary direct 正确更新或销毁图像?

】如何使用Cloudinarydirect正确更新或销毁图像?【英文标题】:HowtoproperlyupdateordestroyanimageusingCloudinarydirect?【发布时间】:2013-08-0802:20:11【问题描述】:所以我有Cloudinary通过载波直接上传图像并正确关联它们,但是一旦它们被创... 查看详情

如何在 C# 中正确使用 WCF REST API 上的 Stream 将文件(图像/视频/等)上传到服务器?

】如何在C#中正确使用WCFRESTAPI上的Stream将文件(图像/视频/等)上传到服务器?【英文标题】:Howtouploadfiles(images/videos/etc)toserverusingStreamonWCFRESTAPIinC#properly?【发布时间】:2019-07-0913:55:17【问题描述】:我正在设置一个函数来使用... 查看详情

eclipse上传代码到gitbub

作为一名程序员,自己在学习时经常需要写代码,但是由于换电脑或其他原因这些代码可能丢失,不方便以后的查看和复习。如果有一个版本服务器,不仅能把上传代码,在需要是可以随时下载,而且能实现版本控制,查看每个... 查看详情

如何使用googleserviceauthentication类将文件上传到grails中的google存储?(代码片段)

...序,我需要将Excel文件上传到GoogleStorage。有人可以告诉我如何使用Google服务身份验证在GoogleStorage中上传文件吗?我试图通过使用动作excelFile上传FileUploadController中的uploadExcelFile。码:defuploadExcelFile()defexcelFile=request.getFile('excelFile'... 查看详情

如何使用 Ckeditor5 将图像上传到 AWS S3

】如何使用Ckeditor5将图像上传到AWSS3【英文标题】:HowtouploadimagestoAWSS3withCkeditor5【发布时间】:2020-12-2318:06:02【问题描述】:我正在尝试从CkEditor5将图像上传到s3存储桶。我的前端建立在vue上,后端建立在NodeJs上。图像的上传按... 查看详情

如何正确设置 CORS 以将带有 presignedUrl 的文件上传到 Firebase 存储?

】如何正确设置CORS以将带有presignedUrl的文件上传到Firebase存储?【英文标题】:HowcanIsetupCORSproperlytouploadfilewithapresignedUrltofirebasestorage?【发布时间】:2020-09-0711:55:51【问题描述】:我一直在尝试将图像直接从我的reactspa上传到我... 查看详情

如何使用 Fabric.js 将图像上传到画布?

】如何使用Fabric.js将图像上传到画布?【英文标题】:HowtouploadanimagetoacanvaswithFabric.js?【发布时间】:2014-03-1001:30:49【问题描述】:我希望创建一个流程,用户可以上传他们的图像,然后在浏览器中使用Fabric.js使用一些按钮在浏... 查看详情

eclipse如何使用?

使用办法:先在eclipse中使用数据库连接-接着,新创建的项目并单击NewFloder-然后,创建一个名为lib的包-接着,MySQLjar包并选择构建路径-添加到构建路径,在里面操作即可。在eclipse中使用数据库连接,具体步骤如下:1、首先,... 查看详情