AEM Edge Functions aem-edge-functions

IMPORTANT
AEM Edge Functionsは​ ベータ ​機能です。 機能やドキュメントは予告なく変更される場合があります。 早期アクセスプログラムに参加してフィードバックを提供するには、aemcs-edge-functions-feedback@adobe.comにメールを送信してください。

AEM Edge Functionsでは、JavaScriptをCDN レイヤーで実行し、データ処理をエンドユーザーに近づけることができます。 これにより、遅延を低減し、コンテンツの配信元を何度も訪問することなく、レスポンシブでダイナミックなエクスペリエンスを提供できます。

一般的なユースケースを次に示します。

  • 位置情報、デバイスの種類、ユーザー属性などの情報にもとづくコンテンツのパーソナライズ
  • CDN と接触チャネルの間のミドルウェアとして機能させる
  • サードパーティ APIからの応答をブラウザーに届く前に再フォーマットまたは集約する
  • 複数のバックエンドから合成したコンテンツを使用して、サーバーレンダリングされたHTMLをエッジで合成して配信する

AEM Edge Functionsは、Edge Delivery ServicesとAEM Cloud Service Java スタックの両方に対応しています。

主なメリット key-benefits

メリット
説明
パフォーマンス
完全にレンダリングされたHTMLを返すエッジ SSRによる高速TTFB。 並列フェッチと最適化されたネットワークホップによる低遅延API呼び出し。
SEO / GEO
Server HTMLは、最初のクロール時にインデックスが作成されます。 AIweb クローラーに対応したレンダリング済みコンテンツ:
セキュリティ
クライアント JavaScriptから非表示のAPI資格情報をサーバーサイドに保持します。 ID プロバイダーで認証し、コンテンツへのアクセスを制限します。
パーソナライゼーション
位置情報やデバイスのシグナルにもとづいて、ページが読み込まれる前にコンテンツをパーソナライズします。 ターゲット配信のために、エッジでオーディエンス検索を実行します。

前提条件 prerequisites

  • AEM as a Cloud Service環境
  • Cloud Service環境のオーサーインスタンス上のAEM Administrator製品プロファイル、Admin Console for Edge Delivery Services サイトのCloud Manager Deployment Manager ロール または
  • Node.js と npm

セットアップ setup

Adobe CLIのインストール install-adobe-cli

Adobe Developer CLI (aio)をインストールします。

npm install -g @adobe/aio-cli

AEM Edge Functions プラグインをインストールします。

aio plugins install @adobe/aio-cli-plugin-aem-edge-functions

環境のプラグインを認証して設定します。

aio login
aio aem edge-functions setup

setup コマンドを使用すると、ログインして、AEM Edge Functionsを使用するAEM環境を選択するように求められます。

Boilerplateの複製 boilerplate

aem-edge-functions-boilerplateを独自のリポジトリにコピーしてから、依存関係をインストールします。

npm install

最初の関数を作成する create-your-function

AEM Edge関数サービスは、YAML設定ファイルで宣言され、Cloud Manager設定パイプラインを通じてデプロイされます。

​1. 設定パイプラインの設定 configuration-pipeline

エッジ関数を作成する前に、Cloud Managerで環境用の設定パイプラインが存在することを確認します。 そうでない場合は、最初に設定パイプライン ​を作成します。

NOTE
迅速な開発環境(RDE)を使用している場合は、設定パイプラインを経由する代わりに、aio aem rde:install -t env-config ./configを使用して直接設定をデプロイできます。

​2. Edge ファンクションサービスの宣言 declare-services

設定ディレクトリにedgeFunctions.yamlという名前のファイルを作成します。

kind: "EdgeFunctions"
version: "1"
data:
  services:
    - name: first-function
    - name: second-function
    # Uncomment to enable secrets
    # secrets:
    #   - key: API_TOKEN
    #     value: ${{ API_TOKEN_SECRET }}

この設定では、最大3つのサービスをサポートします。 最上位のキーは次のとおりです。

キー
説明
services
エッジ関数サービスのリスト。各サービスはnameによって識別されます。
configs
すべてのエッジ関数サービスに環境変数として公開されるキーと値のペア。
secrets
すべてのedge function サービスに公開される、Cloud Manager シークレットを参照するキーと値のペア。

​3. CDN オリジン セレクタ ルールの追加 cdn-routing

Edge関数は、オリジンセレクタールールを介してCDN トラフィックをルーティングすることで呼び出されます。 cdn.yaml設定ファイルに次のファイルを追加します(または、存在しない場合は作成します)。

kind: 'CDN'
version: '1'
data:
  originSelectors:
    rules:
      - name: route-to-first-function
        when: { reqProperty: path, equals: "/weather" }
        action:
          type: selectAemOrigin
          originName: edgefunction-first-function
      - name: route-to-second-function
        when: { reqProperty: path, equals: "/hello-world" }
        action:
          type: selectAemOrigin
          originName: edgefunction-second-function

オリジン選択ルールを使用すると、特定のパス、ドメイン、リクエストヘッダーなど、CDN ルールエンジンで利用可能なあらゆる条件に基づいて、トラフィックをエッジ関数にルーティングできます。 完全なルール構文については、​ オリジンセレクターを参照してください。

​4. 設定のデプロイ deploy-configuration

edgeFunctions.yamlcdn.yamlの両方をCloud Manager Git リポジトリにコミットし、設定パイプラインをトリガーします。 パイプラインが正常に完了すると、エッジ関数エンドポイントは次の場所で使用できるようになります。

  • publish-pXXXXX-eYYYYY.adobeaemcloud.com/weather
  • publish-pXXXXX-eYYYYY.adobeaemcloud.com/hello-world

ここで、pXXXXX-eYYYYYは環境座標です。 カスタムドメインが設定されている場合、関数はこれらのドメインパスでも到達できます(例:example.com/weather)。

AEM Edge関数コードのビルドとデプロイ build-deploy

ビルド build

デプロイメント用にEdge関数コードをパッケージ化します。

aio aem edge-functions build

デプロイ deploy

ビルドされたパッケージを名前付きエッジ関数サービスにデプロイします。 function-name引数はnameedgeFunctions.yaml値と一致する必要があります:

aio aem edge-functions deploy <function-name>

ローカル開発 local-development

ローカルで実行 local-run

http://127.0.0.1:7676でローカル開発サーバーを起動します。

aio aem edge-functions serve

ローカル ランタイムがサポートする内容について詳しくは、Compute JavaScript ドキュメント ​を参照してください。

テスト test

Mochaでテストスイートを実行します。

npm run test

リモートデバッグ remote-debugging

Adobe Managed CDNは、リモートデバッガーを公開しませんが、ログストリーミングを公開します。 デプロイされた関数のログをテールして、ターミナルでconsole.log出力を直接受信します。

aio aem edge-functions tail-logs <function-name>

設定の参照 configuration-reference

オリジン origins

デフォルトでは、エッジ関数は任意のオリジンから取得できます。 関数を定義済みのオリジンのセットに制限するには、originsedgeFunctions.yamlで宣言します。

origins:
  - name: my-origin-name
    domain: example.com

backend フェッチ オプションを使用して、関数コード内の名前付きオリジンを参照します。

const request = new Request("https://example.com/test");
const response = await fetch(request, { backend: "my-origin-name" });

サービス設定 service-configuration

configsedgeFunctions.yaml キーを使用して、環境変数を関数に公開します。 値は、config_defaultという名前の設定ストアに格納されます。

configs:
  - key: LOG_LEVEL
    value: DEBUG

関数コードで設定値を読み取ります。

import { ConfigStore } from "fastly:config-store";

const config = new ConfigStore('config_default');
const logLevel = config.get('LOG_LEVEL') || 'info';
NOTE
  • 構成ストアの名前は常にconfig_defaultです。
  • キー名では大文字と小文字が区別されます。
  • 設定ストアは、同じ環境のすべてのエッジ関数サービスで共有されます。

サービス秘密鍵 service-secrets

秘密鍵は参照され、保存されません。edgeFunctions.yaml value フィールドは、${{SECRET_REFERENCE}}構文を使用してCloud Manager シークレットを指している必要があります。 最初にCloud Managerで基になる秘密鍵を定義します。Cloud Manager秘密変数を参照してください。

secrets:
  - key: API_TOKEN
    value: ${{ API_TOKEN_SECRET }}

ボイラープレートからSecretStoreManager ヘルパーを使用して、関数コードのシークレットを取得します。

import { SecretStoreManager } from "./lib/config";

const apiToken = await SecretStoreManager.getSecret('API_TOKEN');
NOTE
  • 秘密鍵ストアの名前は常にsecret_defaultです。
  • キー名では大文字と小文字が区別されます。
  • 秘密鍵は一度作成されると不変です。
  • シークレットストアは、同じ環境のすべてのエッジ機能サービスで共有されます。

ログ logging

AEM Edge Functionsは、AEM ログ転送機能と統合されています。 logForwarding.yamlと一緒にedgeFunctions.yaml ファイルを作成します。

kind: "LogForwarding"
version: "1"
metadata:
  envTypes: ["rde", "dev", "stage", "prod"]
data:
  splunk:
    default:
      enabled: true
      host: "splunk-host.example.com"
      token: "${{SPLUNK_TOKEN}}"
      index: "AEMaaCS"

関数コードでロガーを使用して、構造化ログエントリを書きます。

import { Logger } from "fastly:logger";

const logger = new Logger("customerSplunk");
logger.log(JSON.stringify({
  method: event.request.method,
  url: event.request.url
}));
NOTE
AEM Edge関数ログエントリを含むCDN ログは、Java スタック環境用のCloud Managerからダウンロードできますが、Edge Delivery Services サイト用にはダウンロードできません。
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab