動画変換用のコンテナイメージ(ffmpeg)をECRに登録する

2018.06.18

コンニチハ、千葉です。

AWS Batchでffmpegを使った動画変換処理環境を用意する機会がありました。はじめは、Amazon Linuxのコンテナにffmpegをインストールしようかと思って公式ページをみていると、色々コンパイルが必要そうでした。yumやapt-getでサクッとインストールしたくて、さまよっていたら公式のwikiページにビルド済みのコンテナイメージの記載があったのでこちらを利用することにしました。

やりたいこと

今回の要求事項は以下です。

  • ffmpegが利用できること
  • aws cliが利用できること
  • S3に配置したスクリプトを実行する
  • ECRからコンテナイメージを利用できること

やってみた

Docker Hubに登録されているffmpeg用のコンテナイメージを確認したところ、centosやubuntuなどが用意されていました。デフォルトはubuntuのようです。今回はubuntuを利用します。これでffmpegがビルドインされているコンテナを利用できます。あとは、AWS CLIを追加でインストールします。また、AWS Labosで提供されている、S3ファイルののスクリプトを実行するfetch-and-runを利用します。

こんな感じでDockerfileを書いてみました。

FROM    jrottenberg/ffmpeg
RUN     apt-get update
RUN     apt-get install awscli unzip -y
ADD	fetch_and_run.sh /usr/local/bin/fetch_and_run.sh
RUN	chmod +x /usr/local/bin/fetch_and_run.sh
ENTRYPOINT ["/usr/local/bin/fetch_and_run.sh"]

コンテナイメージをビルドします。

$ ls
Dockerfile		fetch_and_run.sh
$ docker build -t ffmpeg . 
$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
ffmpeg                          latest              89ead25bf221        12 hours ago        297MB

AWS CLI、ffmpegが利用できるか確認します。

$ docker run -it --entrypoint='bash' ffmpeg
# ffmpeg -version
ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-libkvazaar --enable-postproc --enable-small --enable-version3 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib --extra-libs=-ldl --prefix=/opt/ffmpeg
libavutil      55. 78.100 / 55. 78.100
libavcodec     57.107.100 / 57.107.100
libavformat    57. 83.100 / 57. 83.100
libavdevice    57. 10.100 / 57. 10.100
libavfilter     6.107.100 /  6.107.100
libavresample   3.  7.  0 /  3.  7.  0
libswscale      4.  8.100 /  4.  8.100
libswresample   2.  9.100 /  2.  9.100
libpostproc    54.  7.100 / 54.  7.100
# aws --version
aws-cli/1.11.13 Python/3.5.2 Linux/4.9.87-linuxkit-aufs botocore/1.4.70

コンテナイメージは問題なさそうです。 最後にビルドしたコンテナイメージをECRへプッシュします。まずは、ECRリポジトリを作成します。

イメージをプッシュします。(アクセスキーの設定は別途実施してください)

$ $(aws ecr get-login --no-include-email --region ap-northeast-1)
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
$ docker tag ffmpeg:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/ffmpeg:latest
$ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/ffmpeg:latest

ECRにプッシュされていることを確認します。

やりたいことはこれで終了です!

最後に

動画変換用のコンテナイメージを用意することができました。これを使ってバッチ環境を構築していきたいと思います。

参考