Да, это легко сделать, подписав лямбда-функцию на ваше событие S3 PUT.
{
"Records": [
{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}
]
}
Затем вы можете получить события.Records [0] .s3.bucket.name и event.Records [0] .s3.object.key, чтобы сделать запрос copyObject дляAWS
Как только ваш файл был успешно скопирован, вы можете удалить исходный файл.
Просто убедитесь, что ваша Lambda настроена только на события PUT, потому что если выустановите для него ВСЕ события, и COPY, и DELETE также активируют вашу функцию, заставляя вас входить в бесконечную рекурсию.