Akamai EdgeWorkers をローカル環境で動作する方法について説明します。
Akamai EdgeWorkers とは
超分散された Akamai CDN のエッジプラットフォーム上でサーバーレスコンピューティング機能を提供するのが EdgeWorkers です。EdgeWorkers を利用すると、Web アプリケーション、API、IoT のトラフィックに対してエッジ上でカスタムロジックを起動することができます。EdgeWorkers のコンセプトやユースケースについては、Qiita X Akamai Meetup を参照ください。
Akamai Sandbox とは
Akamai Sandbox は Akamai CDN の環境設定を変更することなくローカルホストで Akamai の振る舞いを検証する環境です。Akamai には Production 環境以外に Staging 環境が用意されている利点があります。Staging 環境に反映するまでに2分ほどしかかかりませんが、開発者にとっては 2 分は長く感じると思います。EdgeWorkers は ECMAScript 言語に対応しており、JavaScript エンジニアが気軽にコードを書けます。コードのデバッグをするために Staging 環境で 2 分待つことなく、直ぐにローカル環境でテストできるのが Akamai Sandbox を使う利点です。Sandbox についてはユーザーガイドを参照ください。
Sandbox 環境は Akamai CDN に統合されていますので、Akamai 上にプロパティが存在している必要があります。
Sandbox 環境の作成
Akamai Sandbox は Windows や macOS 上でプロキシサーバーとして動作し、Akamai エッジプラットフォームと接続します。次のコマンドで、Akamai Sandbox CLI をインストールし、ツールとプロキシサーバーを入手できます。
akamai install sandbox
Akamai CLI をインストールをしていない場合は、下記のページを参照してください。
Akamai Sandbox CLI を入手したら、ローカル環境に Sandbox を作成します。
akamai sandbox create --hostname www.example.com --name sandbox_for_example.com
www.example.com
は Akamai 化したホスト名です。sandbox_for_example.com
はローカル環境に作成する Sandbox 環境の名前です。ホスト名の指定以外にもプロパティ名で作成もできます。
akamai sandbox create --property ion-property:42 --name my-ion-property
ion-property:42
は Akamai 上に作成されたプロパティ名とバージョン番号です。バージョンを指定しないと、プロダクション環境にアクティベートされたバージョンを優先的に取得しますので、ステージング環境にしかアクティベーションされていないような最新バージョンを取るときはバージョン番号を指定します。プロパティのバージョンによって振る舞いを変えているケースもあると思いますので、バージョン番号を付けて Sandbox 環境を作成すると良いと思います。私もバージョンの違いで無駄な時間を過ごしたことがあります。コマンドを実行すると、一つだけ質問事項があります。
>> akamai sandbox create -p ion-property:42 -n my-ion-property
building origin list
Detected the following origins: XXX.linodeusercontent.com
? Do you want the Sandbox Client to proxy the origins in your dev environment to the destination defined in the Akamai config? En
ter **y** and the CLI will automatically update your configuration file. If you want to route sandbox traffic to different develo
pment origins, enter **n** to customize the origin mappings. (Y/n)
Y
を選択すると先に進みます。こちらは、EdgeWorkers とは関係ない選択肢となります。プロパティのオリジンサーバーを変更する場合は、こちらで変更することができますが、今回は変更なしを選択します。最後に Successfully created
のメッセージが表示されれば環境作成は成功です。
Successfully created sandbox-id 13e80739-ef4e-4a55-8b26-429bc0363797 Generated sandbox client configuration at /cli/.akamai-cli/cache/sandbox-cli/sandboxes/hiito-ion-wpa-20220408/config.json Edit this file to specify the port and host for your dev environment.
Sandbox 環境の確認
Sandbox 環境をみるには list
を使います。
akamai sandbox list
Sandbox 環境は複数作成することができます。最後に作成されたものがデフォルト環境となります。
Local sandboxes:
Default Sandbox Name Sandbox ID JWT Expiration Date
------- -------------------------- ------------------------------------ --------------------------
sandbox_for_example.com fd79a614-bd3a-41db-847c-300f1a3ad2fe Jul 11, 2022, 2:24 PM UTC
dsa-property 780e9635-e0d1-45cf-a6de-d206b5b156e5 Sep 3, 2022, 4:06 PM UTC
YES my-ion-property 13e80739-ef4e-4a55-8b26-429bc0363797 Oct 5, 2022, 9:48 AM UTC
Sandbox CLI の詳細はヘルプを参照してください。
Sandbox の起動
ローカル環境で Sandbox を起動します。フォアグラウンドで起動し、ログが表示されます。
akamai sandbox start
Ctrl-C で停止できます。Sandbox は内部で Java を使用していますので、起動できないときはJava のバージョンなど要件を確認してください。
もし、環境の問題で起動できない場合は、Akamai Docker の利用も検討してください。Akamai Docker については下記の文書を参考にしてください。
正常であれば以下のようなログが表示されます。
Starting Sandbox Client with arguments:
Config: /cli/.akamai-cli/cache/sandbox-cli/sandboxes/my-ion-property/config.json
Logging path: /cli/.akamai-cli/cache/sandbox-cli/sandboxes/my-ion-property/logs
Logging file: /cli/.akamai-cli/cache/sandbox-cli/sandboxes/my-ion-property/logs/sandbox-client.log
Logging config: /cli/.akamai-cli/cache/sandbox-cli/sandbox-client-1.4.0-RELEASE/conf/logback.xml
Arguments: "/usr/lib/jvm/default-jvm/bin/java",-DLOG_PATH="/cli/.akamai-cli/cache/sandbox-cli/sandboxes/my-ion-property/logs",-DLOGGING_CONFIG_FILE="/cli/.akamai-cli/cache/sandbox-cli/sandbox-client-1.4.0-RELEASE/conf/logback.xml",-jar "/cli/.akamai-cli/cache/sandbox-cli/sandbox-client-1.4.0-RELEASE/lib/sandbox-client-1.4.0-RELEASE.jar",--config="/cli/.akamai-cli/cache/sandbox-cli/sandboxes/ion-property/config.json"
Successfully launched Akamai Sandbox Client
Sandbox Client running on port: 9550
Sandbox は内部で 9550 のポートを使います。このポート番号は Sandbox のコンフィグファイルで変更することもできます。ログに表示されているパスを見ると、Sandbox 環境のコンフィグやログの存在が分かります。
Sandbox に EdgeWorkers のバンドルファイルをアップロード
既にプロパティには EdgeWorkers を呼び出すパスの設定がされていて、EdgeWorkers ID が指定されていることを前提としています。もし、Akamai Network 上に EdgeWorkers が登録されていたとしても、Sandbox 上に最新の EdgeWorkers のコードを登録する必要があります。
akamai sandbox add-edgeworker 43796 helloworld.tgz
43796
は EdgeWorker ID です。利用されている ID を指定します。helloworld.tgz
は EdgeWorker のコードバンドルファイルです。成功すると次のような素っ気ないメッセージが表示されます。
done!
Sandbox 環境でのテスト
Sandbox 上に EdgeWorker ID を登録したら、Sandbox 上で最新の EdgeWorkers コードをテストできます。
curl -i http://127.0.0.1:9550/ew/hello-world -H 'Host: www.sample.com'
自身のホスト IP である 127.0.0.1
とポート番号 9550
に対して curl でテストします。必ず Host ヘッダーは必要です。Host ヘッダーにはテストするホスト名を渡します。このケースでは EdgeWorker ID 43796 が割り当てられている /ew/hello-world
というパスにリクエストしています。curl を実行すると以下のような結果が得られます。
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 70
Cache-Control: max-age=0
Date: Fri, 08 Apr 2022 09:50:47 GMT
Connection: keep-alive
X-Akamai-Sandbox: true
X-Akamai-Staging: ESSL
X-Hello-World: From Akamai EdgeWorkers
<html><body><h1>Hello World From Akamai EdgeWorkers</h1></body></html>
上記の結果は次のような JavaScript を呼び出しているだけです。onClientRequest で Hello World のメッセージを表示し、X-Hello-World リスポンスヘッダーをセットしています。
Akamai 環境へのデプロイ
Sandbox 環境でコードの確認ができたら、Akamai 環境にコードをデプロイします。Akamai EdgeWorkers CLI を使ってデプロイできます。
akamai ew upload 43797 --bundle helloworld.tgz
ステータスの確認をします。
akamai ew status 43797
ステージング環境をアクティベートします。
akamai ew activate 43797 STAGING 0.2
プロダクション環境をアクティベートします。
akamai ew activate 43797 PRODUCTION 0.2
最終的な確認をします。
curl -i http://www.sample.com/ew/hello-world
まとめ
Akamai Sandbox は Akamai EdgeWorkers のコードを検証するには最適な環境です。Akamai Sandbox は Akamai Sandbox CLI として提供され、ローカルマシンの環境でプロキシサーバーを動かし、 Akamai CDN と統合されて動作します。Akamai Sandbox は無償で利用できますので、ご活用ください。