【问题标题】:Add trigger to AWS Lambda Function using Java SDK for s3使用适用于 s3 的 Java 开发工具包将触发器添加到 AWS Lambda 函数
【发布时间】:2021-03-16 07:49:59
【问题描述】:

如何使用 Java SDK 为现有 AWS Lambda 函数添​​加新触发器?

我想添加S3 trigger

我有将图像从一种格式转换为另一种格式的程序。 我首先有两个桶,当我在第二个添加源图像时,我想得到结果。

任何示例都将不胜感激。

谢谢。

像这样触发:

我尝试这样做,但它不起作用:

    final AWSLambda client = AWSLambdaClientBuilder.standard()
                                                   .withCredentials(credentials)
                                                   .build();

  client.listFunctions().getFunctions()
        .stream()
        .filter(f -> f.getFunctionName().equals(FUNCTION_NAME))
        .findFirst()
        .ifPresent(lambda -> {
          final AddPermissionRequest addPermissionRequest = new AddPermissionRequest();
          addPermissionRequest.setStatementId("s3triggerId");
          addPermissionRequest.withSourceArn("arn:aws:s3:::" + INPUT_BUCKET_NAME);
          addPermissionRequest.setAction("lambda:InvokeFunction");
          addPermissionRequest.setPrincipal("events.amazonaws.com");
          addPermissionRequest.setFunctionName(lambda.getFunctionName());

          AddPermissionResult addPermissionResult = client.addPermission(addPermissionRequest);
          System.out.println("Trigger was added to lambda " + addPermissionResult.getStatement());
        });

【问题讨论】:

  • 我尝试这样做,但它不起作用:什么不起作用?
  • 我的 lambda 中没有任何触发器。

标签: java amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

对于 aws java sdk v2

您可以通过添加通知配置来添加触发器,例如:

  • PutBucketNotificationConfiguration

您可以通过以下方式查看您当前的配置:

  • GetBucketNotificationConfiguration

并检查其他来自:https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html

  1. 使用 regioncredentials 提供程序初始化 S3Client(在我的 case,Region.US_WEST_2 和 ProfileCredentialsProvider 分别)。
  2. 从 s3client 中选择方法(操作的配置类型) 你的操作(在我的例子中是 putBucketNotificationConfiguration)。
  3. 使用bucketName通知配置为您的通知配置构建请求。
  4. 构建通知配置:(类型: topicConfiguration(SNS)、queueConfiguration(SQS)、lambdaFunctionConfiguration(Lambda)) 在我的例子中是 lambdaFunctionConfiguration。
  5. 使用 arnevents 构建 lambdaFunctionConfiguration,这将 触发您的 lambda 函数(在我的例子中,“arn:aws:lambda:us-west-2:12345678912:function:your-lambda”和 Event.S3_OBJECT_CREATED_PUT;我分配了一个事件,但您可以添加更多)。

另请阅读https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

对于这个例子

S3lient s3Client = S3Client.builder()
                .region(Region.US_WEST_2)
                .credentialsProvider(ProfileCredentialsProvider.create())
                .build();

s3Client.putBucketNotificationConfiguration(PutBucketNotificationConfigurationRequest.builder()
                .bucket(BUCKET_NAME)
                .notificationConfiguration(NotificationConfiguration.builder()
                        .lambdaFunctionConfigurations(LambdaFunctionConfiguration.builder()
                                .lambdaFunctionArn("arn:aws:lambda:us-west-2:12345678912:function:your-lambda")
                                .events(Event.S3_OBJECT_CREATED_PUT)
                                .build())
                        .build())
                .build());

【讨论】:

  • 谢谢,但我使用的是sdk v1,我尝试这样做,但它不起作用:
  • BucketNotificationConfiguration notificationConfiguration = new BucketNotificationConfiguration(); notificationConfiguration.addConfiguration("triggerConfig", new LambdaConfiguration("arn:aws:lambda:us-west-2:658481763507:function:NAME", EnumSet.of(S3Event.ObjectCreatedByPut))); SetBucketNotificationConfigurationRequest 请求 = new SetBucketNotificationConfigurationRequest(INPUT_BUCKET_NAME, notificationConfiguration); s3Client.setBucketNotificationConfiguration(request);
  • 线程“main”com.amazonaws.services.s3.model.AmazonS3Exception 中的异常:无法验证以下目标配置(服务:Amazon S3;状态代码:400;错误代码:InvalidArgument;请求ID:0WFR4Q9J8T8H8Q8R; S3扩展请求ID:FtVPubXrU4 + 0om3mB6OLNY5h + zPGel1kT4cY + xEygaUR + agc1Hcsu8Tcy3s9WTuTOSlk + XJ / ZS0 =;代理:空),S3扩展请求ID:FtVPubXrU4 + 0om3mB6OLNY5h + zPGel1kT4cY + xEygaUR + agc1Hcsu8Tcy3s9WTuTOSlk + XJ / ZS0 = 跨度>
  • 我设置了 sdk v2 并尝试使用你的版本,我得到了这个错误:
  • 线程“主”software.amazon.awssdk.services.s3.model.S3Exception 中的异常:无法验证以下目标配置(服务:S3,状态代码:400,请求 ID:04B1E6F5D080E65F,扩展请求 ID:rmjA+uzB/h+lusPzSMcUgo/zp3mPB78jfsFGfbsL3fqqMqp+fFT2hYLE/Zceedlczd38faZVchs=)
【解决方案2】:

您可以通过in the consolevia SAM. 进行操作

【讨论】:

猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2023-03-15
相关资源
最近更新 更多