Edge Delivery ServicesでのAEM Edge関数の設定
Edge Delivery Services サイトでAEM Edge Functionsを設定する方法を説明します。
このチュートリアルでは、Cloud ManagerでのEdge Delivery サイトのオンボーディング、CLIのインストール、ボイラープレートテンプレートからのプロジェクトの設定、CDN設定、作業中のエンドポイントのデプロイメントについて説明します。
このチュートリアルでは、Frescopa Site Projectをデモサイトとして使用します。 Edge Delivery Servicesの独自サイトでも、同様の手順を実行できます。
構築する要素
AEM Edge Functionsは、Edge Delivery オリジンではなく、エッジのAdobe CDNで実行されるJavaScript モジュールです。 2つのルートを持つmy-edge-functionという名前の1つのAEM Edge関数をデプロイします。
/hello-worldはエッジからの挨拶を返します/weatherは、エッジでの訪問者の場所を検出し、Open-Meteo APIを呼び出して、都市の現在の温度を返します
開発時に、開発サーバーを使用してAEM Edge関数をローカルでテストします。 次に、Edge Delivery設定パイプラインを通じてedgeFunctions.yamlとcdn.yamlをデプロイし、AEM Edge機能(JavaScript モジュール)をAdobe CDNにプッシュし、サイトドメインの両方のエンドポイント(例:https://myfrescopa.enablementadobe.com/hello-world)を検証します。
概要のステップ:
- Edge Delivery サイトのCloud Managerへのオンボーディング
- Adobe CLIとAEM Edge Functions プラグインのインストール
- Edge Delivery ServicesでのAEM Edge関数の設定
- ボイラープレートからAEM Edge Functions プロジェクトを作成します
- AEM Edge Functions プロジェクトをローカルで複製、レビュー、実行する
- CDN設定のレビュー、管理、デプロイ
- AEM Edge Functionsを構築してAdobe CDNにデプロイする
- エンドポイントが機能していることを確認します
前提条件
開始する前に、次の項目が適切に設定されていることを確認してください。
- Node.jsとnpmがローカルにインストールされました
- GitHub アカウントを作成して、ボイラープレートテンプレートからプロジェクトを
- Cloud Manager プログラム用のEdge Delivery Services アドオン
- Cloud Managerでのデプロイメントマネージャーの役割
- Frescopa サイトプロジェクト または独自のEdge Delivery サイトプロジェクト
手順1:Edge Delivery サイトをCloud Managerにオンボーディングする
AEM Edge Functionsを設定する前に、Cloud ManagerでEdge Delivery サイトをオンボーディングします。 この手順では、Cloud Managerのみを使用し、Adobe CLIは必要ありません。
サイトが既にオンボーディングされている場合は、そのサイトがCloud Managerに表示されていることを確認し、手順2に進みます。
次の手順では、Frescopa Site Projectをデモサイトとして使用します。
-
Cloud Managerにログインし、Edge Delivery Services アドオンでプログラムを開きます。 プログラムの概要で、「Edge Delivery」タブが表示されていることを確認します。
-
Edge Delivery タブで、Edge Delivery To Do リストに入力します。 主な手順は次のとおりです。
-
Edge Delivery サイトを追加:
- サイト名:
Frescopa - Edge Deliveryの生成元:
https://main--frescopa--sachinmali.aem.live/
形式は
https://<branch>--<site-name>--<organization-name>.aem.live/です。<branch>、<site-name>および<organization-name>はそれぞれ、Edge Delivery Services サイトプロジェクトのブランチ、サイト名および組織名です。Edge Delivery Services サイトプロジェクトの
devブランチを設定することをお勧めします。ただし、アドビのデモサイトについては、以下のスクリーンショットを参照してください。
- サイト名:
-
ドメインを追加:
- ドメイン名:
myfrescopa.enablementadobe.com
Edge Delivery Services サイトプロジェクトの開発ブランチにマッピングされた開発サイトを使用する場合でも、AEM Edge Functions プロジェクトをデプロイするには、カスタムドメイン名を設定する必要があります。
- ドメイン名:
-
SSL証明書を追加:
- 証明書の種類:顧客管理(OV/EV)
- 証明書の名前:
enablementadobe.com - 証明書:
-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----までの署名済み証明書ファイルの内容 - 秘密鍵:
-----BEGIN PRIVATE KEY-----から-----END PRIVATE KEY-----までの秘密鍵ファイルの内容 - 証明書チェーン:
-----BEGIN CERTIFICATE-----と-----END CERTIFICATE-----の間の証明書チェーンファイルコンテンツ
Adobe管理(DV)証明書も使用できます。チュートリアルの目的では、例として、顧客管理(OV/EV)証明書を使用しています。
-
DNS レコードを
myfrescopa.enablementadobe.comのDNS ホスティング サービスに追加します。 -
Adobeが管理するCDNにドメイン
myfrescopa.enablementadobe.comをマッピングします。 へのドメインのマッピング
-
-
Edge Delivery Sites テーブルにサイトが表示されることを確認します。 デモ Frescopa サイトはhttps://myfrescopa.enablementadobe.com/にアクセスできます。
完全なチュートリアルについては、Cloud ManagerへのEdge Delivery サイトの追加を参照してください。
手順2:CLIとプラグインのインストール
Adobe aio CLIとAEM Edge Functions プラグインをインストールまたは更新します。
新規インストールの場合は、次のコマンドを実行します。
| code language-bash |
|---|
|
Adobe CLIとインストール済みプラグインを更新します。
| code language-bash |
|---|
|
例えば、CLIおよびAEM Edge Functions プラグインのインストールが正常に完了した場合は、次のようになります。
手順3:AEM Edge関数の設定
AEM Edge関数は、Edge Delivery Services サイトドメインで設定する必要があります。 これにより、コードと設定ファイルをAdobe CDNにデプロイできるので、サイトのJavaScript コードからAEM Edge Functionsでサポートされているルートを呼び出すことができます。
AEM Edge Functionsを設定するには、次のコマンドを実行します。
$ aio aem edge-functions setup
Adobe IMSにまだログインしていない場合は、コマンドトリガーのログインフローを使用します。 設定プロセスでは、プログラム、サイトタイプ、Edge Delivery サイト、およびADC プロジェクト設定の詳細を求めるプロンプトが表示されます。 サイトの種類として「Edge Delivery Services」を選択します。 設定の詳細は.aio ファイルに保存され、以降のAEM Edge Functions CLI コマンドのコンテキストが提供されます。
設定では、Frescopa Edge Delivery サイト がドメイン myfrescopa.enablementadobe.comに関連付けられていることに注意してください。
次のコマンドを使用して、AEM Edge Functionsの設定の詳細を確認します。
$ aio aem edge-functions info
出力は次のようになります。
手順4:AEM Edge Functions プロジェクトの作成
AEM Edge Functions プロジェクトをaem-edge-functions-boilerplate GitHub テンプレートから作成します。 ボイラープレートには、開始するために必要なファイルと設定が含まれています。
-
GitHubのaem-edge-functions-boilerplateに移動します。
-
右上隅で、このテンプレートを使用 > 新しいリポジトリを作成を選択します。
-
リポジトリ名(例:
frescopa-edge-functions)を指定し、説明を追加して、表示を プライベート に設定し、リポジトリを作成を選択します。
手順5:AEM Edge Functions プロジェクトの複製、レビュー、実行
AEM Edge Functions プロジェクトの複製
手順4で作成したリポジトリを複製し、IDEでFrescopa (または独自の)Edge Delivery サイトプロジェクトと一緒に開きます。 多くのエディターは、ワークスペースまたはマルチルートビューをサポートしており、両方のプロジェクトで同時に作業できます。
# Clone the repository
$ git clone https://github.com/<your-org>/<your-project-name>.git
例えば、Frescopa Edge Delivery サイトプロジェクトとFrescopa AEM Edge Functions プロジェクトをIDEのワークスペースとして参照してください。
AEM Edge Functions プロジェクトのレビュー
AEM Edge Functions プロジェクトを変更またはデプロイする前に、AEM Edge Functions コントラクトを定義する主要なファイルを確認してください。
-
package.jsonには、プロジェクトの依存関係が含まれています。@fastly/js-computeの依存関係に注意してください。 詳しくは、Compute Platform上のJavaScriptを参照してください。 -
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関数は、
handleRequestのifステートメントを通じて複数のルートを処理できます。 -
fastly.tomlはローカル開発サーバーを構成します。 詳しくは、Fastly.toml リファレンス を参照してください。 -
config/には、AEM Edge Function サービスとCDN ルーティング ルールの設定ファイルが含まれています。 これらのファイルは、Cloud ManagerのEdge Delivery設定パイプラインを通じてデプロイします。 ステップ 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 frescopa-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 プロジェクトには、CDN設定ファイルが含まれています。 Cloud ManagerのEdge Delivery設定パイプラインを使用して、それらを確認し、デプロイします。
CDN設定の確認
AEM Edge Functions プロジェクトのconfig/ ディレクトリにあるCDN設定ファイルを確認します。
config/edgeFunctions.yamlは、AEM Edge Function サービスを宣言します。 次に例を示します。
kind: "EdgeFunctions"
version: "1"
data:
functions:
- name: my-edge-function
サポートされているプロパティについて詳しくは、edgeFunctions.yaml リファレンス を参照してください。
config/cdn.yamlは、AEM Edge Function サービスにトラフィックを転送するCDN ルーティング ルールを宣言します。 次に例を示します。
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関数の名前です。typeはselectAemOriginである必要があります。skipCacheは、リクエストのCDN キャッシュをバイパスするためにtrueに設定されています。
詳しくは、 オリジンセレクターを参照してください。
CDN設定の管理
Cloud Manager設定パイプラインを使用してCDN設定をデプロイします。 まず、AEM Edge Functions プロジェクトのconfig/ ファイルをCloud Managerで使用できるようにします。 以下の 2 つのオプションがあります。
-
Adobe リポジトリ:プログラム用にCloud Managerで新しいリポジトリを作成します。
-
プライベートリポジトリ:既存のGitHub リポジトリをCloud Managerにリンクします。
このチュートリアルでは、手順4のFrescopa AEM Edge Functions プロジェクトをプライベートリポジトリとして使用します。
-
Cloud Managerで、Repositoriesを開き、Add Repositoryを選択します。
-
リポジトリを追加 ダイアログで、プライベートリポジトリを選択し、リポジトリ名、URLおよびタイプを指定します。 「保存」を選択します。
-
プライベートリポジトリ所有権の検証 ダイアログの手順を完了します。
-
Cloud Managerにリポジトリへのアクセス権を付与します。
-
AEM Edge Functions プロジェクトリポジトリに検証秘密鍵を保存します。
-
検証が完了すると、プライベートリポジトリがリポジトリ テーブルに表示されます。
CDN設定のデプロイ
Cloud ManagerでEdge Delivery設定パイプラインを作成して実行します。
-
プログラムの概要ページで「Edge Delivery」タブを開きます。 パイプラインで、Edge Delivery パイプラインを追加を選択します。
-
Edge Delivery パイプラインを追加 ダイアログで、名前を入力し、続行を選択します。
-
Source コードの手順で、追加したプライベートリポジトリ、
mainブランチ、および/configをコードの場所として選択します。 「保存」を選択します。
-
パイプライン名の横にある … を選択してパイプラインを実行し、実行します。
正常に実行すると、edgeFunctions.yamlおよびcdn.yaml ファイルがEdge Delivery サイトドメインにデプロイされます。
CDN設定が正常にデプロイされたことを確認します。
$ aio aem edge-functions list
出力には、my-edge-function (またはedgeFunctions.yamlで宣言した名前)をリストする必要があります。
手順7:AEM Edge Functions プロジェクトのビルドとデプロイ
AEM Edge Functions プロジェクトをビルドしてデプロイするには、次のコマンドを使用します。これらのコマンドでは、.aio ファイルに保存されているコンテキストが使用されます。
# Navigate to the AEM Edge Functions project directory (replace with your project name)
$ cd frescopa-edge-functions
# Review to make sure you are deploying to the correct Edge Delivery Services site
$ 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と一致する必要があります。 また、Cloud Manager Deployment Manager製品プロファイルに参加する必要があります。
例えば、出力は次のスクリーンショットのようになります。
手順8:エンドポイントの確認
ブラウザーまたはcurlを使用して、デプロイされたエンドポイントを確認します。
$ curl https://myfrescopa.enablementadobe.com/hello-world
$ curl https://myfrescopa.enablementadobe.com/weather
手順1からEdge Delivery サイトドメインにドメインを置き換えます。
例えば、次のスクリーンショットのように回答しています。
edgefunction-pXXXXX-dYYYYY-<edge-function-name>.adobeaemcloud.com ドメインはデバッグにのみ使用でき、安定していることが保証されていません。 実稼動環境では、リクエストは、cdn.yamlのCDN ルーティングルールを介して、サイトのカスタムドメインを通じてAEM Edge機能に到達します。実際のシナリオでは、CDNのサーバーサイドロジックにAEM Edge Functionsを使用し、サイトの ブロック JavaScriptから呼び出します。 詳細な設定については、AEM Edge Functions製品ドキュメント を参照してください。
概要
Frescopa Edge Delivery サイトをCloud Managerにオンボーディングし、CLIをインストールし、Edge Delivery ServicesでAEM Edge Functionsを設定し、プロジェクトをローカルに作成および実行し、CDN設定をデプロイし、AEM Edge機能を構築およびデプロイし、エンドポイントを検証しました。