проблема: Я не могу указать файл, вызывающий событие. Цель состоит в том, чтобы добавить водяной знак к загружаемым видеофайлам. Я успешно сделал это в эластичном транскодере, создав конвейер и задание, но теперь цель состоит в том, чтобы автоматизировать этот процесс после загрузки файлов.
Теперь я хочу автоматизировать этот процесс загрузки файлов в корзину s3.
Это моя попытка (объясню мою проблему после кода):
require 'json'
require 'aws-sdk-elastictranscoder'
require "aws-sdk-s3"
def lambda_handler(event:, context:)
client = Aws::ElasticTranscoder::Client.new(region: 'us-east-1')
s3 = Aws::S3::Resource.new()
# object = s3.bucket(bucket_name).object(object_name)
# bucket_name = event["s3"]["bucket"]["name"]
# object_name = event["s3"]["object"]["key"]
resp = client.create_job({
pipeline_id: "1552343938210-qevnz1", # required
input: {
key: "#{s3}",
},
output: {
key: "#{s3}",
preset_id: "1351620000001-000001",
watermarks: [
{
preset_watermark_id: "TopRight",
input_key: "uploads/listing/image/10/listing_howard-stern.jpg",
},
],
}
})
end
см., где:
key: "#{s3}",
},
Вот тут у меня проблемы. Я не уверен, как вызвать точный файл, который вызывает событие. Я хочу, чтобы к загружаемому файлу был добавлен водяной знак, а затем выводился в то же имя файла в том же месте.
это возвращает меня:
input=#<Aws::S3::Resource:0x000055bc11bb4388>\ и ничего не происходит, задание не выполняется из-за того, что ввод не указан.
Как я могу определить или указать файл?
Я не могу найти способ до сих пор.
Хм, так вы говорите, что даже если бы я мог указать файл, я бы даже не смог его изменить, потому что его еще нет в ведре s3, так как лямбда впереди этого?

Зачем вы создаете ресурс S3 внутри лямбды, если цель состоит в том, чтобы обрабатывать уже загруженные материалы? Насколько я понял, сама лямбда срабатывает по загруженному файлу, да? В этом случае вы должны использовать полезную нагрузку события S3, которая содержит имя файла (см. здесь docs.aws.amazon.com/en_us/lambda/latest/dg/with-s3.html)