サーバーレス関数

APPLICABLE PRODUCTS
  • CMS Hub
    • Enterprise

サーバーレス関数を使用すると、HubSpotやサードパーティーのサービスをAPI経由で操作できるサーバーサイドコードを作成できます。認証が必要なAPIでは資格情報が表示されるため、ウェブサイトのフロントエンドでの使用には適していません。サーバーレス関数は仲介処理として機能することで、資格情報を保護できます。 

サーバーレス関数を使用する場合、新たにサーバーを作成、管理する必要がありません。サーバーレス関数はオーバーヘッド(間接的な負荷)が小さいため、ビジネスの成長に合わせて拡大することも容易です。

CMS開発者用サンドボックスアカウントを使用して、サーバーレス関数を試すことができます。初めてのサーバーレス関数を作成するには、サーバーレス関数の使い方を参照してください。

概要

HubSpotのサーバーレス関数は、幅広い用途に活用できます。例えば、次のような状況に使用できます。

  • データを収集し、HubDBやHubSpot CRMに保存
  • 複雑なデータ計算ツール
  • 他のシステムからのデータを動的に表示
  • イベント登録システム
  • フォーム送信を基に、他のシステムにデータを送信

イベント登録システムを例に説明します。サーバーレス関数を使用して登録を処理する方法と、イベントの登録枠がいくつ空いているかを更新する方法に分けて紹介します。

  1. ウェブサイトへの訪問者がイベント登録ページにアクセスすると、あと15人イベントに参加できることが表示されます。訪問者はイベントに登録するためにカスタムフォームに入力し、送信します。
  2. この送信によって、POSTリクエストがyourwebsite.com/_hcms/api/event/participantsに送信されるように設定しています。event/participantsがサーバーレス関数に該当します。
  3. サーバーレス関数は、ユーザーが送信したデータを受信し、ブラウザーに応答を返す前にいくつかの処理を行います。
  4. フォーム フィールド データをHubSpotフォーム送信APIに送ることにより、このフォーム送信の情報をHubSpot CRMに追加します。
  5. HubDB APIを使用して、HubDBに格納されているこのイベントの参加者のカウントから1を減算します。
  6. ウェブブラウザーにレスポンスを返します。
  7. ページのJavascriptは、サーバーレス関数からのレスポンスを受け取り、エンドユーザーに確認メッセージを表示し、残っている参加枠の数を調整します。

HubSpotのサーバーレス関数はJavaScriptで記述し、Node.jsランタイムを使用します。HubSpotのサーバーレス関数の用途は、高度なフォーム送信のサポートや他のAPIからのデータの取り込みなど、HubSpotサイトへの機能追加です。HubSpotに関係のないコードを実行する、汎用的なコンピューティングプラットフォームとしての使用は意図されていません。

制限

サーバーレス関数は、高速の特定用途を対象として設計されています。高速性によって素早い呼び出しとレスポンスが可能になるため、ウェブサイトやアプリのフロントエンドでの利用に最適です。HubSpotのサーバーレス関数には、次のような制限があります。

  • 1アカウントあたり50件のシークレット。
  • 128MBのメモリー。
  • HubSpotアカウントあたり100件以下のエンドポイント。
  • 関数を呼び出す場合はcontentType application/json
  • 呼び出しペイロードあたり6MB。サーバーレス関数を使用してファイルをアップロードする場合などに到達することがあります。

実行制限

  • 各関数の実行時間は最大10秒です
  • 各アカウントでは、1分あたり合計600秒の実行時間に制限されます。

つまり、1分内の次のいずれかの状況が考えられます。

  • 完了までに10秒かかる関数を最大60回実行する。
  • 完了までに100ミリ秒かかる関数を最大6,000回実行する。

これらの制限を超える関数は、エラーになります。実行数と時間の制限の場合は、429のレスポンスが返されます。各関数の実行時間は、サーバーレス関数ログに記録されます。

サーバーレス関数へのアクセス

HubSpotでは、サーバーレス関数はデベロッパー ファイル システムに格納され、デザインマネージャーで表示できます。CLIを使用して、サーバーレス関数にローカル環境で利用して編集できます。 

サーバーレス関数フォルダー

HubSpotのサーバーレス関数は、関数フォルダー内に配置されます。このフォルダーの名前は自由に付けることができますが、.functionsを後ろに付ける必要があります。このフォルダーに格納されているファイルは公開されません。

関数フォルダー内には、serverless.jsonファイルと、関数が記述される.jsファイルを含めます。また、関数の用途や動作、関数を作成するためのビルドプロセスがあるかどうかを説明するために、READMEマークダウンファイルを追加してみてください。

サーバーレス.functionsフォルダー

デザインマネージャー内で誤って編集することを防ぐために、フォルダーをロックできます。フォルダーをロックするには、デザインマネージャーを開き、次にフォルダーを右クリックし、[フォルダーをロック]を選択します。

serverless.json

serverless.jsonは、サーバーレス関数の設定ファイルです。このファイルで、ランタイム環境と、関数で使用することを検討している全ての環境変数を指定します。

エンドポイントのルーティングもこのファイルによって設定します。function.jsファイルにマップするエンドポイントパスを指定します。serverless.jsonファイルの例については、サーバーレス関数リファレンスガイドを参照してください。

function.js

実際のサーバーレス関数は.jsファイルが必要ですが、名前は自由に付けることができます。サーバーレス関数が機能するためには、serverless.jsonファイルに定義したエンドポイントに関数をマッピングする必要があります。トラブルシューティングの観点から、.jsファイルにはserverless.json設定ファイルに定義したエンドポイント名と似た名前を付けることが推奨されます。 

シークレット

APIキーおよび認証情報はシークレットと呼ばれます。シークレットの追加および削除には、HubSpot CLIを使用します。CLI経由で追加したシークレットは、シークレット配列を追加することで、特定の関数やグローバルでシークレットの名前で使用できるようになります。追加したシークレットは、環境から関数内でアクセスできます。このようにシークレットを安全に使用すると、シークレットの漏洩を心配することなく、バージョン管理に関数コードを保存することが可能になります。

コンソールログを使用して、またはレスポンスとしてシークレットの値を返さないでください。ログやサーバーレス関数を呼び出すフロントエンドページでシークレットが漏洩するおそれがあるためです。

サーバーレス関数ログの表示

サーバーレス関数のトラブルシューティングを支援するために、CLIには、関数のログを表示するためのhs logsコマンドがあります。各関数の呼び出しのレスポンス、実行時刻、実行時間に加えて、console.logステートメントも関数ログに表示されます。APIキーなどのシークレットはconsole.logに記録しないでください。


参考になりましたか? *
こちらのフォームではドキュメントに関するご意見をご提供ください。HubSpotがご提供しているヘルプはこちらでご確認ください。