Pub/SubのpublishをトリガーにGCFを起動させるチュートリアルのメモ
プロジェクト作成
https://gyazo.com/74b98385369aad4be29e95f0d977795d
「プロジェクトを新規作成」で、 pubsub GCF project を新規作成
https://gyazo.com/296f6afe5d57dd310dc18ac0e0812e6b
Cloud Functions, Cloud Build, Artifact Registry, Eventarc, Logging, and Pub/Sub API を有効にする
プロジェクトで使いたいサービスのAPIを有効化しないと使えないぽい。チュートリアルの APIを有効にするをクリックすれば 対象のAPIを一気に有効化できるけど自分でやってみた↓ 自分でAPI有効化する
https://gyazo.com/c85d80ff4042b7942e7f5d11a1130e95
https://gyazo.com/c296ae716211969c8e1da9b312309654
APIを選択→有効にする
https://gyazo.com/09a03eedb1a82073f0f069b3fe811967
通知がきてるので有効化できたっぽい
https://gyazo.com/4bba71d45309f33ad58adc411d7c641a
Google Cloud CLI をインストール→初期化→更新してとあり、初期化までは済んでるので更新だけした
code:.bash
gcloud components update
使いたい言語の開発環境を準備
https://gyazo.com/ebcfd415edacbbb487e335644655b723
Ruby 用 Cloud クライアント ライブラリ をインストールするとruby開発者は便利だよ、とあるけど色々あってどれが必要なやつか分からないので一旦飛ばす
Pub/Sub トピックを作成
関数をデプロイする前に行う必須のステップ
gcloud pubsub topics create YOUR_TOPIC_NAME で作ってと書いてあるがこれそのまんま実行するとエラーになる
% gcloud pubsub topics create my_topic
ERROR: (gcloud.pubsub.topics.create) Error parsing topic. The topic resource is not properly specified. Failed to find attribute project. The attribute can be set in the following ways: - provide the argument topic on the command line with a fully specified name
- provide the argument --project on the command line
- set the property core/project
(どの Google Cloud プロジェクトにトピックを作成すべきかが不明なのでいずれかの方法で教えてって言われている)
以下でできた🌸
code: .bash
% gcloud pubsub topics create my_topic --project pubsub-gcf-project
アプリケーションの準備
GoogleCloudの方で用意してくれるリポジトリをclone: git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
code:.rb
require "functions_framework" # Google Cloud Functions で関数を簡単に定義し、ローカルでテストしたり、クラウドにデプロイしたりするためのフレームワーク
require "base64"
# hello_pubsub という名前のクラウドイベント関数を定義
FunctionsFramework.cloud_event "hello_pubsub" do |event|
# The event parameter is a CloudEvents::Event::V1 object.
# エラーが発生した場合、"World" をデフォルト値として使用
# A cloud_event function does not return a response, but you can log messages
# or cause side effects such as sending additional events.
end
関数のデプロイ
code: .bash
# リポジトリに移動 (今回デプロイしたいのはfunctions/helloworld/pubsub/app.rb)
% pwd
/Users/saki-htr/practice/ruby-docs-samples/functions/helloworld/pubsub
% % ls
Gemfile Gemfile.lock app.rb#これをデプロイしたい
# localのコード(関数)をGCFとしてデプロイするコマンド
% gcloud functions deploy ruby-pubsub-function \ # GCFを作成or更新する
--gen2 \ # デプロイされる関数が Google Cloud Functions の第2世代に属することを指定
--runtime=ruby32 \# 関数のコードがどのプログラミン グ言語のバージョンで実行されるかを定義。これはrubyのver3.2
--region=asia-northeast1 \ # 関数をデプロイするregion。東京にした
--source=. \ # 関数のソースコードが含まれているディレクトリを指定。.はカレントディレクトリ
--entry-point=hello_pubsub \ # どの関数を実行させるか。今回はfunctions/helloworld/pubsub/app.rb で定義されたhello_pubsub という名前のクラウドイベント関数
--trigger-topic=my_topic # この関数がトリガーされるイベントのソースを指定する。特定の Pub/Sub トピック(この例では my_topic)にメッセージが公開されたときに関数をトリガーすることを意味する。
--project pubsub-gcf-project
Preparing function...done.
⠶ Deploying function...
✓ Deploying function...
0]
⠶ Service Creating Cloud Run service... Done.
buildConfig:
<以下いろんな情報がズラーっと出力される>
https://gyazo.com/c41118f39135cefd9b3332e2218c8836]
これで準備は整ったので、pub/subのtopicにメッセージをpublishして、作ったGCFを起動させる
code: .bash
# メッセージをpub/subのtopicにpublishする
% gcloud pubsub topics publish my_topic --message="waiwai" --project pubsub-gcf-project
messageIds:
- '10714340151336278'
GCFのコードは ログに受け取ったメッセージを出力させるようになってるので、ログを見る
code:.bash
% gcloud functions logs read \ # GCFのログを見るコマンド
--gen2 \ # 第2世代のGoogle Cloud Functions のログを対象としてることを指定
--region=asia-northeast1 \
--limit=5 \ # 表示するログの数を指定。これは最新5件。
--project=pubsub-gcf-project \
ruby-pubsub-function # GCF名
LEVEL NAME TIME_UTC LOG
I ruby-pubsub-function 2024-03-20 06:40:52.774
I ruby-pubsub-function 2024-03-20 06:33:05.264 Default STARTUP TCP probe succeeded after 1 attempt for container "worker" on port 8080.
ruby-pubsub-function 2024-03-20 06:33:05.244 I, 2024-03-20T06:33:05.245360 #1 INFO -- : FunctionsFramework: Serving function "hello_pubsub" on port 8080... → ちゃんとログに、pub/subのtopicに送ったメッセージが出力されてる✨
ブラウザの方でも見てみる:
https://gyazo.com/d6bdb902603a67bcc582b565369de580
ちゃんと出てる!!