Skip to content

Quden transcoder

Video のトランスコードなどを行うサーバのリポジトリです。 AWS ECS でワーカーとしてデプロイされています。

NOTE

Video の変換処理については、動画変換処理の概要 を参照してください。

local 環境セットアップ

  1. bitwarden の quden-transcoder / .env.development.local をコピーして、.env.development.local として保存
  2. npm run dev:docker:up でコンテナを立ち上げる
  3. constants.tsIS_ECS_VIDEO_TRANSCODER_AVAILABLE フラグを true にした状態で、backend を立ち上げる
  4. backend で yarn ngrok をし、backend を公開
  5. chrome 拡張で動画を撮影すると、ジョブが SQS にキューされ、transcoder がジョブを処理するようになる

ローカルでのデバッグ方法

npm run dev:docker:up で立ち上げたコンテナに入り込む場合は、以下のコマンドを実行してください。

shell
# $CONTAINER_ID には、`docker container ls -a` などで確認できる、docker コンテナの ID を入れてください
docker exec -it $CONTAINER_ID /bin/bash

デプロイ方法

コンテナは AWS の ECR のサービスの1つとしてデプロイされています。デプロイの流れは大きく下記のとおりです。

  1. Version の更新
  2. AWS ECR に Docker image を push する
  3. Push した image で ECS の Service を更新する

0: Version の更新

Create Release workflowworkflow_dispatch をトリガーすることで、version を更新できます。

流れは下記のとおりです:

  1. workflow_dispatch をトリガーする
  2. main ブランチが更新されるので local に main ブランチを pull する

NOTE

TODO: 本当は deploy まで GitHub Actions で実行したい

1: AWS ECR に Docker image を push する

まずはじめに、下記2つの dotfile をルートディレクトリに用意して、必要な情報を代入してください。

  • .env.staging
  • .env.production
sh
# ex: .env.(staging|production)
AWS_ACCOUNT_ID= # AWS ACCOUNT ID を入れる
AWS_PROFILE_NAME= # aws cli の profile 名を入れる
AWS_ECR_REPO_NAME= # push する先の ECR リポジトリ名を入れる

.env ファイルが用意できたら、以下の手順に従って push およびデプロイ作業を行ってください:

  1. SSO で AWS にログイン (aws sso login --profile $AWS_PROFILE_NAME)
  2. npm run (stg|prod):build-and-push-image で docker image build を行い、 ecr への push を行う

TIP

stg:build-and-push-image:cache は、キャッシュを利用してビルドを行うため、ビルド時間を短縮できます。ただし、キャッシュが古い場合は、ビルドが失敗する可能性があります。

2: Push した image で ECS の Service を更新する

Image が正常に Push できたら、AWS の ECS コンソールにアクセスして、Service を更新します。

大抵のケースではタスク定義を更新する必要はなく、既存のタスク定義を指定しつつ、「新しいデプロイを強制」することで、push した image を反映します。

詳細な手順は下記クリップを参考にしてください:

https://app.quden.io/videos?videoId=65b881222fd9704fecab4646