Azure SQL データベース用の Kubernetes アプリケーションを開発する

適用対象: Azure SQL データベース

このチュートリアルでは、Python、Docker コンテナー、Kubernetes、Azure SQL Database を使用して最新のアプリケーションを開発する方法について説明します。

最新のアプリケーション開発には、いくつかの課題があります。 フロントエンドの「スタック」を選択し、複数の競合する標準のデータ ストレージと処理を行い、最高レベルのセキュリティとパフォーマンスを確保することにより、開発者はアプリケーションのスケーリングとパフォーマンスを確実に行い、複数のプラットフォームでサポートされるようにする必要があります。 その最後の要件として、Docker などのコンテナー テクノロジにアプリケーションをバンドルし、複数のコンテナーを Kubernetes プラットフォームにデプロイすることは、アプリケーション開発において不可欠になりました。

この例では、Python、Docker コンテナー、Kubernetes (すべて Microsoft Azure プラットフォーム上で実行) を使用して検討します。 Kubernetes を使用すると、アプリケーションのシームレスで一貫したデプロイのためにローカル環境や他のクラウドを使用する柔軟性も得られ、さらに高い回復性を実現するマルチクラウドデプロイが可能になります。 また、Microsoft Azure SQL Database を使用して、データストレージと処理のためのサービスベースのスケーラブルで回復性の高い安全な環境を実現します。 実際、多くの場合、他のアプリケーションは既に Microsoft Azure SQL Database を使用しており、このサンプル アプリケーションを使用して、そのデータをさらに使用して強化することができます。

この例は範囲が非常に包括的ですが、最も単純なアプリケーション、データベース、デプロイを使用してプロセスを説明します。 返されるデータに最新のテクノロジを使用する場合でも、このサンプルを信頼性が非常に高くなるように調整できます。 これは、他のアプリケーションのパターンを作成するのに便利な学習ツールです。

実用的な例で Python、Docker コンテナー、Kubernetes、AdventureWorksLT サンプル データベースを使用する

AdventureWorks (架空の) 企業は、販売とマーケティング、製品、顧客、製造に関するデータを格納するデータベースを使用します。 また、製品名、カテゴリ、価格、簡単な説明など、製品に関する情報を結合するビューとストアド プロシージャも含まれています。

AdventureWorks 開発チームは、AdventureWorksLT データベース内のビューからデータを返し、REST API として使用できるようにする概念実証 (PoC) を作成したいと考えています。 この PoC を使用して、開発チームは、よりスケーラブルでマルチクラウド対応のアプリケーションを Sales チーム向けに作成します。 デプロイのすべての側面に対して Microsoft Azure プラットフォームを選択しました。 PoC では、次の要素を使用しています。

  • ヘッドレス ウェブ デプロイに Flask パッケージを使用する Python アプリケーション。
  • コードと環境を分離するための Docker コンテナー。プライベート レジストリに格納されているため、会社全体が今後のプロジェクトでアプリケーション コンテナーを再利用できるため、時間とコストを節約できます。
  • デプロイとスケーリングを容易にし、プラットフォームのロックインを回避するための Kubernetes。
  • Microsoft Azure SQL Database。リレーショナル データストレージと最高レベルのセキュリティ レベルでの処理に加えて、サイズ、パフォーマンス、スケール、自動管理、バックアップを選択できます。

この記事では、概念実証プロジェクト全体を作成するプロセスについて説明します。 アプリケーションを作成するための一般的な手順は次のとおりです。

  1. 前提条件を設定する
  2. アプリケーションを作成する
  3. Docker コンテナーを作成してアプリケーションをデプロイし、テストする
  4. Azure Container Service (ACS) レジストリを作成し、ACS レジストリにコンテナーを読み込む
  5. Azure Kubernetes Service (AKS) 環境を作成する
  6. ACS レジストリから AKS にアプリケーション コンテナーをデプロイする
  7. アプリケーションをテストする
  8. クリーンアップ

前提条件

この記事では、いくつかの値を置き換える必要があります。 各ステップでこれらの値を常に置き換えてください。 概念実証プロジェクトを進める際に、テキスト エディターを開き、これらの値をドロップして正しい値を設定できます。

  • ReplaceWith_AzureSubscriptionName: Azure のサブスクリプションの名前を自分の Azure サブスクリプションの名前に置き換えます。
  • ReplaceWith_PoCResourceGroupName: この値を、作成したいリソース グループの名前に置き換えます。
  • ReplaceWith_AzureSQLDBServerName: この値を、Azure portal を使用して作成する Azure SQL Database 論理サーバーの名前に置き換えます。
  • ReplaceWith_AzureSQLDBSQLServerLoginName: この値を、Azure portal で作成した SQL Server ユーザー名の値に置き換えます。
  • ReplaceWith_AzureSQLDBSQLServerLoginPassword: この値を、Azure portal で作成した SQL Server ユーザー パスワードの値に置き換えます。
  • ReplaceWith_AzureSQLDBDatabaseName: この値を、Azure portal を使用して作成する Azure SQL Database の名前に置き換えます。
  • ReplaceWith_AzureContainerRegistryName: この値を、作成したい Azure Container Registry の名前に置き換えます。
  • ReplaceWith_AzureKubernetesServiceName: この値を、作成したい Azure Kubernetes Service の名前に置き換えます。

AdventureWorks の開発者は、開発に Windows、Linux、Apple のシステムを組み合わせて使用するため、Visual Studio Code を環境として使用し、ソース管理に git を使用しています。どちらもクロスプラットフォームで実行されます。

PoC の場合、チームには次の前提条件が必要です。

  1. Python、pip、パッケージ - 開発チームは、この ウェブ ベースのアプリケーションの標準として Python プログラミング言語を選択します。 現在、バージョン 3.9 を使用していますが、PoC で必要なパッケージをサポートする任意のバージョンを使用できます。

  2. チームは、データベース アクセスに pyodbc パッケージを使用しています。

  3. チームは、構成変数を管理および設定するために ConfigParser パッケージを使用しています。

  4. チームは、アプリケーションのウェブ インターフェイスに Flask パッケージ を使用しています。

  5. 次に、チームは az 構文で簡単に識別できる Azure CLI ツールをインストールしました。 このクロスプラットフォーム ツールを使用すると、PoC に対するコマンドラインおよびスクリプト化されたアプローチが可能になり、変更や改善を行う際に手順を繰り返すことができます。

  6. Azure CLI の設定で、チームは自分の Azure サブスクリプションにサインインし、PoC に使用したサブスクリプション名を設定します。 その後、Azure SQL Database サーバーとデータベースにサブスクリプションからアクセスできることを確認しました。

    az login
    az account set --name "ReplaceWith_AzureSubscriptionName"
    az sql server list
    az sql db list ReplaceWith_AzureSQLDBDatabaseName 
    
  7. Microsoft Azure リソース グループは、Azure ソリューションの関連リソースを保持する論理コンテナーです。 通常は、同じライフサイクルを共有するリソースを同じリソース グループに追加して、グループとして簡単にデプロイ、更新、および削除できるようにします。 リソース グループにはリソースに関するメタデータが格納されるため、リソース グループの場所を指定します。

    リソース グループは、Azure portal または Azure CLI を使用して作成・管理できます。 また、アプリケーションの関連リソースをグループ化し、運用と非運用のグループに分割したり、必要な他の組織構造に分割したりすることもできます。

    Azure リソース グループの検索とフィルター方法を示す Azure portal のスクリーンショット。

    次のコード スニペットでは、リソース グループの作成に使用される az コマンドを確認できます。 このサンプルでは、Azure の eastus リージョンを使用します。

    az group create --name ReplaceWith_PoCResourceGroupName --location eastus
    
  8. 開発チームは、SQL 認証ログインを使用して、 AdventureWorksLT サンプル データベースがインストールされた Azure SQL Database を作成します。

    AdventureWorks は Microsoft SQL Server リレーショナル データベース管理システム プラットフォームで標準化されており、開発チームはローカルにインストールするのではなく、データベースの管理サービスを使用したいと考えています。 Azure SQL Database を使用すると、オンプレミス、コンテナー、Linux または Windows、モノのインターネット (IoT) 環境など、SQL Server エンジンを実行する場所を問わず、この管理サービスに完全にコード互換性を持たすことができます。

    1. 作成時に、Azure 管理ポータルを使用してアプリケーションのファイアウォールをローカル開発マシンに設定し、ここに表示されるデフォルトを変更して [すべての Azure サービスを許可する] を有効にし、接続認証情報も取得しました

      [SQL Database の作成] ページを示す Azure portal のスクリーンショット。[ネットワーク] タブの [接続方法] で、[パブリック エンドポイント] オプションが選択されています。[現在のクライアント IP アドレスの追加] オプションは [はい] に設定されています。

      この方法では、別のリージョンまたは別のサブスクリプションでもデータベースにアクセスできます。

    2. チームはテスト用に SQL 認証ログインを設定しましたが、セキュリティ レビューでこの決定を再検討します。

    3. チームは、同じ PoC リソース グループを使用して PoC のサンプル AdventureWorksLT データベースを使用しました。 このチュートリアルの最後に、この新しい PoC リソース グループ内のすべてのリソースをクリーンアップしますのでご安心ください。

    4. Azure portal を使用して、Azure SQL Database をデプロイできます。 Azure SQL Database を作成するときに、[追加設定] タブの [既存のデータを使用] オプションで [サンプル] を選択します。

      [SQL Database の作成] ページを示す Azure portal のスクリーンショット。[追加設定] タブの [既存のデータを使用] オプションで [サンプル] を選択します。

    5. 最後に、新しい Azure SQL Database の [タグ] タブで、開発チームはこの Azure リソースのタグ メタデータ (OwnerServiceClassWorkloadName など) を提供しました。

アプリケーションを作成する

次に、開発チームは、Azure SQL Database への接続を開き、製品の一覧を返す単純な Python アプリケーションを作成しました。 このコードは、より複雑な関数に置き換えられ、アプリケーション ソリューションに対する堅牢なマニフェスト駆動型アプローチのために、運用環境の Kubernetes ポッドにデプロイされた複数のアプリケーションも含まれる場合があります。

  1. チームは、サーバー接続やその他の情報の変数を保持するために .env という単純なテキスト ファイルを作成しました。 python-dotenv ライブラリを使用すると、Python コードから変数を分離できます。 これは、シークレットやその他の情報をコード自体から除外する一般的なアプローチです。

    SQL_SERVER_ENDPOINT = ReplaceWith_AzureSQLDBServerName
    SQL_SERVER_USERNAME = ReplaceWith_AzureSQLDBSQLServerLoginName
    SQL_SERVER_PASSWORD = ReplaceWith_AzureSQLDBSQLServerLoginPassword
    SQL_SERVER_DATABASE = ReplaceWith_AzureSQLDBDatabaseName
    

    注意事項

    わかりやすくするために、このアプリケーションでは Python から読み取られた構成ファイルを使用しています。 コードはコンテナーと共にデプロイされるため、接続情報はコンテンツから派生できる可能性があります。 セキュリティ、接続、シークレットを操作するさまざまな方法を慎重に検討し、アプリケーションに使用する最適なレベルとメカニズムを決定する必要があります。 常に最高レベルのセキュリティ、さらには複数のレベルを選択して、アプリケーションのセキュリティを確保します。 接続文字列など、シークレット情報を操作する複数のオプションがあり、次の一覧にそれらのオプションをいくつか示します。

    詳細については、Azure SQL Database セキュリティ を参照してください。

  2. チームは次に PoC アプリケーションを記述し、それを app.py と命名しました。

    次のスクリプトでは、これらの手順を実行します。

    1. 構成とベース ウェブ インターフェイスのライブラリを設定します。
    2. .env ファイルから変数を読み込みます。
    3. Flask-RESTful アプリケーションを作成します。
    4. config.ini ファイル値を使用して Azure SQL Database 接続情報にアクセスします。
    5. config.ini ファイル値を使用して Azure SQL Database への接続を作成します。
    6. pyodbc を使用して Azure SQL データベースに接続します。
    7. データベースに対して実行する SQL クエリを作成します。
    8. API からデータを返すために使用するクラスを作成します。
    9. API エンドポイントを Products クラスに設定します。
    10. 最後に、既定の Flask ポート 5000 でアプリを起動します。
    # Set up the libraries for the configuration and base web interfaces
    from dotenv import load_dotenv
    from flask import Flask
    from flask_restful import Resource, Api
    import pyodbc
    
    # Load the variables from the .env file
    load_dotenv()
    
    # Create the Flask-RESTful Application
    app = Flask(__name__)
    api = Api(app)
    
    # Get to Azure SQL Database connection information using the config.ini file values
    server_name = os.getenv('SQL_SERVER_ENDPOINT')
    database_name = os.getenv('SQL_SERVER_DATABASE')
    user_name = os.getenv('SQL_SERVER_USERNAME')
    password = os.getenv('SQL_SERVER_PASSWORD')
    
    # Create connection to Azure SQL Database using the config.ini file values
    ServerName = config.get('Connection', 'SQL_SERVER_ENDPOINT')
    DatabaseName = config.get('Connection', 'SQL_SERVER_DATABASE')
    UserName = config.get('Connection', 'SQL_SERVER_USERNAME')
    PasswordValue = config.get('Connection', 'SQL_SERVER_PASSWORD')
    
    # Connect to Azure SQL Database using the pyodbc package
    # Note: You may need to install the ODBC driver if it is not already there. You can find that at:
    # https://video2.skills-academy.com/sql/connect/odbc/download-odbc-driver-for-sql-server
    connection = pyodbc.connect(f'Driver=ODBC Driver 17 for SQL Server;Server={ServerName};Database={DatabaseName};uid={UserName};pwd={PasswordValue}')
    
    # Create the SQL query to run against the database
    def query_db():
        cursor = connection.cursor()
        cursor.execute("SELECT TOP (10) [ProductID], [Name], [Description] FROM [SalesLT].[vProductAndDescription] WHERE Culture = 'EN' FOR JSON AUTO;")
        result = cursor.fetchone()
        cursor.close()
        return result
    
    # Create the class that will be used to return the data from the API
    class Products(Resource):
        def get(self):
            result = query_db()
            json_result = {} if (result == None) else json.loads(result[0])     
            return json_result, 200
    
    # Set the API endpoint to the Products class
    api.add_resource(Products, '/products')
    
    # Start App on default Flask port 5000
    if __name__ == "__main__":
        app.run(debug=True)
    
  3. このアプリケーションがローカルで実行されることをチェックし、ページを http://localhost:5000/products へ移動します。

    Flask 応答ページの Web ブラウザーのスクリーンショット。

    重要

    運用アプリケーションをビルドするときは、管理者アカウントを使用してデータベースにアクセスしないでください。 詳細については、アプリケーションのアカウントを設定する方法を参照してください。 この記事のコードは単純であるため、Azure で Python と Kubernetes を使用してアプリケーションをすぐに使い始めることができます。

    より現実的には、読み取り専用アクセス許可を持つ包含データベース ユーザー、または読み取り専用アクセス許可を持つユーザー割り当てマネージド ID に接続されたログインまたは包含データベース ユーザーを使用できます。

    詳細については、Python と Azure SQL Database を使用して API を作成する方法の完全な例を確認してください。

アプリケーションを Docker コンテナーにデプロイする

コンテナーは、分離とカプセル化を提供するコンピューティング システム内の予約済みの保護された領域です。 コンテナーを作成するには、マニフェスト ファイルを使用します。マニフェスト ファイルは、格納するバイナリとコードを記述するテキスト ファイルにすぎません。 コンテナー ランタイム (Docker など) を使用して、実行して参照するすべてのファイルを含むバイナリ イメージを作成できます。 そこから、バイナリ イメージを「実行」できます。これはコンテナーと呼ばれ、完全なコンピューティング システムであるかのように参照できます。 これは、完全な仮想マシンを使用するよりも、アプリケーションのランタイムと環境を抽象化する、より小規模で簡単な方法です。 詳細については、「コンテナーと Docker」を参照してください。

チームは、チームが使用する要素を階層化する DockerFile (マニフェスト) を使い始めました。 pyodbc ライブラリが既にインストールされている基本 Python イメージから始めて、前の手順でプログラムと構成ファイルを含めるために必要なすべてのコマンドを実行します。

次の Dockerfile には、次の手順があります。

  1. Python と pyodbc が既にインストールされているコンテナー バイナリから始めます。
  2. アプリケーション用の作業ディレクトリを作成します。
  3. 現在のディレクトリから WORKDIR へすべてのコードをコピーします。
  4. 必要なライブラリをインストールします。
  5. コンテナーが起動したら、アプリケーションを実行し、すべての TCP/IP ポートを開きます。
# syntax=docker/dockerfile:1

# Start with a Container binary that already has Python and pyodbc installed
FROM laudio/pyodbc

# Create a Working directory for the application
WORKDIR /flask2sql

# Copy all of the code from the current directory into the WORKDIR
COPY . .

# Install the libraries that are required
RUN pip install -r ./requirements.txt

# Once the container starts, run the application, and open all TCP/IP ports 
CMD ["python3", "-m" , "flask", "run", "--host=0.0.0.0"]

そのファイルを配置すると、チームはコーディング ディレクトリのコマンド プロンプトにドロップし、次のコードを実行してマニフェストからバイナリ イメージを作成し、次にコンテナーを起動する別のコマンドを実行しました。

docker build -t flask2sql .
docker run -d -p 5000:5000 -t flask2sql

もう一度、チームは http://localhost:5000/products リンクをテストして、コンテナーがデータベースにアクセスできることを確認します。次の応答が表示されます。

コンテナーからの Flask 応答ページを示す Web ブラウザーのスクリーンショット。

Docker レジストリにイメージをデプロイする

コンテナーは現在動作していますが、開発者のコンピューターでのみ使用できます。 開発チームは、このアプリケーション イメージを会社の残りの部分で使用できるようにしてから、運用環境のデプロイのために Kubernetes に移行したいと考えています。

コンテナー イメージのストレージ領域はリポジトリと呼ばれ、コンテナー イメージにはパブリック リポジトリとプライベート リポジトリの両方を使用できます。 実際、AdvenureWorks は Dockerfile で Python 環境用のパブリック イメージを使用しました。

チームは、イメージへのアクセスを制御したいと考えています。ウェブ上に配置するのではなく、自分でホストすることを決定しますが、Microsoft Azure ではセキュリティとアクセスを完全に制御できます。 Microsoft Azure Container Registry の詳細については、こちらをご覧ください。

開発チームは、コマンド ラインに戻り、 az CLI を使用してコンテナー レジストリ サービスを追加し、管理アカウントを有効にし、テスト フェーズ中に匿名の「pulls」に設定し、ログイン コンテキストをレジストリに設定します。

az acr create --resource-group ReplaceWith_PoCResourceGroupName --name ReplaceWith_AzureContainerRegistryName --sku Standard
az acr update -n ReplaceWith_AzureContainerRegistryName --admin-enabled true
az acr update --name ReplaceWith_AzureContainerRegistryName --anonymous-pull-enabled
az acr login --name ReplaceWith_AzureContainerRegistryName

このコンテキストは、後続の手順で使用されます。

ローカル Docker イメージにタグを付けてアップロード用に準備する

次の手順では、ローカル アプリケーションのコンテナー イメージを Azure Container Registry (ACR) サービスに送信して、クラウドで使用できるようにします。

  1. 次のサンプル スクリプトでは、チームは Docker コマンドを使用してマシン上のイメージを一覧表示します。
  2. az CLI ユーティリティを使用して、ACR サービス内のイメージを一覧表示します。
  3. Docker コマンドを使用して、前の手順で作成した ACR の宛先名でイメージに「タグ」を付け、適切な DevOps のバージョン番号を設定します。
  4. 最後に、タグが正しく適用されていることを確認するために、ローカルイメージ情報をもう一度一覧表示します。
docker images
az acr list --resource-group ReplaceWith_PoCResourceGroupName --query "[].{acrLoginServer:loginServer}" --output table
docker tag flask2sql ReplaceWith_AzureContainerRegistryName.azurecr.io/azure-flask2sql:v1
docker images

コードの記述とテスト、Dockerfile、イメージ、コンテナーの実行とテスト、ACR サービスの設定、すべてのタグの適用により、チームはイメージを ACR サービスにアップロードできます。

Docker の「プッシュ」コマンドを使用してファイルを送信し、次に az CLI ユーティリティを使用してイメージが読み込まれたことを確認します。

docker push ReplaceWith_AzureContainerRegistryName.azurecr.io/azure-flask2sql:v1
az acr repository list --name ReplaceWith_AzureContainerRegistryName --output table

Kubernetes へのデプロイ

チームは、単にコンテナーを実行し、アプリケーションをオンプレミスおよびクラウド環境にデプロイできます。 ただし、スケーリングと可用性のためにアプリケーションの複数のコピーを追加し、さまざまなタスクを実行する他のコンテナーを追加し、監視とインストルメンテーションをソリューション全体に追加したいと考えています。

コンテナーをまとめて完全なソリューションにグループ化するために、チームは Kubernetes を使用することにしました。 Kubernetes は、オンプレミスおよびすべての主要なクラウド プラットフォームで実行されます。 Microsoft Azure には、Azure Kubernetes Service (AKS) と呼ばれる Kubernetes 用の完全なマネージド環境があります。 AKS の詳細については、「Azure トレーニング パスにおける Kubernetes の概要」を参照してください。

az CLI ユーティリティを使用して、チームは前に作成したのと同じリソース グループに AKS を追加します。 1 つの az コマンドを使用して、開発チームは次の手順を実行します。

  • テスト フェーズで回復性のために 2 つの「ノード」またはコンピューティング環境を追加する
  • 環境にアクセスするための SSH キーを自動的に生成する
  • 前の手順で作成した ACR サービスをアタッチして、AKS クラスターがデプロイに使用するイメージを見つけられるようにする
az aks create --resource-group ReplaceWith_PoCResourceGroupName --name ReplaceWith_AzureKubernetesServiceName --node-count 2 --generate-ssh-keys --attach-acr ReplaceWith_AzureContainerRegistryName

Kubernetes では、コマンド ライン ツールを使用して、 kubectl というクラスターにアクセスして制御します。 チームは az CLI ユーティリティを使用して kubectl ツールをダウンロードし、インストールします。

az aks install-cli

現時点では AKS への接続があるため、 kubectl ユーティリティの実行時に使用する接続用の SSH キーを送信するように要求できます。

az aks get-credentials --resource-group ReplaceWith_PoCResourceGroupName --name ReplaceWith_AzureKubernetesServiceName

これらのキーは、ユーザーディレクトリの .config というファイルに格納されます。 そのセキュリティ コンテキストを設定すると、チームはクラスター内のノードを表示するために kubectl get nodes を使用します。

kubectl get nodes

チームは az CLI ツールを使用して、ACR サービス内のイメージを一覧表示します。

az acr list --resource-group ReplaceWith_PoCResourceGroupName --query "[].{acrLoginServer:loginServer}" --output table

これで、Kubernetes がデプロイを制御するために使用するマニフェストをビルドできるようになりました。 これは、yaml 形式で格納されたテキスト ファイルです。 flask2sql.yaml ファイル内の注釈付きテキストを次に示します。

apiVersion: apps/v1
# The type of commands that will be sent, along with the name of the deployment
kind: Deployment
metadata:
  name: flask2sql
# This section sets the general specifications for the application
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask2sql
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 5 
  template:
    metadata:
      labels:
        app: flask2sql
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
# This section sets the location of the Image(s) in the deployment, and where to find them 
      containers:
      - name: flask2sql
        image:  bwoodyflask2sqlacr.azurecr.io/azure-flask2sql:v1
# Recall that the Flask application uses (by default) TCIP/IP port 5000 for access. This line tells Kubernetes that this "pod" uses that address.
        ports:
        - containerPort: 5000
---
apiVersion: v1
# This is the front-end of the application access, called a "Load Balancer"
kind: Service
metadata:
  name: flask2sql
spec:
  type: LoadBalancer
# this final step then sets the outside exposed port of the service to TCP/IP port 80, but maps it internally to the app's port of 5000
  ports:
  - protocol: TCP
    port: 80
    targetPort: 5000
  selector:
    app: flask2sql

flask2sql.yaml ファイルを定義すると、チームは実行中の AKS クラスターにアプリケーションをデプロイできます。 これで完了です。 kubectl apply コマンドは、ご存知の通り、クラスターに対するセキュリティ コンテキストをまだ持っています。 その後、ビルド中のクラスターを監視する kubectl get service コマンドが送信されます。

kubectl apply -f flask2sql.yaml
kubectl get service flask2sql --watch

しばらくすると、「watch」コマンドによって外部 IP アドレスが返されます。 その時点で、チームは Ctrl キーを押しながら C キーを押してwatch コマンドを中断し、ロード バランサーの外部 IP アドレスを記録します。

アプリケーションをテストする

チームは、前の手順で取得した IP アドレス (エンドポイント) を使用して、ローカル アプリケーションと Docker コンテナーと同じ出力を確保するようにチェックします。

最終的にコンテナーをテストする際の Flask 応答ページの Web ブラウザーのスクリーンショット。出力は以前と同じです。

クリーンアップ

アプリケーションを作成、編集、文書化、テストすることで、チームはアプリケーションを「破棄」できるようになりました。 Microsoft Azure の 1 つのリソース グループにすべてを保持することで、 az CLI ユーティリティを使用して PoC リソース グループを削除するのは簡単です。

az group delete -n ReplaceWith_PoCResourceGroupName -y

注意

別のリソース グループに Azure SQL Database を作成し、不要になった場合は、Azure portal を使用して削除できます。

PoC プロジェクトを率いるチーム メンバーは、ワークステーションとして Microsoft Windows を使用し、Kubernetes からシークレット ファイルを保持し、アクティブな場所としてシステムから削除したいと考えています。 ファイルを config.old テキスト ファイルにコピーし、削除するだけです。

copy c:\users\ReplaceWith_YourUserName\.kube\config c:\users\ReplaceWith_YourUserName\.kube\config.old
del c:\users\ReplaceWith_YourUserName\.kube\config