このチュートリアルでは、Edge Security Acceleration (ESA) の Functions and Pages を使用して動的コンテンツと静的コンテンツを分離し、シンプルな eコマースウェブサイトを高速化する方法を説明します。デプロイと設定のウォークスルーを提供し、Functions and Pages の仕組みと、ウェブサイトの読み込み速度とユーザーエクスペリエンスを大幅に向上させる方法について解説します。
ワークフロー
Web サイトの静的コンテンツと動的コンテンツを個別に高速化するには、次のステップに従います。
Web サイトの構成: プライマリドメイン名を ESA に追加します。
静的リソースのデプロイ: イメージリソースを Object Storage Service (OSS) に保存します。次に、これらのイメージにアクセスするために ESA でドメイン名を設定します。
動的リソースのデプロイ: Elastic Compute Service (ECS) サーバーに Python サービスをデプロイします。次に、動的リクエストを高速化するために ESA でドメイン名を設定します。
エッジ関数の構成: エッジ関数を構成し、それにドメイン名を割り当てます。これにより、高速なページレンダリング応答が提供されます。
開始する前に
このチュートリアルでは、オリジンサーバーとして www.example.com、高速化ドメイン名として shopping.example.com、静的リソースのドメインとして images.example.com を使用します。 これらを実際のドメイン名に置き換えてください。 概念実証 (POC) のために、ファイル資料のイメージと Python スクリプトを使用できます。
1. Web サイトの構成
静的リソースと動的リソースを高速化するために、Web サイトを ESA に追加します。
ESA コンソールで、サイト管理 を選択し、サイトを追加 をクリックします。
Web サイト (例:
example.com) を入力し、[次へ] をクリックします。エリアと接続方式の選択 ページで、[Location For Acceleration And Protection] セクションの リージョンを選択 し、接続方式 に [CNAME] を選択して、次へ をクリックします。
プランの選択 ページで、新規プラン を購入するか、購入済みプラン を選択します。画面の指示に従って購入を完了します。
新しいプランの購入
新規プラン ページで、ニーズに合ったプランを選択します。

既存のプランのバインド
既存のプランがある場合は、購入済みプラン タブで選択します。

ESA コンソール で、左側のナビゲーションウィンドウで [Websites] をクリックし、ターゲット Web サイトをクリックします。[概要] ページで、ドメイン名の所有権を確認します。
TXT レコードの [レコード値] をコピーします。

Alibaba Cloud DNS コンソール で、左側のナビゲーションウィンドウで を選択します。[パブリックゾーン] タブで、ターゲット Web サイトのドメイン名を見つけて [設定] をクリックします。
[設定] セクションで、[レコードの追加] をクリックします。次の設定でレコードを追加し、[OK] をクリックします。
構成
値の例
レコードタイプ
TXTホスト名
_esaauthレコード値
verify_a186***be8(コンソールで提供されるレコード値)TTL
10 分
ESA コンソール で、ターゲット Web サイトの概要ページに移動し、認証 をクリックします。
検証成功: ESA に
検証成功と表示された場合、検証は完了です。検証失敗: ESA に
検証失敗と表示された場合は、前のステップが正しく実行されたかどうかを確認し、設定を調整して、もう一度 認証 をクリックします。
2. 静的リソースの設定
2.1 環境の準備
2.2 静的リソースのドメイン名の構成
ESA コンソールで、サイト管理 を選択します。サイト 列で、ターゲットサイトをクリックします。
左側のナビゲーションウィンドウで、 を選択します。DNS レコードを追加します。次の表に設定例を示します。
構成
値の例
レコードタイプ
CNAMEホスト名
imagesプロキシのステータス
プロキシ済み
レコード値
OSS
アクセスタイプ
プライベートアクセス (同じアカウント)
承認
デフォルトでは、同じアカウントのプライベートアクセスは自動的に承認されます。
OSS バケット
website-resources-shopping.*******.aliyuncs.comオリジンホスト
オリジンのドメイン名に一致
TTL
自動
レコードタイプには [イメージ/ビデオ] を選択し、[完了] をクリックします。
DNS レコードが作成されたら、CNAME 構成ガイドページから [ホスト名] と [レコード値] をコピーします。

Alibaba Cloud DNS コンソールに移動します。左側のナビゲーションウィンドウで、 を選択します。ターゲット Web サイトのドメイン名を見つけて、[設定] をクリックします。
[設定] セクションで、[レコードの追加] をクリックします。次の設定でレコードを追加し、[OK] をクリックします。
構成
値の例
レコードタイプ
CNAMEホスト名
imagesレコード値
images.example.com.**.*******.comTTL
10 分
ステップ 4 の CNAME 構成ガイドページに戻ります。[CNAME 検証] ステップで、[クエリ] をクリックします。ステータスが [有効] の場合、CNAME レコードは正常に構成されています。
説明CNAME レコードが有効になるまで数分かかる場合があります。
ブラウザに
http://{高速化ドメイン名}/1.pngと入力して、イメージが表示されるかどうかをテストします。説明404 エラーが発生した場合は、ディレクトリパスに基づいてファイルにアクセスするように URL を変更してみてください。たとえば、イメージがルートディレクトリではなく images ディレクトリにある場合は、
http://{高速化ドメイン名}/images/1.pngにアクセスします。
3. 動的リソースのデプロイ
3.1 環境の準備
ECS コンソール にログインします。
左側のナビゲーションウィンドウで、[インスタンスとイメージ] > [インスタンス] を選択します。トップメニューバーで、インスタンスが配置されているリージョンを選択します。この例では、[中国 (杭州)] です。
[インスタンス] ページで、[インスタンスの作成] をクリックします。次に、次の例を参照して ECS インスタンスを作成します。
構成 | 値の例 |
課金方法 | 従量課金 |
リージョン | 中国 (杭州) |
ネットワークとゾーン | デフォルト VPC、ゾーン内のデフォルト vSwitch |
インスタンス | ecs.e-c1m1.large (2 vCPU 2 GiB) |
イメージ | [パブリックイメージ] で、[Alibaba Cloud Linux] を選択します |
イメージバージョン | Alibaba Cloud Linux 3.2104 LTS 64 ビット |
システムディスクタイプ | ESSD |
システムディスクサイズ | 40 GiB |
パブリック IP アドレス | [パブリック IPv4 アドレスの割り当て] を選択します |
帯域幅課金方法 | トラフィック単位課金 |
帯域幅 | 5 Mbps |
セキュリティグループ | [セキュリティグループの作成] ([IPv4 ポート/プロトコルの有効化] で、 |
管理設定 | [カスタムパスワード] (独自のパスワードを設定) |
3.2 動的リソースのデプロイ
ECS コンソール にログインします。
左側のナビゲーションウィンドウで、[インスタンスとイメージ] > [インスタンス] を選択します。トップメニューバーで、[中国 (杭州)] リージョンを選択します。
[インスタンス] ページで、ターゲットインスタンスを見つけ、インスタンス ID をクリックしてインスタンス詳細ページに移動します。
[リモート接続] をクリックします。[接続] を選択し、[今すぐサインイン] をクリックします。ログインパスワードを入力してインスタンスにログインします。

「ファイル資料」からデモの python スクリプトと製品データをダウンロードします。パッケージを解凍した後、2 つのファイルを ECS サーバーにアップロードします。
セクション 2.2 で構成した静的リソースの高速化ドメイン名で、
ItemInfo.json内のドメイン名images.example.comを置き換えます。次に、左上隅で [ファイル] > [新しいファイルマネージャーウィンドウ] > [ファイルのアップロード] を選択します。ダウンロードした 2 つのドキュメントをサーバーにアップロードします。

[Workbench] コンソールで、次のコマンドを入力して HTTP サーバーを起動します。
cd / # ルートディレクトリに移動します。 nohup python -m http.server 80 & # バックグラウンドでポート 80 の HTTP サービスを開始します。ブラウザに
http://<パブリック IP>/ItemsInfo.jsonと入力して、動的な製品情報が正しく返されるかどうかを確認します。
3.3 動的リソースのドメイン名の構成
ESA コンソールで、サイト管理 を選択します。ターゲットサイトの 操作 列で、 アイコンをクリックし、DNS レコード設定 を選択します。
左側のナビゲーションウィンドウで、 を選択します。
レコードリストページで、[レコードの追加] をクリックします。次の表の説明に従ってパラメーターを構成し、[次へ] をクリックします。
構成
値の例
レコードタイプ
A/AAAAホスト名
www
プロキシステータス
プロキシ済み
レコード値
10.0.x.x (ターゲット ECS インスタンスのパブリック IP アドレス)
TTL
自動
レコードタイプには [API] を選択し、[完了] をクリックします。
DNS レコードが作成されたら、[CNAME 構成ガイド] をクリックします。[ホスト名] と [レコード値] をコピーします。
説明現在のページを閉じないでください。ステップ 8 でこのページに戻り、CNAME レコードが有効になったかどうかを確認する必要があります。

Alibaba Cloud DNS コンソールに移動します。左側のナビゲーションウィンドウで、 を選択します。ターゲットサイトのドメイン名を見つけて、[設定] をクリックします。
[設定] セクションで、[レコードの追加] をクリックします。次の設定でレコードを追加し、[OK] をクリックします。
構成
値の例
レコードタイプ
CNAMEホスト名
wwwレコード値
www.example.com.**.*******.com([CNAME 構成ウィザード] の [レコード値])TTL
10 分
ステップ 5 の [CNAME 構成ウィザード] ページに戻ります。[CNAME 検証] ステップで、[クエリ] をクリックします。[有効] と表示された場合、CNAME レコードは正常に構成されています。
説明CNAME レコードが有効になるまで数分かかる場合があります。
4. エッジ関数の構成
4.1 エッジ関数の作成
ESA コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[作成] をクリックします。[関数テンプレート] から Hello World を選択し、[次へ] をクリックします。
[関数名] を入力します。説明を追加し、[送信] をクリックします。
エッジ関数のエンドポイントを追加します。
左側のナビゲーションウィンドウで、 を選択します。エッジ関数リストページで、ターゲット関数をクリックします。
関数詳細ページで、[ドメイン] タブに切り替え、ドメイン名を追加 をクリックします。エンドポイント
shopping.example.comを関数に割り当て、[OK] をクリックします。ドメイン名バインディングエリアで、作成したエッジ関数ドメイン名を見つけます。操作 列で、DNS レコードの表示 をクリックします。エッジ関数ドメイン名の CNAME 値をコピーします。

Alibaba Cloud DNS コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。ターゲット Web サイトのドメイン名を見つけて、[設定] をクリックします。
[設定] セクションで、[レコードの追加] をクリックします。次の設定でレコードを追加し、[OK] をクリックします。
構成
説明
値の例
レコードタイプ
ドメイン名が指すタイプを選択します。
CNAMEホスト名
ドメイン名のプレフィックスに基づいてホストレコードを入力します。
shoppingレコード値
エッジ関数ドメイン名に対応する CNAME 値を入力します。
shopping.example.com.**.*******.comTTL
ドメイン名の更新期間です。デフォルト値のままにします。
10 分
DNS レコードページを更新し、エッジ関数ドメイン名の [CNAME ステータス] が [構成予定] から [構成済み] に変更されたかどうかを確認します。
説明CNAME レコードが有効になるまで数分かかる場合があります。すぐに有効にならない場合は、数分待ってください。
4.2 エッジ証明書の構成
ESA は HTTPS 暗号化をサポートしています。ESA で SSL 証明書を構成し、SSL/TLS を有効にして、クライアントと ESA POP 間のデータ伝送を暗号化できます。このソリューションでは、無料の証明書をリクエストすることをお勧めします。詳細については、「エッジ証明書を構成する方法」をご参照ください。
ESA コンソール で、左側の [サイト管理] をクリックします。サイト管理ページで、ターゲットサイトをクリックします。
ターゲットサイト管理ページで、左側のナビゲーションウィンドウで を選択します。
[エッジ証明書] セクションで、[SSL/TLS を有効にする] を見つけ、右側のスイッチをクリックしてこの機能を有効にします。

[エッジ証明書] セクションで、[証明書管理] を見つけ、[無料証明書のリクエスト] をクリックします。次の表の説明に従ってパラメーターを構成し、[OK] をクリックします。
構成
説明
値の例
認証局
デフォルト値のままにします。
Let's Encrypt証明書ドメイン名
前のステップの静的リソースドメイン名、動的リソースドメイン名、およびエッジ関数ドメイン名を入力します。
images.example.comwww.example.comshopping.example.com無料証明書の申請には約 5〜10 分かかります。証明書が発行されると、自動的に ESA プラットフォームにデプロイされます。
4.3 オリジンプロトコルとポートの構成
SSL 証明書が構成されると、ESA はデフォルトでオリジンフェッチにクライアントリクエスト (HTTPS) と同じプロトコルを使用します。ただし、このデモのオリジンサーバーは HTTPS をサポートしていないため、オリジンサーバーへの HTTPS リクエストは失敗します。したがって、ESA でオリジンプロトコルとして HTTP を指定する必要があります。
ESA コンソール で、左側の [Web サイト] をクリックし、ターゲットサイトをクリックします。
[Web サイト] ページで、左側のナビゲーションウィンドウで を選択します。
[オリジン証明書] セクションで、[オリジンプロトコルとポート] を見つけ、[構成] をクリックします。次の表の説明に従ってパラメーターを構成し、[OK] をクリックします。
構成
説明
値の例
オリジンプロトコル
オリジンサーバーは HTTPS をサポートしていないため、
HTTPを選択します。HTTPHTTP ポート
デフォルト値の
80のままにします。80
4.4 エッジ関数のテストと公開
ESA コンソール にログインし、左側のナビゲーションウィンドウで を選択します。
エッジ関数リストページで、ターゲット関数を選択します。
エッジ関数詳細ページで、[コード] タブに切り替えます。次の JavaScript コードを使用し、
urlPrefix変数をオリジンドメイン名www.example.comに置き換えます。次に、[保存] をクリックします。async function handleRequest(request) { const urlPrefix = 'www.example.com'; // HTML ファイルのリクエスト URL const staticDataUrl = 'http://' + urlPrefix + '/index.html'; // 動的データのリクエスト URL const dynamicDataUrl = 'http://' + urlPrefix + '/ItemsInfo.json'; // Cache API を使用してページスケルトンデータをクエリします const htmlCache = await cache.get(staticDataUrl); let html = ''; if (htmlCache === undefined) { const htmlResponse = await fetch(staticDataUrl); html = await htmlResponse.text(); await cache.put(staticDataUrl, new Response(html, { headers: [["cache-control", "max-age=1000"]] })); } else { html = await htmlCache.text(); } // オリジンサーバーから製品データをフェッチします const jsonResponse = await fetch(dynamicDataUrl); const json = await jsonResponse.json(); // 動的データを div ブロックにカプセル化します let itemsHtml = ''; for (const item of json.data) { const itemHtml = ` <div class="bg-white overflow-hidden shadow rounded-lg"> <div class="p-4"> <img class="h-48 w-full object-cover" src="${item.image}" alt="Placeholder image of a product"> <h3 class="mt-2 text-gray-900 text-sm font-medium">${item.title}</h3> <div class="mt-4"> ${item.originalPrice}${item.discountPrice}コードエディターで、右上の [リクエスト] をクリックしてローカルテストを実行します。ログはエディターの左下に表示されます。
ローカルテストが成功したら、[ワンクリックリリース] をクリックしてコードを本番環境にデプロイします。
5. リソースの確認とクリーンアップ
5.1 デモの確認
エッジ関数を公開した後、次の方法で結果を確認します。
ブラウザを開き、セクション 4.1 で作成したエッジ関数ドメイン名 (https://<エッジ関数ドメイン名>) にアクセスします。
ページが正しく読み込まれ、製品情報が動的にレンダリングされるかどうかを確認します。
ブラウザの開発者ツールを使用してネットワークリクエストを表示します。静的リソースがキャッシュヒットになり、動的データが POP を介して高速化されることを確認します。


5.2 (オプション) リソースのクリーンアップ
このデモでは、複数のリソースインスタンスを作成します。これらのリソースが不要になった場合は、課金を避けるためにそれらをリリースします。
ESA から Web サイトを削除します。
ESA コンソール にログインします。左側のナビゲーションウィンドウで、 をクリックします。削除したい Web サイトを見つけ、[アクション] 列の [削除] をクリックします。
エッジ関数を削除します。
ESA コンソール で、左側のナビゲーションウィンドウで を選択します。削除したい関数をクリックし、[基本情報] タブの [削除] をクリックします。
ECS インスタンスをリリースします。
ECS コンソール にログインします。[インスタンス] ページで、ターゲットインスタンスを見つけます。[アクション] 列で、[リリース] を選択します。プロンプトに従ってインスタンスをリリースします。
セキュリティグループを削除します。
ECS コンソール にログインします。[セキュリティグループ] ページで、ターゲットセキュリティグループを見つけます。[アクション] 列で、[削除] をクリックします。プロンプトに従ってセキュリティグループを削除します。

