サーバーレス関数
CMS Hub
- Enterprise
サーバーレス関数を使用すると、HubSpotやサードパーティーのサービスをAPI経由で操作できるサーバーサイドコードを作成できます。認証が必要なAPIでは資格情報が表示されるため、ウェブサイトのフロントエンドでの使用には適していません。サーバーレス関数は仲介処理として機能することで、資格情報を保護できます。
サーバーレス関数を使用する場合、新たにサーバーを作成、管理する必要はありません。サーバーレス関数はオーバーヘッド(間接的な負荷)が小さいため、ビジネスの成長に合わせて拡大することも容易です。
CMS開発者用サンドボックスアカウントを使用して、サーバーレス関数を試すことができます。初めてのサーバーレス関数を作成する際には、サーバーレス関数の使い方をご参照ください。
HubSpotのサーバーレス関数は、幅広い用途に活用できます。例えば、次のような目的に使用できます。
- データを収集し、HubDBやHubSpot CRMに保存
- 複雑なデータ計算ツール
- 他のシステムからのデータを動的に表示
- イベント登録システム(ベータ版)
- フォーム送信を通じて他のシステムにデータを送信
イベント登録システムを例に説明します。サーバーレス関数を使用して登録を処理する方法と、イベントの登録枠がいくつ空いているかを更新する方法に分けて紹介します。
- ウェブサイトへの訪問者がイベント登録ページにアクセスすると、あと15人イベントに参加できることが表示されます。訪問者はイベントに登録するためにカスタムフォームに入力し、送信します。
- このフォーム送信によって、
POST
リクエストがyourwebsite.com/_hcms/api/event/participants
に送信されるように設定しており、event/participants
がサーバーレス関数に該当します。 - サーバーレス関数は、ユーザーが送信したデータを受信し、ブラウザーにレスポンスを返す前にいくつかの処理を行います。
- フォーム フィールド データをHubSpotフォーム送信APIに送ることにより、このフォーム送信の情報をHubSpot CRMに追加します。
- HubDB APIを使用して、HubDBに格納されているこのイベントの参加者のカウントから1を減算します。
- ウェブブラウザーにレスポンスを返します。
- ページのJavascriptは、サーバーレス関数からのレスポンスを受け取り、エンドユーザーに確認メッセージを表示し、残っている参加枠の数を調整します。
HubSpotのサーバーレス関数はJavaScriptで記述し、Node.jsランタイムを使用します。HubSpotのサーバーレス関数の用途は、高度なフォーム送信のサポートや他のAPIからのデータの取り込みなど、HubSpotサイトへの機能追加です。HubSpotに関係のないコードを実行する、汎用的なコンピューティングプラットフォームとしての使用は意図されていません。
サーバーレス関数は、高速の特定用途を対象として設計されています。高速性によって素早い呼び出しとレスポンスが可能になるため、ウェブサイトやアプリのフロントエンドでの利用に最適です。HubSpotのサーバーレス関数には、次のような制限があります。
- 1アカウントあたり50件のシークレット。
- 128MBのメモリー。
- HubSpotアカウントあたり100件以下のエンドポイント。
- 関数を呼び出す場合はcontentType
application/json
。 - 呼び出しペイロードあたり6MB。サーバーレス関数を使用してファイルをアップロードする場合などに到達することがあります。
- 記録できるデータの量は4KB。この制限に達した場合は、最終出力ではなく、個々のアクションの後に記録することをお勧めします。
実行制限
- 各関数の実行時間は最大10秒です
- 各アカウントでは、1分あたり実行時間が合計600秒に制限されています。
つまり、1分内に実行できる関数は次のいずれかになります。
- 完了までに10秒かかる関数を最大60回実行する。
- 完了までに100ミリ秒かかる関数を最大6,000回実行する。
これらの制限を超える関数は、エラーになります。実行数と時間の制限には、429
のレスポンスが返されます。各関数の実行時間は、サーバーレス関数ログに記録されます。
依存関係の分割
複数のJavaScriptファイルがデプロイされている場合、サーバーレス関数ではこれらのJavaScriptファイルの分割に対応できません。代わりにサーバーレス関数では、関数を実行するための1つのJavaScriptファイルを含む必要があります。複数のJavaScriptファイルを使用してサーバーレス関数を構築する場合は、共有コードを1つのJavaScriptファイルにコピーするか、webpackを使用してコードをまとめる必要があります。webpackをソリューションとして使用する方法について詳細は、HubSpotのコミュニティーをご確認ください。
HubSpotでは、サーバーレス関数はデベロッパー ファイル システムに格納され、デザインマネージャーで表示できます。CLIを使用して、サーバーレス関数にローカル環境で利用して編集可能です。
HubSpotのサーバーレス関数は、関数フォルダー内に配置されます。このフォルダーの名前は自由に付けることができますが、.functions
を末尾に付ける必要があります。このフォルダーに格納されているファイルは公開されません。
functionsフォルダー内に、serverless.json
ファイルと、関数が記述されている.js
ファイルを格納します。また、関数の用途や動作、関数を作成するためのビルドプロセスがあるかどうかを説明するために、READMEマークダウンファイルを追加してください。

デザインマネージャー内で誤って編集することを防ぐために、フォルダーをロックできます。フォルダーをロックするには、デザインマネージャーを開き、次にフォルダーを右クリックし、[フォルダーをロック]を選択します。
serverless.json
は、サーバーレス関数の設定ファイルです。このファイルで、ランタイム環境と、関数で使用することを検討している全ての環境変数を指定します。
エンドポイントのルーティングもこのファイルによって設定します。function.js
ファイルにマップするエンドポイントパスを指定します。serverless.json
ファイルの例については、サーバーレス関数リファレンスガイドを参照してください。
実際のサーバーレス関数は.jsファイル
が必要ですが、名前は自由に付けることができます。サーバーレス関数が機能するためには、serverless.json
ファイルに定義したエンドポイントに関数をマッピングする必要があります。トラブルシューティングの観点から、.js
ファイルにはserverless.json
設定ファイルに定義したエンドポイント名と似た名前を付けることが推奨されます。
サーバーレス関数による呼び出しを認証する場合、セキュリティー上、シークレットを使用してAPIキー、非公開アプリのアクセストークン、およびその他の認証情報を保存する必要があります。これにより、キーまたはアクセストークンを公開せずに認証できるようになります。
シークレットを作成および管理するには、次のようなHubSpot CLIコマンドを使用できます。
hs secrets list
:現在使用可能なシークレットの名前を表示します。hs secrets add
:新しいシークレットを作成します。hs secrets update
:既存のシークレットを更新します。
CLI経由で追加したシークレットは、シークレット配列を追加することで、特定の関数やグローバルでシークレットの名前で使用できるようになります。追加したシークレットは、環境から関数内でアクセスできます。このようにシークレットを安全に使用すると、シークレットの漏洩を心配することなく、バージョン管理に関数コードを保存することが可能になります。
コンソールログを使用して、またはレスポンスとしてシークレットの値を返さないでください。ログやサーバーレス関数を呼び出すフロントエンドページでシークレットが漏洩する恐れがあるためです。
サーバーレス関数のトラブルシューティングを支援するために、CLIには、関数のログを表示するためのhs logs
コマンドがあります。各関数の呼び出しのレスポンス、実行時刻、実行時間に加えて、console.log
ステートメントも関数ログに表示されます。APIキーなどのシークレットはconsole.log
に記録しないでください。
貴重なご意見をありがとうございました。