Добавление триггера в функцию AWS Lambda с помощью Java SDK для s3

#java #amazon-web-services #amazon-s3 #aws-lambda

#java #amazon-веб-сервисы #amazon-s3 #aws-lambda

Вопрос:

Как я могу добавить новый триггер для существующей функции 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());
        });
 

Комментарии:

1. Я пытаюсь это сделать, но это не работает: что не работает?

2. В моей лямбде нет триггера.

Ответ №1:

Для aws java sdk v2:

Вы можете добавить триггер, добавив конфигурацию уведомлений, такую:

  • PutBucketNotificationConfiguration

Вы можете просмотреть свою текущую конфигурацию через:

  • GetBucketNotificationConfiguration

И проверьте другое из: https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html

  1. Инициализируйте S3Client с регионом и поставщиком учетных данных (в моем случае, Region.US_WEST_2 и ProfileCredentialsProvider соответственно).
  2. Выберите метод (тип конфигурации действия) из s3client для вашего действия (в моем случае putBucketNotificationConfiguration).
  3. Создайте запрос для вашей конфигурации уведомлений с помощью bucketName и конфигурации уведомлений.
  4. Создайте конфигурацию уведомлений: (типы: topicConfiguration (SNS), queueConfiguration (SQS), lambdaFunctionConfiguration (Lambda)) в моем случае lambdaFunctionConfiguration.
  5. Создайте конфигурацию lambdaFunctionConfiguration с помощью arn и событий, которые будут запускать вашу лямбда-функцию (в моем случае «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());
 

Комментарии:

1. Спасибо, но я использую sdk v1, я пытаюсь это сделать, но это не работает:

2. BucketNotificationConfiguration notificationConfiguration = new BucketNotificationConfiguration(); notificationConfiguration.addConfiguration(«triggerConfig», новая конфигурация лямбды («arn: aws: lambda:us-west-2:658481763507:функция: ИМЯ», EnumSet.of(S3Event. ObjectCreatedByPut))); SetBucketNotificationConfigurationRequest запрос = новый SetBucketNotificationConfigurationRequest(ВХОДНОЕ ИМЯBUCKET_NAME, notificationConfiguration); S3Client.setBucketNotificationConfiguration(запрос);

3. Исключение в потоке «main» com.amazonaws.services.s3.model. Исключение AmazonS3Exception: не удалось проверить следующие конфигурации назначения (сервис: Amazon S3; Код состояния: 400; Код ошибки: InvalidArgument; Идентификатор запроса: 0WFR4Q9J8T8H8Q8R; Идентификатор расширенного запроса S3: FtVPubXrU4 0om3mB6OLNY5h zPGel1kT4cY xEygaUR agc1Hcsu8Tcy3s9WTuTOSlk xj/zs0=; Прокси: null), расширенный идентификатор запроса S3:FtVPubXrU4 0om3mB6OLNY5h zPGel1kT4cY xEygaUR agc1Hcsu8Tcy3s9WTuTOSlk xj/zs0 =

4. Я установил sdk v2 и попытался использовать вашу версию, и я получил эту ошибку:

5. Исключение в потоке «main» software.amazon.awssdk.services.s3.model.S3Exception: не удалось проверить следующие конфигурации назначения (Service: S3, код состояния: 400, идентификатор запроса: 04B1E6F5D080E65F, расширенный идентификатор запроса: rmjA uzB / h lusPzSMcUgo/zp3mPB78jfsFGfbsL3fqqMqp fFT2hYLE / Zceedlczd38faZVchs=)

Ответ №2:

Вы можете сделать это либо в консоли, либо через SAM.

Комментарии:

1. Я хочу использовать только Java SDK

2. В чем проблема? Также есть пример Java. docs.aws.amazon.com/lambda/latest/dg /…

3. Это не то, что я хочу. Я хочу триггер, как на картинке.