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