🔨

[GCP無料枠のみで構築]#1:Pub/Sub×CloudRunサービス構築

2022/02/12に公開

こんにちは!chameleonです。

GCPを利用して実際のサービスを自分の手で試してみたいけど、会社の環境は自由に使えないし、自分でプロジェクトを作って開発するとお金がかかるし、、、ということでなかなか自分の手で自由にGCPサービスを試すことができない人も多いかと思います。

しかし、最近ではGCPの無料枠の範囲がかなり拡充され、かなりのサービスが無料で利用できるようになりました。個人でちょっと試してみる程度であれば、ほぼこの無料枠の範囲で問題いです。

ということで、Googleのチュートリアルをベースに各GCPの機能を利用した簡単なサービス構築を実際にやっていき、その過程を詳細に解説していく記事をシリーズ化して書いてこうかと思います。

まずは、目標として3記事くらいを目指せればと思ってます!

想定する読者

  • GCPの勉強を始めたが出てくる単語やサービスのイメージがつかない
  • 実際に手を動かしてGCPの開発を行って感覚を掴みたい
  • 会社では権限の問題等でIAMやネットワーク、または好きなサービスを気軽に試せない

GCPの無料枠

GCPの無料枠についてはトライアル中に利用できる$300の枠が有名ですが、実はトライアル期間が終了してもかなりのサービスが無料で使えます。詳細は下記記事をご覧ください。
GCP無料枠の記事

万が一、無料サービス以外の範囲を超えた場合にすぐ検知できるようにアラートを設定しておきましょう。これで安心!
GCP請求アラートの設定

それでは始めましょう!

ゴール

今回作成するサービスは下記のチュートリアルに沿って実施していきます。
GCPチュートリアル(Pub/SubとCloudRun)

作成するサービスは、メッセージをpushするとログにそのメッセージを出力するというものです!
画に描いてみると下記のような感じです!

構築の大まかな流れ

1.事前準備(gcloud config設定)
2.Pub/Subのトピック設定
3.CloudRunへのアプリケーションデプロイ
4.サービスアカウント作成と権限付与
5.Pub/Subサブスクリプションの作成
6.使ってみる

今回利用するGCPサービス

今回はタイトルにある通り、GCPの2つのサービスを利用していきます。
それぞれ簡単に説明します。

Pub/Sub

  • GCPが提供しているメッセージキューイングサービス
  • Pub/Subが処理を行うアプリケーションに対しメッセージを送信するPUSH型と、アプリケーションがPub/Subに対して自分宛のメッセージがないかを確認しにくるRULL型が選択可能
  • トピックとサブスクリプションから構成される、ざっくり下記のような理解でOKです!
  • トピック:メッセージを受取るモノ
  • サブスクリプション:メッセージを配信するモノ

CloudRun

  • GCPが提供しているコンテナをデプロイして実行できるマネージドサービス
  • ざっくり、dockerイメージを簡単に動かせるサービスという理解でOKです!

構築スタート!!!

1.事前準備(gcloud config設定)

まずはgcloudコマンドを利用する際にのデフォルトのプロジェクトを設定します。
PROJECT_IDの部分は自分のGCPプロジェクトIDに置き換えて実行してください。

gcloud config set project [PROJECT_ID]

次にCloudRunを実行するリージョンを設定します。CloudRunサービスを行っているリージョンであればどこでもOKです!

gcloud config set run/region us-central1

2.Pub/Subのトピック設定

次に今回のメインの1つであるPub/Subのトピック(メッセージを受取る方)を作っていきます。

まずは作成前のPub/Subのトピックの状況を見てみましょう。
私の場合はは過去に作った「myRunTopic」というトピックがありますが、過去にトピックを作ったことがない方は空の状態になっているかと思います。

下記コマンドで「try1Topic」というトピックを作成してみましょう。

gcloud pubsub topics create try1Topic

トピックができました!

CloudRun+PubSub $ gcloud pubsub topics create try1Topic
Created topic [projects/awesome-height-240603/topics/try1Topic].

コンソールから確認してみましょう。
「try1Topic」というトピックができてますね!

3.CloudRunへのアプリケーションデプロイ

次にメッセージをログに出力するアプリケーションをCloudRunにデプロイしていきます。

アプリケーションソースのクローン

下記からサンプルのアプリケーションソースを任意のディレクトリにクローンします。

git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

アプリケーションのbuildとgcrへの配置

アプリケーションをbuidしてコンテナイメージをGCRに配置します。
クローンしたディレクトリの下記パス配下に今回利用するアプリケーションソースがあるため、このディレクトリまで移動します。

python-docs-samples/run/pubsub

このディクトリ配下で下記コマンドを実行し、ソースのbuildを行いGCRのpubsubディレクトリ配下にイメージを配置します。

gcloud builds submit --tag gcr.io/awesome-height-240603/pubsub

イメージができたかをコンソールから確認します。

アプリケーションをCloudRunにデプロイ

buildしたアプリケーションをCloudRunに「pubsub-try」という名前でデプロイします!
imageオプション配下は上記で配置したGCRのパスを指定します。

gcloud run deploy pubsub-try --image gcr.io/awesome-height-240603/pubsub  --no-allow-unauthenticated

一番下に「pubsub-try」ができてますね!

ここまででCloudRunにアプリケーションをデプロイするとこまでできました!

4.サービスアカウント作成と権限付与

サブスクリプションからCloudRunへpushするサービスアカウント作成

「cloud-run-pubsub-invoker」というサービスアカウントを作成します。
このサービスアカウントを利用してサブスクリプションがCloudRunにメッセージをpushします。

gcloud iam service-accounts create cloud-run-pubsub-invoker \
     --display-name "Cloud Run Pub/Sub Invoker"

サービスアカウントができていることを確認!

サービスアカウントへの権限付与

上記で作成したサービスアカウントに対してCloudRunの呼出権限(invoke)を付与します。

gcloud run services add-iam-policy-binding pubsub-try \
   --member=serviceAccount:cloud-run-pubsub-invoker@awesome-height-240603.iam.gserviceaccount.com \
   --role=roles/run.invoker

Pub/Subが認証トークンを作成可能とするための権限付与

下記でPub/Subにトークン作成権限を付与します。

gcloud projects add-iam-policy-binding awesome-height-240603 \
     --member=serviceAccount:service-197586560890@gcp-sa-pubsub.iam.gserviceaccount.com \
     --role=roles/iam.serviceAccountTokenCreator

5.Pub/Subサブスクリプションの作成

最後にPub/Subのサブスクリプションを作成します。
「try1Subscription」という名前で、上で作ったトピック「try1Topic」に対してサブスクリプションを作成します。そして、push-endpointとして、上で作成したCloudRun上のエンドポイントを指定します。
CloudRunのエンドポイントはCloudRunサービスから作成したサービスの名前「pubsub-try」をクリックした画面のURLのところからわかります。

gcloud pubsub subscriptions create try1Subscription --topic try1Topic \
   --push-endpoint=https://pubsub-try-vvexrqwfwa-uc.a.run.app/ \
   --push-auth-service-account=cloud-run-pubsub-invoker@awesome-height-240603.iam.gserviceaccount.com

コンソールからサブスクリプションができたことを確認してみましょう。
「try1Subscription」ができていることが確認できますね!

これで完成です!

6.使ってみる

では実際に使ってみましょう!
下記コマンドで作成したトピックに対しメッセージをpushします!

gcloud pubsub topics publish try1Topic --message "Hello Chameleon"

コンソールのCloudRunのログを確認し、「Hello Chameleon」のメッセージがでてたら成功です。


上記は2回コマンドを実行したため、2個ログがでてます。

ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、しばらくしてからもう一度確認してください。

構築したサービスの構成図

アプリをbuildしてCloudRunにデプロイするところから、Pub/SubとCloudRunの構成について構成図にしてみました!

いかがだったでしょうか。
目標の3記事まであと、2つです!なんとか頑張ります!

Discussion