LoginSignup
6
2

More than 3 years have passed since last update.

ECS Fargate(Version 1.4.0)にてffmpegなpipe芸をしようとしたら見事に動かなかったので証跡を書いておく

Posted at

概要

2020年7月29日現在、Fargateのver 1.4.0にてpipe周りにおかしな挙動があるっぽい。

おかげでffmpegのpipe芸に詰まってそれなりに時間を溶かしたのでメモっておく。

何をしたかったか?

ECSをTask RunするとRTMPを落としてMP4にパッケージングしつつS3に投げ込むっていう超絶シンプルな行いをしたかった。

原本では無いけど、Dockerfileとか起動時用コマンドはこんな感じ。

Dockerfile

FROM ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive

RUN set -x \
  && apt-get update \
  && apt-get install -y \
    curl \
    wget \
    tar \
    xz-utils \
    liblzma-dev \
    ca-certificates \
    openssl \
    musl-dev \
    tzdata \
    zlib1g-dev \
    libssl-dev \
    libreadline-dev \
    libsqlite3-dev \
    libbz2-dev \
    libncurses5-dev \
    libgdbm-dev \
    liblzma-dev \
    tk-dev zlibc \
    libffi-dev \
    zip \
    unzip

RUN set -x \
  && cd /tmp/ \
  && wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-4.3-amd64-static.tar.xz \
  && tar xvf ffmpeg-4.3-amd64-static.tar.xz \
  && cd ffmpeg-4.3-amd64-static \
  && mv ffmpeg /usr/bin/ \
  && mv ffprobe /usr/bin/ \
  && mv model /usr/bin/ \
  && mv qt-faststart /usr/bin/

RUN set -x \
  && apt-get update \
  && apt-get install -y python \
  && apt-get install -y python3-pip \
  && pip3 install awscli --upgrade --user

COPY cmd_in_docker.sh /usr/local/bin
CMD ["/usr/local/bin/cmd_in_docker.sh"]

cmd_in_docker.sh

#!/bin/bash

set -e

set -x \
&& export PATH=~/.local/bin:$PATH \
&& ffmpeg -y -i "rtmp://..." -c copy -f mp4 -movflags frag_keyframe+empty_moov - | aws s3 cp - "s3://バケット名/ファイル名.mp4"

ECS Task Runなコマンド

こんなノリ

aws ecs run-task \
  --cluster $CLUSTER_ARN \
  --task-definition $ECS_TASK_ARN \
  --region "ap-northeast-1" \
  --network-configuration "awsvpcConfiguration={subnets=$SUBNETS,securityGroups=$SGS,assignPublicIp=ENABLED}" \
  --launch-type "FARGATE" \
  --platform-version "1.4.0"

もともとファイルをEFSに書き出そうとしていたので、その遺産として --platform-version "1.4.0" としていたのがミスでした。

何が起きたのか?

あんまりちゃんとデバックしていないのでなんとも言えませんが、数分経つとffmpegが全く仕事をしなくなります。
そこで落ちてくれればいいのにそれすらしない。厄介ですね。

デバッグ準備

仕方がなく、SSMを仕込みました。余談ですがFargate + TerraformでSSMをやるには下記記事が参考になりました。

FargateとSSMでssh(ぽい)環境を構築してみた

SSMで接続してffmpegを手動実行

ffmpeg -y -i "rtmp://..." -c copy -f mp4 -movflags frag_keyframe+empty_moov - | aws s3 cp - "s3://バケット名/ファイル名.mp4" を手作業で実行した所、まぁ元気に動くんだなぁー

もしやということで 1.3.0 にしてみた

aws ecs run-task \
  --cluster $CLUSTER_ARN \
  --task-definition $ECS_TASK_ARN \
  --region "ap-northeast-1" \
  --network-configuration "awsvpcConfiguration={subnets=$SUBNETS,securityGroups=$SGS,assignPublicIp=ENABLED}" \
  --launch-type "FARGATE" \
  --platform-version "1.3.0"

元気に動いたんだなぁ…

余談

その昔、WSLでのffmpegのpipe芸で詰まったことがあったのですが、それと同じような挙動な気がしています…

Windows10で作るMirakurun + Chinachu Gammaな録画サーバー ~VagrantとPT3(BonDriver)を添えて~ - さわっても熱くない花火

所感

あまりにも悲しい気持ちになったので、すごい勢いで証跡を残してしまいました。悲しいなぁ。

各所で1.4.0の悪い噂を聞いていましたが、自分が被ることになるとは…

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2