Ниже приведен тестовый пример, предоставляемый aws lambda для событий s3:
{
"Records": [
{
"eventVersion": "2.0",
"eventSource": "aws:s3",
"awsRegion": "us-east-2",
"eventTime": "1970-01-01T00:00:00.000Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"responseElements": {
"x-amz-request-id": "EXAMPLE123456789",
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "testConfigRule",
"bucket": {
"name": "example-bucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
},
"arn": "arn:aws:s3:::example-bucket"
},
"object": {
"key": "test/key",
"size": 1024,
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901"
}
}
}
]
}
Мне особенно интересно, как бы я напечатал object: key:
?
В частности "test/key"
?
Я пробовал это и несколько других способов безуспешно:
require 'json'
require 'aws-sdk-elastictranscoder'
require "aws-sdk-s3"
def lambda_handler(event:, context:)
src_bkt = "example-bucket"
src_key = event.Records[0].s3.object.key
s3.getObject({
Bucket: src_bkt,
Key: src_key
})
# TODO implement
{ statusCode: 200, body: JSON.generate(src_key) }
end
Ответ, который я получаю с этим, является ошибочным ответом со следующим:
Response:
{
"errorMessage": "undefined method `Records' for #<Hash:0x0000561d9afa6618>",
"errorType": "Function<NoMethodError>",
"stackTrace": [
"/var/task/lambda_function.rb:7:in `lambda_handler'"
]
}
Обновление:
Я могу напечатать всю запись:
def lambda_handler(event:, context:)
body = JSON.generate(event)
parse = JSON.parse(body)
puts(parse["Records"])
end
Но один, который я добавляю в put / print что-то вроде:
puts(parse["Records"]["object"]["key"])
Я получаю такие ошибки, как:
"errorMessage": "no implicit conversion of String into Integer",