GCP:GCFを試してみる

 GCPのコンピューティングリソースは3個あって、GCE(IaaS)、GAE(PaaS)を試していたけど、今回はGCF Google Cloud Functionsを試してみた。

 GCPのコンピューティングリソースのおさらい。
 GCE:仮想マシンまるごと。 自由度が高いが、OS以上のレイヤーは全てユーザが管理する必要があり、クラウドらしい利点が少ない。
 GAE:アプリケーション実行環境。 自由度は下がるが、OSなど気にする必要が無く、アプリケーションディレクトリだけを投げ込む様なイメージ。
 GCF:スクリプト実行環境。 GAEでは複数ファイルにより構成されたアプリケーションが実現できるのに対して、GCFは唯一のスクリプトを編集して実行させる。 自由度が下がるが、完全にコードを書くだけで良い。

 そんなわけで、GCFはWebアプリケーション的なテンプレートとか画像リソースとかを持つことが出来ない。 やろうと思えば、ストレージリソースにファイルを配置してそれをコード中で利用するとかすれば出来るけど、そんなのするならGAEだろう。 と言う事で、その名の通りFunctionを実現するのに適している。
 このFunctionは、HTTP経由以外にGCPの各種サービスでトリガできるので、StorageやFirebaseのRealtime Databaseとかのイベントで開始できる。 Storageにファイルがアップされたら自動で処理するとか、RDBに書き込まれたら通知するとかが出来る。
 今回はシンプルにHTTPトリガで作成。
 Cloud Functionsの管理画面で関数の作成を選ぶと、名前、割り当てメモリ、トリガー、ソースコード&ランタイム選択がある。 ランタイムはNode.js 6がプロダクトで、8とPython3.7がベータリリース。
割り当てメモリによってCPUリソースなども自動でセットになって料金が決まる。 但し、基本的に実行時間・回数ベースの課金なので使わなければ殆どお金はかからないし、使っても非常に安い。 Always Freeの対象でもあり、ちょっとしたアプリのバックエンドとしてはほぼ無課金で使える。
 HTTPタイプのトリガにすると自動でURLが生成される。 https://{リージョン}-{プロジェクト名}.cloudfunctions.net/{Function名}と言うURLでGoogle推奨通り証明書が自動で出来ている。
 ソースコードはブラウザ上で編集可能で、Node.js 6ランタイムを選んでいる状態で、index.jsとpackage.jsonが編集可能。 package.jsonで使いたいライブラリとかを定義して、index.jsでコードを書く。

まずは、package.json

これでgoogle-cloud-datastore 1.4.0が入る。
そして、プログラム本体のindex.jsを記述。

 ごく普通のnode.jsコードでOK。 関数をexportsに入れてやる。 GCF管理画面で実行する関数を入力できるので、ワンセットのソースを1ファイルで作っておいて、各Functionごとに呼び出す関数を設定することも出来る(exports.deleteItemとか作っておいて共通のソースでGCFのFunctionの紐付けだけ変える)
 で、後は作成ボタンをクリックすれば数分後には先ほどのURLでこのコードが動くようになっている。

 この場合はお試しで、Datastore DB上のmydatastoreのエンティティ一覧をliで表示してる。 GCF的にアプリのバックエンドだから普通はJSONとかにするだろう。 GCPのサービスを直接クライアントアプリから繋ぎたくないけど、簡単にサービスを利用したいとか、ちょっと処理をしてデータを入出力したいとか言うのに非常に便利だ。 Webに仕込んだJSでデータ収集とかするのにGCPの認証情報を埋めるのはマズイので、収集用のFunctionを作っておいてjQueryとかで簡単にPOSTさせて、管理用のGAEアプリでDatastoreを処理して管理するとかで使える。
 とにかく、簡単なスクリプトを書くだけで、環境とかも気にせずにGCPのリソースを処理できるので、手軽なアプリへのインタフェイスとして良いだろう。 また、プログラムを容易に盗めるWebサイト上のJSに処理ロジックを晒したくない時、GCFの中に実装してしまって、JSからはコア機能はGCFをコールして処理して返すとすればプログラム盗用を防げる。

(232)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP]   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です