クイック スタート: .NET API で最初の Azure Batch ジョブを実行するQuickstart: Run your first Azure Batch job with the .NET API

このクイック スタートでは、Azure Batch .NET API に基づいて構築された C# アプリケーションから Azure Batch ジョブを実行します。This quickstart runs an Azure Batch job from a C# application built on the Azure Batch .NET API. このアプリでは、複数の入力データ ファイルを Azure Storage にアップロードしてから、Batch コンピューティング ノード (仮想マシン) の "プール" を作成します。The app uploads several input data files to Azure storage and then creates a pool of Batch compute nodes (virtual machines). その後、基本的なコマンドを使用してプールの各入力ファイルを処理するための "タスク" を実行するサンプル "ジョブ" を作成します。Then, it creates a sample job that runs tasks to process each input file on the pool using a basic command. このクイック スタートを完了すると、Batch サービスの主要な概念を理解し、より大規模でより現実的なワークロードで Batch を試せるようになります。After completing this quickstart, you will understand the key concepts of the Batch service and be ready to try Batch with more realistic workloads at larger scale.

クイック スタート アプリのワークフロー

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

Azure へのサインインSign in to Azure

Azure Portal (https://portal.azure.com) にサインインします。Sign in to the Azure portal at https://portal.azure.com.

アカウントの資格情報を取得するGet account credentials

この例では、Batch アカウントと Storage アカウントの資格情報を指定する必要があります。For this example, you need to provide credentials for your Batch and Storage accounts. Azure Portal を使用すると、必要な資格情報を簡単に取得できますA straightforward way to get the necessary credentials is in the Azure portal. (Azure API やコマンドライン ツールを使用してこれらの資格情報を取得することもできます)。(You can also get these credentials using the Azure APIs or command-line tools.)

  1. [すべてのサービス] > [Batch アカウント] の順に選択し、Batch アカウントの名前を選択します。Select All services > Batch accounts, and then select the name of your Batch account.

  2. Batch 資格情報を表示するには、 [キー] を選択します。To see the Batch credentials, select Keys. [Batch アカウント][URL][プライマリ アクセス キー] の値をテキスト エディターにコピーします。Copy the values of Batch account, URL, and Primary access key to a text editor.

  3. Storage アカウント名とキーを表示するには、 [ストレージ アカウント] を選択します。To see the Storage account name and keys, select Storage account. [ストレージ アカウント名][Key1] の値をテキスト エディターにコピーします。Copy the values of Storage account name and Key1 to a text editor.

サンプルのダウンロードDownload the sample

GitHub からサンプル アプリをダウンロードまたは複製します。Download or clone the sample app from GitHub. Git クライアントを使用してサンプル アプリ リポジトリを複製するには、次のコマンドを使用します。To clone the sample app repo with a Git client, use the following command:

git clone https://github.com/Azure-Samples/batch-dotnet-quickstart.git

Visual Studio ソリューション ファイル BatchDotNetQuickstart.sln が含まれているディレクトリに移動します。Navigate to the directory that contains the Visual Studio solution file BatchDotNetQuickstart.sln.

Visual Studio でソリューション ファイルを開き、Program.cs 内の資格情報文字列を、お使いのアカウントに関して取得した値で更新します。Open the solution file in Visual Studio, and update the credential strings in Program.cs with the values you obtained for your accounts. 次に例を示します。For example:

// Batch account credentials
private const string BatchAccountName = "mybatchaccount";
private const string BatchAccountKey  = "xxxxxxxxxxxxxxxxE+yXrRvJAqT9BlXwwo1CwF+SwAYOxxxxxxxxxxxxxxxx43pXi/gdiATkvbpLRl3x14pcEQ==";
private const string BatchAccountUrl  = "https://mybatchaccount.mybatchregion.batch.azure.com";

// Storage account credentials
private const string StorageAccountName = "mystorageaccount";
private const string StorageAccountKey  = "xxxxxxxxxxxxxxxxy4/xxxxxxxxxxxxxxxxfwpbIC5aAWA8wDu+AFXZB827Mt9lybZB1nUcQbQiUrkPtilK5BQ==";

注意

この例では、単純化するために Batch アカウントと Storage アカウントの資格情報をクリア テキストで表示しています。To simplify the example, the Batch and Storage account credentials appear in clear text. 実際の資格情報は利用を制限し、コード中では環境変数か構成ファイルを使用して参照することをお勧めします。In practice, we recommend that you restrict access to the credentials and refer to them in your code using environment variables or a configuration file. その例については、Azure Batch のコード サンプル リポジトリを参照してください。For examples, see the Azure Batch code samples repo.

アプリのビルドと実行Build and run the app

Batch ワークフローの動作を確認するには、Visual Studio またはコマンド ライン (dotnet build コマンドと dotnet run コマンド) でアプリケーションをビルドして実行します。To see the Batch workflow in action, build and run the application in Visual Studio, or at the command line with the dotnet build and dotnet run commands. アプリケーションの実行後に、コードを確認して、アプリケーションの各部分での処理内容を学習します。After running the application, review the code to learn what each part of the application does. たとえば Visual Studio で次の操作を実行します。For example, in Visual Studio:

  • ソリューション エクスプローラーでソリューションを右クリックし、 [ソリューションのビルド] をクリックします。Right-click the solution in Solution Explorer, and click Build Solution.

  • メッセージに従って NuGet パッケージの復元を確認します。Confirm the restoration of any NuGet packages, if you're prompted. 不足しているパッケージをダウンロードする必要がある場合は、NuGet Package Manager がインストールされていることを確認します。If you need to download missing packages, ensure the NuGet Package Manager is installed.

次に、それを実行します。Then run it. サンプル アプリケーションを実行すると、コンソールの出力は次のようになります。When you run the sample application, the console output is similar to the following. 実行中、プールのコンピューティング ノードを開始する際に、Monitoring all tasks for 'Completed' state, timeout in 00:30:00... で一時停止が発生します。During execution, you experience a pause at Monitoring all tasks for 'Completed' state, timeout in 00:30:00... while the pool's compute nodes are started. タスクは、最初のコンピューティング ノードが実行中になるとすぐに、実行するためにキューに登録されます。Tasks are queued to run as soon as the first compute node is running. プール、コンピューティング ノード、ジョブ、タスクを監視するには、Azure Portal で Batch アカウントに移動します。Go to your Batch account in the Azure portal to monitor the pool, compute nodes, job, and tasks.

Sample start: 11/16/2018 4:02:54 PM

Container [input] created.
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [DotNetQuickstartPool]...
Creating job [DotNetQuickstartJob]...
Adding 3 tasks to job [DotNetQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...

タスクが完了すると、タスクごとに次のような出力が表示されます。After tasks complete, you see output similar to the following for each task:

Printing task output.
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard out:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role in business, engineering, science, and other pursuits that require running lots of automated tasks....
stderr:
...

既定の構成でアプリケーションを実行する場合、通常の実行時間は約 5 分間です。Typical execution time is approximately 5 minutes when you run the application in its default configuration. 最初のプールの設定に最も時間がかかります。Initial pool setup takes the most time. ジョブをもう一度実行するには、前回の実行からジョブを削除しますが、プールは削除しないでください。To run the job again, delete the job from the previous run and do not delete the pool. 構成済みのプールでは、ジョブは数秒で完了します。On a preconfigured pool, the job completes in a few seconds.

コードの確認Review the code

このクイック スタートの .NET アプリでは、次の処理を実行します。The .NET app in this quickstart does the following:

  • 3 つの小さいテキスト ファイルを Azure ストレージ アカウントの BLOB コンテナーにアップロードします。Uploads three small text files to a blob container in your Azure storage account. これらのファイルは、Batch で処理するための入力です。These files are inputs for processing by Batch.
  • Windows Server を実行しているコンピューティング ノードのプールを作成します。Creates a pool of compute nodes running Windows Server.
  • ノードで実行するジョブと 3 つのタスクを作成します。Creates a job and three tasks to run on the nodes. 各タスクは、Windows のコマンド ラインを使用して入力ファイルの 1 つを処理します。Each task processes one of the input files using a Windows command line.
  • タスクによって返されるファイルを表示します。Displays files returned by the tasks.

詳細については、Program.cs ファイルと以降のセクションを参照してください。See the file Program.cs and the following sections for details.

準備Preliminaries

ストレージ アカウントを操作するために、アプリでは .NET 用 Azure Storage クライアント ライブラリを使用します。To interact with a storage account, the app uses the Azure Storage Client Library for .NET. CloudStorageAccount を使用してアカウントへの参照を作成し、それを基にして CloudBlobClient を作成します。It creates a reference to the account with CloudStorageAccount, and from that creates a CloudBlobClient.

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

このアプリでは、blobClient 参照を使用して、ストレージ アカウントにコンテナーを作成したり、そのコンテナーにデータ ファイルをアップロードしたりします。The app uses the blobClient reference to create a container in the storage account and to upload data files to the container. ストレージ内のファイルは、Batch の ResourceFile オブジェクトとして定義されており、Batch が後でコンピューティング ノードにダウンロードできます。The files in storage are defined as Batch ResourceFile objects that Batch can later download to compute nodes.

List<string> inputFilePaths = new List<string>
{
    "taskdata0.txt",
    "taskdata1.txt",
    "taskdata2.txt"
};

List<ResourceFile> inputFiles = new List<ResourceFile>();

foreach (string filePath in inputFilePaths)
{
    inputFiles.Add(UploadFileToContainer(blobClient, inputContainerName, filePath));
}

このアプリは BatchClient オブジェクトを作成して、Batch サービスでプール、ジョブ、タスクを作成および管理します。The app creates a BatchClient object to create and manage pools, jobs, and tasks in the Batch service. このサンプルの Batch クライアントでは共有キー認証を使用します。The Batch client in the sample uses shared key authentication. (Batch では Azure Active Directory 認証もサポートされます)。(Batch also supports Azure Active Directory authentication.)

BatchSharedKeyCredentials cred = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey);

using (BatchClient batchClient = BatchClient.Open(cred))
...

コンピューティング ノードのプールの作成Create a pool of compute nodes

Batch プールを作成するために、このアプリでは BatchClient.PoolOperations.CreatePool メソッドを使用してノードの数、VM のサイズ、プールの構成を設定します。To create a Batch pool, the app uses the BatchClient.PoolOperations.CreatePool method to set the number of nodes, VM size, and a pool configuration. ここで、VirtualMachineConfiguration オブジェクトでは、ImageReference に、Azure Marketplace で公開されている Windows Server イメージを指定します。Here, a VirtualMachineConfiguration object specifies an ImageReference to a Windows Server image published in the Azure Marketplace. Batch は、Azure Marketplace の Linux および Windows Server のさまざまなイメージだけでなく、カスタム VM イメージもサポートしています。Batch supports a wide range of Linux and Windows Server images in the Azure Marketplace, as well as custom VM images.

ノードの数 (PoolNodeCount) と VM のサイズ (PoolVMSize) は、定義済みの定数です。The number of nodes (PoolNodeCount) and VM size (PoolVMSize) are defined constants. このサンプルでは、既定で、サイズ Standard_A1_v2 の 2 つのノードで構成されるプールが作成されます。The sample by default creates a pool of 2 size Standard_A1_v2 nodes. 推奨されるサイズは、この簡単な例についてパフォーマンスとコストのバランスが取れています。The size suggested offers a good balance of performance versus cost for this quick example.

Commit メソッドは、プールを Batch サービスに送信します。The Commit method submits the pool to the Batch service.


private static VirtualMachineConfiguration CreateVirtualMachineConfiguration(ImageReference imageReference)
{
    return new VirtualMachineConfiguration(
        imageReference: imageReference,
        nodeAgentSkuId: "batch.node.windows amd64");
}

private static ImageReference CreateImageReference()
{
    return new ImageReference(
        publisher: "MicrosoftWindowsServer",
        offer: "WindowsServer",
        sku: "2016-datacenter-smalldisk",
        version: "latest");
}

private static void CreateBatchPool(BatchClient batchClient, VirtualMachineConfiguration vmConfiguration)
{
    try
    {
        CloudPool pool = batchClient.PoolOperations.CreatePool(
            poolId: PoolId,
            targetDedicatedComputeNodes: PoolNodeCount,
            virtualMachineSize: PoolVMSize,
            virtualMachineConfiguration: vmConfiguration);

        pool.Commit();
    }
...

Batch ジョブの作成Create a Batch job

Batch ジョブは、1 つ以上のタスクの論理グループです。A Batch job is a logical grouping of one or more tasks. ジョブには、優先度やタスクの実行対象プールなど、タスクに共通する設定が含まれています。A job includes settings common to the tasks, such as priority and the pool to run tasks on. このアプリは、BatchClient.JobOperations.CreateJob メソッドを使用してプールにジョブを作成します。The app uses the BatchClient.JobOperations.CreateJob method to create a job on your pool.

Commit メソッドは、ジョブを Batch サービスに送信します。The Commit method submits the job to the Batch service. 最初、ジョブにはタスクがありません。Initially the job has no tasks.

try
{
    CloudJob job = batchClient.JobOperations.CreateJob();
    job.Id = JobId;
    job.PoolInformation = new PoolInformation { PoolId = PoolId };

    job.Commit();
}
...

タスクの作成Create tasks

このアプリでは、CloudTask オブジェクトの一覧を作成します。The app creates a list of CloudTask objects. 各タスクは、ResourceFileCommandLine プロパティを使用して入力の オブジェクトを処理します。Each task processes an input ResourceFile object using a CommandLine property. このサンプルのコマンド ラインでは、Windows の type コマンドを実行して入力ファイルを表示します。In the sample, the command line runs the Windows type command to display the input file. このコマンドは、デモンストレーション用の簡単な例です。This command is a simple example for demonstration purposes. Batch を使用する場合、コマンド ラインは、アプリまたはスクリプトを指定する場所です。When you use Batch, the command line is where you specify your app or script. Batch には、アプリやスクリプトをコンピューティング ノードにデプロイする方法が多数用意されています。Batch provides a number of ways to deploy apps and scripts to compute nodes.

その後、このアプリは、AddTask メソッドを使用してジョブにタスクを追加します。これにより、タスクは、コンピューティング ノードで実行するためにキューに登録されます。Then, the app adds tasks to the job with the AddTask method, which queues them to run on the compute nodes.

for (int i = 0; i < inputFiles.Count; i++)
{
    string taskId = String.Format("Task{0}", i);
    string inputFilename = inputFiles[i].FilePath;
    string taskCommandLine = String.Format("cmd /c type {0}", inputFilename);

    CloudTask task = new CloudTask(taskId, taskCommandLine);
    task.ResourceFiles = new List<ResourceFile> { inputFiles[i] };
    tasks.Add(task);
}

batchClient.JobOperations.AddTask(JobId, tasks);

タスク出力の表示View task output

このアプリは、タスクを監視してタスクが完了したことを確認するために TaskStateMonitor を作成します。The app creates a TaskStateMonitor to monitor the tasks to make sure they complete. 次に、CloudTask.ComputeNodeInformation プロパティを使用して、完了した各タスクによって生成された stdout.txt ファイルを表示します。Then, the app uses the CloudTask.ComputeNodeInformation property to display the stdout.txt file generated by each completed task. タスクが正常に実行されると、タスク コマンドの出力は stdout.txt に書き込まれます。When the task runs successfully, the output of the task command is written to stdout.txt:

foreach (CloudTask task in completedtasks)
{
    string nodeId = String.Format(task.ComputeNodeInformation.ComputeNodeId);
    Console.WriteLine("Task: {0}", task.Id);
    Console.WriteLine("Node: {0}", nodeId);
    Console.WriteLine("Standard out:");
    Console.WriteLine(task.GetNodeFile(Constants.StandardOutFileName).ReadAsString());
}

リソースをクリーンアップするClean up resources

アプリは自動的に、作成された入力用ストレージ コンテナーを削除し、Batch プールとジョブを削除するためのオプションを表示します。The app automatically deletes the storage container it creates, and gives you the option to delete the Batch pool and job. ジョブがスケジュールされていない場合でも、ノードの実行中はプールに対して料金が発生します。You are charged for the pool while the nodes are running, even if no jobs are scheduled. プールは不要になったら、削除してください。When you no longer need the pool, delete it. プールを削除すると、ノード上のタスク出力はすべて削除されます。When you delete the pool, all task output on the nodes is deleted.

リソース グループ、Batch アカウント、ストレージ アカウントは、不要になったら削除します。When no longer needed, delete the resource group, Batch account, and storage account. Azure Portal でこれを行うには、Batch アカウントのリソース グループを選択し、 [リソース グループの削除] をクリックしてください。To do so in the Azure portal, select the resource group for the Batch account and click Delete resource group.

次のステップNext steps

このクイック スタートでは、Batch .NET API を使用して構築された小さいアプリを実行し、Batch プールと Batch ジョブを作成しました。In this quickstart, you ran a small app built using the Batch .NET API to create a Batch pool and a Batch job. このジョブによってサンプル タスクが実行され、作成された出力がノードにダウンロードされました。The job ran sample tasks, and downloaded output created on the nodes. Batch サービスの主要な概念を理解できたので、より大規模でより現実的なワークロードを使用して Batch を試す準備が整いました。Now that you understand the key concepts of the Batch service, you are ready to try Batch with more realistic workloads at larger scale. Azure Batch の詳細を確認し、実際のアプリケーションで並列ワークロードを詳しく見てみるには、Batch .NET のチュートリアルに進んでください。To learn more about Azure Batch, and walk through a parallel workload with a real-world application, continue to the Batch .NET tutorial.