【问题标题】:Error when update AWS Java Lambda Function using Bitbucket Pipelines - java.lang.ClassNotFoundException使用 Bitbucket 管道更新 AWS Java Lambda 函数时出错 - java.lang.ClassNotFoundException
【发布时间】:2020-02-18 10:45:24
【问题描述】:

我有一个基本的 AWS Lambda Java 函数 my-function

public class Hello implements RequestHandler<Request, Response> {
    public Response handleRequest(Request request, Context context) {
        String greetingString = String.format("Hello %s", request.name);
        return new Response(greetingString);
    }
}

该 Lambda 函数已在 AWS 中注册,控制器为 com.tds.Hello 并正确关联到 AWS API Gateway

最终的 JAR 是通过 Maven 构建的,没有问题。当我直接在 AWS 中上传 JAR 时,该功能运行良好。

问题是当我在提交代码后使用Bitbucket Pipelines 进行自动上传(和更新)时,管道运行良好,This tutorial (Automating AWS Lambda deployments) 之后的 success 状态但是当我测试/在 AWS 中运行该函数我收到以下错误:

{"errorMessage":"找不到类:com.tds.Hello","errorType":"java.lang.ClassNotFoundException"}

有人遇到过这个问题吗?

【问题讨论】:

  • 如何在 Bitbucket Pipelines 中使用 Maven 构建 JAR 文件?听起来这个过程是错误的,或者您在 Bitbucket Pipelines 中引用了错误的工件文件..
  • 我在本地构建了 JAR,然后将其推送到 bitbucket,因此管道日志正确显示了创建和上传 zip 时的结果,让我尝试在管道中构建 JAR。

标签: java amazon-web-services aws-lambda bitbucket-pipelines


【解决方案1】:

错误是在创建 ZIP 文件 并通过 Bitbucket Artifacts 传递时。我避免压缩 (ZIP) 文件,而是直接使用 JAR 在 AWS 中上传。我更新bitbucket-pipelines.yml如下:

bitbucket-pipeline.yml

pipelines:
  default:
    - step:
        name: Build and package
        script:
          - apt-get update && apt-get install -y zip
          - zip my-function.zip target/my-function.jar 
          - pipe: atlassian/aws-lambda-deploy:0.3.0
            variables:
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              AWS_DEFAULT_REGION: $AWS_REGION
              FUNCTION_NAME: 'my-function'
              COMMAND: 'update'
              ZIP_FILE: 'my-function.zip'

bitbucket-pipeline.yml

pipelines:
  default:
    - step:
        name: Build and package
        script:
          - pipe: atlassian/aws-lambda-deploy:0.5.0
            variables:
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              AWS_DEFAULT_REGION: $AWS_REGION
              FUNCTION_NAME: 'my-function'
              COMMAND: 'update'
              ZIP_FILE: 'target/my-function.jar'

【讨论】:

  • 您确定这适用于指向.jar 文件的属性ZIP_FILE 吗?现在尝试这个,我总是得到ZIP_FILE not exists
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2021-06-13
  • 2022-12-18
  • 2019-10-30
  • 2020-08-15
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多