【发布时间】:2019-08-07 17:03:02
【问题描述】:
以下是 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
但是我在puts/print中添加了一个类似的东西:
puts(parse["Records"]["object"]["key"])
我收到如下错误:
"errorMessage": "no implicit conversion of String into Integer",
【问题讨论】:
-
为什么要访问散列值,就好像它们是对象上的方法一样?是你正在使用的额外的东西吗?
-
我正在尝试定义
"object": { "key": "test/key",,以便我可以使用该名称在文件上传时创建水印。我已成功使用 lambda 来执行此操作,但我无法弄清楚如何识别正在从 s3 上传创建触发器的文件。我需要在 s3 存储桶中定义一个文件,以便在文件上创建水印。因此,我正在测试如何识别密钥,以便可以将其用作文件名 -
由于您的数据的表示方式,不是
parse[:Records][0][:s3][:object][:key](或parse['Records'][0]['s3']['object']['key'])? -
我实际上在不久前就使用了确切的代码,只是用了双引号。但现在 lambda 循环。所以现在我需要弄清楚
标签: ruby amazon-web-services amazon-s3 aws-lambda aws-sdk