christian at agile venture bolzano 2019 christian fei's blog

agile developer, clean code connoisseur && testing aficionado

read more about me or what i am doing now

scroll through posts that i wrote

AWS Lambda + S3 + ffmpeg = Timelapse

written on 2019-08-30 by Christian Fei

#post #aws #js #tut 


Yes you read that right. Figured out a way to make a timelapse thanks to AWS Lambda and a bucket with images on S3.


Deploy the ffmpeg layer

With aws lambda you can leverage an existing layer made of pre-built packages.

You can extend the ffmpeg-lambda-layer to write the Lambda with ffmpeg built in.

So to do this, deploy the Layer via the serverless repo: Click here and deploy it on AWS Lambda and copy the ARN


Create an S3 bucket

Name it, for example, "garden-snapshots" in the same region as the ffmpeg-lambda-layer

Get project

Download the project from here:

git clone [email protected]:christian-fei/timelapse-lambda.git

Create IAM Role

Go to IAM and create a role with the following permissions:


Create timelapse lambda

run ./create-aws-lambda by specifying the needed parameters, below you can find an example.

in the same region as above!

./create-aws-lambda \
  --region us-east-1 \
  --lambda Timelapse \
  --role arn:aws:iam::XXXXXXXXXXX:role/lambda_name \
  --ffmpeg arn:aws:lambda:us-east-1:XXXXXXXXXXX:layer:ffmpeg:1

update the lambda with the code

specify the region and the lambda name as above and run:

./deploy-aws-lambda \
  --region us-east-1 \
  --lambda Timelapse


Download the project from here:

git clone [email protected]:christian-fei/timelapse-lambda.git

npm install and take a look at launch-lambda-example.js:

#!/usr/bin/env node

const AWS = require('aws-sdk')

const region = 'us-east-1'

const apiVersion = 'latest'
const lambda = new AWS.Lambda({ apiVersion, region })
const invokeParams = { FunctionName: 'Timelapse' }

lambda.invoke(invokeParams, (err, data) => {
  console.log(err, data)