Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS Lambda: How to use tools that must be installed first in linux?

I understand that AWS Lambda runs on the application layer of an isolated environment.

In many situations, functions need to use third-party tools that must be installed first on the linux machine. For example, a media processing function uses exiftool to extract metadata from image, so I install exiftool first.

Now I want to migrate the media processing code into AWS Lambda. My question is, how can I use those tools that I originally must install on linux? My code is written in Java, and exiftool is necessary.

like image 374
Jinsong Li Avatar asked Oct 16 '25 04:10

Jinsong Li


2 Answers

To expand on Daniel's answer, if you wanted to bundle exiftool, you would follow steps 1 and 2 for Unix/Linux platforms from the official install instructions. You would then include exiftool and lib in your function's zip file. To run exiftool you would do something like:

const exec = require('child_process').exec;

exports.handler = (event, context, callback) => {
  // './exiftool' gave me permission denied errors
  exec('perl exiftool -ver', (error, stdout, stderr) => {
    if (error) {
      callback(`error: ${error}`);
      return;
    }
    callback(null, `stderr: ${stderr} \n stdout: ${stdout}`);
  });
}
like image 83
Palisand Avatar answered Oct 17 '25 20:10

Palisand


https://aws.amazon.com/lambda/faqs/

Q: What languages does AWS Lambda support?

AWS Lambda supports code written in Node.js (JavaScript), Python, and Java (Java 8 compatible). Your code can include existing libraries, even native ones. Please read our documentation on using Node.js, Python and Java.

So basically you can call out to native processes if they are pre-installed but only from JavaScript and Java as the parent process.

To get a rough idea of what is installed have a look at what packages are installed:

https://gist.github.com/royingantaginting/4499668

This list won't be a 100% accurate, to do that you would need to look directly at the AMI image (ami-e7527ed7)

exiftool doesn't appear to be installed by default. I doubt the account running the lambda function would have enough rights to install anything globally but you could always bundle exiftool with your Node or Java function.

You may also want to have a look at lambdash (https://github.com/alestic/lambdash) which allows you to run command from your local command line on a remote lamdba instance

like image 22
Daniel Worthington-Bodart Avatar answered Oct 17 '25 20:10

Daniel Worthington-Bodart