Open2

S3に上げられたファイルをLambdaで処理してS3に上げ直す

Yoshi YamaguchiYoshi Yamaguchi

まず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}"
Yoshi YamaguchiYoshi Yamaguchi

これで作ったコンテナイメージをECRにアップロードして、LambdaのコンソールでイメージのURLを指定してLambda関数を作成。手元がmacOSでイメージを作ってるので、関数を作る際にCPUアーキテクチャをarm64にするのを忘れないようにする。

Lambda関数の作成が終わったらConfiguration > Environment varibalesでシェルスクリプトで使う環境変数を定義しておく。