Serverless.json、関数ファイル、エンドポイント、CLIコマンド、パッケージの一元管理に関する参照情報。
.functions
フォルダー内にあるファイルと、サーバーレス関数で使用できるCLIコマンドについて説明します。
サーバーレス関数の概要については、サーバーレス関数の概要をご確認ください。
JavaScriptのレンダリングされたモジュールとパーシャルのプロジェクトを使用してサーバーレス関数を作成する方法の詳細については、開発者プロジェクトのドキュメントをご覧ください。
.functions
フォルダーのserverless.json
ファイルには、サーバーレス関数構成が保存されます。これは必須ファイルであり、これによって関数がエンドポイントにマッピングされます。
キー | Type | Description |
---|---|---|
runtime | 文字列 | ランタイム環境。次のNode.jsバージョンをサポートします。
|
version | 文字列 | HubSpotサーバーレス関数スキーマバージョン。(現在のバージョン1.0) |
environment | オブジェクト | 実行環境で、実行される関数に環境変数として渡される設定用変数。環境変数に基づいて、実際のAPIの代わりにテストバージョンを使用するロジックを追加する場合などに使用します。 |
secrets | 配列 | サーバーレス関数が認証に使用するシークレットの名前を含む配列。このファイルにはシークレット値を直接入力しないで、シークレット名の参照にとどめてください。 |
endpoints | オブジェクト | エンドポイントでは、functionsフォルダーにおいて、公開されるパスおよび特定のJavaScriptファイルへのマッピングが定義されます。エンドポイントの詳細については、以下で説明しています。 |
キー | Type | Description |
---|---|---|
method | 文字列または文字列からなる配列 | このエンドポイントによってサポートされるHTTPメソッド(複数可)。既定ではGETです。 |
file | 文字列 | エンドポイントの実装があるJavaScript関数ファイルへのパス。 |
.hs-sites.com
サブドメインも含まれます。
これらの関数には、次のURLでアクセスできます。
https://{domainName}/_hcms/api/{endpoint-name/path}?portalid={hubId}
以下では、各URLコンポーネントについて説明します。
Parameter | Description |
---|---|
domainName | 自分のドメイン名。 |
/_hcms/api/ | サーバーレス関数用に予約されたパス。このパスには、全てのエンドポイントが含まれます。 |
endpoint-name/path | serverless.json ファイルで指定されているエンドポイント名またはパス。 |
hubId | 自分のHub ID。これをリクエストに含めることにより、モジュールおよびテンプレートのプレビュー時に関数をテストできます。 |
serverless.json
構成ファイルに加え、.functions
フォルダーにも、関数を定義するNode.js JavaScriptファイルが含まれています。requestライブラリーを利用して、HubSpot APIや他のAPIへのHTTPリクエストを行うこともできます。
例として、以下のような場合が挙げられます。
Parameter | Description |
---|---|
accountId | 関数が含まれているHubSpotアカウントのID。 |
body | コンテンツタイプapplication/json のPOST リクエストとして送信する場合に入力します。 |
contact | Cookieに紐付けられたコンタクトから送信されたリクエストの場合、コンタクトオブジェクトには、基本的なコンタクトプロパティーに加え、次の情報が含められます。
|
headers | エンドポイントに対してクライアントから送信されたヘッダーが含まれます。 |
params | クエリー文字列値、およびHTMLフォームによるPOST値が入ります。文字列によるキーと、文字列の配列による値から成るマップとして構成されます。context.params.yourvalue |
limits | サーバーレス関数のレート制限にどの程度近づいているかを返します。
|
context.body
を使用して情報にアクセスする場合と同様に、context.headers
を使用してこれらのヘッダーにアクセスできます。
以下で、HubSpotが提供する一般的なヘッダーのいくつかについて確認します。完全なリストについては、MDNのHTTPヘッダーのドキュメントをご覧ください。
ヘッダー | Description |
---|---|
accept | クライアント側で処理できるコンテンツタイプをMIMEタイプとして示します。MDNを参照してください。 |
accept-encoding | クライアント側で処理できるコンテンツエンコーディングを示します。MDNを参照してください。 |
accept-language | 使用される言葉とロケールを示します。MDNを参照してください。 |
cache-control | キャッシュ用のディレクティブを保持します。MDNを参照してください。 |
connection | ネットワーク接続が開いたままかどうかを示します。MDNを参照してください。 |
cookie | クライアントから送信されたCookieが含まれます。MDNを参照してください。 |
host | リスニングサーバーのドメイン名とTCPポート番号を示します。MDNを参照してください。 |
true-client-ip | エンドユーザーのIPアドレス。Cloudflare true-client-ipを参照してください。 |
upgrade-insecure-requests | レスポンスの暗号化および認証について、クライアント側の設定を示します。MDNを参照してください。 |
user-agent | アプリケーション、オペレーティングシステム、アプリケーションベンダー、バージョンを識別するためのベンダー定義文字列。MDNを参照してください。 |
x-forwarded-for | プロキシーまたはロードバランサーを通過するクライアントの発信元IPアドレスを識別します。MDNを参照してください。 |
301
を含むレスポンスを送信することで、サーバーレス関数からリダイレクトを実行できます。
multiValueHeaders
を使用して値を渡すことができます。例えば、ブラウザーに複数のCookieを設定するように指示できます。
process.env.secretName
)を使用します。シークレットの管理には、HubSpot CLIで以下のコマンドを使用します。
CLIを使用して追加されたシークレットは、そのシークレット名を含むsecrets
配列を含めることで、関数で使用できるようになります。これにより、関数コードをバージョン管理に保存し、シークレットを公開せずに使用できるようになります。ただし、コンソールログを使用して、またはレスポンスとして、シークレットの値を返さないでください。そうすると、ログや、サーバーレス関数を呼び出すフロントエンドページで、シークレットが公開される恐れがあります。
"contentType" : "application/json"
ヘッダーを使用します。<form>
要素のaction
属性は使用しないでください。
Access-Control-Allow-Origin
ヘッダーを変更することはできません。CORSエラーのトラブルシューティングに関する詳細はMDNを参照してください。serverless.json
ファイル内の関数のエンドポイントを変更して、新しい関数ファイルを指すようにします。旧バージョンは問題なく削除できます。contentType
application/json
を使用する必要があります。429
のレスポンスが返されます。各関数の実行時間は、サーバーレス関数ログに記録されます。
上記の制限を回避できるよう、実行中に自動で制限データが関数コンテキストに提供されます。その情報に基づいて、アプリケーションを制限内にとどめるような調整を行うことができます。例えばアプリケーションからエンドポイントへのポーリングが必要な場合、ポーリング頻度を調整するための変数をデータと共に返すことができます。これにより、トラフィックの増大時にも制限に到達しないようにポーリング速度を抑え、トラフィックの減少後に元に戻すことが可能になります。