アプリをデプロイして他の Azure サービスと統合する

完了

これで、Azure でのアプリのホスティングに関するさまざまなオプションについて理解できました。次は、これらのサービスに Azure Database for MySQL - フレキシブル サーバー アプリをデプロイする方法を確認しましょう。 このユニットでは、最もよく使用される 2 つのサービス、Azure App Service と AKS について説明し、Azure DevOps と GitHub を使用して CI/CD タスクを自動化するためのオプションを確認し、Azure AI Search と Azure OpenAI との統合によりこれらのアプリケーションに人工知能を組み込む方法について説明します。

Azure App Service + Azure Database for MySQL - フレキシブル サーバー

アプリを Azure App Service にデプロイし、Azure Database for MySQL - フレキシブル サーバーと統合するには、次のオプションを検討します。

  • Azure Marketplace にある Web App + Database を使用して、仮想ネットワーク (VNet) 内で分離された Web アプリと MySQL フレキシブル サーバーを作成します。 フレキシブル サーバーの接続情報は、接続文字列を使用して App Service アプリの [構成設定] に自動で追加されます。
  • Azure Database for MySQL フレキシブル サーバーと App Service アプリを個別に作成してから、App Service アプリの [構成の設定] の下にある [アプリケーション設定] で、MySQL フレキシブル サーバーの接続情報を追加します。

App Service アプリと MySQL フレキシブル サーバーを設定した後、Azure App Service でサポートされているさまざまなデプロイ方法を使用して、アプリ コードを Azure にデプロイできます。 これらの方法には、ZIP パッケージ、ローカルの Git リポジトリ、Azure Container Registry、GitHub Actions、または Azure Pipelines からのデプロイが含まれます。各オプションにより、開発と運用の各ワークフローに基づいた柔軟性が提供されます。

次のユニットでは、サンプルの PHP アプリをビルドして Azure App Service にデプロイし、デプロイ プロセスに関連する各手順を実行したうえで、Azure の強力なプラットフォーム機能を使用してアプリのパフォーマンスとスケーラビリティを最適化します。

Azure Kubernetes Service (AKS) と MySQL - フレキシブル サーバー

AKS と Azure Database for MySQL - フレキシブル サーバーの統合により、コンテナ化されたアプリをデプロイするために強力なプラットフォームを作成します。このプラットフォームにより、データベース管理を効率化し、アプリのスケーラビリティと回復性を強化できます。 バックエンドの MySQL フレキシブル サーバーを使用して AKS にアプリを効果的にデプロイし、管理するには、次の情報を考慮してください。

次の図は、MySQL と AKS アプリを統合する 3 つの一般的な方法を示しています。

AKS アプリケーションの MySQL データベースを使用する 3 つのオプションを示す図。

  • Azure Database for MySQL - フレキシブル サーバーを使用すると、MySQL サーバーを管理する運用上のオーバーヘッドが軽減されるため、開発者の生産性が向上します。
  • サービスとしてのインフラストラクチャである MySQL を Azure VM で使用すると、MySQL サーバーの管理と保守を行う責任をユーザーが担う必要があります。
  • Kubernetes で MySQL を実行すると、自動化の利点が得られますが、安定性、高可用性、データ永続化、コンプライアンスを確保するための労力が開発者に求められます。 さらに、Kubernetes ポッドの一時的性質を考慮すると、フェールオーバーと再起動の可能性が高くなり、アプリケーションの可用性とビジネス継続性に影響を与えかねません。

Azure Database for MySQL - フレキシブル サーバーと統合するアプリを AKS にデプロイするには、次の 5 つの手順を使用します。

  1. Azure portal、Azure CLI、ARM/Bicep テンプレート、またはその他の Azure ツールを使用し、Azure Database for MySQL - フレキシブル サーバーを作成します。 適切なコンピューティング、ストレージ、バックアップ、高可用性オプションを選択することに加えて、MySQL フレキシブル サーバーの作成時に適切なネットワーク オプションを決定することが重要です。

    重要: シナリオに関わるのが小規模なプロジェクトやデモのみである場合を除き、プライベート アクセスを持つサーバーの作成を強くお勧めします。これは、VNet 統合を介したサーバーへのアクセスをセキュリティで保護するのに役立ちます。

  2. アプリ コードに次の変更を加えてアプリを準備します。

    • アプリで MySQL フレキシブル サーバーが使われるようにするには、対応する構成ファイル、またはアプリ プロパティ ファイルを変更して、ホスト サーバーの URL、データベース名、ユーザー名、パスワードを示すコードを追加します。これは、環境変数から読み取られます (Kubernetes マニフェスト ファイルで定義され、そのファイルから渡されます)。
    • Dockerfile を作成して、アプリ Docker イメージをビルドします。
  3. Azure コンテナー レジストリを作成し、そのレジストリに Docker イメージとしてアプリをプッシュします。

  4. AKS クラスターを作成し、Azure コンテナー レジストリのアカウントをそのクラスターにアタッチします。

  5. アプリをクラスターにデプロイして、デプロイをテストします。 アプリを AKS クラスターにデプロイするには、まず、クラスターの目的の状態 (実行するコンテナー イメージなど) を定義する Kubernetes マニフェスト ファイルを作成する必要があります。

Kubernetes マニフェスト YAML ファイルで定義する主な項目は次のとおりです。

- The container image name: replace it with your own in the format [registryname].azurecr.io/[image-name]:[tag]
- Environment variables for MySQL flexible server host URL, database name, admin username and password.
- A service resource to access the app in the cluster. For example, a service of the type "LoadBalancer" will create an external load balancer providing an externally accessible IP address to the app.

After the YAML file is ready, deploy it with either `kubectl apply` or within the Kubernetes resource view in the Azure portal.

Azure DevOps、GitHub、Azure Service Operator を使用してデータベースの CI/CD タスクを自動化する

アプリを手動でデプロイすることは非効率でエラーが発生しやすく、頻繁なテストと調整が必要になる可能性があります。 このプロセスを効率化するには、継続的インテグレーション (CI) と継続的デリバリー/デプロイ (CD) による自動化を強くお勧めします。 CI/CD を使用すると、開発チームは小規模な更新と機能を定期的かつ確実にリリースでき、大規模で頻度の少ない更新に比べて、リスクと労力を大幅に削減できます。

アプリと Azure Database for MySQL - フレキシブル サーバーのデプロイを自動化するには、次の CI/CD ツールの使用をご検討ください。

Azure Pipelines

Azure DevOps の一部である Azure Pipelines には堅牢な CI/CD 機能があり、Azure PaaS サービス、VM、コンテナー レジストリなどのさまざまなターゲットへのコードの自動デプロイが容易になります。 このプラットフォームでは、他のクラウド プラットフォームやオンプレミス システムなど、さまざまな環境にわたるデプロイもサポートされています。

特にデータベース デプロイでは、Azure CLI コマンドを実行するタスクをパイプラインに組み込むことで、Azure Pipelines を使用して Azure Database for MySQL - フレキシブル サーバーの更新を自動化できます。 これらのタスクで SQL ファイルから直接更新を適用することや、インライン SQL スクリプトを実行することができ、ビルドが成功するたびにデータベース スキーマとデータが確実に最新状態になります。

GitHub のアクション

GitHub Actions を使用すると、プッシュ、pull request、issue の作成などのリポジトリ イベントに応じてワークフローを自動化できます。 この統合により、GitHub エコシステム内のシームレスな CI/CD パイプラインが実現可能になり、新しい pull request のビルドとテストのワークフローからリリース作成時のデプロイ ワークフローまで、すべてを処理できるようになります。

データベースの場合、GitHub Actions を Azure Database for MySQL - フレキシブル サーバーに直接接続するように構成して、変更がマージまたはプッシュされるたびにデータベースをデプロイまたは更新できます。 これにより、アプリの更新とデータベース スキーマの変更の間で継続的な同期が確実に行われます。

Azure Service Operator

Azure Service Operator によって Kubernetes 環境内に Azure リソース管理が統合され、Kubernetes ツールを使用して Azure Database for MySQL - フレキシブル サーバーなどの Azure リソースを直接管理できるようになります。 このオペレーターによって、Kubernetes デプロイ ワークフローにインフラストラクチャの更新を組み込むことが可能になるため、アプリとそれが依存する Azure サービスの両方を管理するための統一されたアプローチが実現します。

その他のツール

これらの特定のツール以外にも、他のテクノロジを使用して CI/CD ワークフローを強化できます。

  • App Service デプロイ スロット: 新しいリリースを運用開始前にステージングする場合に便利で、最終的な検証とダウンタイムを最小限に抑えた運用環境へのホット スワップを可能にします。
  • App Service デプロイ センター: Azure App Services を使用して CI/CD のセットアップを効率化し、ソース管理およびビルド サービスと統合します。
  • Jenkins: Jenkins は、プロジェクトのビルド、デプロイ、自動化をサポートするオープンソースのオートメーション サーバーであり、カスタム スクリプトと広範な統合を必要とする複雑な環境で特に効果的です。

これらのツールを利用することで、アプリとその基盤となるデータベース インフラストラクチャの両方が常に最新のコード変更に一致するようになり、ダウンタイムを最小限に抑えながら新機能や修正の提供を加速できます。

Azure AI Search と Azure OpenAI との統合によりインテリジェンスを追加する

MySQL アプリケーションのインテリジェンスを強化する最も簡単な方法は、Azure AI Search サービスと Azure OpenAI サービスによる検索拡張生成 (RAG) アーキテクチャを使用してソリューションを構築することで、セマンティック検索と生成 AI の豊富な機能を含めることです。 RAG は、Azure Database for MySQL などのデータ ソースに保存されているデータを対象とする Azure AI Search などの情報取得システムを追加することで、ChatGPT のような LLM の自然言語の理解と生成機能を強化するアーキテクチャです。

MySQL AI ソリューションの RAG パターンの例は次のようになります。

  1. Azure AI 検索では、定期的に実行されるインデクサーを使用して、Azure Database for MySQL データベースなどのバックエンド データ ソースからコンテンツをプルします。
  2. このデータは、Azure OpenAI のテキスト埋め込みモデルに対するビルトインの呼び出しによってベクトル化されます。
  3. Azure AI Search では、このベクター化されたデータがベクトル検索インデックスに保持されます。
  4. ユーザーがクライアントのチャット アプリケーションを使用すると、クエリは Azure OpenAI チャット補完サービスに送信されます。
  5. Azure AI Search は、ベクトル検索またはハイブリッド検索 (ベクトル + セマンティック検索) を使用して最も関連性の高い応答を検索するためのデータ ソースとして使用されるようになりました。
  6. 次に、Azure OpenAI チャット補完サービスは、これらの検索結果を使用して、ユーザー クエリに対するカスタム応答を生成します。

Azure Database for MySQL でホストされているデータを使用してコンテンツ管理システム (CMS)、eコマース アプリケーション、ゲーム サイトなどのアプリケーションを実行している場合、Azure OpenAI で利用可能な LLM と Azure AI Search によって提供されるベクトル ストレージとインデックス作成を使用して生成 AI 検索とチャット アプリケーションを構築することで、ユーザー エクスペリエンスを向上させることができます。