AWS Lambdaにコマンドを追加する
小ネタです。
AWS LambdaはAmazon Linux上で動いていますので、Amazon Linuxにデフォルトで入っているコマンドについては、Lambda内で普通に呼び出すことができます。
ただ、場合によってはデフォルトで入っているもの以外も実行したいケースがあると思います。
この場合は配備するLambdaのパッケージ内に対象のバイナリを含めてアップすることで、デフォルトではインストールされていないコマンドを実行することができます。
自分の場合はLambda内でffmpegコマンドを実行したかったので、以降、これを例に記述します。
まずは実行したいバイナリの準備。当然、ソースからAmazon Linux上でコンパイルするのがベストですが、ffmpegの場合は、公式で配布されているLinux向けバイナリがそのまま動いたので、これをそのまま使うことにします。
こちらのページからx86_64 build
のバイナリをダウンロードし、解凍後ffmpeg本体をbinディレクトリに配置します。
バイナリが提供されていない場合であれば、dockerやEC2などでAmazon Linuxでコンパイルしたバイナリを自前で準備する必要があります。
フォルダ構成としては以下のようになります。
|-- bin
| `-- ffmpeg
|-- serverless.yml
`-- index.js
デプロイ周りはserverless frameworkにおまかせするのが簡単です。
あとは、コマンド実行前にパスを通せばいいのでindex.jsなどで
process.env.PATH += ':/var/task/bin';
let execSync = require('child_process').execSync;
execSync('ffmpeg ....');
とすることでffmpegコマンドをLambdaで実行できます。