コードまたはイメージを Serverless Application Engine (SAE) にアップロードすることで、アプリケーションをデプロイできます。SAE は基盤となるコンピューティングリソースを管理します。簡単な構成を行うだけで、トラフィックに基づく自動スケーリングを有効化し、複数のアベイラビリティゾーンにアプリケーションをデプロイできます。
ソリューション概要
このチュートリアルでは、マイクロサービスアプリケーションを一式デプロイし、サービス登録とディスカバリーを実装し、サービス間でメソッドを呼び出し、インターネットからアプリケーションにアクセスできるようにします。サンプルアプリケーションのアーキテクチャは次のとおりです。
このチュートリアルでは Java マイクロサービスアプリケーションを例として使用していますが、SAE は特定のプログラミング言語やアーキテクチャに限定されません。静的 Web サイト、フロントエンドとバックエンドが分離されたアプリケーション、モノリシックアプリケーション、およびマイクロサービスアプリケーションなど、幅広いユースケースに対応しています。
このチュートリアルでは、次の操作を行います。
アプリケーションのデプロイ:サンプルイメージを使用してプロバイダーおよびコンシューマーアプリケーションをデプロイします。SAE の組み込み Nacos を使用してサービス登録とディスカバリーを実装し、コンシューマーアプリケーションがプロバイダーアプリケーションのサービスを呼び出せるようにします。
インターネットからのアプリケーションへのアクセス:コンシューマーアプリケーションにパブリックエンドポイントを設定し、アプリケーションにアクセスします。
前提条件
操作手順
SAE はコンソールおよびsaectl ツール(kubectl 互換)など複数の方法をサポートしています。ご自身が使い慣れている方法を選択して、このチュートリアルを完了してください。
コンソール
1. アプリケーションのデプロイ
プロバイダーアプリケーションのデプロイ:SAE コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。上部のナビゲーションバーで、アプリケーションのリージョンを選択します。このチュートリアルでは、中国 (杭州) を例として使用します。[Create Application] をクリックします。以下のパラメーターを構成し、他の項目はデフォルト値のままにしてください。[Advanced Settings] をスキップするために、[Create Application Now] をクリックします。
がナビゲーションウィンドウに表示されていない場合は、 を選択してください。
アプリケーションエディションの選択を求められた場合は、Standard Edition を選択してください。Lightweight Edition および Professional Edition は現在、招待制のベータテスト中です。 これらのエディションの違いは、このチュートリアルに影響しません。
Application Name に任意の名前(例:
provider)を入力します。Namespace Type を
System-createdに設定します。これにより、現在のリージョンのデフォルト名前空間にアプリケーションが作成され、VPC、vSwitch、セキュリティグループなどの必要なネットワークリソースが自動的にプロビジョニングされます。Deployment Method を
Deploy Using Imageに設定します。[Set Image] をクリックします。Demo Image タブで、Microservice Application - Provider を見つけ、Image Version をmicroservice-java-provider-v1.0に設定し、[OK] をクリックします。Capacity Settings セクションで、Instance Specification および Number of Instances をカスタマイズします。これらの設定により、アプリケーションの初期インスタンス数と各インスタンスに割り当てられるコンピューティングリソースが決定されます。
コンシューマーアプリケーションのデプロイ:コンシューマーアプリケーションをデプロイするには、前述の手順を繰り返し、以下のパラメーターを調整します。
Application Name に任意の名前(例:
consumer)を入力します。[Set Image] 時に、Microservice Application - Consumer を見つけ、Image Version を
microservice-java-consumer-v1.0に設定します。
デプロイ結果の確認:アプリケーションのデプロイが完了するまで約 1 分お待ちください。
Application List ページで作成されたアプリケーションを確認できます。アプリケーションをクリックすると、詳細ページに移動します。
左側のナビゲーションウィンドウで [Basic Information] を選択します。Instance List タブで、作成されたアプリケーションインスタンスを確認できます。
2. パブリックアクセスの有効化
インターネットからコンシューマーアプリケーションにアクセスするには、インターネット向け CLB インスタンスをバインドします。
インターネット向け CLB インスタンスをコンシューマーアプリケーションにバインドする:コンシューマーアプリケーションの詳細ページに移動します。Application Information タブの Application Access Settings セクションで、[CLB-based Access] を選択します。[Add internet-facing CLB] をクリックし、以下のパラメーターを構成して、[OK] をクリックします。
CLB Instance で、[Create CLB Instance] を選択します。
HTTP Protocol タブで、HTTP Port を
80、container port を18082に設定します。
結果の検証:SAE が CLB インスタンスを作成し、アプリケーションにバインドします。インスタンスが作成されると、コンソールにアプリケーションのパブリックエンドポイントが表示されます。
ブラウザで
http://<public_endpoint>/consumer-echo/helloにアクセスし、<public_endpoint>を実際の値に置き換えます。これにより、インターネットからアプリケーションにアクセスできることを確認できます。ページで、コンシューマーアプリケーションがプロバイダーアプリケーションを呼び出すトポロジーを確認できます。
3. リソースのクリーンアップ
このチュートリアルを完了したら、追加の課金を回避するために関連リソースをクリーンアップすることを推奨します。
アプリケーションの削除:プロバイダーおよびコンシューマーアプリケーションの詳細ページに移動します。 を選択し、画面の指示に従ってアプリケーションを削除します。
SAE が作成した CLB インスタンスは、アプリケーションを削除すると自動的にリリースされます。
(オプション)ネットワークリソースの削除:デプロイ中に、SAE が自動的に VPC、vSwitch、およびセキュリティグループを作成しました。
VPC の確認:左側のナビゲーションウィンドウで、 を選択します。[default] をクリックします。Basic Information ページで VPC を確認し、リンクをクリックして VPC 詳細ページに移動します。
vSwitch およびセキュリティグループの確認:VPC の Resource Management タブで、各リソースのリンクをクリックして詳細ページに移動します。
各詳細ページでリソースを削除します。
saectl ツール
1. saectl のインストールと構成
2. アプリケーションのデプロイ
リソース設定ファイルの作成:同じディレクトリ内に以下のファイルを作成します。注:設定ファイル内の
image: ...cn-hangzhou...を、ご利用のアプリケーションのデプロイリージョンに置き換えてください。deployment-provider.yamlはプロバイダーアプリケーションを構成します。apiVersion: apps/v1 kind: Deployment metadata: annotations: sae.aliyun.com/new-sae-version: std # アプリケーションエディションを選択します。'std' は Standard Edition を示します。Lightweight および Professional エディションは招待制のベータテスト中です。この選択はチュートリアルに影響しません。 name: provider # アプリケーション名はカスタマイズ可能です。 namespace: default # システム作成のデフォルト名前空間を選択すると、VPC、vSwitch、セキュリティグループなどのネットワークリソースが自動的に作成・関連付けられます。 spec: replicas: 2 # アプリケーションインスタンスの数。 selector: matchLabels: sae.aliyun.com/app-name: provider # metadata で定義されたアプリケーション名と同じである必要があります。 template: metadata: labels: sae.aliyun.com/app-name: provider # metadata で定義されたアプリケーション名と同じである必要があります。 spec: containers: - name: main # コンテナ名は競合を避けるため 'main' にすることを推奨します。 image: registry.cn-hangzhou.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-provider-v1.0 # プロバイダーアプリケーションのサンプルイメージです。cn-hangzhou をご利用のデプロイリージョンに置き換えてください。 resources: # 単一アプリケーションインスタンスの仕様です。'limits' と 'requests' は同じ構成にする必要があります。 limits: cpu: "2" memory: 4Gi requests: cpu: "2" memory: 4Gideployment-consumer.yamlはコンシューマーアプリケーションを構成します。apiVersion: apps/v1 kind: Deployment metadata: annotations: sae.aliyun.com/new-sae-version: std # アプリケーションエディションを選択します。'std' は Standard Edition を示します。Lightweight および Professional エディションは招待制のベータテスト中です。この選択はチュートリアルに影響しません。 name: consumer # アプリケーション名はカスタマイズ可能です。 namespace: default # システム作成のデフォルト名前空間を選択すると、VPC、vSwitch、セキュリティグループなどのネットワークリソースが自動的に作成・関連付けられます。 spec: replicas: 2 # アプリケーションインスタンスの数。 selector: matchLabels: sae.aliyun.com/app-name: consumer # metadata で定義されたアプリケーション名と同じである必要があります。 template: metadata: labels: sae.aliyun.com/app-name: consumer # metadata で定義されたアプリケーション名と同じである必要があります。 spec: containers: - name: main # コンテナ名は競合を避けるため 'main' にすることを推奨します。 image: registry.cn-hangzhou.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-consumer-v1.0 # コンシューマーアプリケーションのサンプルイメージです。cn-hangzhou をご利用のデプロイリージョンに置き換えてください。 resources: # 単一アプリケーションインスタンスの仕様です。'limits' と 'requests' は同じ構成にする必要があります。 limits: cpu: "2" memory: 4Gi requests: cpu: "2" memory: 4Gi
アプリケーションのデプロイ:設定ファイルがあるディレクトリで、
saectl apply -f deployment-provider.yaml -f deployment-consumer.yamlを実行します。結果の検証:
アプリケーションの確認:
saectl get deployments -n defaultを実行します。-n defaultフラグはデフォルト名前空間を照会します。出力内容:STATEがRUNNINGの場合、アプリケーションは実行中です。状態がPUBLISHINGの場合、アプリケーションはデプロイ中です。デプロイが完了するまでお待ちください。READYフィールドに表示されるn/mは、準備完了インスタンス数 / 期待インスタンス数を表します。
アプリケーションインスタンスの確認:
saectl get pods -n defaultを実行します。出力内容:STATUSがRUNNINGの場合、インスタンス内のコンテナは正常に実行されています。ステータスがContainerCreatingの場合、コンテナは作成中です。完了までお待ちください。READYフィールドに表示されるn/mは、準備完了コンテナ数 / コンテナ総数を表します。
3. パブリックアクセスの有効化
インターネットからコンシューマーアプリケーションにアクセスするには、インターネット向け CLB インスタンスをバインドできます。
リソース設定ファイルの作成:Service を構成するための
svc.yamlファイルを作成します。この Service は、インターネット向け CLB をプロビジョニングすることで、コンシューマーアプリケーションをインターネットに公開します。apiVersion: v1 kind: Service metadata: annotations: sae.aliyun.com/loadbalancer-address-type: internet # アドレスタイプ。'internet' はパブリック、'intranet' はプライベートを示します。 name: internet-consumer # 固定フォーマット:${address-type}-${app-name} spec: ports: - name: port-80 # 固定フォーマット:port-${external-port} port: 80 protocol: HTTP targetPort: 18082 # コンシューマーアプリケーションのコンテナポート。 selector: sae.aliyun.com/app-name: consumer # アプリケーション名。 type: LoadBalancerサービスのデプロイ:設定ファイルがあるディレクトリで、
saectl apply -f svc.yamlを実行します。結果の検証:
サービスの確認:
saectl get services -n defaultを実行します。出力内容:EXTERNAL-IPフィールドにアプリケーションのパブリック IP アドレスが表示されます。<pending>と表示されている場合、サービスは作成中です。完了までお待ちください。PORT(S)フィールドに、アプリケーション用に構成したアクセスポートが表示されます。
インターネットからのアプリケーションへのアクセス:
curl http://<public_endpoint>:<access_port>/consumer-echo/helloを実行し、<public_endpoint>および<access_port>を実際の値に置き換えます。出力には、コンシューマーアプリケーションがプロバイダーアプリケーションを呼び出してリクエストを処理していることが表示されます。
4. リソースのクリーンアップ
このチュートリアルを完了したら、追加の課金を回避するために関連リソースをクリーンアップすることを推奨します。
アプリケーションの削除:saectl delete -f deployment-provider.yaml -f deployment-consumer.yaml を実行します。
SAE が作成した CLB インスタンスは、アプリケーションを削除すると自動的にリリースされます。
次のステップ
このチュートリアルでは、サンプルイメージを使用したアプリケーションデプロイを紹介しました。ご自身のアプリケーションをデプロイする場合、SAE は以下の方法を提供しています。
イメージからのアプリケーションデプロイ(推奨):任意のアプリケーションをイメージにパッケージ化し、イメージリポジトリにプッシュしてから SAE にデプロイできます。
コードパッケージからのアプリケーションデプロイ:SAE は、Java、PHP、Python、および .NET Core の特定バージョン向けにランタイムを提供しています。コードが互換性を持つ場合は、コードパッケージからアプリケーションをデプロイできます。その前に、SAE の要件を満たすコードパッケージを作成し、SAE にデプロイする必要があります。
このチュートリアルでは、SAE の組み込み Nacos を使用してサービス登録とディスカバリーを実装し、コンシューマーアプリケーションがプロバイダーアプリケーションにアクセスしてそのメソッドを呼び出せるようにしています。SAE はアプリケーション間通信のために以下の方法も提供しています。
MSE Nacos レジストリの使用(推奨):独自のサービスレジストリを構築したくなく、かつ高いパフォーマンス、スケーラビリティ、可用性が必要な場合は、MSE Nacos レジストリの使用を推奨します。
自己管理型サービスレジストリの使用:ニーズを満たす自己管理型サービスレジストリ(Nacos や ZooKeeper など)をお持ちの場合は、アプリケーションを SAE にデプロイした後も引き続き使用できます。アプリケーションとレジストリ間のネットワーク接続を確保し、アプリケーションコード内で手動でレジストリアドレスを構成する必要があります。
Kubernetes Service に基づくアプリケーションサービスアクセスの構成:SAE クラスター内でアプリケーションに固定ドメイン名を設定し、他のアプリケーションからアクセスできるようにします。
このチュートリアルでは、アプリケーションに CLB インスタンスをバインドすることで外部アクセスを有効化する方法を紹介しています。また、NLB インスタンスをバインドするか、ゲートウェイルートを構成することで、アプリケーションへの外部アクセスを有効化できます。アプリケーションが外部リソースにアクセスする必要がある場合は、NAT ゲートウェイを構成するか、アプリケーションインスタンスに EIP をバインドする必要があります。
このチュートリアルでは、システム作成のデフォルト名前空間を使用してアプリケーションをデプロイしています。カスタム名前空間を使用して、開発、テスト、本番などの異なるアプリケーションや環境を分離することもできます。各名前空間は VPC にバインドする必要があります。アプリケーションをデプロイする際、そのインスタンスをその VPC 内の vSwitch にバインドします。異なるアベイラビリティゾーンの vSwitch を選択することで、アプリケーションを複数のアベイラビリティゾーンにデプロイできます。
アプリケーションを作成した後、インスタンス数を手動で調整したり、インスタンス仕様を変更したりできます。また、自動スケーリングポリシーを構成して、トラフィックおよびリソース使用量に基づいてインスタンス数を自動的に調整することもできます。さらに、アイドルモードを有効化することでコストを削減できます。