1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Akamai EdgeWorkersでCDNのサーバー上にBFF(Backends for Frontends)を構築する

Posted at

マイクロサービス化とクライアントアプリ

「APIのマイクロサービス化が進む中、クライアントアプリの実装がどんどん複雑で面倒になってきている。アプリはBFFのみと通信し、BFFがバックエンドのAPIとのやり取りを担うアーキテクチャに変更したい。」
最近はこのようなケースが増えてきているのではないでしょうか。
BFFの構築方法は多くの検討の余地があると思いますが、ここではEdgeWorkersを使ってエッジサーバー上にBFFを構築する例を考えます。EdgeWorkersで構築することでBFFのスケーリングを気にする必要がなくなります。

EdgeWorkersとは

EdgeWorkersでは、エッジで駆動するリクエスト/レスポンスのイベントハンドラを提供し、 JavaScript を実行できます。クライアントの近くのEdgeサーバーで処理を行うためレイテンシが小さく、世界中に数十万台のサーバーが配置され、自動で分散駆動するためスケーリングを気にしなくて良いというメリットがあります。

参考: EdgeWorkers:Akamaiのエッジサーバー上でJavascriptで書いたコードが実行可能に

サンプル

ここでは、既存のAPIをcallした結果をアグリゲートするという内容で実装します。既存リソースを無駄にすることなくBFFを構築できます。

import { logger } from 'log'
import { createResponse } from 'create-response'
import { httpRequest } from 'http-request'

export async function responseProvider(request) {
    // 3つのAPIをcallする
    const data = await Promise.all([
        callAPI1(request),
        callAPI2(request),
        callAPI3(request)
    ])
    const result = {
        api_1: data[0],
        api_2: data[1],
        api_3: data[2]
    }

    // アグリゲートして返却
    const options = {}
    options.status = 200
    options.headers = {}
    return createResponse(JSON.stringify({
        status: "OK",
        data: result
    }), options)
}

EdgeWorkersを呼び出すよう設定

CDN側の配信設定からEdgeWorkersを呼び出します。
CDNの設定からEdgeWorkersを呼び出す

おわりに

今回のサンプルは非常に簡単なものですが、たとえばEdgeWorkersに組み込まれているcryptoモジュールを利用したJWTの検証処理を追加などするとより実用的になります。アーキテクチャを再検討する機会がありましたらぜひEdge Computingも選択肢に含めてみてはいかがでしょうか。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?