このトピックでは、Application Load Balancer (ALB) のバックエンドサーバーとして Function Compute の関数を指定する方法について説明します。この関数はリクエストの処理に使用されます。 ALB インスタンス用に Function Compute タイプのサーバーグループを作成できます。関数を ALB サーバーグループに追加すると、ALB へのリクエストは Function Compute に転送され、関数が呼び出されます。 Function Compute が関数を実行すると、結果はリクエスト元に返されます。
ソリューション概要
Alibaba Cloud Function Compute は、フルマネージドのイベント駆動型コンピューティングサービスです。 Function Compute を使用すると、サーバーなどのインフラストラクチャを管理する必要はありません。コードを記述して Function Compute にアップロードするだけで済みます。その後、Function Compute は必要な計算リソースを準備し、スケーラブルなリソースを使用してコードを確実に実行します。さらに、ロギング、パフォーマンス監視、アラート機能も提供します。 Function Compute を使用すると、あらゆる種類のアプリケーションとサービスを迅速に構築でき、実際に消費したリソースに対してのみ料金を支払うことができます。
ALB は、バックエンドサーバーとして Function Compute 関数の追加をサポートしています。 ALB がリクエストを受信すると、Function Compute に転送します。バックエンドサーバーとして ALB に関連付けられている関数が呼び出され、関数の実行が完了すると、実行結果はリクエスト元への応答として返されます。
ALB は Function Compute 3.0 と Function Compute 2.0 の両方をサポートしています。
ALB で Function Compute 関数を使用するには、最初に Function Compute サービスをアクティブ化する必要があります。 2024年8月27日以降にサインアップし、実名認証を完了したアカウントは、Function Compute のアクティブ化プロセスをスキップできます。
ALB と Function Compute は、Alibaba Cloud のセキュアな内部ネットワークを介して通信します。
主な機能
サーバーレスアーキテクチャ:Function Compute 関数をバックエンドサービスとして ALB に追加することで、サーバーレスアプリケーションを簡単に構築し、O&M コストを削減できます。
自動スケーリング:Function Compute はトラフィックに基づいて計算リソースを自動的にスケールアップまたはスケールダウンし、トラフィックの急増時には十分な計算能力を確保し、トラフィックの減少時にはリソースを節約します。
高可用性とフォールトトレランス:ALB と Function Compute は連携して高可用性とディザスタリカバリ機能を提供し、安定したアプリケーション運用を保証します。
ユースケース
マイクロサービスアーキテクチャ:ALB の高度な転送機能により、リクエストはさまざまなマイクロサービス関数に分散されます。 Function Compute はリソースを自動スケーリングして高同時実行性リクエストを処理し、システムのスケーラビリティと信頼性を向上させます。
リアルタイムデータ処理:ALB が必要な関数にリクエストを分散することで、数行のコードを記述し、基本的な構成を行うだけで済みます。その後、Function Compute はビジネスデータをリアルタイムで処理できます。
イベント駆動型リクエスト:ALB はイベントによってトリガーされたリクエストをチェックし、関連付けられた関数に転送します。 Function Compute はリクエストを処理し、処理結果をデータベースに保存するか、他のサービスに送信して、イベント駆動型アーキテクチャを実現します。
画像および動画処理:ALB は画像および動画のアップロードリクエストをチェックし、処理関数に転送します。 Function Compute はタスクサイズに基づいて計算リソースを自動スケーリングし、画像および動画処理タスクの効率的な完了を保証します。
制限事項
ALB のバックエンドサーバーとして Function Compute がサポートされているリージョンについては、「リージョンとゾーン」をご参照ください。
ALB インスタンスとバックエンドサーバーとして使用する関数は、同じリージョンにデプロイする必要があります。
Function Compute タイプの ALB サーバーグループの場合、バックエンドサーバーとして追加できる関数は 1 つだけです。
Function Compute 2.0 の場合、関数の [ハンドラータイプ] を [イベントハンドラー] に設定し、関数を ALB バックエンドサーバーとして使用する場合は、関数に HTTP トリガーを設定する必要があります。
シナリオ例
ある e コマース企業は、Alibaba Cloud リージョンに ALB をデプロイして、プラットフォームにアクセスするユーザーリクエストを処理しています。ビジネスの成長とユーザー数の増加に伴い、コンテンツ生成、ユーザー行動分析、パーソナライズされたレコメンデーションタスクを効率的に完了するためのスケーラブルなアーキテクチャが必要になります。
このニーズに対応するために、同社は Alibaba Cloud の Function Compute と ALB を組み合わせてユーザーエクスペリエンスを向上させています。
前提条件
手順
ステップ 1:関数の作成
この例では、Function Compute 3.0 を使用しています。 Function Compute 2.0 を使用する場合は、Function Compute コンソールのホームページで、右上隅にある [Function Compute 2.0 に戻る] をクリックし、次のガイドを参照してください。「関数をすばやく作成する」
Function Compute コンソール にログオンします。左側のナビゲーションウィンドウで、[関数] を選択します。 [関数] ページで、上部のナビゲーションバーでリージョンを選択し、[関数の作成] をクリックします。
[関数の作成] ページで、関数の種類を選択し、関数のコード構成を完了して、[作成] をクリックします。
この例では、[イベント関数] タイプを選択し、[サンプルコードを使用] メソッドのデフォルトの [コード] 構成を使用します。 その他のイベント関数パラメーターについてはデフォルト値をそのまま使用するか、必要に応じて設定できます。


関数の詳細ページの [コード] タブで、[関数のテスト] をクリックします。
[実行に成功しました] メッセージが表示されたら、[レスポンス] セクションに関数の実行結果が表示されます。この例では、レスポンスは
hello worldです。
ステップ 2:Function Compute タイプのサーバーグループの作成
ALB コンソール に移動し、左側のナビゲーションウィンドウで [サーバーグループ] を選択します。上部のナビゲーションバーで、作成した関数と同じリージョンを選択し、サーバーグループの作成 をクリックします。
[サーバーグループの作成] ダイアログボックスで、[サーバーグルーブタイプ] に [Function Compute] を選択し、[作成] をクリックします。

表示されるメッセージで、[バックエンドサーバーの追加] をクリックします。
バックエンドサーバーの追加 パネルで、作成した関数を選択し、[OK] をクリックします。
このトピックでは、[構成方法] は [サービス] に設定され、[関数名] には作成した関数が選択され、[バージョン] は [最新] に設定されています。 [ARN] で構成する必要がある場合は、関数の Alibaba Cloud Resource Name (ARN) を取得 する必要があります。

ステップ 3:リスナーの作成
左側のナビゲーションウィンドウで、 を選択し、目的のインスタンスの ID をクリックします。
[リスナー] タブをクリックし、[リスナーの作成] をクリックします。
[リスナーの構成] ウィザードページで、リスナーのプロトコルとポートを設定し、[次へ] をクリックします。
このトピックでは、[HTTP] プロトコルとポート 80 を選択します。 その他の HTTP リスナーパラメーターについてはデフォルト値をそのまま使用するか、必要に応じて設定できます。

[サーバーグループの選択] ウィザードページで、[サーバーグループの選択] ドロップダウンリストから [Function Compute] を選択し、作成したサーバーグループを選択して、[次へ] をクリックします。

[構成の確認] ウィザードページで、構成を確認し、[送信] をクリックします。
ステップ 4:ドメイン名解決の構成
実際のビジネスシナリオでは、カスタムドメイン名を使用して、CNAME レコードを使用して ALB インスタンスのドメイン名に解決することをお勧めします。
左側のナビゲーションウィンドウで、 を選択します。 [インスタンス] ページで、ALB インスタンスの DNS 名をコピーします。
CNAME レコードを追加します。
Alibaba Cloud DNS コンソール の [権威 DNS 解決] ページで、目的のカスタムドメイン名を見つけ、[アクション] 列の [DNS 設定] をクリックします。
説明Alibaba Cloud に登録されていないドメイン名の場合、ドメイン名解決を構成する前に、ドメイン名を Alibaba Cloud DNS に追加 する必要があります。
解決設定ページで、[DNS レコードの追加] をクリックし、CNAME レコードを構成して、[OK] をクリックします。
このトピックでは、[レコードタイプ] は [CNAME] に設定され、[レコード値] は ALB インスタンスの DNS 名に設定されています。 その他の DNS レコードパラメーターについてはデフォルト値をそのまま使用するか、必要に応じて設定できます。

ステップ 5:負荷分散効果のテスト
上記の手順が完了すると、ALB と Function Compute の間に接続が確立されます。コマンドラインウィンドウを開き、curl <カスタムドメイン名> コマンドを実行して、ALB と Function Compute の間の接続性をテストします。
次の図に示す応答メッセージを受信した場合、ALB がリクエストを Function Compute に転送し、関数を呼び出すことができることを示しています。

よくある質問
Function Compute 関数を ALB のバックエンドサーバーとして使用する場合、ALB インスタンスの 1 秒あたりのクエリ数 (QPS) がコミットされたレベルに達しないのはなぜですか?
ALB インスタンスは、最適なパフォーマンスで最大 100 万 QPS を処理できます。ただし、ALB インスタンスのバックエンドサービスが Function Compute の場合、次の理由により、ALB インスタンスの QPS がコミットされたレベルに達しない可能性があります。
Function Compute の QPS 制限:Function Compute インスタンスが処理できる同時リクエスト数には制限があります。ビジネスリクエスト量が現在のインスタンスで処理できる最大 QPS を超えると、リクエストがキューイングまたは調整される可能性があります。
Function Compute のインスタンス数制限:並列実行される Function Compute インスタンスの数には制限があります。ビジネスのトラフィックに対して Function Compute インスタンスが不足している場合、単一インスタンスの QPS が高くても、全体的な QPS は不足します。
ビジネスに必要なインスタンス数の推定については、「リージョン内の各ユーザーのインスタンスの上限が 100 であることを考慮すると、サービスは 1 秒あたり 100 件を超えるリクエストを処理できますか?」をご参照ください。
解決策:関数のパフォーマンスプロファイリング の結果を参照し、インスタンスの同時実行性、インスタンスタイプ、およびその他の関連パラメーターを適切に構成し、Function Compute クォータを増やして最適な QPS を実現します。
参考資料
コンソール
ALB の詳細については、以下を参照してください。
Function Compute の詳細については、以下を参照してください。
API
CreateServerGroup:
ServerGroupTypeパラメーターをFcに設定することにより、Function Compute タイプのサーバーグループを作成します。AddServersToServerGroup:
ServerTypeパラメーターをFcに設定することにより、Function Compute 関数をバックエンドサーバーとして追加します。RemoveServersFromServerGroup:
ServerTypeパラメーターをFcに、ServerIdパラメーターを Function Compute 関数の ARN に設定することにより、サーバーグループからバックエンドサーバーを削除します。DeleteServerGroup:指定されたサーバーグループを削除します。