Cloud RunであればDockerをスムーズにデプロイできるということを知り、Cloud Runのチュートリアルを眺めていました。
しかし、GCPは画面操作もできるはずなのに、例によってCloud Runのチュートリアルは恐怖の黒い画面(コマンドライン)のみで紹介されていました。
黒い画面でコピペ操作していると自分が何を設定しているのか良くわからないまま作業を進めてしまうため、画面操作でチュートリアルを実行できないか試してみました。
Pub/SubとCloud Runを連携させる方法
最初に大まかな流れを説明します。
今回は2段階の準備が必要になります。
Cloud Run
- Googleが提供するDocker環境が含まれたサンプルコードを自分のGitHub環境にFork(コピー)する。
- Cloud Runにpubsub-tutorialというサービスを作成し、ForkしたDocker環境をデプロイする。
ちなみに②ではCloud Runだけを操作しますが、裏ではCloud Buildがコンテををビルドし、Container Registryがコンテナをアップロードしています。
Pub/Sub
- Cloud Runを起動できるロール(権限)を持つcloud-run-pubsub-invokerというサービスアカウントを作成する。
- Pub/SubにmyRunTopicというトピックを作成し、トピック発行時はcloud-run-pubsub-invokerの権限を利用して、Cloud Runのpubsub-tutorialサービスを起動できるようにする。
Cloud Pub/Subとは、メッセージを送る人とメッセージを受け取る人をつなぐメッセージングと呼ばれるサービスです。
メッセージを送る人をPublisher, メッセージを受け取る人をSubscriberと呼びます。
今回だとSubscriberがCloud Runとなります。
通常はPublisherからメッセージを受け取ってTopicを発行しますが、今回はTopicを手動で発行します。
Cloud Runとは、GCP上で自分が作ったコンテナを実行できるサーバレスのコンテナ実行サービスです。
デプロイを数秒で行ってくれるだけでなく、スケーリングも自動で行ってくれます。
GCPには似たようなサービスにCloud Functionsがあります。
Cloud Runはコンテナを動かすことに対して、Cloud Functionsはコンテナではなく関数を動かします。
そのため私は以下のような基準で使い分けるのが良いと感じました。
検討要素 | サービス名 |
---|---|
移行が簡単な単純なアプリ (関数レベル) | Cloud Functions |
移行が難しい複雑なアプリ | Cloud Run |
Pub/SubとCloud Runを連携させる手順
まずは以下のGitHubからGCPでのpython用サンプルコードにアクセスし、自分のリポジトリにForkします。
次に以下Cloud RunボタンからCloud Runを開きます。
サービスを作成ボタンを押します。
ソースリポジトリから~デプロイするを選択し、Cloud BUILDの設定ボタンを押します。
認証ボタンを押すとGitHub画面が表示されるので、案内に従ってログインし、認証します。
リポジトリに先ほどFORKしたリポジトリを指定し、私は、接続サービスを~にチェックを入れます。
Dockerfileを選択し、Cloud Runのpubsubサンプルコードが格納されているフォルダのディレクトリのDockerfileを指定して保存ボタンを押します。
サービス名にpubsub-tutorialと記入します。
認証が必要を選択して作成ボタンを押します。
30秒程度待つと以下画面のように表示されます。
これでCloud Runにサービスをデプロイすることができました。
次にCloud Runのサービスを起動できるサービスアカウントを準備します。
以下サービスアカウントボタンからサービスアカウントを開きます。
サービスアカウントの作成ボタンを押します。
サービスアカウント名・IDをcloud-run-pubsub-invokerとして作成して続行ボタンを押します。
ロールにCloud Run起動元を選択して続行、完了ボタンを押します。
これでCloud Runを起動可能なサービスアカウントを作成できました。
最後にPub/SubとCloud Runを連携させます。
まずは以下Pub/SubボタンからPub/Subを開きます。
トピックを作成ボタンを押します。
トピックIDをmyRunTopicとしてトピックを作成ボタンを押します。
サブスクリプションを作成ボタンを押します。
以下のように設定します。
- サブスクリプションID: myRunSubscription
- 配信タイプ: push
- エンドポイントURL: 先ほどCloud Runで作成したサービスのURL
- 認証を有効にする: チェックを入れる
- サービスアカウント: 先ほど作成したCloud Run起動元となるサービスアカウント
以下画面が表示されます。
これですべての準備は整いました!
Pub/SubとCloud Runが連携できているかを確認する
Pub/SubからmyRunTopicを開き、メッセージタブのメッセージをパブリッシュボタンを押します。
メッセージにRunnerと記載して公開ボタンを押します。
Cloud Runのpubsub-tutorialサービスに戻り、ログタブを選択します。
Hello Runner!とあれば成功です!
まとめ
今回はCloud RunとPub/Subを連携させる方法について学びました。
GCPは1つ1つのサービスはシンプルなのですが、簡単なことをするだけでも複数のサービスの理解をしなければならないので難しく感じてしまいます。
きっと慣れたら楽になると思うので、早く慣れたいですね。
ご意見やご質問がありましたらお気軽によろしくお願いします。コメントお待ちしております!
用語集
用語 | 説明 |
---|---|
gcloud CLI | Google Cloudコマンドラインインターフェースのこと。 黒い画面からGCPサービスとのやり取りができるようになる。 正直GCPには割と親切なGUIがあるので、苦手な人(自分)は無理してコマンドからやる必要はない。 |