Serverless App Engine (SAE) でアプリケーションをデプロイした後、Network Load Balancer (NLB) インスタンスをアプリケーションにバインドして、固定アクセスエンドポイントを提供できます。このトピックでは、NLB インスタンスを SAE アプリケーションにバインドする方法について説明します。
背景情報
デフォルトでは、SAE アプリケーションはパブリックネットワークからアクセスできません。Virtual Private Cloud (VPC) 内ではインスタンスのプライベート IP アドレスを使用してアプリケーションにアクセスできますが、この IP アドレスはアプリケーションの更新や再起動時に変更される可能性があるため、この方法は信頼性が高くありません。これらの問題に対処するために、パブリックまたはプライベート NLB インスタンスをアプリケーションにバインドできます。NLB インスタンスをバインドすることで、固定ドメイン名を使用してアプリケーションにアクセスできるだけでなく、異なるゾーンや SAE インスタンス間でトラフィックを効率的に負荷分散することもできます。
NLB インスタンスをアプリケーションにバインドする前に、Network Load Balancer (NLB) の仕組みとそのパフォーマンスと使用制限についてご確認ください。
SAE で NLB サービスを使用する場合、NLB インスタンスに追加の料金が発生します。
重要SAE コンソールで NLB インスタンスを削除しても、Server Load Balancer (SLB) コンソールから削除しない場合、料金は発生し続けます。SLB コンソールから NLB インスタンスを削除する方法については、「NLB インスタンスの削除」をご参照ください。
概要
SAE アプリケーションは、パブリックまたはプライベート NLB インスタンスへのバインドをサポートしています。ビジネスニーズに基づいて、さまざまなネットワークタイプの NLB インスタンスを SAE アプリケーションに関連付けることができます。
プライベート NLB インスタンスのバインド: 主な目的は、SAE アプリケーションに固定アクセスアドレス (DNS 名) を提供し、ラウンドロビンなどの負荷分散アルゴリズムを使用して、トラフィックを SAE アプリケーションのインスタンスに分散することです。一般的なユースケースには、内部マイクロサービス通信、データベースアクセス、エンタープライズイントラネットアクセスなどがあります。
パブリック NLB インスタンスのバインド: デフォルトでは、SAE はパブリックネットワークからの直接アクセスをサポートしていません。パブリック NLB インスタンスをアプリケーションにバインドすることで、パブリックネットワークからのトラフィックを処理するための固定パブリックエンドポイントを提供できます。パブリックアクセスのワークフローを次の図に示します。
ステップ1:NLB インスタンスの追加
[アプリケーション] ページで、上部のナビゲーションバーでリージョンと名前空間を選択し、次に対象アプリケーションの[アプリケーション ID]をクリックしてアプリケーション詳細ページを開きます。
[Basic Information] ページで、[application access settings] セクションを見つけます。[NLB-based Access] タブで、[Add NLB Access] をクリックします。
[Add NLB Access] パネルで、次のようにパラメーターを設定し、[OK] をクリックします。
説明SAE では、NLB インスタンスを作成するか、既存のインスタンスをバインドすることができます。ニーズに応じてオプションを選択してください。
新しい NLB インスタンスの作成: SAE が自動的に NLB インスタンスを購入します。NLB インスタンスの詳細は、SLB コンソールで表示できます。
既存の NLB インスタンスのバインド: 事前に SLB コンソールの [Instances] ページでNLB インスタンスを作成する必要があります。プライベート NLB インスタンスを作成する場合、NLB インスタンスと SAE アプリケーションの両方に同じ VPC を使用することを推奨します。異なる VPC にある場合は、それらの間の通信を可能にするためにネットワークを設定する必要があります。たとえば、Alibaba Cloud の Cloud Enterprise Network (CEN) やその他のネットワーク接続製品を使用して、VPC 間の通信を有効にすることができます。
新しい NLB インスタンスの作成
[instance source] で、[Create Instance] を選択します。
[Network Type] で、ニーズに応じて [Public] または [Private] を選択します。
[Public] を選択した場合、システムはパブリック NLB インスタンスを作成し、各ゾーンに Elastic IP Address と VIP を割り当てます。
[Private] を選択した場合、システムはプライベート NLB インスタンスを作成し、各ゾーンに VIP を割り当てます。
ビジネス要件に基づいて、vSwitch が配置されているゾーンを選択します。高可用性を実現するには、少なくとも 2 つのゾーンを選択してください。
VPC は選択できません。デフォルトでは、対象アプリケーションの VPC が使用されます。
サポートされているプロトコルタイプは TCP、UDP、TCPSSL です。
プロトコルタイプ
パラメーター
例
TCP
リスナーポート:リクエストを受信し、バックエンドサーバーに転送するポート。
コンテナポート:アプリケーションのプロセスがリッスンするポート。
リスナーポート:80
コンテナポート:8080 (Web サービスのデフォルトポート)
UDP
TCPSSL
リスナーポート:リクエストを受信し、バックエンドサーバーに転送するポート。
コンテナポート:アプリケーションのプロセスがリッスンするポート。
SSL 証明書の選択:SSL プロトコル証明書。ドロップダウンリストからアップロード済みの SSL 証明書を選択します。
説明HTTPS 経由でカスタムドメイン名にアクセスするには、ドメイン名が Alibaba Cloud で ICP 备案 を取得している必要があります。詳細については、「ICP 备案プロセス」をご参照ください。
リスナーポート:80
コンテナポート:8080 (Web サービスのデフォルトポート)
SSL 証明書の選択:購入済みの SSL 証明書をドロップダウンリストから選択します。SSL 証明書を購入していない場合は、「証明書の購入」をご参照ください。
既存の NLB インスタンスのバインド
[instance source] で、[Use Existing] を選択します。
[NLB Instance] ドロップダウンリストから、作成した NLB インスタンスを選択します。
NLB インスタンスを作成していない場合は、[Create NLB Instance] をクリックします。その後、SLB コンソールの [Instances] ページでNLB インスタンスを作成します。
サポートされているプロトコルタイプは TCP、UDP、TCPSSL です。
プロトコルタイプ
パラメーター
例
TCP
リスナーポート:リクエストを受信し、バックエンドサーバーに転送するポート。
コンテナポート:アプリケーションのプロセスがリッスンするポート。
リスナーポート:80
コンテナポート:8080 (Web サービスのデフォルトポート)
UDP
TCPSSL
リスナーポート:リクエストを受信し、バックエンドサーバーに転送するポート。
コンテナポート:アプリケーションのプロセスがリッスンするポート。
SSL 証明書の選択:SSL プロトコル証明書。ドロップダウンリストからアップロード済みの SSL 証明書を選択します。
説明HTTPS 経由でカスタムドメイン名にアクセスするには、ドメイン名が Alibaba Cloud で ICP 备案 を取得している必要があります。詳細については、「ICP 备案プロセス」をご参照ください。
リスナーポート:80
コンテナポート:8080 (Web サービスのデフォルトポート)
SSL 証明書の選択:購入済みの SSL 証明書をドロップダウンリストから選択します。SSL 証明書を購入していない場合は、「証明書の購入」をご参照ください。
NLB インスタンスの作成後、[application access settings] セクションの [NLB-based Access] タブでそのステータスを表示できます。
複数の NLB インスタンスを追加する場合は、[Add NLB Access] をクリックし、上記の手順に従ってインスタンスを追加します。
重要同じ NLB インスタンスのリスナールールを SAE コンソールと SLB コンソールの両方で設定すると、一方のコンソールでの設定が他方の設定を上書きし、競合が発生する可能性があります。設定の競合を避けるため、NLB インスタンスのリスナールールは SAE コンソールでのみ設定することを推奨します。
NLB インスタンスでは、次の操作を実行できます:
リスナーの追加: [Add Listener] をクリックします。[Add Listener] ダイアログボックスで、[protocol type] を選択し、パラメーターを設定します。
コンテナポートの変更: NLB インスタンスの [Actions] 列で、[Edit] をクリックします。[Edit NLB Access] パネルで、[container port] を変更できます。
リスナーまたは NLB インスタンスの削除: NLB インスタンスの [Actions] 列で、[Delete] をクリックします。[Confirm Deletion] ダイアログボックスで [OK] をクリックして、対応するリスナールールまたは NLB インスタンスを削除します。
同じ NLB インスタンスに複数のリスナールールを追加した場合、削除操作では対応するリスナールールのみが削除されます。最後のリスナールールを削除すると、残りのリスナールールがなくなるため、NLB インスタンスは自動的に削除されます。
NLB インスタンスの表示: NLB インスタンス名をクリックして、SLB コンソールの NLB インスタンスの [Instance Details] ページに移動します。各ゾーンに割り当てられた [Elastic IP Address] や [VIP]、NLB インスタンス用に自動生成された [DNS name] などの NLB インスタンスの詳細を表示できます。
NLB インスタンスの [DNS name] またはゾーンの [Elastic IP Address] を使用して、アクセスをテストできます。
ポートのリッスンアドレスのトラブルシューティング
NLB インスタンスをバインドしたにもかかわらず、NLB インスタンスの [DNS name] または [Elastic IP Address] を介してアプリケーションポートにアクセスできない場合は、アプリケーションポートのリッスンアドレスを確認してください:
[Webshell] を使用してアプリケーションインスタンスのコンテナにログオンし、
netstat -npltコマンドを実行してポートのリッスンステータスを確認します。対象の [container port] のリッスンアドレスを確認します。リッスンアドレスが
127.0.0.1:<container port>の場合、アプリケーションプロセスは localhost でのみリッスンしており、NLB インスタンスはそのポートにトラフィックを転送できません。アプリケーションコードを変更して、リッスンアドレスを
127.0.0.1から0.0.0.0に変更し、プロセスがすべてのネットワークインターフェイスでリッスンするようにします。アプリケーションを再デプロイし、NLB インスタンスを再度バインドします。これにより、アプリケーションポートが NLB インスタンス経由でアクセス可能になります。
ステップ2:ドメイン名前解決の設定
NLB インスタンスの DNS 名は、アクセステストに使用できます。ただし、本番環境では、カスタムドメイン名を使用し、CNAME レコードを追加して NLB インスタンスの DNS 名にマッピングすることを推奨します。
[application access settings] セクションで、作成した NLB インスタンスの名前をクリックして、SLB コンソールでその詳細ページを開きます。
SLB コンソールの NLB インスタンスの [Instance Details] ページで、[DNS name] をコピーします。
NLB インスタンスの DNS 名は、ドメイン名前解決を設定する際のレコード値として使用されます。
Alibaba Cloud DNS コンソールにログオンし、CNAME レコードを追加します。
説明ドメイン名が Alibaba Cloud に登録されていない場合は、ドメイン名前解決を設定する前に、Alibaba Cloud DNS コンソールに追加する必要があります。ドメイン名が Alibaba Cloud に登録されている場合は、次の手順に進んでください。
[Authoritative Domains] ページで、対象のドメインを見つけ、[Actions] 列の [Configure] をクリックします。
[Configure] ページで、[Add Record] をクリックします。
[Add Record] パネルで、次のパラメーターを設定して CNAME 設定を完了し、[OK] をクリックします。
パラメーター
例
説明
タイプ
CNAME
ドロップダウンリストから CNAME を選択します。
CNAME レコードは、カスタムドメイン名を NLB インスタンスの DNS 名にマッピングします。
ホスト
www
作成するサブドメインのプレフィックスを入力します。
ホストレコードの詳細な説明については、コンソールの説明をご参照ください。
解決リクエストソース
[Default]
[Default] を選択します。
Alibaba Cloud DNS は、DNS リクエストのソース IP アドレス (通常はキャリアのローカル DNS の IP アドレス) のリージョンとキャリアを識別できます。レコードを追加する際、異なるリージョンまたはキャリアネットワークからのリクエストに対して異なるレコード値を返すことができます。
値
nlb-****.com
NLB インスタンスの DNS 名を入力します。
レコード値は、CNAME レコードが指すドメイン名です。
TTL
10 minutes
コンソールで提供されるデフォルト値を使用します。
TTL (Time to Live) は、DNS レコードが DNS サーバーにキャッシュされる期間です。
ステップ3:アクセスのテスト
ブラウザにカスタムドメイン名を入力して、アクセスをテストします。例: http://your_domain_name。
Hello, World!リソースのクリーンアップ (任意)
NLB インスタンスの削除
SAE コンソールの対象アプリケーションの [Basic Information] ページで、[application access settings] セクションの NLB インスタンス名をクリックして、SLB コンソールでインスタンス詳細ページを開きます。
NLB インスタンス詳細ページで、右上の を選択します。[Release Instance] ダイアログボックスで、[Confirm] をクリックします。
SAE コンソールの対象アプリケーションの [Basic Information] ページに戻り、[application access settings] セクションで、NLB インスタンスの [Actions] 列にある [Delete] をクリックします。[Confirm Deletion] ダイアログボックスで [OK] をクリックして、NLB インスタンスを削除します。
同じ NLB インスタンスに複数のリスナールールを追加した場合、SAE コンソールで NLB インスタンスを削除する前に、すべてのリスナールールを削除する必要があります。
SAE コンソールでのみ NLB インスタンスを削除した場合、料金は発生し続けます。
ドメイン名前解決レコードの削除
Alibaba Cloud DNS コンソールで、追加したドメイン名前解決レコードを削除します。