Youtube動画要約アプリをCloud Runに素早くデプロイ
Youtube動画を要約するアプリをStreamlitで作成し、PulumiでCloud Runに素早くデプロイします。
Table of contents
author: Mami
はじめに
GIクラウドのMamiです。Youtube動画で料理動画を見て料理をすることがありますが、やり方がわからない場合は動画はとても便利ですが、材料や手順を概要欄に書いてあると材料紹介の時に動画ストップしたりしなくて良いので助かります。今回はYoutube動画要約サイトはいくつかありますが、それをお手軽に作る方法を検討しました。
この記事では、以下2つのことについて記載します。
- PulumiというInfrastructure as Code(IAC)で素早くCloud Runにデプロイする方法
- Youtube動画を要約するアプリをStreamlitで作成する方法
完成イメージ
以下が完成イメージです。
左のサイドバーにGeminiAPIキーを入力して、Youtube動画のURLを入力します。詳細な指示を追加プロンプトに入力することも出来ます。
Youtube動画の要約結果を出力します。(サムネイル画像にはぼかしを入れています)
Infrastructure as Code(IAC)とは何か
Infrastructure as Code(IAC)について少し触れます。IaCとはサーバーやネットワークをはじめとしたインフラの構成をプログラムのようにコードで構成を定義し、構築や管理を⾃動化する⼿法のことです。またコード化することによりインフラの一貫性が確保されるので、構成ミスのリスクを軽減することが出来ます。
IaCは、以下5つのカテゴリに分類されています。
カテゴリ | 詳細 | 例 |
---|---|---|
アドホックスクリプト | タスクやプロセスを自動化するために作成されたカスタムスクリプト。 | Bash,Ruby,Pythonなど |
構成管理ツール | サーバー上のソフトウェアとシステムの構成を自動化する。 | Ansible,Puppet,Chefなど |
サーバーテンプレートツール | OS、インストールされているソフトウェア、構成を含むサーバー全体の状態のスナップショットを作成し、同一サーバーの迅速なプロビジョニングを可能にする。 | Packer,Docker,Vagrantなど |
オーケストレーションツール | サーバーのクラスター全体でコンテナ化されたアプリケーションの展開、スケーリング、操作を管理する。 | Kubernetes,Docker Swarm,Normadなど |
プロビジョニングツール | サーバー、データベース、ロード バランサー、監視、SSL証明書などのインフラストラクチャ コンポーネントのセットアップを自動化する。 | Terraform,Pulumi,CloudFormationなど |
今回は、プロビジョニングツールに分類されるPulumiを使用してCloud Runにデプロイする方法をご紹介します。プロビジョニングツールにおいては、Terraformが非常に人気がありますが、Terraformは専用言語 (HCL)の学習が必要になるのに対し、Pulumiはプログラミング言語 (TypeScript、Go、.NET、Python、Java)が使用できるというところに大きなメリットを感じたのでPulumiを使うことにしました。
Terraform,Pulumiの比較はこちらのサイトがとても参考になりました。
Pulumiで素早くCloud Runにデプロイする方法
それではまず最初にPulumiというInfrastructure as Code(IAC)で素早くCloud Runにデプロイする方法について説明します。 以下をあらかじめ準備する必要があります。
必要なもの | 詳細 |
---|---|
Google Cloudプロジェクト | 課金が有効なGoogle Cloudプロジェクト。Cloud Run Admin API を有効にします。本記事に従った場合は数円程度ですがご自身で確認の上、利用してください。 |
gcloud CLIインストール | インストールがまだの場合はこちらからインストールして下さい。作成したプロジェクトを紐づけます。 |
Pulumi アカウント | Pulumiアカウントをまだ持っていない場合は、Pulumi にサインアップしてください。 個人向けのPulumi利用は無料です。料金表 をご確認ください。 |
Dockerインストール | インストールがまだの場合はこちらからインストールして下さい。 |
初期設定
macOSの場合は以下でインストールできます。WindowsやLinuxの方はこちらを参考にしてください。
$ brew install pulumi/tap/pulumi
PulumiはGoogle Cloudリソースと対話するためにデフォルトのアプリケーション認証情報を必要とするため、以下コマンドを実行してこれらの認証情報を取得します。
$ gcloud auth application-default login
Pulumiプログラムを作成
フォルダを作成して、Pulumiのテンプレート「container-gcp-python」でプロジェクトを作成します。今回はCloud Runにデプロイしたいので、テンプレートはContainer Service on Google Cloudを選択しました。他のテンプレートもあるので使ってみてください。
pulumi newコマンドを実行すると、いくつかの設定を聞かれます。(今回はデフォルトのまま進みました)Pulumiが仮想環境を作成します。
$ mkdir SummarizeYoutubeVideos && cd SummarizeYoutubeVideos
$ pulumi new container-gcp-python
<実行結果>
完了すると、フォルダの構造は以下のようになります。app.pyのソースを見てみると、“message”: “Hello, world!” を返却するアプリのようです。
デプロイ
テンプレートから何も変えずにデプロイしてみます。
$ pulumi up
変更概要がプレビュー表示されます。
yes選択でリソースが作成されます。
Outputsのurlをクリックすると、以下が表示されます。
これでCloud Runへデプロイは完了です。
もし以下エラーが出た場合は、こちらを参考にしてください。
denied: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "xxx" (or it may not exist)
Youtube動画を要約するアプリをStreamlitで作成する方法
次にテンプレートからソースを変更して、Youtube動画を要約するアプリをStreamlitで作成して、Cloud Runにデプロイします。
以下をあらかじめ準備する必要があります。
必要なもの | 詳細 |
---|---|
GeminiAPI | Google AI Studioの画面左上の「Get API Key」より取得可能です。(注)2024年5月2日以降、課金が有効になっているプロジェクトから Gemini API を使用する場合、その使用には従量課金制の料金が適用されます。料金表 をご確認ください。 |
また以下Pythonライブラリを使用します。
Pythonライブラリ | 概要 |
---|---|
streamlit | Pythonで実装されたオープンソースのWebアプリケーションのフレームワーク |
youtube_transcript_api | Youtube動画の文字起こし |
google.generativeai | API経由でGemini Pro(LLM)が使える |
Dockerfile を更新
Dockerfileを以下に書き換えます。
FROM python:3.10-slim
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8080
ENTRYPOINT ["streamlit", "run", "app.py", "--server.port=8080", "--server.address=0.0.0.0"]
FROM python:3.10-alpineはエラーになったため、3.10-slimを使用しています。
requirements.txt 変更
appフォルダ内のrequirements.txtを以下に書き換えます。
youtube_transcript_api
streamlit
google_generativeai
app.py 変更
appフォルダ内のapp.py以下に書き換えます。
app.py 変更
もう一度デプロイしてみましょう。
$ pulumi up
Outputsのurlをクリックすると、以下が表示されたでしょうか。
終わりに
Pulumiを使うとCloud RunへStreamlitアプリが迅速かつ効率よく展開することが出来ました。レシピ動画を要約して私の夕飯作りも効率よくなることを期待したいです。最後までお読みいただきありがとうございました。
※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。
※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。