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