通过S3和SQS事件触发消息传递变量值



我已经将aws管道设置为S3->SQS->Lambda。S3 PutObject事件将生成一条事件触发消息并将其传递给SQS,SQS将触发lambda。作为事件消息的一部分,我需要将一个变量值从S3传递给SQS,最后传递给Lambda。变量值可以是文件名或某个字符串值。

  1. 我们可以自定义S3事件生成的事件消息json数据,以便在消息中传递更多信息吗
  2. SQS是否只是将从S3接收到的事件消息传递给Lambda,或者对消息进行任何更改或生成自己的消息
  3. 如何在SQS或Lambda中显示或查看S3生成的消息

您无法操作S3事件数据。架构如下所示。这将被传递到SQS队列,后者将添加一些自己的元数据,并将其传递给Lambda。本教程有一个样例SQS记录。

当Amazon S3触发事件时,会向所需目的地(AWS Lambda、Amazon SNS、Amazon SQS(发送消息消息包括触发事件的对象的bucket名称和密钥(文件名(

以下是一个示例事件(来自使用AWS Lambda与Amazon S3-AWS Lambda(:

{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-2",
"eventTime": "2019-09-03T19:37:27.192Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "AWS:AIDAINPONIXQXHT3IKHL2"
},
"requestParameters": {
"sourceIPAddress": "205.255.255.255"
},
"responseElements": {
"x-amz-request-id": "D82B88E5F771F645",
"x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo="
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1",
"bucket": {
"name": "lambda-artifacts-deafc19498e3f2df",
"ownerIdentity": {
"principalId": "A3I5XTEXAMAI3E"
},
"arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df"
},
"object": {
"key": "b21b84d653bb07b05b1e6b33684dc11b",
"size": 1305107,
"eTag": "b21b84d653bb07b05b1e6b33684dc11b",
"sequencer": "0C0F6F405D6ED209E1"
}
}
}
]
}

bucket可以从Records[].s3.bucket.name获得,key可以从Records[].s3.object.key获得。

但是,由于S3触发了事件,因此无法发送特定值。但是,您可以派生一个值。例如,如果您有来自多个不同bucket的事件触发Lambda函数,那么Lambda函数可以查看bucket名称来确定它被触发的原因,然后替换所需的值。

最新更新