見出し画像

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」を選択できます。

画像9

3. プロジェクトの作成

(1) GCPの「Cloud Console」を開く。
(2) 画面上端の「プロジェクト名」から新規プロジェクトを作成。

4. サンプルコンテナのデプロイ

サンプルコンテナのデプロイする方法は、次のとおりです。

4-1. サービスの作成

(1) 画面上端の「検索ボックス」で「Cloud Run」を検索し、「サービスの作成」をクリック。

画像1

(2) デプロイメントプラットフォームに「Cloud Run (フルマネージド)」、リージョンに「asia-northeast1 (Tokyo)」、サービス名に「sample」を指定し、「次へ」ボタンを押す。

画像2

(3) コンテナイメージのURLに「gcr.io/cloudrun/hello」を指定、「次へ」ボタンを押す。

画像3

(3) 「すべてのトラフィックを許可する」と「未認証の呼び出しを許可」をチェックし、「作成」ボタンを押す。

画像4

(4) 緑チェックマークが表示されたらサービス作成の完了です。

画像5

4-2. 動作確認

(1) サービス一覧のサービス名(今回はsample)をクリック。

画像6

(2) 「URL」をクリック。

画像7

(3) 「It's running!」と表示されることを確認。

画像8

【注意】 課金防止のためプロジェクトを削除したい場合は、「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

画像10

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にアクセスして動作確認。

画像11

【注意】 課金防止のためプロジェクトを削除したい場合は、「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」の引数は、次のとおりです。

次回


この記事が気に入ったらサポートをしてみませんか?