Cloud Functions を使ってみる

1. 概要

Cloud-Functions.png

クラウドのインフラストラクチャやサービスで生じたイベントに関連付けられた、単一目的のシンプルな関数を作成することができます。対象のイベントが発生すると、Cloud Functions の関数がトリガーされ、コードがフルマネージドの環境で実行されます。インフラストラクチャをプロビジョニングする必要はなく、サーバーの管理に悩まされることもありません。

Cloud Functions は現在、JavaScript、Python、Go で記述できます。JavaScript の場合、Google Cloud Platform の Node.js 環境で実行されます。Cloud Functions の関数を標準的な Node.js ランタイムで実行すれば、環境に依存することなく簡単にローカルテストを実施できます。

クラウド サービスの接続と拡張

Cloud Functions では、論理リンク層を使用して複数のクラウド サービスを接続、拡張するコードを記述できます。たとえば、Cloud Storage へのファイルのアップロード、ログの変更、Cloud Pub/Sub トピックに対するメッセージの着信をリッスンし、応答することが可能です。Cloud Functions を使用することで既存のクラウド サービスを強化し、多様なプログラミング ロジックを使用する、より多くのユースケースに対応できます。また、Google サービス アカウントの認証情報にアクセスできるので、Datastore、Cloud Spanner、Cloud Translation API、Cloud Vision API など、大半の Google Cloud Platform サービスでシームレスに認証を行えます。

907ffb96feada611.png

イベントとトリガー

クラウド イベントとは、クラウド環境で発生する変化を指します。たとえば、データベースでのデータの変更、ストレージ システムへのファイルの追加、新しい仮想マシン インスタンスの作成などがイベントとして扱われます。

イベントは、ユーザーがそれに応答するか否かにかかわらず発生します。イベントへのレスポンスはトリガーを作成して行います。トリガーは、いわば特定のイベントや一連のイベントに関心があることの宣言です。関数をトリガーにバインドすると、イベントをキャプチャしてなんらかの対応をとることができます。トリガーを作成して関数に関連付ける方法について詳しくは、イベントとトリガーをご覧ください。

サーバーレス

Cloud Functions では、サーバーの管理やソフトウェアの構成、フレームワークの更新、オペレーティング システムへのパッチ適用などを行う必要がありません。ソフトウェアとインフラストラクチャは完全に Google で管理されるため、コードそのものに集中できます。また、イベントに応答してリソースが自動的にプロビジョニングされるため、ユーザーによる操作を必要とせず、1 日に数回の関数呼び出しから、何百万回の呼び出しにまでスケーリングできます。

ユースケース

軽量の ETL のような非同期ワークロードのほか、アプリケーション ビルドのトリガーなどのクラウド上での自動処理に適しています。独自のサーバーも専任のデベロッパーも必要ありません。イベントにバインドされた Cloud Functions の関数をデプロイするだけで作業が完了します。

Cloud Functions ではきめ細かい処理をオンデマンドで実行できるため、軽量の API や Webhook にも最適です。また、HTTP 関数のデプロイ時に HTTP のエンドポイントが自動的にプロビジョニングされるため、他のサービスのように複雑な構成を行う必要がありません。

このハンズオンラボでは、Google Cloud コンソールでクラウド関数を作成、デプロイ、テストする方法を説明します。以下のことを行います。

  • Cloud Functions の関数を作成する
  • 関数をデプロイしてテストする
  • ログを表示

2. 設定と要件

セルフペース型の環境設定

  1. Cloud Console にログインし、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Google Cloud Shell

Google Cloud と Cloud Functions はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

この Debian ベースの仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。つまり、この Codelab に必要なのはブラウザだけです(Chromebook でも動作します)。

  1. Cloud Console から Cloud Shell を有効にするには、[Cloud Shell をアクティブにする] fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q をクリックします(環境のプロビジョニングと接続に若干時間を要します)。

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自の PROJECT_ID が設定されていることがわかります。

gcloud auth list

コマンド出力

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

コマンド出力

[core]
project = <PROJECT_ID>

なんらかの理由でプロジェクトが設定されていない場合は、次のコマンドを実行します。

gcloud config set project <PROJECT_ID>

PROJECT_ID が見つからない場合は、設定手順で使用した ID を確認するか、Cloud Console ダッシュボードで検索します。

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell では、デフォルトで環境変数もいくつか設定されます。これらの変数は、以降のコマンドを実行する際に有用なものです。

echo $GOOGLE_CLOUD_PROJECT

コマンド出力

<PROJECT_ID>
  1. 最後に、デフォルトのゾーンとプロジェクト構成を設定します。
gcloud config set compute/zone us-central1-f

さまざまなゾーンを選択できます。詳細については、リージョンとゾーンをご覧ください。

3. 関数を作成する

このステップでは、コンソールを使用して Cloud Functions の関数を作成します。

  • コンソールで、ナビゲーション メニュー > [Cloud Functions] をクリックします。

fe64222954f5f372.png

  • [関数を作成] をクリックします。

7adca9640ca2e5a6.png

  • 関数に GCFunction という名前を付け、他のデフォルト(メモリ割り当て、トリガーとしての HTTP、インライン エディタ、デフォルトのランタイム、デフォルトのサンプルコード)はそのままにします。

795f1fedc0f039bb.png

  • [関数の作成] ダイアログで、下にある [作成] をクリックして関数をデプロイします。

b68c3647b771e6f9.png

[作成] をクリックすると、コンソールに Cloud Functions の概要ページが表示されます。

関数のデプロイ中は、関数の横に実行中のアイコンが表示されます。デプロイが完了すると、スピナーが緑のチェックマークに変わります。問題がある場合は、赤いアイコンと、何が問題だったか(コードの問題である可能性が高い)を把握するためのログへのリンクが表示されます。

3ec684b1b4906657.png

これで、関数が有効になり、HTTP 経由でトリガーできるようになりました。

4. 関数をテストする

Cloud Functions の概要ページで、関数のメニューを表示し、[関数をテスト] をクリックします。

74e310ee6663bb3c.png

[トリガーとなるイベント] フィールドの {} 内に次のテキストを入力して、[関数をテスト] をクリックします。

[出力] フィールドに「Success: Hello World!」というメッセージが表示されます。

[ログ] フィールドにステータス コード 200 が表示されていれば、成功しています。ログが表示されるまでに数分かかることがあります。

a876def9cbf24a45.png

5. 関数のログを表示する

青い矢印をクリックして、Cloud Functions の概要ページに戻ります。

8917a2bfa4fb9502.png

関数のメニューを表示して、[ログを表示] をクリックします。

e97e6ec1fc17dfd7.png

ログ履歴の例を次に示します。

d91a00cf4457fa84.png

ログは関数ごと、重大度ごとにフィルタリングでき、ラベルや自由形式のテキストで検索できます。

これでアプリケーションのデプロイ、テスト、ログの表示が完了しました。

6. リソースをクリーンアップする

これはサーバーレス コンピューティングであるため、リソースをクリーンアップする必要はありません。ゼロにスケーリングすると、コストもゼロにスケーリングされます。そのため、関数にトラフィックがない場合は、費用は発生しません。また、毎月最初の 200 万回の Cloud Functions 呼び出しは無料です。詳細については、料金ページをご覧ください。

関数を削除する場合は、概要ページに移動して関数を選択し、[削除] をクリックします。

4fe11e1b41b32ba2.png

7. 次のステップ

Cloud Functions には、他にも多くの機能が用意されています。他の Codelab とプロダクト ページ、そのドキュメントをご覧ください。

次の点もご確認ください。