Synchronising a single file with AWS

The cover image for this post

It's easy to copy a single file to aws using:

aws s3 cp ...

But this will copy the file regardless of whether or not it has changed.

It's also easy to synchronise a directory of files to aws using:

aws s3 sync ...

But this only synchronises a directory.

I've got a lambda function I need to synchronise and it's packaged, as recommended by AWS, as a zip. I want to synchronise this file because it's large and anything else, i.e. copying it every time, would be stupid. But I don't want it to live in it's own directory on S3: it doesn't need to, it's just a zip. And there are files I want to be adjecent to the zip that I definitely don't want to synchronise. They look like this:

bucket/
├── lambdas/
│   ├── lambda_function.zip
│   └── some_other_file.csv

Well you can still use sync, but you just need to add a few params. First, you want to exclude everything with:

--exclude "*"

And then you want to include your specific file:

--include "lambda_funtion.zip"

As in:

aws s3 sync ./build_dir s3://bucket \
    --exclude "*" \
    --include "lambda_function.zip"

This lets you get specific about what files you want, and gives you the benefits of sync. And the syntax isn't too verbose.