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 を使用することで既存のクラウド サービスを強化し、多様なプログラミング ロジックを使用する、より多くのユースケースに対応できます。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 の関数を作成、デプロイ、テストする方法について学習します。次のことを行います。

  • 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 では Cloud 上で動作するコマンドライン環境である Google Cloud Shell を使用します。

この Debian ベースの仮想マシンには、必要な開発ツールがすべて揃っています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働するため、ネットワークのパフォーマンスと認証が大幅に向上しています。つまり、この 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 コンソール ダッシュボードで確認します。

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

  • 引き続き「create function」内でダイアログの下部にある [作成] をクリックし、関数をデプロイします。

b68c3647b771e6f9.png

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

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

3ec684b1b4906657.png

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

4. 関数をテストする

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

74e310ee6663bb3c.png

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

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

[ログ] フィールドにステータス コード 200 が表示されていれば成功です。ログが表示されるまでに 1 分ほどかかる場合があります。

a876def9cbf24a45.png

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

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

8917a2bfa4fb9502.png

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

e97e6ec1fc17dfd7.png

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

d91a00cf4457fa84.png

関数や重大度でログをフィルタしたり、ラベルや自由形式のテキストで検索したりできます。

アプリケーションのデプロイとテストが完了し、ログを表示できるようになりました。

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

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

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

4fe11e1b41b32ba2.png

7. 次のステップ

Cloud Functions には他にも多くの機能があります。他の Codelab、プロダクト ページ、およびそのドキュメントを確認する。

以下もご確認ください。