Cloud Firestore バックエンドを使用した REST API のホスト
はじめに
この記事は、
Hosting a REST API with a Cloud Firestore backend
という動画を参考に、『実際にやってみた』という記事になります。
この記事で実施する事。
- sample code を git clone する。
- Artifact Registory でリポジトリを作成。
- Cloud Firestore データベースを作成する。
- deploy.sh を編集して、イメージのビルドとプッシュ、
Cloud Runのデプロイまで行う。 - コレクションとドキュメントを手動で登録する。
- Postmanを使って、コレクションとドキュメントを登録する。
- 特定のURLのパスを実行して、Firestore からドキュメントを取得する。
以下はその必要となる大まかな構成になります。
Google Cloud Firestoreについて噛み砕いて理解しておく。
Google Cloud Firestore について噛み砕いた説明はスクラップにまとめました。
sample code を git clone する。
hosting-a-rest-api-with-a-cloud-firestore-backend を、git clone してください。
git clone https://github.com/GoogleCloudPlatform/serverless-expeditions.git
git cloneの実行が完了したら、cdコマンドを使って、対象のディレクトリ階層へ移動。
cd serverless-expeditions/hosting-a-rest-api-with-a-cloud-firestore-backend
サンプルコードは、Dockerイメージを、
Container Registry
へデプロイします。
Container Registry
は非推奨となっているため、
このブログでは、Artifact Registory
に対して、
Dockerイメージがデプロイされるように修正します。
Artifact Registory でリポジトリを作成。
Dockerイメージをホストするためのリポジトリを作成。
GCPのプロジェクトIDのみ、自己の環境に書き換えてください。
リージョンは予め指定していますが、最寄りでない場合は書き換えてください。
gcloud artifacts repositories create dog-breed-api \
--repository-format=docker \
--location=asia-northeast1 \
--description="Docker repository" \
--project=# YOUR GCP PROJECT ID GOES HERE
Cloud Firestore データベースを作成する。
CREATE DATABASE をクリック。
この時、 CREATE DATABASE
をクリックできない場合、
既存で Firestore Database
が作られている可能性があります。
その場合、Datastoreモード
で作られていると、
サンプルコードは ネイティブモード
の Firestore Database
に
対してのみ、動作する為、ネイティブモード
に変えなければなりません。
ただし、一度作成してしまうと、モードを切り替える事ができない為、
新規でプロジェクトを立ち上げ直し、一から作り直す必要があります。
ネイティブモードを選択。
ロケーションを選択して、データベースを作成。
ロケーションは最寄りを選択。
ネイティブモードでデータベースが作成されていればOK
deploy.sh を編集して、イメージのビルドとプッシュ、Cloud Runのデプロイまで行う。
deploy.sh
スクリプトは、ソースコードをGoogle Cloud に
デプロイするための一連のコマンドが書かれていますが、
サンプルは Container Registry
に対して、
イメージをビルド、プッシュするようになっている為、
これを Artifact Registory
にデプロイされるように修正します。
vimコマンドを使って、テキストエディタを開く。
vim deploy.sh
キーボードの i
を実行して、編集モードに切り替える。
Artifact Registory
に対して、
イメージのビルドとプッシュが行われるように、
下記のサンプルコード通りに書き換えてください。
GCPのプロジェクトIDのみ、自己の環境に書き換えてください。
リージョンは予め指定していますが、最寄りでない場合は書き換えてください。
GOOGLE_PROJECT_ID=# YOUR GCP PROJECT ID GOES HERE
REPOSITORY_NAME=dog-breed-api
LOCATION_NAME=asia-northeast1
gcloud builds submit --tag $LOCATION_NAME-docker.pkg.dev/$GOOGLE_PROJECT_ID/$REPOSITORY_NAME/barkbarkapi \
--project=$GOOGLE_PROJECT_ID
gcloud run deploy barkbark-api \
--image $LOCATION_NAME-docker.pkg.dev/$GOOGLE_PROJECT_ID/$REPOSITORY_NAME/barkbarkapi \
--platform managed \
--region=$LOCATION_NAME \
--project=$GOOGLE_PROJECT_ID
入力が終えたら、保存して編集モードを解除してください。
キーボードの :
+ w
+ q
を実行で編集モードを解除できます。
deploy.sh
スクリプトを実行して、Artifact Registory
に
対して、イメージのビルドとプッシュを行ってください。
./deploy.sh
コマンド実行中に、Google Cloud Runサービスを
デプロイする際に、認証されていないユーザーからの
リクエストをサービスが、受け入れるかどうかを尋ねられます。
認証されていないユーザーからのリクエストを受け付けるなら、y
Google Cloud の IAMを通じて、特定のユーザー
もしくはサービスアカウントによるリクエストのみ
許可するなら、N
を入力してください。
Allow unauthenticated invocations to [barkbark-api] (y/N)?
デプロイされた Cloud Run
の URL
を実行して、
レスポンスが変えれば、Cloud Run
のデプロイは完了です。
コレクションとドキュメントを手動で登録する。
Cloud Run
の URL
を使って、特定のパスに対して、
HTTPの GET
リクエストが送れるように手動で、
コレクションとドキュメント作成します。
コレクションの登録画面が開いたら、
コレクションIDやドキュメント内の
フィールド情報を埋めて保存してください。
犬種 dalmatian
の品種情報を登録します。
入力手順は、スクリーンショットを参考にしてください。
"name": "dalmatian",
"origin": "Croatia",
"lifeExpectancy": 12,
"type" : "companion"
Postmanを使って、コレクションとドキュメントを登録する。
コレクションとドキュメントを直接操作するのではなく、
Postmanを経由して、JSONデータを渡して、
登録する方法もありますので、ここではそれを実践します。
コードはすでにサンプルに書かれているので、
ここでは説明を省き、動作だけを確認します。
犬種 beagle
の品種情報を登録します。
入力手順は、スクリーンショットを参考にしてください。
URL
は、Cloud Run
にデプロイされた対象のサービスを指定してください。
{
"name": "beagle",
"origin": "England",
"lifeExpectancy": 13,
"type" : "scent"
}
特定のURLのパスを実行して、Firestore からドキュメントを取得する。
Cloud Run
の URL
を使って、特定のパスに対して、
HTTPの GET
リクエストを渡すことができれば成功です。
[デプロイしたCloudRunのURLのパス]/dalmatian
[デプロイしたCloudRunのURLのパス]/beagle
終わりに
今回の記事は、動画を視聴しまして、
実際に『手を動かしてみた』という内容でまとめました。
Cloud Firestore データベースは、これまで触れたことがなく、
特にネイティブモード
と Datastoreモード
に惑わされてしまいました。
知らぬ間に、 Datastoreモード
で、
Cloud Firestore データベースが作られてしまっていた為、
初めからプロジェクトを作り直すことになってしまったり、
全く関係のない、Firebase
プロジェクトを立ち上げてしまう等、
てんてこ舞いとなって、実装までに、時間がかかってしまいました。
Cloud Firestore
データベースを使って、
NoSQLのドキュメントを管理したいが、
その前に軽く学習してみたいと考えていましたら、
参考にしていただけると幸いです。
この記事が読まれている方にとって、
参考になる記事となりましたら、『いいね
』を
付けていただけますと、励みになりますので、
よろしくお願いします。
Discussion