このページの本文へ

JavaScript FaaSを開発チームリーダーが紹介、開発背景から開発者向けツールや留意点まで

アカマイ独自のエッジサーバーレス基盤「Akamai EdgeWorkers」とは

2021年06月17日 07時00分更新

文● 大塚昭彦/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 アカマイ・テクノロジーズ(Akamai Technologies)が、2021年6月15日から18日の日程でオンラインカンファレンス「Akamai TechWeek 2021 Japan」を開催中だ。

 「エッジコンピューティング」をテーマとした2日目(6月16日)のキーノートセッションでは、米Akamaiで「Akamai EdgeWorkers」「同 EdgeKV」のプロダクト開発チームを率いるジョン・キャメロン氏が出席。同社が展開するエッジプラットフォームを活用したサーバーレスコンピューティングソリューションであるEdgeWorkersの特徴や、開発者向けのノウハウ、リソースなどの紹介を行った。本稿では同セッションの概要をリポートする。

「Akamai EdgeWorkers」「Akamai EdgeKV」の特徴

米Akamai Technologies エンジニアリングディレクターのジョン・キャメロン(John Camelon)氏/p>

「Akamai EdgeWorkers/EdgeKV」とは

 Akamai EdgeWorkersは、Akamaiが135カ国に分散配置する32万台超のエッジサーバー(Akamai Intelligent Edge Platform)上で、ユーザーが独自開発したロジック(JavaScriptコード)を実行可能にするソリューションだ。国内では今年4月に正式提供開始を発表している。

 EdgeWorkersは、サーバーレスのコード実行環境を提供するFaaS(Function-as-a-Service)の一種だが、「AWS Lambda」「Azure Functions」のようなパブリッククラウドサービスよりもエンドユーザーに近く、低遅延のエッジ環境でロジックを実行できる点が大きな特徴となる。コード実行環境は自動的にスケーリングされ、利用料金はイベント処理数に応じて課金される。

 もうひとつ、EdgeWorkersで稼働するステートフルなロジック向けのデータストアとして、分散型キーバリューストア「Akamai EdgeKV」も開発されている(現在ベータ提供中)。EdgeKVのデータはグローバルのエッジサーバー間で常に同期される。

「Akamai EdgeWorkers/EdgeKV」の概要(同社記者説明会資料より)

EdgeWorkersの開発背景、JavaScriptを選んだ理由

 キャメロン氏はまず、EdgeWorkersの開発背景から説明した。

 「ユーザー企業の開発者がエッジアプリケーションを構築するために必要とするものは、3つあると考える」とキャメロン氏は語る。「ビジネスロジックを構成する柔軟な手段」「自社のアプリケーションとエッジとを統合するためのビルディングブロック」「開発の生産性を向上させるツール」の3つだ。そしてAkamaiでは、EdgeWorkersでこれらすべてを提供することを目標とした。

 「EdgeWorkersは、JavaScript形式でロジックとコントロール言語を提供する。また、さまざまなビジネス課題解決に使えるビルディングブロックも提供する。アプリケーションがエッジデータを扱い、さまざまに利用できるようにする。そして、EdgeWorkersとEdgeKVに対応した開発ツールセットも提供する」

 またキャメロン氏は、EdgeWorkersのロジック開発言語としてJavaScript(ECMAScript 6)を選択した理由は「大きく5つある」と語った。すでに多くのプログラマーが習得しているポピュラーな言語であること、既存モジュールをimport文で組み込むなどコードの再利用や共有ができること、非同期処理のプログラミングが可能であること、JITコンパイラ(実行時コンパイラ)による処理高速化に対応すること、エコシステムにおいてIDEや静的解析ツール、パッケージマネージャーなど多くの生産性ツールが提供されていること、の5つだという。

 なお、ユーザーがJavaScriptで開発したロジックは、エッジサーバー上のランタイム「V8 JavaScriptエンジン」を使って高速に実行される。

JavaScriptを選択した理由は大きく5つ

 続いてキャメロン氏は「安全性」に話を進めた。EdgeWorkersは大規模分散型、かつ複数のユーザーが共有するエッジコンピューティング環境である。サービス提供側として、サイバーセキュリティだけでなくスケーラビリティ、複数ユーザー間のパフォーマンス干渉、コーディングの際のヒューマンエラーなどを考慮する必要があったと説明する。

 「(サービス提供側としては)ユーザーがアップロードするJavaScriptコードはすべて“信頼性に欠けるもの”と見なさなければならない。意図は良いがコーディングが良くないコード、あるいは悪意のあるコードから、他のユーザーやデータ、エッジサーバーを保護する必要があるからだ。そのために、EdgeWorkersでは無数の安全性メカニズムを組み込んでいる」

 セキュリティ関連の話でもあるため「詳細は明らかにできないが」と断ったうえで、キャメロン氏はEdgeWorkersにおける安全性のための取り組み、実装をいくつか紹介した。たとえば、実行環境の開発にパフォーマンスと安全性を両立させたRust言語を採用したこと、V8 JavaScriptエンジンの機能を使ったユーザー間の実行環境分離、V8エンジンのカスタマイズによるアタックサーフェスの縮小、リクエストごとの消費CPU/メモリリソースの制限、EdgeWorkers新バージョンアップロード時のバリデーション(検証)実行、ステージング/本番環境において起動時にエラーが多発した場合のアクティベーション中止機構を備えること、などだ。

各種開発者向けツール/ドキュメントを提供

 EdgeWorkersでは、ロジックを実行するイベントトリガー(イベントハンドラ)として5つを用意している。5つめのresponseProviderは少し特殊なファンクションであり、オリジンからのコンテンツに代わるレスポンスを動的に生成するものだ。

EdgeWorkersのイベントトリガー(イベントハンドラ)

 EdgeWorkersではビルディングブロックも用意しており、JavaScript APIやimportコマンドによる機能の組み込みが可能だ。リクエスト/レスポンスオブジェクト、Cookieの取り扱いを容易にするモジュールなどだ。リクエストオブジェクトには、エンドユーザーの地理的位置を示すロケーションフィールド、エンドユーザー端末を示すデバイスフィールドを備え、ジオターゲティングやデバイスごとのレスポンス変更に役立つ。

 キャメロン氏が「最もパワフルな能力」「ほぼ無限のユースケースをサポートできる」と紹介したのが、HTTPクライアントライブラリ(httpRequest)だ。利用することで、エッジ上で動くコードからAkamaiで動く他のドメインに向けてHTTPリクエストを実行できる。これにより、自社で管理するエンドポイントからコンテンツを引き出してレスポンスをカスタマイズしたり、EdgeKVからデータをフェッチしたりすることができる。

 そのほかにも多数のビルディングブロックを紹介したキャメロン氏は、「より多くのユースケースを開拓するために、ビルディングブロックはさらに追加していく予定だ」と述べる。たとえば暗号化機能、HTMLパーサー/リライターなどを計画しているという。

 EdgeWorkersを使った開発を支援するために、ローカル環境でコードをテスト実行できる「Akamai Sandbox」をEdgeWorkersにも対応させたほか、REST API経由での管理やデプロイ自動化に便利なCLI、TypeScriptバインディング、「Akamaiコントロールセンター」に統合されたWeb IDEを提供する。そのほか、デバッグ用のトレースヘッダ、レクエスト/レスポンス数やエラー率、コストなどをモニタリングできるWebコンソールなども提供される。

JapaScript APIビルディングブロック

開発者向けに提供するツール群と、Web IDEの画面

デバッグ用のトレースヘッダも提供。またEdgeWorkersの稼働状況をグラフィカルにモニタリングできるWebコンソールも

EdgeWorkersの開発時に考慮すべきポイントとは

 キャメロン氏は、EdgeWorkersに関する開発者向けコンテンツ、APIガイドやツール使用法ドキュメント、サンプルプログラムなどを同社サイトやGitHubリポジトリなどで提供していることを紹介したうえで、「EdgeWorkersでロジックを開発する際に考慮すべきポイント」をまとめた。

 まずは「リソース制限を意識すること」。Akamai Intelligent Edge Platformを構成するサーバー群のスペックは均一ではなく、あるエッジロケーションでは動作しても、別のロケーションでは問題が生じる可能性がある。そのため、開発したコードをステージング環境で実行した際、CPU使用率や実測時間が限界に近づいていたら、本番環境への移行は慎重に行うべきだと強調する。

 また「Node.jsやブラウザ依存のJavaScriptコードは非対応」であると説明した。EdgeWorkersは外部モジュールのインポートに対応しているが、たとえばNode.jsライブラリのようにサイズが大きければ「インポートできないものもあるかもしれない」と述べる。そうしたJavaScriptコードは、ライブラリに依存しないように改修したうえで展開する必要がある。

 そのほか、サイズが大きいほど起動に時間がかかるため「バンドルするライブラリは最小限にする」、コードは複数のサーバーで分散処理されることがあるため「実行中のグローバル変数の変更は避ける」、一方で「初期化後に変更しないグローバル変数は役立つかもしれない」、またレイテンシや利用コストを低減させるために「コードのない空のイベントハンドラは削除する」、管理者向けに「プロパティマネージャー設定にエラー処理やフェイルオーバー処理を実装しておく」といったアドバイスを行った。

EdgeWorkersのプログラミングにおけるTips、注意点

 「われわれは10~12ほどのユースケースをターゲットととらえ、EdgeWorkersを開発してきた。ただし、EdgeWorkersは非常に柔軟な実行環境であり、顧客やプロトタイパー、さらにAkamai社内でも、さまざまな課題解決に使われ始めている。それには驚いた。われわれが想定していたのは400行程度のコードで実現するユースケースだったが、もっと大きなアプリケーション(ロジック)を開発している事例もある」

* * *

 なおAkamai TechWeek 2021の同日には、EdgeWorkersをECサービス「BUYMA(バイマ)」の本番サービス環境で活用しているエニグモが、導入の経緯やEdgeWorkersのメリット、留意点などを語る導入事例セッションも開催された。次回記事にてお届けする予定だ。

カテゴリートップへ