使用JavaSDK for s3向aws lambda函数添加触发器

lawou6xi  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(445)

如何使用为现有aws lambda函数添加新触发器 Java SDK ?
我想补充一点 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());
        });
jpfvwuh4

jpfvwuh41#

您可以在控制台或通过sam进行操作。

7lrncoxx

7lrncoxx2#

对于aws java sdk v2:
您可以通过添加通知配置来添加触发器,例如:
putbucketnotificationconfiguration(PutbucketNotification配置)
您可以通过以下方式查看当前配置:
getbucketnotificationconfiguration配置
并从以下位置检查其他:https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/s3client.html
init s3client与region和credentials provider(在我的例子中,分别是region.us\u west\u 2和profilecredentials provider)。
从s3client为您的操作选择方法(操作的配置类型)(在我的例子中是putbucketnotificationconfiguration)。
使用bucketname和通知配置生成通知配置请求。
构建通知配置:(类型:topicconfiguration(sns)、queueconfiguration(sqs)、lambdafunctionconfiguration(lambda))在我的示例lambdafunctionconfiguration中。
使用arn和触发lambda函数的事件构建lambdafunctionconfiguration(在我的例子中arn:aws:lambda:us-west-2:12345678912:function:your-lambda和event.s3\u object\u created\u 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());

相关问题