技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

Cloud Functions概要【GCP】

Cloud Functionsとは

イベント駆動なサーバレス実行環境です。

指定したイベントの発生に呼応して、軽量な関数を、フルマネージド環境で実行させることができます。サーバのメンテナンスは不要です。


対応言語は、「Node.js(JavaScript)」「Python」「Go」です。(2019年8月時点)



複数のGoogle Cloudサービスと接続することが可能で、Cloud Functions自体がGoogleアカウントの認証にアクセスできるため、他のGCPサービスの認証をシームレスに行えます。



課金体系は、実行回数に応じて請求金額を算出する方式であり、月200万回までは無料で利用できます。待機時間に対する課金もないのが特徴です。




ただし、Cloud Functionsには制限があり、実行時間は最大540秒、割り当てメモリは最大2048MBと指定されているため、重い処理を行う関数には向きません。


イベント

2種類のイベントに対応します。

  • HTTPリクエス
    • 通常のHTTPリクエストメソッドに対応します。
    • TLS証明書が自動的に提供されるため、セキュアな接続を使用して関数を実行できます。
  • バックグラウンド通信
    • Google Cloudサービスのイベントを利用できます。
    • 例えばCloud Storage、Cloud Pub/Subなど。
    • Stackdriverのログと組み合わせれば、サードパーティサービスの挙動をトリガーにすることも可能です。



公式ドキュメント_イベント


デプロイ

関数はGoogle Cloud Storageにアップロードされて初めて実行対象となることができます。
関数をデプロイするために、3つの方法が提供されています。

  • ローカルから
    • gcloudコマンドを使います。
    • 関数が書かれたファイルと同じ階層でコマンドを実行します。
    • gcloud beta functions deploy <NAME> <TRIGGER>
  • ソース管理ツールから
    • Google Cloud Source Repositoriesを使用します。
    • gcloudコマンドを使います。
    • 管理ツールのリポジトリパスを--sourceで指定します。
  • GCPコンソールから



公式ドキュメント_デプロイ


コール

バックグラウンドの場合は、イベントとして登録したCloud Storageなどのトリガーに従って実行されます。


HTTPリクエストの場合、プログラムからのAPIキックはもちろん、curlコマンドにも対応しています。

curl -X POST https://<YOUR_REGION>-<YOUR_PROJECT_ID>.cloudfunctions.net/helloHttp -H "Content-Type:application/json" --data '{"name":"Keyboard Cat"}'


公式ドキュメント_コール


ログ

関数内で出力するログは、次の方法で確認することができます。

  • GCPコンソール (Stackingdriver UI)
  • gcloudコマンド
    • gcloud beta functions logs read <FUNCTION_NAME>
    • 関数名を指定しないパターン、オプションを指定するパターンがあります。
  • Logging API


公式ドキュメント_ログ


Tips

HTTPリクエストの場合はHTTPレスポンスを必ず返す

HTTPリクエストによるトリガーの場合、HTTPレスポンスがないと、関数がタイムアウトするまで実行される可能性があります。

こうなると、タイムアウトまでの時間が課金され続けることになってしまいます。


グローバル変数を定義して、うまく再利用する

グローバルスコープに定義された変数は、キャッシュされます。

外部ライブラリの参照やネットワーク接続結果、内容の変わらない重い処理を代入する変数はグローバルに定義することで、パフォーマンスを大幅に改善できることがあります。


ただし、グローバルに変数を定義すると、初期化コードは常にコールドスタートの呼び出しによって実行されるため、関数の実行時間が長くなることがあります。

全てのコードパスで使用されていない変数の場合、遅延初期化を行うことを検討します。


そのほかは公式ドキュメントを参照。


参考

公式ドキュメント