永続ストレージと RDS PostgreSQL を使用して AWS Elastic Beanstalk で Label Studio をホストする方法
パク・ヒョンテク
Twigfarmのシニア・フルスタック・エンジニア
Twigfarmでは、AWS Elastic Beanstalkでラベルスタジオをホストしたいと考えていました。その方法をグーグルで検索したところ、1 つの記事しか見つかりませんでした。 https://medium.com/@KerleIndia/how-to-host-label-studio-on-aws-elastic-beanstalk-41abcbcced4
AWS Elastic Beanstalk で Label Studio をホストする簡単な方法を提供していますが、データの永続性に問題があります。ストレージは一時的なもので、ログインステータスとファイルは数時間以内に消えます。
別の解決策は、Heroku を使用することです。数回クリックするだけで、Label Studio アプリケーションを Heroku に簡単にデプロイできます。しかし、私たちはデータベースとファイルを制御したいので、AWS Elastic Beanstalk にオプションを与えることはできませんでした。
このチュートリアルでは、永続ストレージとデータベースを保存したまま、Label Studio アプリケーションを AWS Elastic Beanstalk にデプロイする方法について説明します。カスタムドメインと HTTPS 設定は、このチュートリアルの対象外です。以下のリンクを参照してヒントを得ていただけますか。 https://io.twigfarm.net/aws/https-ec2/
建築
これは、AWS Elastic Beanstalkセットアップにデプロイされているラベルスタジオをホストする方法の簡単な図です。
注意すべき点の1つは、ここではデモ用にできるだけ小さいインスタンスを使用していることです。本番環境へのデプロイを行う場合は、より大きなインスタンスとロードバランサーでセットアップする必要があるかもしれません。
最初に RDS Postgres をセットアップすることから始めましょう。
AWS RDS ポストグレスセットアップ
RDS にアクセスして PostgreSQL データベースを作成してください。以下の設定以外はデフォルトのままにします。
- PostgreSQL を選択してください
- ユーザー名を設定
- マスターパスワードを設定する
- パスワードを確認
- 追加構成での初期データベース名 (重要!):「labelstudio_db」を使用しました
その後、データベースの作成が完了するまでしばらくお待ちください。
ドッカービルド
さあ、ラベルスタジオの GitHub リポジトリをクローンしてください。
git clone https://github.com/heartexlabs/label-studio.git label-studio-eb
ECR セットアップ
これで Docker イメージの準備が整いました。今度は Docker イメージのリポジトリをセットアップする時です。
「Amazon エラスティックコンテナサービス (ECS)」に移動し、AWS コンソールの左側のパネルにある Amazon ECR の下のリポジトリを選択します。
[リポジトリを作成] をクリックします。
[リポジトリを作成] をクリックします。
リポジトリが作成されたら、「プッシュコマンドを表示」をクリックし、次のようにコマンドを入力します。
以下は順番に行われます。
- ログインします
- ドッカービルド
- 鬼ごっこ
- プッシュ
プッシュが成功すると、ちょうど良かった画像が表示されるはずです。
Elastic Beanstalk から ECR に接続するための IAM ロール
AWS コンソールの「IAM」に移動します。「アクセス管理」>「ロール」で「aws-elasticbeanstalk-ec2-role」を選択します。「CR アクセス用の AWS アプリ実行サービスポリシー」ポリシーを追加します。
EFS
AWS コンソールの EFS (エラスティックファイルシステム) に移動します。[ファイルシステムの作成] ボタンを選択してファイルシステムを作成します。すべての設定はそのままにしておきます。「Standard」ストレージクラスを使用して作成します。
次のセクションで必要な「ファイルシステムID」をメモしておきます。
エラスティックビーンストークデプロイファイル
次の 4 つのファイルを作成する必要があります。
- .ebextensions/01_mount.config # EFS マウント用
- .platform/00_nginx.config # nginx 設定用
- .platform/nginx/conf.d/proxy.conf # ファイルサイズ無制限でアップロードする場合
EFS マウント
永続的なストレージは非常に重要です。というのも、私たちはソースファイルをアップロードして出力ファイルを作成するので、時間をかけてユーザー間で検討する必要があるからです。EFS はかなり一貫性があり、スケールも一貫していることがわかりました。
まず、以下のディレクトリとファイルを作成します。
nginx コンフィギュレーション
ラベルスタジオでは、10 MB を超えるサイズのファイルを扱うことがよくあります。大きいサイズのファイルをアップロードできるように、デフォルトの nginx 設定を手動でオーバーライドする必要があります。この目標を達成するには 2 つのファイルが必要です。
Elastic Beanstalk プラットフォーム拡張機能の詳細については、次のリンクを参照してください。 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html
Dockerrun.aws.json ファイル
アップロードする
これで、Elastic Beanstalk 設定ファイルの準備が整いました。これらを 1 つのファイル (deploy.zip) に圧縮してみましょう。
ほぼ完了しました。システムをデプロイする Elastic Beanstalk アプリケーションを作成してみましょう。
エラスティック・ビーンストークの作成
AWS コンソールの「Amazon エラスティックビーンストーク環境」に移動します。まず、「新しい環境の作成」を開発することから始めます。
- 環境層:Web サーバー環境
- アプリケーション名:ラベルスタジオ-EB
- プラットフォーム:ドッカー
- プラットフォームブランチ:64 ビット Amazon Linux 2 で動作する Docker
- プラットフォームバージョン:3.4.17 (推奨)
- アプリケーションコード:コードをアップロード
- ソースコードの起源:ローカルファイル
- ファイルを選択:deploy.zip
まだ終わっていません。[その他のオプションを設定] ボタンをクリックして、データベースの環境変数を設定します。「ソフトウェア」セクションを見つけて、「編集」ボタンをクリックします。次に、下にスクロールして [環境プロパティ] に環境変数を入力します。
ネットワークセットアップ
EFS が入っているものと同じ VPC を選択してください。
インスタンスセキュリティグループのセットアップ
デフォルトのセキュリティグループはすべての着信トラフィックを許可するので、デフォルトのセキュリティグループを選択してください。具体的には、EFS に接続するために 2049 ポートを開くセキュリティグループを選択する必要があります。
環境変数セット
- POSTGRE_USER: <DB_USERNAME>
- POSTGRE_パスワード:<DB_PASSWORD>
- POSTGRE_HOST: <HOST_URL># [RDS] > [接続とセキュリティ] > [エンドポイント] で検索してください
- POSTGRE_PORT: 5432 # RDS > 接続とセキュリティ > ポートで検索してください
- ポストツリー名:labelstudio_db
- ジャンゴ_DB: デフォルト
[保存] ボタンをクリックし、[環境を作成] ボタンをクリックします。これには数分かかります。
これで環境の準備が整いました。[環境に移動] ボタンをクリックして、アプリケーションが正常に動作するかどうかを確認します。