Skip to content

Commit 69fcc94

Browse files
committed
Switch to looking for the all ObjectCreated events
In the case of objects replicated from an S3 snapshot, those show up with `ObjectCreated:CompletedMultipartUpload`
1 parent ff32209 commit 69fcc94

File tree

2 files changed

+7
-35
lines changed

2 files changed

+7
-35
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ chrono = "0.4.26"
1616
handlebars = "4.3.7"
1717

1818
lambda_runtime = "0.8.1"
19+
log = "0.4.20"
1920
pretty_env_logger = "0.5.0"
2021
routefinder = "0.5.3"
2122
serde_json = "1.0.105"

src/main.rs

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ use aws_lambda_events::event::s3::{S3Entity, S3Event};
22
use aws_sdk_s3::Client as S3Client;
33
use handlebars::Handlebars;
44
use lambda_runtime::{run, service_fn, Error, LambdaEvent};
5+
use log::*;
56
use routefinder::Router;
6-
use tracing::*;
7+
//use tracing::*;
78

89
use std::collections::HashMap;
910

@@ -22,7 +23,7 @@ async fn function_handler(event: LambdaEvent<S3Event>, client: &S3Client) -> Res
2223

2324
for entity in entities_from(event.payload)? {
2425
debug!("Processing {entity:?}");
25-
if let Some(source_key) = entity.object.url_decoded_key {
26+
if let Some(source_key) = entity.object.key {
2627
let parameters = add_builtin_parameters(captured_parameters(&router, &source_key)?);
2728
let output_key = hb.render("output", &parameters)?;
2829
info!("Copying {source_key:?} to {output_key:?}");
@@ -70,25 +71,12 @@ async fn main() -> Result<(), Error> {
7071
*/
7172

7273
fn entities_from(event: S3Event) -> Result<Vec<S3Entity>, anyhow::Error> {
73-
let expected_event = Some("ObjectCreated:Put".into());
7474
Ok(event
7575
.records
7676
.into_iter()
77-
// only bother with the record if the eventName is `objectCreated:Put`
7877
// only bother with the record if the key is present
79-
.filter(|record| record.event_name == expected_event && record.s3.object.key.is_some())
80-
.map(|record| {
81-
let mut entity = record.s3;
82-
info!("Mapping the entity: {entity:?}");
83-
/*
84-
* For whatever reasson aws_lambda_events doesn't properly make this url_decoded_key
85-
* actually available
86-
*/
87-
if let Ok(decoded) = urlencoding::decode(&entity.object.key.as_ref().unwrap()) {
88-
entity.object.url_decoded_key = Some(decoded.into_owned());
89-
}
90-
entity
91-
})
78+
.filter(|r| r.s3.object.key.is_some())
79+
.map(|r| r.s3)
9280
.collect())
9381
}
9482

@@ -159,24 +147,7 @@ mod tests {
159147
let event = load_test_event()?;
160148
let objects = entities_from(event)?;
161149
assert_eq!(objects.len(), 1);
162-
assert!(objects[0].object.url_decoded_key.is_some());
163-
164-
if let Some(key) = &objects[0].object.url_decoded_key {
165-
assert_eq!(key, "test/key");
166-
} else {
167-
assert!(false, "Failed to decode the key properly");
168-
}
169-
170-
Ok(())
171-
}
172-
173-
#[test]
174-
fn entities_from_with_nonput() -> Result<(), anyhow::Error> {
175-
let mut event = load_test_event()?;
176-
event.records[0].event_name = Some("s3:ObjectRemoved:Delete".into());
177-
178-
let objects = entities_from(event)?;
179-
assert_eq!(objects.len(), 0);
150+
assert!(objects[0].object.key.is_some());
180151

181152
Ok(())
182153
}

0 commit comments

Comments
 (0)