はじめに
この記事は、「ハッカソンでデプロイしたアプリでもvoicevoxを使いたい!」という気持ちから、実際にAWSのApp Runnerにデプロイしたものを忘備録的に残しておこうというものです。
注意点
AWSは色々な無料枠を用意してくれていますが、App Runnerには無料枠がありません!(2024/09/06時点現在)
発生するお金に関してはご自身の責任でお支払いください。
なぜApp Runner
- 今回参加したハッカソンではデプロイにはAWSを使う必要があったため
- 開発期間中は開発用のクレジットがもらえたため、金額などは気にしなくてよかった
- できる限りお手軽にデプロイしたい!
- できる限り設定をしたくない
- 「新しいことに挑戦したい!」
これらの理由でApp Runnerを選んでデプロイしました!
「ECSじゃダメなの?」というかた、試してはいませんが多分いけます!(是非試して記事にしてください!)
事前準備
下記の2つは他の記事などを参考に設定を終わらせておいてください。
- AWSへの登録
- 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 .