AEM as a Cloud ServiceでのAEM Edge関数の設定

IMPORTANT
AEM Edge Functionsは現在ベータ版です。 機能やドキュメントは変更される可能性があります。 フィードバックについては、aemcs-edgecompute-feedback@adobe.comまでお問い合わせください。

AEM as a Cloud Service環境でAEM Edge Functionsを設定する方法について説明します。

このチュートリアルでは、CLIのインストール、AEM サイトのデプロイメント、ボイラープレートテンプレートからのプロジェクトの設定、CDNの設定、AEM as a Cloud Service上での作業中のエンドポイントのデプロイメントについて説明します。

このチュートリアルでは、WKND Sites プロジェクト ​をデモサイトとして使用します。 同じ手順を独自のサイトと環境で実行できます。

構築する要素

AEM Edge Functionsは、AEM オリジンではなく、エッジのAdobe CDNで実行されるJavaScript モジュールです。 2つのルートを持つmy-edge-functionという名前の1つのAEM Edge関数をデプロイします。

  • /hello-worldはエッジからの挨拶を返します
  • /weatherは、エッジでの訪問者の場所を検出し、Open-Meteo APIを呼び出して、都市の現在の温度を返します

開発時に、開発サーバーを使用してAEM Edge関数をローカルでテストします。 次に、CDN設定をAEM サイトプロジェクトにコピーし、Cloud ManagerまたはRDEを介してデプロイし、AEM Edge機能(JavaScript モジュール)をAdobe CDNにプッシュし、ブラウザーまたはcurlで両方のエンドポイントを検証します。

概要のステップ:

  1. Adobe CLIとAEM Edge Functions プラグインのインストール
  2. AEM サイトをRDE環境または開発環境にデプロイする
  3. AEM as a Cloud Service環境でAEM Edge Functionsを設定する
  4. ボイラープレートからAEM Edge Functions プロジェクトを作成します
  5. AEM Edge Functions プロジェクトをローカルで複製、レビュー、実行する
  6. CDN設定のレビュー、管理、デプロイ
  7. AEM Edge Functionsを構築してAdobe CDNにデプロイする
  8. エンドポイントが機能していることを確認します

前提条件

開始する前に、次の項目が適切に設定されていることを確認してください。

  • Node.jsとnpmがローカルにインストールされました
  • GitHub アカウントを作成して、ボイラープレートテンプレートからプロジェクトを
  • オーサーインスタンス上の​Cloud Manager Deployment Manager ロールまたは​AEM Administrator Product Profileを持つAEM as a Cloud Service環境へのアクセス
  • WKND Sites プロジェクト ​またはローカルに複製した独自のAEM サイトプロジェクト
NOTE
AEM as a Cloud Serviceの場合、環境ごとに​1つのAEM Edge関数をデプロイできます

手順1:CLIとプラグインのインストール

Adobe aio CLI、AEM Edge Functions、およびRDE プラグインをインストールまたは更新します。

新規インストール

新規インストールの場合は、次のコマンドを実行します。

code language-bash
# Install the Adobe CLI
$ npm install -g @adobe/aio-cli

# Install the AEM Edge Functions plugin
$ aio plugins install @adobe/aio-cli-plugin-aem-edge-functions

# Install the RDE plugin if you are using an RDE environment
$ aio plugins install @adobe/aio-cli-plugin-aem-rde
既存のを更新

Adobe CLIとインストール済みプラグインを更新します。

code language-bash
# Update the Adobe CLI
$ aio update

# List installed plugins (confirm the AEM Edge Functions plugin is listed)
$ aio plugins

# Update the installed plugins
$ aio plugins update

例えば、出力は次のスクリーンショットのようになります。

CLI バージョン出力

手順2:AEM サイトのデプロイ

AEM Edge Functionsを設定する前に、AEM サイトをターゲット環境にデプロイします。 サイトが既にデプロイされている場合は、そのサイトにアクセスできることを確認し、手順3にスキップします。

RDE
  • WKNDまたは独自のサイトプロジェクトのルートから、次のコマンドを実行してサイトを設定し、RDEにデプロイします。
code language-bash
# Set up the RDE
$ aio aem:rde:setup

# Build the site
$ mvn clean install
$ aio aem:rde:install all/target/aem-guides-wknd.all-X.Y.Z-SNAPSHOT.zip
$ aio aem:rde:install dispatcher/target/aem-guides-wknd.dispatcher.cloud-X.Y.Z-SNAPSHOT.zip

# Verify the RDE and site are deployed
$ aio aem:rde:status
  • サイトがhttps://publish-pXXXXX-eYYYYY.adobeaemcloud.com/にアクセスできることを確認します。

完全なチュートリアルについては、迅速な開発環境を参照してください。

開発環境
  • Cloud Managerのフルスタックパイプラインを使用して、WKNDまたは独自のサイトを開発環境にデプロイします。

  • サイトがhttps://publish-pXXXXX-eYYYYY.adobeaemcloud.com/にアクセスできることを確認します。

完全なチュートリアルについては、​ フルスタックパイプライン ​を参照してください。

手順3:お使いの環境でAEM Edge Functionsを設定する

AEM Edge関数は、AEM as a Cloud Service環境で設定する必要があります。 これにより、コードと設定ファイルをAdobe CDNにデプロイできるので、サイトのJavaScript コードからAEM Edge Functionsでサポートされているルートを呼び出すことができます。

WKND (または独自の)AEM プロジェクトのルートから次のコマンドを実行します。

$ aio aem edge-functions setup

Adobe IMSにまだログインしていない場合は、コマンドトリガーのログインフローを使用します。 設定プロセスでは、プログラム、環境、サイトタイプ、およびADC プロジェクト設定の詳細を求めるプロンプトが表示されます。 設定の詳細は.aio ファイルに保存され、以降のAEM Edge Functions CLI コマンドのコンテキストが提供されます。

AEM Edge Functionsの設定プロンプト ​

IMPORTANT
AEM Content Delivery Network (CDN) API カードを含むAPI資格情報に対するAdobe Developer Console(ADC)プロジェクトの設定は、このチュートリアルの一部として行われません。 ただし、CI/CD システムからAEM Edge Functions プロジェクトをデプロイする場合は、この操作を行う必要があります。 詳しくは、Adobe Developer Console統合およびCI/CD セットアップ ​を参照してください。

次のコマンドを使用して、AEM Edge Functionsの設定の詳細を確認します。

$ aio aem edge-functions info

出力は次のようになります。

AEM Edge関数の情報出力

手順4:AEM Edge Functions プロジェクトの作成

AEM Edge Functions プロジェクトをaem-edge-functions-boilerplate GitHub テンプレートから作成します。 ボイラープレートには、開始するために必要なファイルと設定が含まれています。

  1. GitHubのaem-edge-functions-boilerplateに移動します。

  2. 右上隅で、このテンプレートを使用 > 新しいリポジトリを作成​を選択します。

    AEM Edge関数は、このテンプレートオプションを使用します

  3. リポジトリ名(例:wknd-edge-functions)を指定し、説明を追加して、表示を​ プライベート ​に設定し、リポジトリを作成​を選択します。

    AEM Edge Functions create repository details

手順5:AEM Edge Functions プロジェクトの複製、レビュー、実行

AEM Edge Functions プロジェクトの複製

手順4で作成したリポジトリを複製し、IDEでWKND (または独自の)プロジェクトと一緒に開きます。 多くのエディターは、ワークスペースまたはマルチルートビューをサポートしており、両方のプロジェクトで同時に作業できます。

# Clone the repository
$ git clone https://github.com/<your-org>/<your-project-name>.git

例えば、WKND Sites プロジェクトとWKND AEM Edge Functions プロジェクトを1つのIDE ワークスペースで開きます。

WKNDとWKND AEM Edge Functionsの両方のプロジェクトをIDEのワークスペースとして機能

AEM Edge Functions プロジェクトのレビュー

AEM Edge Functions プロジェクトを変更またはデプロイする前に、AEM Edge Functions コントラクトを定義する主要なファイルを確認してください。

  1. package.jsonには、プロジェクトの依存関係が含まれています。 @fastly/js-computeの依存関係に注意してください。 詳しくは、Compute Platform上のJavaScriptを参照してください。

  2. src/index.jsは関数のエントリ ポイントであり、プロジェクトのメイン ロジックが含まれています。 Fastly ComputeのaddEventListener("fetch", ...) パターンを使用します。 すべての着信リクエストはhandleRequest関数を通じてフローされます。この関数では、ルートマッチングロジックを追加します。 例えば、次のコードはボイラープレートからのものです。

    code language-js
    // src/index.js
    addEventListener("fetch", (event) => event.respondWith(handleRequest(event)));
    
    async function handleRequest(event) {
        const req = event.request;
        const url = new URL(req.url);
    
        let finalResponse;
    
        try {
            // Route matching logic
            if (url.pathname === "/" && req.method === "GET") {
                finalResponse = new Response("Hello World from the edge!", { status: 200 });
            } else if (url.pathname === "/hello-world" && req.method === "GET") {
                finalResponse = new Response("Hello World from the edge!", { status: 200 });
            } else if (url.pathname === "/weather" && req.method === "GET") {
                finalResponse = await weatherHandler(req, event.client);
            } else {
                finalResponse = response.notFound();
            }
        } catch (err) {
            finalResponse = new Response("Internal Server Error", { status: 500 });
        }
    
        return finalResponse;
    }
    

    1つのAEM Edge関数は、handleRequestif ステートメントを通じて複数のルートを処理できます。

  3. fastly.tomlはローカル開発サーバーを構成します。 詳しくは、Fastly.toml リファレンス ​を参照してください。

  4. config/には、AEM Edge Function サービスとCDN ルーティング ルールの設定ファイルが含まれています。 Cloud Manager設定パイプラインを使用して、これらのファイルをAEM as a Cloud Service環境にデプロイします。 ステップ 6では、このプロセスを説明します。

test/src/lib/README.mdなどの残りのプロジェクトファイルを確認して、完全な設定を理解します。

AEM Edge Functions プロジェクトのローカル実行

迅速に反復するには、AEM Edge Functions プロジェクトをローカルで実行します。 AEM Edge Functions プロジェクトディレクトリから、依存関係をインストールし、ローカル開発サーバーを起動します。

# Navigate to the project directory (replace with your project name)
$ cd wknd-edge-functions

# Install dependencies
$ npm install

# Start the local development server
$ aio aem edge-functions serve

サーバーはhttp://127.0.0.1:7676から開始します。

例えば、出力は次のスクリーンショットのようになります。

ローカル開発サーバー出力

手順6:CDN設定の確認とデプロイ

AEM Edge Functions プロジェクトには、config/ ディレクトリにCDN設定ファイルが含まれています。 AEM サイトプロジェクトにコピーする前に、それらを確認してください。

CDN設定の確認

AEM Edge Functions プロジェクトのconfig/ ディレクトリにあるCDN設定ファイルを確認します。

  1. config/edgeFunctions.yamlは、AEM Edge Function サービスを宣言します。 例えば、次のコードはWKND AEM Edge Functions プロジェクトのコードです。
kind: "EdgeFunctions"
version: "1"
data:
  functions:
    - name: my-edge-function

サポートされているプロパティについて詳しくは、edgeFunctions.yaml リファレンス ​を参照してください。

  1. config/cdn.yamlは、AEM Edge Function サービスにトラフィックを転送するCDN ルーティング ルールを宣言します。 例えば、次のコードはWKND AEM Edge Functions プロジェクトのコードです。
kind: 'CDN'
version: '1'
data:
  originSelectors:
    rules:
      - name: route-weather-to-edge-function
        when: { reqProperty: path, equals: "/weather" }
        action:
          type: selectAemOrigin
          originName: edgefunction-my-edge-function
          skipCache: true
      - name: route-hello-world-to-edge-function
        when: { reqProperty: path, equals: "/hello-world" }
        action:
          type: selectAemOrigin
          originName: edgefunction-my-edge-function
          skipCache: true

重要なコールアウト:

  • originNameはパターン edgefunction-<edge-function-name>に従う必要があります。<edge-function-name>edgeFunctions.yamlで宣言されたAEM Edge関数の名前です。
  • typeselectAemOriginである必要があります。
  • skipCacheは、リクエストのCDN キャッシュをバイパスするためにtrueに設定されています。

詳しくは、​ オリジンセレクターを参照してください。 cdn.yaml ファイルは、トラフィックフィルタールール、リクエストと応答の変換、およびその他のCDN機能もサポートしていることに注意してください。 詳しくは、CDNでのトラフィックの設定を参照してください。

CDN設定の管理

サイトにはWAF ルール、トラフィックフィルター、その他の設定がcdn.yamlに既に含まれている可能性があるので、すべてのCDN設定をAEM サイトプロジェクトのconfig/ ディレクトリに保持します。 これにより、すべてのCDN設定が1か所に保持されます。

  1. AEM Edge Functions プロジェクトからedgeFunctions.yamlを​ AEM サイト プロジェクト ​のconfig/ ディレクトリにコピーします。

  2. AEM Edge Functions プロジェクトのcdn.yamloriginSelectors セクションを​ AEM サイトプロジェクト ​のcdn.yamlに結合します。

例えば、WKND サイトプロジェクトのCDN設定ファイルは次のようになります。

WKND プロジェクト 🔗 のCDN設定ファイル

CDN設定のデプロイ

最後に、CDN設定をAEM as a Cloud Service環境にデプロイします。

RDE

RDE環境の場合は、WKND (または独自の)AEM プロジェクトのルートから次のコマンドを実行します。

code language-bash
# Navigate to the AEM project directory (replace with your project name)
$ cd aem-guides-wknd

# Deploy the CDN configuration
$ aio aem:rde:install -t env-config ./config
開発環境

開発環境の場合は、設定ファイルをコミットし、Cloud Managerで設定パイプラインを実行します。

  • 設定ファイルをコミットしてCloud Manager Git リポジトリにプッシュします。

  • Cloud Managerの​ Pipelines ​に移動し、環境の設定パイプラインを実行します。

Cloud Manager設定パイプライン実行

設定が正常にデプロイされたことを確認します。

$ aio aem edge-functions list

出力には、my-edge-function (またはedgeFunctions.yamlで宣言した名前)をリストする必要があります。

AEM Edge Functions リスト出力

手順7:AEM Edge Functions プロジェクトのビルドとデプロイ

AEM Edge Functions プロジェクトをビルドしてデプロイするには、次のコマンドを使用します。これらのコマンドでは、.aio ファイルに保存されているコンテキストが使用されます。

# Navigate to the AEM Edge Functions project directory (replace with your project name)
$ cd wknd-edge-functions

# Review to make sure you are deploying to the correct AEM as a Cloud Service environment
$ aio aem edge-functions info

# Build the project
$ aio aem edge-functions build

# Deploy to Adobe CDN
$ aio aem edge-functions deploy my-edge-function

deployに渡された名前は、config/edgeFunctions.yamlで宣言されたnameと一致する必要があります。 また、オーサーインスタンスの​ AEM Administrator - author ​製品プロファイルに参加している必要があります。

例えば、出力は次のスクリーンショットのようになります。

AEM Edge Functionsのビルドとデプロイの出力

IMPORTANT
AEM Edge Functions プロジェクトをCI/CD システムからデプロイするには、AEM Content Delivery Network (CDN) API カードを含むAPI資格情報用のAdobe Developer Console(ADC)プロジェクトが必要です。 詳しくは、Adobe Developer Console統合およびCI/CD セットアップ ​を参照してください。

手順8:エンドポイントの確認

ブラウザーまたはcurlを使用して、デプロイされたエンドポイントを確認します。

curl https://edgefunction-pXXXXX-eYYYYY-my-edge-function.adobeaemcloud.com/hello-world
curl https://edgefunction-pXXXXX-eYYYYY-my-edge-function.adobeaemcloud.com/weather

pXXXXXeYYYYYをCloud Manager プログラムおよび環境IDに置き換えます。

例えば、次のスクリーンショットのように回答しています。

​ ライブエンドポイントの応答

NOTE
edgefunction-pXXXXX-eYYYYY-<edge-function-name>.adobeaemcloud.com ドメインはデバッグにのみ使用でき、安定していることが保証されていません。 実稼動環境では、リクエストは、cdn.yamlのCDN ルーティングルールを介して、サイトのドメインを通じてAEM Edge機能に到達します。

実際のシナリオでは、CDNのサーバーサイドロジックにAEM Edge Functionsを使用し、cdn.yamlで定義されたルーティングパスを通じてサイトから呼び出します。 詳細な設定については、AEM Edge Functions製品ドキュメント ​を参照してください。

概要

AEM as a Cloud Service環境でAEM Edge Functionsを正常に設定し、ボイラープレートテンプレートからプロジェクトを作成し、複製し、プロジェクトファイルをレビューし、ローカルに実行し、CDN設定をレビューおよびデプロイし、プロジェクトを構築およびデプロイし、エンドポイントを検証しました。

その他のリソース

recommendation-more-help
experience-manager-learn-help-cloud-service