1
2

ECRを使ってVoicevoxのDockerイメージをApp Runnerにデプロイした話

Posted at

はじめに

この記事は、「ハッカソンでデプロイしたアプリでもvoicevoxを使いたい!」という気持ちから、実際にAWSのApp Runnerにデプロイしたものを忘備録的に残しておこうというものです。

注意点

AWSは色々な無料枠を用意してくれていますが、App Runnerには無料枠がありません!(2024/09/06時点現在)
発生するお金に関してはご自身の責任でお支払いください。

なぜApp Runner

  • 今回参加したハッカソンではデプロイにはAWSを使う必要があったため
    • 開発期間中は開発用のクレジットがもらえたため、金額などは気にしなくてよかった
  • できる限りお手軽にデプロイしたい!
    • できる限り設定をしたくない
  • 新しいことに挑戦したい!

これらの理由でApp Runnerを選んでデプロイしました!

「ECSじゃダメなの?」というかた、試してはいませんが多分いけます!(是非試して記事にしてください!)

事前準備

下記の2つは他の記事などを参考に設定を終わらせておいてください。

  1. AWSへの登録
  2. AWS CLIの導入、設定

デプロイ

Dockerfileの準備

今回は次のような簡単なDockerfileを使ってvoicevoxをデプロイします。
ベースイメージはこちらのものをお借りしています。

FROM voicevox/voicevox_engine:cpu-ubuntu20.04-latest

EXPOSE 50021

ECRにイメージをデプロイ

ECRのリポジトリの作成

以降の${}は適宜自分のものに適宜置き換えて使ってください。

まず、AWS CLIを使ってECRのリポジトリを作成します。

リポジトリネームは適当な名前をつけ、リージョンに関しても使いたいものを指定してください。

aws ecr create-repository --repository-name ${REPOSITORY_NAME} --region ${AWS_REGION}

リポジトリが作成されたかを、GUIでも下記のコマンドでも良いので確認してみましょう。

aws ecr describe-repositories --region ${AWS_REGION}

ECRにデプロイするDockerfileの準備

確認したら、次はDockerの準備をしましょう。
Dockerイメージをpushするためにawsにログインする必要があります。
何個かやり方があるらしいのですが、今回は公式サイトを参考に、下記のコマンドでログインをすることにします。

aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com

ログインしたら、pushするイメージファイルの準備をします。

ECRにpushするdockerイメージのレジストリ形式は次のようになります。

${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY_NAME}:${TAG}

これをpushする予定です。(tagは指定しなければlatestになります)

Dockerfileがあるディレクトリに移動し、下記のコマンドを実行してください。(今回はtagをv1とさせていただきます)

docker build -t ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY_NAME}:v1 .

DockerイメージをECRにpush

ビルドが完了したら、下記のコマンドでECRにpushしましょう。

docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY_NAME}:v1

pushしたら、GUIか下記のコマンドで確認してみましょう。

aws ecr list-images --repository-name ${ECR_REPOSITORY_NAME} --region ${AWS_REGION}

イメージのpushが終わったら、App Runnerの画面に移動しましょう!

App RunnerでECRのDockerイメージからデプロイ

AWSのApp Runnerのトップ画面から「サービスの作成」→「コンテナレジストリ」→「Amazon ECR」→「参照」でpush先のリポジトリ名を選択し、タグ(今回ならv1)を選択し、「続行」を押してください。

デプロイトリガーは「手動」、ECRアクセスロールに関しては、一度もApp Runnerを触ったことない方は「新しいサービスロールの作成」を選び「次へ」を選択してください。

サービス設定に関して

サービス名は適宜決めていただき、CPU、メモリに関しても使う分だけ設定してください。
今回はあまり使わない予定なので、

  • 仮想CPU「0.25vCPU」
  • 仮想メモリ「0.5GB」
  • port:50021
    と設定しました。

それ以外の設定はしませんが、必要な場合は適宜行ってください。

「次へ」を選ぶと確認画面が出るので、問題なければ「作成とデプロイ」を押してください。

これでデプロイ完了です!

エラーが出た場合

下記のようなエラーが出た方へ(自分も出ました)

exec /entrypoint.sh: exec format error

参考:これが出たら、build時に--platform linux/amd64を追加すれば問題なく動作します。

docker build --platform linux/amd64 -t ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY_NAME}:v1 .
1
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
1
2