演習 - .NET クライアント ライブラリを使用し、Batch アカウントにアクセスする

完了

重要

この演習を行うには、独自の Azure サブスクリプションが必要です。また、料金が発生することがあります。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Azure Batch クライアント API を使うと、Batch アカウントのすべてのリソースの作成、実行、監視をプログラムで制御できます。

この演習では、Microsoft.Azure.Batch NuGet パッケージを使用して新しいコンソール アプリケーションを作成し、それを前に作成した Azure Batch アカウントに接続します。 その設定がうまくいっていることをテストするために、Batch アカウントにクエリを実行して、ffmpeg が正しくアカウントに追加されていることを確認します。

ローカル コンソール アプリケーションを作成する

Cloud Shell を使って、このモジュールの残りの演習を完了します。

  1. Azure portal の上部メニューにある Cloud Shell アイコンを選択して、ポータルで Cloud Shell を起動します。

  2. Cloud Shell ウィンドウの上部にあるドロップダウンを使って、[Bash] を選択します。

  3. Cloud Shell で次のコマンドを実行し、アプリ用に新しいディレクトリを作成します。

    mkdir cutifypets
    cd cutifypets
    
  4. dotnet new コマンドで新しい .NET Core コンソール アプリケーションを作成し、実行します。

    dotnet new console
    dotnet run
    

    コンソール アプリが正常に作成されると、コンソールに次のように出力されます。

    Hello World!
    

アプリケーションの接続詳細を設定する

  1. Cloud Shell で、次の dotnet add package コマンドで Azure Batch NuGet パッケージを追加します。

    dotnet add package Microsoft.Azure.Batch
    
  2. 後続のコマンドで使用できるように、Cloud Shell で次のコマンドを実行し、リソース グループを環境変数に保存します。 [YOUR RESOURCE GROUP] は、Batch アカウントの作成時に使ったリソース グループの名前に置き換えてください。

    export RESOURCE_GROUP=[YOUR RESOURCE GROUP]
    
  3. 次のコマンドを使って、コンソール アプリからアクセスできる環境変数にバッチ アカウントの資格情報を保存します。

    export BATCH_URL='https://'$(az batch account list --query "[?contains(name,'cuti')].accountEndpoint" --output tsv)
    export BATCH_NAME=$(az batch account list --query "[?contains(name,'cuti')].name" --output tsv)
    export BATCH_KEY=$(az batch account keys list --name $BATCH_NAME --query primary -o tsv --resource-group $RESOURCE_GROUP)
    
  4. 次のコマンドを使って、保存した値が正しいことをチェックします。

    echo 'URL='$BATCH_URL 'NAME='$BATCH_NAME 'KEY='$BATCH_KEY
    

    これらの値が設定されていることを確認してください。 いずれかの時点で Cloud Shell を再起動する必要がある場合、これらの変数を再設定する必要があります。

  5. 次のコードを使って、エディターで Program.cs ファイルを編集します。

    code Program.cs
    
  6. 既存のすべてのコードを次のコードに置き換えます。

    namespace cutifypets
    {
        using System;
        using Microsoft.Azure.Batch;
        using Microsoft.Azure.Batch.Auth;
        using Microsoft.Azure.Batch.Common;
    
        class Program
        {
            private const string envVarBatchURI = "BATCH_URL";
            private const string envVarBatchName = "BATCH_NAME";
            private const string envVarKey = "BATCH_KEY";
    
            private static string batchAccountName;
            private static string batchAccountUrl;
            private static string batchAccountKey;
    
            static void Main(string[] args)
            {
                // Read the environment variables to allow the app to connect to the Azure Batch account
                batchAccountUrl = Environment.GetEnvironmentVariable(envVarBatchURI);
                batchAccountName = Environment.GetEnvironmentVariable(envVarBatchName);
                batchAccountKey = Environment.GetEnvironmentVariable(envVarKey);
    
                // Show the user the batch the app is attaching to
                Console.WriteLine("URL: {0}, Name: {1}, Key: {2}", batchAccountUrl, batchAccountName, batchAccountKey);
    
                // The batch client requires a BatchSharedKeyCredentials object to open a connection
                var sharedKeyCredentials = new BatchSharedKeyCredentials(batchAccountUrl, batchAccountName, batchAccountKey);
                var batchClient = BatchClient.Open(sharedKeyCredentials);
    
                // The batchClient object can reference all the application packages, and get a summary of their details
                foreach (var app in batchClient.ApplicationOperations.ListApplicationSummaries() ) {
                    // For each application package, print to the console their name and version number
                    Console.WriteLine("Installed app: {0}({1})", app.Id, app.Versions[0]);
                }
            }
        }
    }
    

    上記のコードとコメントに目を通してください。 コンソール アプリは Microsoft.Azure.Batch クライアント ライブラリをインポートして、Azure Batch 機能を追加しています。 前の手順で格納した環境変数を使用することで、Azure portal で作成した Batch アカウントへの接続がアプリで開かれます。 その後、バッチ クライアントでは、バッチ内のサービスのプロパティをクエリすることができます。 サンプル コードでは、アプリケーション パッケージが反復処理され、アップロードした ffmpeg アプリの詳細が表示されます。

  7. コード エディターで、右クリックして [保存] を選び、さらに右クリックして [終了] を選びます。

  8. Cloud Shell で、次のコマンドを使用してアプリをコンパイルし、実行します。

    dotnet run
    
  9. アプリを実行すると、アプリケーション パッケージがコンソールに書き込まれます。 次のような結果になります。

    Installed app: ffmpeg(3.4)
    

お疲れさまでした。 Batch アカウントでインストール済みアプリケーションの一覧を取得するために Azure Batch と Azure Storage のライブラリをアプリに正常に統合しました。 次の手順では、ジョブを実行するコンピューティング ノードのプールを作成します。