Open2
S3に上げられたファイルをLambdaで処理してS3に上げ直す
まずLambdaで使うためのffmpegとAWS CLIを使えるコンテナを作成する。いまAmazon Linux 2023が最新なので、本当に適当にコンテナを作成する。
FROM public.ecr.aws/amazonlinux/amazonlinux:2023.6.20241121.0 AS ffmpeg
RUN dnf update \
&& dnf install -y awscli git bzip2 tar gcc make openssl-devel readline-devel zlib-devel wget xz xz-devel \
&& mkdir ffmpeg \
&& cd ffmpeg \
&& wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-arm64-static.tar.xz \
&& tar -xf ffmpeg-release-arm64-static.tar.xz \
&& cp ffmpeg-7.0.2-arm64-static/ffmpeg /usr/bin/ffmpeg \
&& cd .. \
&& rm -rf ffmpeg
COPY decode.sh decode.sh
decode.sh
はシェルスクリプトでただS3からファイルを持ってきて、オーディオだけぶっこ抜いてS3に戻すということだけをやっている。
#!/bin/bash
source="s3://${FFMPEG_S3_BUCKET}/${FFMPEG_SOURCE}"
base=$(basename "${FFMPEG_SOURCE}" .ts)
target="${base}.m4a"
aws s3 cp "${source}" .
ffmpeg -i "${source}" -vn -c:a copy "${target}"
aws s3 cp "${target}" "s3://${FFMPEG_S3_BUCKET}/${target}"
これで作ったコンテナイメージをECRにアップロードして、LambdaのコンソールでイメージのURLを指定してLambda関数を作成。手元がmacOSでイメージを作ってるので、関数を作る際にCPUアーキテクチャをarm64
にするのを忘れないようにする。
Lambda関数の作成が終わったらConfiguration > Environment varibalesでシェルスクリプトで使う環境変数を定義しておく。