我有以下管道:AWS LAMBDA處理程序擴展S3event
的文件上傳到S3,它會觸發一個lambda(我們稱之爲L1)的運行,並做一些處理。
此刻所以,我的切入點是這樣的:
public Response handleRequest(S3Event event, Context context) {
....
}
現在,S3Event JSON看起來是這樣的:
{
"Records": [
{
"awsRegion": "xxxxx",
"eventName": "ObjectCreated:Put",
"eventSource": "aws:s3",
"eventTime": "2017-09-12T09:27:59.471Z",
"eventVersion": "2.0",
"requestParameters": {
"sourceIPAddress": "xxxxxx"
},
"responseElements": {
"x-amz-id-2": "xxxxxx",
"x-amz-request-id": "xxxx"
},
"s3": {
"configurationId": "xxxxxx1",
"bucket": {
"name": "xxxxx",
"ownerIdentity": {
"principalId": "xxxxx"
},
"arn": "xxx"
},
"object": {
"key": "xxx",
"size": xxx,
"eTag": "xxxx",
"versionId": null,
"sequencer": "xxx",
"urlDecodedKey": "xxx"
},
"s3SchemaVersion": "1.0"
},
"userIdentity": {
"principalId": "xxxx"
}
}
],
}
如果你通過這個JSON的 「測試」 部分,它會成功。
現在,給點意見:我希望將信息添加到這個JSON,這東西應該是這樣的:
{
"Records": [
{
"awsRegion": "xxxxx",
"eventName": "ObjectCreated:Put",
"eventSource": "aws:s3",
"eventTime": "2017-09-12T09:27:59.471Z",
"eventVersion": "2.0",
"requestParameters": {
"sourceIPAddress": "xxxxxx"
},
"responseElements": {
"x-amz-id-2": "xxxxxx",
"x-amz-request-id": "xxxx"
},
"s3": {
"configurationId": "xxxxxx1",
"bucket": {
"name": "xxxxx",
"ownerIdentity": {
"principalId": "xxxxx"
},
"arn": "xxx"
},
"object": {
"key": "xxx",
"size": xxx,
"eTag": "xxxx",
"versionId": null,
"sequencer": "xxx",
"urlDecodedKey": "xxx"
},
"s3SchemaVersion": "1.0"
},
"userIdentity": {
"principalId": "xxxx"
}
}
],
"MyErrorMessage":
{
"EnvelopeErrors": [
{
"EnvelopeErrorTrace": "stackTrace",
"EnvelopeErrorPositions": 1,
"EnvelopeErrorLength": 2
},
{
"EnvelopeErrorTrace": "SecondTrace",
"EnvelopeErrorPositions": 3,
"EnvelopeErrorLength": 4
}
],
}
}
通知是S3Event JSON但更多的數據位。
我的問題是以下幾點:我想要一個自定義輸入,也可以在調用純S3Event時使用。
public Response handleRequest(MyS3Event event, Context context) {
....
}
但是,我一直無法做到這一點。
我試過一個自定義的POJO,但是當我上傳到S3文件時它不起作用。 我試圖擴展S3EventNotification類(從中擴展S3Event),但再次沒有成功。
我想要做什麼?
你想通過向s3事件json添加更多數據來實現什麼? 理想情況下,當您在事件驅動環境中工作時,事件屬性是不變的,因爲屬性處理觸發事件的非常特定的數據, – Suyash
@Suyash我想要做的是將信息添加到原始事件,以便我的Lambda重新處理原始文件,但不是完全的,而只是使用附加信息的一部分。 – Alessandroempire
你的意思是,一旦你的lambda接收到S3Event,你想修改它,同樣的lambda應該再次處理它,但這次修改後的數據呢? – Suyash