Dancing with Heroku AppLink / 1

(まずはよくありそうなパターンでも)

構成の概要

Heroku AppLinkの活用例として、こんな構成を試しているところ。

  • HerokuとSalesforceを組み合わせて上のようなWebシステムを構築してる。
    • HerokuはFrontend(Next.js)とBackend(Medusa.js)を使ってアプリケーションを作成している。
    • Salesforceで作成したデータをHeroku Backendに連携する。BackendのAPIを外部サービスとしてSalesforceに登録しておいて、SalesforceからはFlowを使って連携する。
    • Fronendから送信されたデータは、Backendを介してSalesforceに連携する。Heroku AppLinkを使ってSalesforceへのアクセストークンを取得してSalesforceにデータを書き込む。

構成としては、よくありそうなパターンではなかろうか。

しかし、Heroku BackendにAppLinkを組み込むことで、BackendとSalesforceの実装工数を削減できるし、セキュアな連携を実現できて大変ありがたいのである。
活用ポイントとしては、Heroku BackendとSalesforceの連携が主なところになる。Heroku Backend側の内部についてもう少し細かく見てみよう。


Heroku Backendの中身をもう少し

Heroku AppLinkをaddonとして追加したアプリケーションにはServiceMeshビルドパックを組み込んで、アプリケーション起動時にServiceMeshも起動するように、とドキュメントで明記されている。
(↓こんな感じのProcfileにしよう、と。)

web: APP_PORT=3000 heroku-applink-service-mesh npm start

そうすると、Heroku Routerとアプリケーションの間にServiceMeshが入り込んで、アプリケーションへのリクエスト内容を検証してリクエストヘッダに情報を付加してアプリケーションに流す、といったことをしてくれる。(赤線)

Salesforceからリクエストを投げる際にはリクエストヘッダにアクセストークンなどの情報を暗号化して付与する。それをServiceMesh内で検証して問題なければアプリケーションにリレーする。
検証に失敗すると、Heroku Routerにエラーを返すという具合だ。

従って、アプリケーション側としては、受けとったリクエストがSalesforceからのリクエストかどうか判定するといった防御機能が不要になる。
(ServiceMeshがそこを担保してくれるため)

一方、Salesforce以外のWebアプリケーションからもアクセスしたい場合がある。そういったWebアプリケーションからのリクエストには、当然Salesforceが付与するような情報はないので、そのままではエラーとなってしまう。この場合は(青線)のように「認証とかその他諸々」はスキップして欲しいのである。

実はServiceMeshには、特定のURLパターンへのアクセスであれば「認証とかその他諸々」をバイパスする、という設定を付け足すことができる。[Dig into the Heroku AppLink (not a deep dive) - サービスメッシュについて]
その設定を施すことで、外部アプリケーションからのリクエストも通せるようになるのだ。
(この設定はありがたいが、バイパスする際のリスクは許容できることを確認しましょう)


冒頭の図だと大雑把なので、もう一段詳細なレベルで見てみると、例えばこんな感じに連携できる。

Salesforceが絡むことがないリクエストも、Salesforceが絡むリクエストも実現することは可能である。
Salesforceからも安心して連携できるし、外部とのやりとりも対応できるということで「こういうのでいいんだよ こういうので」という気分になる。

さいごに

別にHeroku AppLinkを使わなくたって構築することは可能だろうが、色々と考慮しなければならないことも多くなるし、それに伴って実装工数も増えるし...と、使わないことのメリットというのはあまりない...と感じる今日この頃。

上記以外にも使い道はあると思うので、ぜひ色々試してみて共有して頂けると大変嬉しいです。

Read more

heroku

Dancing with Heroku AppLink / 2

(ローカルアプリと組み合わせる...?) 構成の概要 Heroku AppLinkの活用例として、こんな構成を試してみた。 * 個別に作成したElectronアプリケーションがあって、そのアプリケーションはSalesforceのデータを参照したり、データを作成する。 * Electronアプリケーションに、Salesforceのアクセストークンを持たせてアクセスできるようにしたい。 * しかし、Electronアプリケーション内にSalesforceのアカウント情報を持たせたくないし、個別のログイン機能なんて作りたくない。 * Electronアプリケーションに渡す情報にはSalesforce外の情報もあり、その諸々の情報をまとめるためにHerokuアプリケーションを設置した。 * (Apexコードを書くのがやや面倒...) といったあたりで、上のような構成を試してみた。 Heroku AppLinkの活用ポイント など ※主に②で大活躍するので、そこに絞った話をしてみよう。 まず、Heroku側の実装としては以下を前提として、Node.jsアプリケ

By Takahiro Yonei

Dancing with Heroku vibes / 2

heroku vibesの画面操作を見るに、プロンプトを入力しつつ1つのherokuアプリを自動生成していくように見える。 1つのアプリで完結するようなものであれば、それでも良さそうに思える。 しかし、複数のherokuアプリを組み合わせてシステムを構築することもあるので、その場合はどうサポートしてくれるだろうか? プログラマの視点からすると、アプリの自動生成については...あまり優位性が見出せない。 pipelineを使いたいとかgithubとの連携とかあるので、自分でやった方が良いかなぁと思う。その辺りはむしろheroku MCPサーバの方がやりやすいかもしれない。 ボンヤリとしたアイディアから、構成や使用するadd onをいい感じに提案してくれる壁打ち相手として使えそうだろうか?と思う。 プログラマでない人からすれば、herokuアプリを自動生成してくれるのは助かる場面はありそうだ。 ただの想像だけど、salesforceを拡張する機能としてheroku applinkを使ったherokuアプリを自動生成する...みたいな場面であれば、プログラマでない人には有益かもしれない

By Takahiro Yonei