GCP 入門 (10) - Cloud Run
「GCP」(Google Cloud Platform)の「Cloud Run」の使い方をまとめました。
前回
1. Cloud Run
「Cloud Run」は、1インスタンス1コンテナなサーバレスサービスです。呼び出し毎にインスタンスを生成し、コンテナを実行し、結果を返します。
料金は、次のとおりです。
2. Cloud Run(フルマネージド)とCloud Run for Anthos
「Cloud Run」は、「フルマネージド環境」と「Anthos」の2つの環境を選択できます。
◎ Cloud Run(フルマネージド)
「Cloud Run」(フルマネージド)は、基盤インフラについて心配することなく、ステートレスコンテナをデプロイできます。ワークロードは、トラフィックに応じて自動的にスケールされます。料金は、アプリが実行されている間のみ、100ミリ秒単位で課金されます。
◎ Cloud Run for Anthos
「Cloud Run for Anthos」は「Kubernetes」の複雑なコンセプトを抽象化し、「Kubernetes」と「サーバーレス」の両方のメリットを享受できる環境です。ワークロードは、「オンプレミス」と「Google Cloud」を選択できます。
3. プロジェクトの作成
(1) GCPの「Cloud Console」を開く。
(2) 画面上端の「プロジェクト名」から新規プロジェクトを作成。
4. サンプルコンテナのデプロイ
サンプルコンテナのデプロイする方法は、次のとおりです。
4-1. サービスの作成
(1) 画面上端の「検索ボックス」で「Cloud Run」を検索し、「サービスの作成」をクリック。
(2) デプロイメントプラットフォームに「Cloud Run (フルマネージド)」、リージョンに「asia-northeast1 (Tokyo)」、サービス名に「sample」を指定し、「次へ」ボタンを押す。
(3) コンテナイメージのURLに「gcr.io/cloudrun/hello」を指定、「次へ」ボタンを押す。
(3) 「すべてのトラフィックを許可する」と「未認証の呼び出しを許可」をチェックし、「作成」ボタンを押す。
(4) 緑チェックマークが表示されたらサービス作成の完了です。
4-2. 動作確認
(1) サービス一覧のサービス名(今回はsample)をクリック。
(2) 「URL」をクリック。
(3) 「It's running!」と表示されることを確認。
【注意】 課金防止のためプロジェクトを削除したい場合は、「Cloud Console」のメニュー「IAMと管理 → リソースの管理」で行います。
5. サンプルアプリをコンテナ化してデプロイ
サンプルアプリをコンテナ化してデプロイする方法は、次のとおりです。
5-1 サンプルアプリをローカルマシンに準備
(1) サンプルアプリのフォルダの作成。
$ mkdir helloworld
$ cd helloworld
(2) 「main.py」を作成し、以下のように編集。
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
name = os.environ.get('NAME', 'World')
return 'Hello {}!'.format(name)
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
(3) 「main.py」を実行し、ブラウザで「http://localhost:8080/」を開いて確認。
$ python main.py
5-2 サンプルアプリのコンテナ化
(1) 「Dockerfile」を作成し、以下のように編集。
# 軽量Pythonイメージベース
FROM python:3.9-slim
# ステートメントとログをKnativeログに出力
ENV PYTHONUNBUFFERED True
# ローカルファイルをDockerイメージにコピー
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./
# Dockerコンテナ生成時のコマンド
RUN pip install Flask gunicorn
# Dockerコンテナ起動時のコマンド
# 1ワーカープロセスと8スレッドのWebサーバーを起動。
# 環境のCPUコア数に応じてワーカーの数を増やす。
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
(2) 「.dockerignore」を作成し、以下のように編集。
コンテナイメージから除外するファイルを指定します。
Dockerfile
README.md
*.pyc
*.pyo
*.pyd
__pycache__
.pytest_cache
(3) サンプルアプリのコンテナ化。
サンプルアプリをコンテナ化し、「Container Registry」にアップロードされます。
$ gcloud builds submit --tag gcr.io/PROJECT-ID/helloworld
「Container Registry」は、Dockerコンテナイメージを保存・管理するサービスになります。
(4) サンプルアプリのデプロイ。
サンプルアプリをデプロイし、「Cloud Run」として公開されます。
$ gcloud run deploy --image gcr.io/PROJECT-ID/helloworld --platform managed
5-3. 動作確認
(1) 表示されたサービスURLにアクセスして動作確認。
【注意】 課金防止のためプロジェクトを削除したい場合は、「Cloud Console」のメニュー「IAMと管理 → リソースの管理」で行います。
6. エラー時の対処方法
エラー時は「Service Unavailable」と表示される。その場合は、GCPで「ログ」を検索し、「ログ エクスプローラ」を開き、プロジェクトのログを確認。
◎ メモリー不足
以下のようなエラーがでた場合。
Memory limit of 256M exceeded with 277M used. Consider increasing the memory limit, see https://cloud.google.com/run/docs/configuring/memory-limits
以下のように--memoryでメモリーを増やす。
$ gcloud run deploy --image gcr.io/PROJECT-ID/helloworld --platform managed --memory 512
「gcloud run deploy」の引数は、次のとおりです。
次回
この記事が気に入ったらサポートをしてみませんか?