0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

これは何?

Google CloudにAPIを立てる手順をまとめたもの。

大まかな手順は以下の通り。

  1. ローカルで任意のアプリケーション、例えばFlask appを開発する
  2. Flask appをbuildしてDocker Imageに固める
  3. ImageをArtifact Registryに上げる
  4. ImageをCloud Runから呼び出す
  5. (本記事では記載省くが)API Gatewayを立てて、API呼び出し時にKeyを用いるようにする
  6. 任意の環境から、API Keyを用いてAPI呼び出しできる状態になる :tada:

ローカル環境で任意のアプリケーションを開発する

本記事では、手軽に導入できるFlaskを題材に扱う。

概ね下記のような内容を盛り込めば良い。
(このまま動作するかは不明なので、参考程度に)

Dockerfile
FROM python:3.11-slim

WORKDIR /app

RUN apt-get update && apt-get install -y

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

# ローカル開発用の設定であり、Google Cloudで動かす目的では必須ではないはず
EXPOSE 8001

CMD ["python", "app.py"] 
app.py
import os

from flask import Flask

app = Flask(__name__)
# 一応CORS設定しておく
CORS(app)

@app.route("/")
def hello_world():
    return "Hello, World!"

if __name__ == '__main__':
    # Cloud Runで動かすために、portのデフォルト値は環境変数を参照する
    port = int(os.environ.get('PORT', 8001))
    app.run(host='0.0.0.0', port=port, debug=True)

ローカルでFlask appが起動することを確認できればOK。

Artifact Registryで、Repositoryを作成する

これ以降、gcloud cliが必要なため、公式Docsなどを参考にインストールする。

下記が確認できていれば良い。

# cliがインストールされていることを確認する
$ gcloud version

# loginコマンド実行して表示されるurlにアクセス → 認証成功すればok
$ gcloud auth login
Your browser has been opened to visit: ...

web UI (Google Cloudのweb上のコンソール画面)、もしくはcli上でRepositoryを作成する。
(ここで作成したRepositoryに後続のDocker Imageがアップロードされる)
今回はcli上で作成していく。

まずは、必要な変数を定義しておく。

# 今回利用するGoogle CloudのPROJECT_IDを指定する
# gcloud cliが良さげにインストール済みであれば、下記コマンドで手軽に設定できる
$ PROJECT_ID=$(gcloud config get-value project)
# 念の為が期待通りの値であることを確認しておくと良い
$ echo $PROJECT_ID
...

# 任意のregionを指定する
$ REGION=asia-northeast1

# 作成するRepository名を指定する
$ REPO_NAME=sample2025

Repositoryを作成する。

$ gcloud artifacts repositories create $REPO_NAME \
  --repository-format=docker \
  --location=$REGION \
  --description="this is sample repos"

コマンドの実行結果や、web UI上で作成結果を把握できる。

ローカル環境で、Docker Imageをbuildする

まずは必要な変数を定義しておく。

# 作成するImage名を指定する
$ IMAGE_NAME=sample-flask-app

# 作成するTag名指を定する
$ IMAGE_TAG=0.1.0

先ほど作成したFlask appをImageに固める。
Apple Silicon上でbuildしたImageは arm64 となるがCloud Runは x86_64 であるため、その差分を解消するためにplatform指定しておくのが吉。

$ docker build --platform linux/amd64 -t $IMAGE_NAME:$IMAGE_TAG .

Docker Registryにpushする

Tag付けしてDocker Registryにpushする。

$ docker tag $IMAGE_NAME:$IMAGE_TAG $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$IMAGE_NAME:$IMAGE_TAG
$ docker push $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$IMAGE_NAME:$IMAGE_TAG

web UIのDocker Registryページ内で、今回作成したRepositoryとImage、Tagを確認できれば完璧。

Cloud RunからDocker Imageを呼び出してAPI化

cli経由でもCloud Run操作できるが、個人的にはweb UI上でこの辺の作業を進めたい。

(以下、UIの文言はたびたび変わるため、適宜読み替え必要)

  1. Cloud Runページに移動する
  2. コンテナをデプロイ を選択する
  3. 既存のコンテナイメージから1つのリビジョンをデプロイする を選択する
  4. コンテナイメージのURL 欄で、DockerRegistryに上げたImageを選択する
  5. 構成 欄で、サービス名やRegionを適宜選択する
  6. 認証 欄で、サクッと検証するために IAM を使用して受信リクエストを認証する のチェックを外す
    1. つまり、認証なしでAPIを叩けてしまう状態のため要注意
    2. 本記事末尾で軽く触れるが、べき論ではAPI Key認証を導入するのが良い(もしくはIAMを適切に利用)
  7. コンテナ、ボリューム、ネットワーキング、セキュリティ 欄の 実行環境 欄で、 第 2 世代: ネットワーク ファイル システムのサポート、Linux との完全な互換性、CPU とネットワーク パフォーマンスの高速化。 を選択する
    1. Image build時に --platform linux/amd64 を入れている場合、この設定が必要
  8. その他、好みの設定を適用の上、作成すればOK

デプロイが無事完了すれば、詳細画面内に表示されるURL経由でAPIの呼び出しが可能となる :tada:

後続作業

一般的に、認証なしでAPI呼び出せるのはよろしくないため、下記Docsなどを参考にAPI Key認証の設定を導入する。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?