GW:Last Day - サーバーレス関数に向き合ってみた
どうしても複雑な動きをするカスタムフォームを作りたくて、今日はサーバーレス関数に挑戦してみました。
フォーム自体は順調で、HTMLとJavaScriptの部分は問題なく進んで、午前中にはフォームが完成✨いい感じ!
と思いきや…サーバーレス関数が立ちはだかりました。
実は、以前一度だけ触れたことがあったのですが、説明を受けて「分かった!」と思ったものの
結局知識は 頭に残っていませんでした。そんなダメな自分を脱却すべく、今回は理解することを目的にゆっくり進めてみました。
今回の目標は、フォームからの情報をパスすることで CMS関連のため、こちらのドキュメントを参考にしながら進めました。
大体こんな流れで進めました。
▍1: CLIのインストール
今日はすでにインストール済みでした。
▍2: CLIにポータルの連携
これもすでに完了してます。
▍3: 開発者プロジェクトの作成
昨日のプロジェクトとは別件で試したかったので、新しくプロジェクトを作成しました。
▍4:APIのアクセストークンを発行するための非公開アプリの作成
APIのアクセストークンを発行するための非公開アプリの作成
アクセストークンは、APIでポータルを操作するための「パスワード」のようなものです。
非公開アプリの場合、後でapp.jsonにセンシティブなプロパティを記載すると、
プロジェクトをアップロードできないエラーが出るので注意が必要です。
CLIにシークレットとして登録
▍:Functionの作成
ドキュメントでは、appフォルダーにサンプルをコピーして修正する流れでしたが、私はCLIのドキュメントに従い、hs create functionを使って作成しました。
自動作成された際にパスがなくて少し迷ったので、Serverless.jsonの記入例を共有します:
json
Copy
{
"appFunctions": {
"quote-function": {
"file": "upsert.js",
"secrets": ["LifeTrackerForm"],
"endpoint": {
"path": "search",
"method": ["POST", "PATCH", "GET"]
}
}
}
}
app.jsonの記入
HubSpotのAPIを使用する場合、scopesを記載する必要があります。
構成を確認したくて、function.jsは開発者ドキュメントを丸パクリして進めました。
▍:プロジェクトをポータルにアップロード
問題がなければ、ブラウザからhttps://portalID.hs-sites.com/hs/serverless/fetch-quoteにアクセスします。
ちゃんとコンテンツが表示されたことを確認した後、
ファイル名やパス、メソッドを実際に使用するものに変えて再度アップロードしてアクセスしました。
実際のJSコードをfunction.jsに入れてテストする段階で、完全に沼にはまってしまいました。
エラーメッセージ:
{"status":"error","message":"Couldn't find the requested GET search. Make sure your path is correct and that the function for GET search is deployed, and then try again.","correlationId":"40478c04-dec9-0bf8-9f14-26750eca514b","context":{"PATH":["search"],"METHOD":["GET"]},"category":"OBJECT_NOT_FOUND","subCategory":"ServerlessGatewayErrorType.GATEWAY_NOT_FOUND"}
どうやら、GETメソッドのテストしかできないようです…。
POSTMANでPostしてみましたが、うまくいかず…。また今度試してみます!
<draft>
どうしても複雑な動きをするカスタムフォームを作成したくて
今日はサーバーレス関数に手を出してみました。
フォーム自体は結構順調で、HTMLとJavaScriptは結構順調に進んでいき
フォーム自体は午前中に出来上がりました✨いい感じ!
と思いきや、、、サーバーレス関数が立ちはだかります。
実は前に一度かすったことはあったのですが、説明を受けて わかった気持ちになって
知識は頭の中に定着しなかったのです。そんなダメな社会人を脱すべく進めました。
今回、フォームからの情報をパスするので CMS関連のため こちらのドキュメントを見て進めます。
大体こんな感じで進めました。
- CLIのインストール
- 今日はすでに済んでいた
- CLIにポータルの連携
- ここも既に済んでました
- 開発者プロジェクトの作成
- 昨日のとは別件について試したかったため、新しくプロジェクトを作成しました
- APIのアクセストークンを発行するための非公開アプリの作成
- アクセストークンとは、APIでポータルを操作する際に使用するパスワードみたいなものです。
- 非公開アプリの場合、後で記入するapp.jsonにセンシティブなプロパティーを使用すると
プロジェクトがアップロードできないエラーが帰ってくるので おきをつけください - CLIにシークレットとして登録
- Functionの作成
- ドキュメントではappフォルダー配下にサンプルをコピーして修正するみたいな流れになっていましたが
私は、cdコマンドでappフォルダーを開き、CLIの方のドキュメントに従ってhs create functionしました。 - 自動作成された際には Pathがなくてちょっと迷ったので、Serverless.jsonの記入例を共有します:
-
-
{"appFunctions": {"quote-function": {"file": "upsert.js","secrets": ["LifeTrackerForm"],"endpoint": {"path": "search","method": ["POST", "PATCH", "GET"]}}}}
-
- app.jsonでは、HubSpotのAPIを使用する場合、scopesを記入する必要があります。
- 一旦、構成などが間違えないかを確認したいので、function.jsは開発者ドキュメントを丸パクリしました。
- ドキュメントではappフォルダー配下にサンプルをコピーして修正するみたいな流れになっていましたが
- プロジェクトをポータルにアップロード
- 問題なければ、https://portalID.hs-sites.com/hs/serverless/fetch-quoteにブラウザーからします。
- ファイルの名前やpathをメソッドを実際に使用するものに変えたら、もう一度アップロードして再度アクセスします。
- ここまでは良かったのです。
- が、実際のコードをテストする部分で、すっかり沼にハマってしまいました
- さっきまでは、アクセスできていのに、エラーになってしまいます。。
{"status":"error","message":"Couldn't find the requested GET search. Make sure your path is correct and that the function for GET search is deployed, and then try again.","correlationId":"40478c04-dec9-0bf8-9f14-26750eca514b","context":{"PATH":["search"],"METHOD":["GET"]},"category":"OBJECT_NOT_FOUND","subCategory":"ServerlessGatewayErrorType.GATEWAY_NOT_FOUND"} - どうやら、GETのテストしかできないようです。。。POSTMANで Postしてみましたがうまくいかない。。
- また、今後試そうと思います!