コンテンツに移動
サーバーレス

カスタム テンプレートによる Cloud Code の拡張

2023年3月29日
Google Cloud Japan Team

※この投稿は米国時間 2023 年 3 月 18 日に、Google Cloud blog に投稿されたものの抄訳です。

Cloud Code は、一般的な統合開発環境(IDE)向けの IDE プラグインのセットです。Google Cloud でのアプリケーションの作成、デプロイ、統合を容易にし、カスタム テンプレートを介して優れた拡張メカニズムを提供します。今回の投稿では、独自のカスタム テンプレートを作成し、そのテンプレートを使用して、.NET 関数やイベント トリガー関数などの Cloud Code でネイティブにサポートされている機能以外の機能を追加する方法をご紹介します。

筆者は Introducing Cloud Functions support in Cloud Code(Cloud Code での Cloud Functions サポートの導入)という投稿で、Cloud Code における現在の Cloud Functions サポートの制限についていくつか指摘しました。それらについて、ここでおさらいしましょう。

  • Cloud Functions のテンプレートでは 4 言語(Node.js、Python、Go、Java)しかサポートされていない。特に .NET がサポートされていない点が残念。

  • Cloud Run と Cloud Functions のテンプレートの対象は HTTP トリガー サービスのみである。イベント トリガー サービス向けのテンプレートはない。

  • テストはデプロイ済みの HTTP トリガー サービスに対してのみ有効である。ローカルで実行されているサービスやイベント トリガー サービスに対するテストはサポートされていない。

カスタム テンプレートで、これらの機能をどのように追加できるか見ていきましょう。

カスタム サンプル リポジトリ

Cloud Code では [Cloud Code] → [New Application] を選択して新しいアプリケーションを作成する際に、作成するアプリケーションのタイプを選択できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image1-0787.max-800x800.png
[Create New Application] のダイアログ

Kubernetes、Cloud Run、Cloud Functions の各アプリケーションでは、cloud-code-samples リポジトリで定義されたテンプレートを、各アプリケーションのタイプでサポートされているいずれかの言語でのスターター プロジェクトとして使用します。

なかでも [Custom application] は興味深いオプションです。このオプションを選択すると、独自のテンプレートで GitHub リポジトリを指定でき、Cloud Code ではこれらのテンプレートがスターター プロジェクトとして使用されます。これによって効率的に Cloud Code を拡張できます。

Cloud Code for VS Code でカスタム サンプル リポジトリを管理するでは、カスタム テンプレートの具体例を挙げて詳細に説明しています。cloud-code-custom-samples-example GitHub リポジトリと、カスタム サンプル テンプレートについてわかりやすく説明する動画も用意されています。
Video Thumbnail

Getting started with custom samples and Cloud Code

基本的には、サンプルで一般公開の GitHub リポジトリを作成し、各テンプレートをカタログ化するための .cctemplate ファイルを用意するという流れになります。これで完了です。

Google のカスタム サンプル リポジトリ

私たちは当初、現在 Cloud Code にない HTTP トリガー .NET Cloud Functions のみのサポートを追加しようと考えていました。しかし、テンプレートの作成が非常に面白かったため、次のように対象をさらに広げました。

  1. HTTP トリガー Cloud Functions および Cloud Run サービスのテンプレートを複数の言語(.NET、Java、Node.js、Python)で追加

  2. CloudEvents トリガー(Pub/Sub、Cloud Storage、AuditLogs)Cloud Functions および Cloud Run サービスのテンプレートを複数の言語(.NET、Java、Node.js、Python)で追加

  3. 各テンプレートについてローカルテスト、デプロイ、クラウドテストを実行するための軽量な gcloud ベースのスクリプトを追加

テンプレートの一覧については、筆者の cloud-code-custom-templates リポジトリを参照してください。

これらのテンプレートをスターター プロジェクトとして使用する手順は次のとおりです。

  1. VS Code で [Cloud Code] をクリックします。

  2. [New Application] → [Custom Application] → [Import Sample from Repo] を選択します。

  3. cloud-code-custom-templates リポジトリを指定します。

テンプレートをスターター プロジェクトとして選択し、テンプレートの README.md の指示に沿って実施します。
https://storage.googleapis.com/gweb-cloudblog-publish/original_images/install_mDK1p2B.gif
GitHub リポジトリからのサンプルのインポート

これらのテンプレートの一部について、さらに詳しく見てみましょう。

HTTP トリガー Cloud Functions テンプレート

ここでは、.NET: Cloud Functions - hello-http テンプレートを例に挙げます。これは、HTTP によってトリガーされる .NET 6 Cloud Functions テンプレートです。最初にテンプレートをインストールすると、サンプルコードがインストールされます。README.md には、テンプレートの使い方が詳細に記載されています。
https://storage.googleapis.com/gweb-cloudblog-publish/images/image2-0788.max-2200x2200.png
HTTP によってトリガーされる .NET Cloud Functions テンプレート

コード自体は、HTTP GET リクエストに応答するシンプルな HelloWorld アプリです。それほど興味深いものではありませんが、このテンプレートに用意されている scripts フォルダに注目したいと思います。

scripts フォルダには、ローカルで実行されている関数をテストするための test_local.sh ファイルがあります。このファイルが存在するのは、Cloud Functions のコードで Functions Framework を使用しており、Cloud Functions をローカルで実行できるようになっているからです。この関数のテスト方法は簡単で、HTTP リクエストを適切なフォーマットで送信するだけです。この場合は単なる HTTP GET リクエストですが、イベント トリガー関数の場合はさらに複雑になります。詳しくは後述します。

さらに、関数のデプロイ前に適切な API を有効にする setup.sh、関数をデプロイする deploy.sh、デプロイされた関数を gcloud を使用してテストする test_cloud.sh もあります。現時点の Cloud Code では .NET の関数をデプロイしてテストすることができないため、これらのスクリプトを追加する必要がありました。ただし、テンプレートの一部としてインストールされたスクリプトの処理は非常に簡単です。

イベントによってトリガーされる Cloud Functions テンプレート

Cloud Functions では、各種のイベント トリガー関数もサポートされています。これらのイベントは、Cloud Functions(第 2 世代)の Eventarc によって管理されます。現在の Cloud Code には、イベント トリガー関数のコードと設定を支援するテンプレートがありません。

Eventarc では、イベントをソース(Cloud Storage、Pub/Sub など)から直接受信するか、AuditLogs を介して受信します。Google は、次のようなさまざまなイベントソースを示す、各種言語のテンプレートをいくつか用意しています。

イベント エンベロープは CloudEvents フォーマットであり、ペイロード(データ フィールド)に実際のイベントが含まれています。.NET では、テンプレートは Google.Cloud.Functions.Templates パッケージ(Cloud Functions の関数のサンプルを生成する dotnet コマンドライン ツールを使用してインストールし、使用できます)のテンプレートに基づいており、さまざまな言語の Functions Framework を使用して CloudEvents エンベロープとペイロードを解析し、強力なタイプに変換します。

このテンプレートにも、ローカルでテストを実行するスクリプト、クラウドにデプロイするスクリプト、クラウドでテストを実行するスクリプトが用意されています。たとえば、Cloud Storage テンプレートの test_local.sh は、Cloud Storage のイベント用に適切な CloudEvent を作成して送信します。
読み込んでいます...

これは、ローカルでのテストで非常に便利です。

Cloud Run テンプレート

Cloud Run にも同様のテンプレートがあります。以下に例を示します。

これらは Cloud Run サービスなので、Functions Framework を使用できません。つまり、ユーザーが CloudEvents SDK を使用して CloudEvents フォーマットを解析し、Google CloudEvents ライブラリを使用してペイロード(実際のイベント)を解析する必要があります。テンプレートはこれらの細かい処理を実行し、適切な SDK とライブラリをすぐに利用できるようにします。

Cloud Shell での Cloud Code とテンプレートの使用

ここまでお読みいただいて、「確かに素晴らしいけれど、.NET も Node.js もローカルにインストールしていない。どうしたらこれらのテンプレートを試せるか?」という疑問を持った方もいるでしょう。

実は、Cloud Code を Cloud Shell エディタで使用できるのです。Cloud Code を使用して、ブラウザからこれらのカスタム テンプレートをインポートできます。
https://storage.googleapis.com/gweb-cloudblog-publish/images/image3-0888.max-1700x1700.png
Cloud Shell での Cloud Code とテンプレートの使用

さらに、Cloud Shell にはすでに .NET または Node.js がプリインストールされているため、ブラウザ内で直接、テンプレートのスクリプトを使用してすべてのサンプルをビルド、実行、テスト、デプロイできます。これは非常に便利です。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image3-0666.max-2100x2100.png
Cloud Shell での .NET 6 テンプレートの実行

次のステップ

素晴らしいことに、カスタム テンプレートによる Cloud Code の拡張は非常に簡単です。また、Cloud Shell のおかげで、Cloud Code とカスタム テンプレートを使用して、ブラウザ内で直接アプリケーションを作成できる点も便利です。何かをインストールする必要はありません。

他の言語のテンプレートの作成にご協力いただける場合は(特に Go のサポートが必要です!)、Twitter @meteatamel からご連絡いただくか、私の cloud-code-custom-templates リポジトリで pull リクエストをお送りください。コラボレーションを歓迎します。Python テンプレートと GitHub のアクションによるテンプレート間のスクリプトの共有に協力してくれた Marc Cohen に感謝します。

Cloud Code での Cloud Functions のサポートについて詳しくは、新しい Cloud Code を使用して関数を作成してデプロイするのチュートリアルをお試しください。

- デベロッパー アドボケイト Mete Atamel

投稿先