Batch プールでの Linux コンピューティング ノードのプロビジョニングProvision Linux compute nodes in Batch pools

Azure Batch を使用すると、Linux と Windows の両方の仮想マシンで並列コンピューティング ワークロードを実行できます。You can use Azure Batch to run parallel compute workloads on both Linux and Windows virtual machines. この記事では、Batch PythonBatch .NET の両方のクライアント ライブラリを使用して、Batch サービスで Linux コンピューティング ノードのプールを作成する方法について詳しく説明します。This article details how to create pools of Linux compute nodes in the Batch service by using both the Batch Python and Batch .NET client libraries.

注意

アプリケーション パッケージは、2017 年 7 月 5 日より後に作成されたすべての Batch プールでサポートされます。Application packages are supported on all Batch pools created after 5 July 2017. これらは、プールがクラウド サービス構成を使って作成された場合にのみ、2016 年 3 月 10 日から 2017 年 7 月 5 日までの間に作成された Batch プールでサポートされます。They are supported on Batch pools created between 10 March 2016 and 5 July 2017 only if the pool was created using a Cloud Service configuration. 2016 年 3 月 10 日より前に作成された Batch プールは、アプリケーション パッケージをサポートしていません。Batch pools created prior to 10 March 2016 do not support application packages. アプリケーション パッケージを使った Batch ノードへのアプリケーションのデプロイについて詳しくは、「Batch アプリケーション パッケージを使用したコンピューティング ノードへのアプリケーションのデプロイ」をご覧ください。For more information about using application packages to deploy your applications to your Batch nodes, see Deploy applications to compute nodes with Batch application packages.

仮想マシンの構成Virtual machine configuration

Batch でコンピューティング ノードのプールを作成する場合は、Cloud Services 構成と仮想マシン構成という 2 つのオプションから、ノード サイズとオペレーティング システムを選択できます。When you create a pool of compute nodes in Batch, you have two options from which to select the node size and operating system: Cloud Services Configuration and Virtual Machine Configuration.

Cloud Services の構成 では、Windows コンピューティング ノード のみが提供されます。Cloud Services Configuration provides Windows compute nodes only. 使用可能なコンピューティング ノードのサイズについては、「Cloud Services のサイズ」を参照してください。使用可能なオペレーティング システムについては、「Azure ゲスト OS リリースと SDK の互換性対応表」を参照してください。Available compute node sizes are listed in Sizes for Cloud Services, and available operating systems are listed in the Azure Guest OS releases and SDK compatibility matrix. Azure Cloud Services ノードを含むプールを作成する場合は、前に示した記事に記載されているノード サイズと OS ファミリを指定します。When you create a pool that contains Azure Cloud Services nodes, you specify the node size and the OS family, which are described in the previously mentioned articles. Windows コンピューティング ノードのプールの場合は、Cloud Services が最もよく使用されます。For pools of Windows compute nodes, Cloud Services is most commonly used.

仮想マシン構成 では、Linux と Windows の両方のコンピューティング ノード イメージが提供されます。Virtual Machine Configuration provides both Linux and Windows images for compute nodes. 使用可能なコンピューティング ノード サイズについては、「Azure の仮想マシンのサイズ」(Linux) および「Azure の仮想マシンのサイズ」(Windows) を参照してください。Available compute node sizes are listed in Sizes for virtual machines in Azure (Linux) and Sizes for virtual machines in Azure (Windows). 仮想マシンの構成ノードを含むプールを作成する場合は、ノードのサイズ、仮想マシン イメージの参照、およびノードにインストールする Batch ノード エージェント SKU を指定する必要があります。When you create a pool that contains Virtual Machine Configuration nodes, you must specify the size of the nodes, the virtual machine image reference, and the Batch node agent SKU to be installed on the nodes.

仮想マシン イメージの参照Virtual machine image reference

Batch サービスでは、仮想マシン スケール セットを使って、仮想マシン構成にコンピューティング ノードを提供します。The Batch service uses virtual machine scale sets to provide compute nodes in the Virtual Machine Configuration. Azure Marketplace でイメージを指定できます。または、事前に準備したカスタム イメージを指定できます。You can specify an image from the Azure Marketplace, or provide a custom image that you have prepared. カスタム イメージの詳細については、「Shared Image Gallery を使用してプールを作成する」を参照してください。For more details about custom images, see Create a pool with the Shared Image Gallery.

仮想マシン イメージの参照を構成する場合は、仮想マシン イメージのプロパティを指定します。When you configure a virtual machine image reference, you specify the properties of the virtual machine image. 仮想マシン イメージの参照を作成する際は、次のプロパティが必要です。The following properties are required when you create a virtual machine image reference:

イメージの参照プロパティImage reference properties Example
PublisherPublisher CanonicalCanonical
プランOffer UbuntuServerUbuntuServer
SKUSKU 18.04-LTS18.04-LTS
VersionVersion latestlatest

ヒント

これらのプロパティと、Marketplace イメージを一覧表示する方法の詳細については、「CLI または PowerShell を使用した Azure での Linux 仮想マシン イメージへの移動と選択」を参照してください。You can learn more about these properties and how to list Marketplace images in Navigate and select Linux virtual machine images in Azure with CLI or PowerShell. 現時点では、すべての Marketplace イメージに Batch との互換性があるわけではありません。Note that not all Marketplace images are currently compatible with Batch. 詳細については、「 ノード エージェント SKU」を参照してください。For more information, see Node agent SKU.

ノード エージェント SKUNode agent SKU

Batch ノード エージェントは、プール内の各ノードで実行されるプログラムで、ノードと Batch サービスの間のコマンドと制御のインターフェイスを提供します。The Batch node agent is a program that runs on each node in the pool and provides the command-and-control interface between the node and the Batch service. オペレーティング システムに応じてさまざまなノード エージェントの実装 (SKU と呼ばれます) があります。There are different implementations of the node agent, known as SKUs, for different operating systems. 基本的には、仮想マシン構成を作成する場合は、最初に仮想マシン イメージの参照を指定してから、イメージにインストールするノード エージェントを指定します。Essentially, when you create a Virtual Machine Configuration, you first specify the virtual machine image reference, and then you specify the node agent to install on the image. 通常、各ノード エージェント SKU は、複数の仮想マシン イメージと互換性があります。Typically, each node agent SKU is compatible with multiple virtual machine images. ノード エージェント SKU の例をいくつか次に示します。Here are a few examples of node agent SKUs:

  • batch.node.ubuntu 18.04batch.node.ubuntu 18.04
  • batch.node.centos 7batch.node.centos 7
  • batch.node.windows amd64batch.node.windows amd64

重要

Marketplace から入手できる仮想マシン イメージの一部には、現在利用可能な Batch ノード エージェントとの互換性がありません。Not all virtual machine images that are available in the Marketplace are compatible with the currently available Batch node agents. Batch SDK を使って、使用可能なノード エージェント SKU と、それと互換性のある仮想マシン イメージの一覧を表示します。Use the Batch SDKs to list the available node agent SKUs and the virtual machine images with which they are compatible. 実行時に有効なイメージの一覧を取得する方法の詳細と例については、この記事で後述する「仮想マシン イメージの一覧」をご覧ください。See the List of Virtual Machine images later in this article for more information and examples of how to retrieve a list of valid images at runtime.

Linux プールの作成: Batch PythonCreate a Linux pool: Batch Python

次のコード スニペットは、Python 向けの Microsoft Azure Batch クライアント ライブラリを使用して、Ubuntu Server コンピューティング ノードのプールを作成する方法の例を示しています。The following code snippet shows an example of how to use the Microsoft Azure Batch Client Library for Python to create a pool of Ubuntu Server compute nodes. Batch Python モジュールのリファレンス ドキュメントについては、Read the Docs の azure.batch パッケージをご覧ください。Reference documentation for the Batch Python module can be found at azure.batch package on Read the Docs.

このスニペットでは、ImageReference を明示的に作成し、各プロパティ (publisher、offer、SKU、version) を指定します。This snippet creates an ImageReference explicitly and specifies each of its properties (publisher, offer, SKU, version). ただし、運用環境のコードでは、list_supported_images メソッドを使用して、実行時に使用可能なイメージとノード エージェント SKU の組み合わせを確認してから選択することをお勧めします。In production code, however, we recommend that you use the list_supported_images method to determine and select from the available image and node agent SKU combinations at runtime.

# Import the required modules from the
# Azure Batch Client Library for Python
import azure.batch.batch_service_client as batch
import azure.batch.batch_auth as batchauth
import azure.batch.models as batchmodels

# Specify Batch account credentials
account = "<batch-account-name>"
key = "<batch-account-key>"
batch_url = "<batch-account-url>"

# Pool settings
pool_id = "LinuxNodesSamplePoolPython"
vm_size = "STANDARD_D2_V3"
node_count = 1

# Initialize the Batch client
creds = batchauth.SharedKeyCredentials(account, key)
config = batch.BatchServiceClientConfiguration(creds, batch_url)
client = batch.BatchServiceClient(creds, batch_url)

# Create the unbound pool
new_pool = batchmodels.PoolAddParameter(id=pool_id, vm_size=vm_size)
new_pool.target_dedicated = node_count

# Configure the start task for the pool
start_task = batchmodels.StartTask()
start_task.run_elevated = True
start_task.command_line = "printenv AZ_BATCH_NODE_STARTUP_DIR"
new_pool.start_task = start_task

# Create an ImageReference which specifies the Marketplace
# virtual machine image to install on the nodes.
ir = batchmodels.ImageReference(
    publisher="Canonical",
    offer="UbuntuServer",
    sku="18.04-LTS",
    version="latest")

# Create the VirtualMachineConfiguration, specifying
# the VM image reference and the Batch node agent to
# be installed on the node.
vmc = batchmodels.VirtualMachineConfiguration(
    image_reference=ir,
    node_agent_sku_id="batch.node.ubuntu 18.04")

# Assign the virtual machine configuration to the pool
new_pool.virtual_machine_configuration = vmc

# Create pool in the Batch service
client.pool.add(new_pool)

前述のように、ImageReference を明示的に作成する代わりに、list_supported_images メソッドを使用して、現在サポートされているノード エージェントと Marketplace イメージの組み合わせから動的に選択することをお勧めします。As mentioned previously, we recommend that instead of creating the ImageReference explicitly, you use the list_supported_images method to dynamically select from the currently supported node agent/Marketplace image combinations. 次の Python スニペットでは、このメソッドの使用方法を示します。The following Python snippet shows how to use this method.

# Get the list of supported images from the Batch service
images = client.account.list_supported_images()

# Obtain the desired image reference
image = None
for img in images:
  if (img.image_reference.publisher.lower() == "canonical" and
        img.image_reference.offer.lower() == "ubuntuserver" and
        img.image_reference.sku.lower() == "18.04-lts"):
    image = img
    break

if image is None:
  raise RuntimeError('invalid image reference for desired configuration')

# Create the VirtualMachineConfiguration, specifying the VM image
# reference and the Batch node agent to be installed on the node.
vmc = batchmodels.VirtualMachineConfiguration(
    image_reference=image.image_reference,
    node_agent_sku_id=image.node_agent_sku_id)

Linux プールの作成: Batch .NETCreate a Linux pool: Batch .NET

次のコード スニペットは、Batch .NET クライアント ライブラリを使用して、Ubuntu Server コンピューティング ノードのプールを作成する方法の例を示しています。The following code snippet shows an example of how to use the Batch .NET client library to create a pool of Ubuntu Server compute nodes. docs.microsoft.com の Batch .NET リファレンス ドキュメントを参照してください。You can find the Batch .NET reference documentation on docs.microsoft.com.

次のコード スニペットでは、PoolOperations.ListSupportedImages メソッドを使用して、現在サポートされている Marketplace イメージとノード エージェント SKU の組み合わせの一覧から選択します。The following code snippet uses the PoolOperations.ListSupportedImages method to select from the list of currently supported Marketplace image and node agent SKU combinations. サポートされる組み合わせの一覧が変更される場合があるため、この手法をお勧めします。This technique is desirable because the list of supported combinations may change from time to time. 通常は、サポートされる組み合わせが追加されます。Most commonly, supported combinations are added.

// Pool settings
const string poolId = "LinuxNodesSamplePoolDotNet";
const string vmSize = "STANDARD_D2_V3";
const int nodeCount = 1;

// Obtain a collection of all available node agent SKUs.
// This allows us to select from a list of supported
// VM image/node agent combinations.
List<ImageInformation> images =
    batchClient.PoolOperations.ListSupportedImages().ToList();

// Find the appropriate image information
ImageInformation image = null;
foreach (var img in images)
{
    if (img.ImageReference.Publisher == "Canonical" &&
        img.ImageReference.Offer == "UbuntuServer" &&
        img.ImageReference.Sku == "18.04-LTS")
    {
        image = img;
        break;
    }
}

// Create the VirtualMachineConfiguration for use when actually
// creating the pool
VirtualMachineConfiguration virtualMachineConfiguration =
    new VirtualMachineConfiguration(image.ImageReference, image.NodeAgentSkuId);

// Create the unbound pool object using the VirtualMachineConfiguration
// created above
CloudPool pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    virtualMachineSize: vmSize,
    virtualMachineConfiguration: virtualMachineConfiguration,
    targetDedicatedComputeNodes: nodeCount);

// Commit the pool to the Batch service
await pool.CommitAsync();

上記のスニペットでは、PoolOperations.ListSupportedImages メソッドを使用して、サポートされているイメージとノード エージェント SKU の組み合わせを動的に一覧表示してから選択しますが (推奨)、ImageReference を明示的に構成することもできます。Although the previous snippet uses the PoolOperations.ListSupportedImages method to dynamically list and select from supported image and node agent SKU combinations (recommended), you can also configure an ImageReference explicitly:

ImageReference imageReference = new ImageReference(
    publisher: "Canonical",
    offer: "UbuntuServer",
    sku: "18.04-LTS",
    version: "latest");

仮想マシン イメージの一覧List of virtual machine images

Batch サービスでサポートされるすべての Marketplace 仮想マシン イメージと、それらに対応するノード エージェントの一覧を取得するには、list_supported_images (Python)、ListSupportedImages (Batch .NET)、または該当する任意の言語 SDK で対応する API を使用してください。To obtain the list of all supported Marketplace virtual machine images for the Batch service and their corresponding node agents, please leverage the list_supported_images (Python), ListSupportedImages (Batch .NET) or the corresponding API in the respective language SDK of your choosing.

SSH を使用した Linux ノードへの接続Connect to Linux nodes using SSH

開発時またはトラブルシューティング時に、プール内のノードにサインインすることが必要な場合があります。During development or while troubleshooting, you may find it necessary to sign in to the nodes in your pool. Windows コンピューティング ノードとは異なり、リモート デスクトップ プロトコル (RDP) を使用して Linux ノードに接続することはできません。Unlike Windows compute nodes, you cannot use Remote Desktop Protocol (RDP) to connect to Linux nodes. 代わりに、Batch サービスを使用して、各ノードでリモート接続用に SSH アクセスを有効にします。Instead, the Batch service enables SSH access on each node for remote connection.

次の Python コード スニペットでは、リモート接続に必要なユーザーをプール内の各ノードに作成します。The following Python code snippet creates a user on each node in a pool, which is required for remote connection. その後、各ノードの Secure Shell (SSH) 接続情報を出力します。It then prints the secure shell (SSH) connection information for each node.

import datetime
import getpass
import azure.batch.batch_service_client as batch
import azure.batch.batch_auth as batchauth
import azure.batch.models as batchmodels

# Specify your own account credentials
batch_account_name = ''
batch_account_key = ''
batch_account_url = ''

# Specify the ID of an existing pool containing Linux nodes
# currently in the 'idle' state
pool_id = ''

# Specify the username and prompt for a password
username = 'linuxuser'
password = getpass.getpass()

# Create a BatchClient
credentials = batchauth.SharedKeyCredentials(
    batch_account_name,
    batch_account_key
)
batch_client = batch.BatchServiceClient(
    credentials,
    base_url=batch_account_url
)

# Create the user that will be added to each node in the pool
user = batchmodels.ComputeNodeUser(username)
user.password = password
user.is_admin = True
user.expiry_time = \
    (datetime.datetime.today() + datetime.timedelta(days=30)).isoformat()

# Get the list of nodes in the pool
nodes = batch_client.compute_node.list(pool_id)

# Add the user to each node in the pool and print
# the connection information for the node
for node in nodes:
    # Add the user to the node
    batch_client.compute_node.add_user(pool_id, node.id, user)

    # Obtain SSH login information for the node
    login = batch_client.compute_node.get_remote_login_settings(pool_id,
                                                                node.id)

    # Print the connection info for the node
    print("{0} | {1} | {2} | {3}".format(node.id,
                                         node.state,
                                         login.remote_login_ip_address,
                                         login.remote_login_port))

4 つの Linux ノードを含むプールに対する上記のコードのサンプル出力を次に示します。Here is sample output for the previous code for a pool that contains four Linux nodes:

Password:
tvm-1219235766_1-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50000
tvm-1219235766_2-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50003
tvm-1219235766_3-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50002
tvm-1219235766_4-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50001

ノードにユーザーを作成するときに、パスワードの代わりに、SSH 公開キーを指定できます。Instead of a password, you can specify an SSH public key when you create a user on a node. Python SDK では、ComputeNodeUserssh_public_key パラメーターを使います。In the Python SDK, use the ssh_public_key parameter on ComputeNodeUser. .NET では、ComputeNodeUser.SshPublicKey プロパティを使います。In .NET, use the ComputeNodeUser.SshPublicKey property.

価格Pricing

Azure Batch は Azure Cloud Services と Azure Virtual Machines テクノロジに基づいて構築されています。Azure Batch is built on Azure Cloud Services and Azure Virtual Machines technology. Batch サービス自体は、無料で提供されています。そのため、Batch ソリューションによって使用されたコンピューティング リソース (およびそれに付随する関連コスト) に対してのみ課金されます。The Batch service itself is offered at no cost, which means you are charged only for the compute resources (and associated costs that entails) that your Batch solutions consume. Cloud Services 構成を選択した場合は、Cloud Services の料金体系に基づいて課金されます。When you choose Cloud Services Configuration, you are charged based on the Cloud Services pricing structure. 仮想マシンの構成を選択した場合は、Virtual Machines の料金体系に基づいて課金されます。When you choose Virtual Machine Configuration, you are charged based on the Virtual Machines pricing structure.

アプリケーション パッケージを使ってアプリケーションを Batch ノードにデプロイする場合は、アプリケーション パッケージで使われる Azure Storage リソースにも課金されます。If you deploy applications to your Batch nodes using application packages, you are also charged for the Azure Storage resources that your application packages consume.

次のステップNext steps

GitHub の azure-batch-samples リポジトリにある Python コード サンプルには、プール、ジョブ、タスクの作成などの一般的な Batch 操作の実行方法を示すスクリプトが含まれています。The Python code samples in the azure-batch-samples repository on GitHub contain scripts that show you how to perform common Batch operations, such as pool, job, and task creation. Python サンプルに付属する README には、必要なパッケージのインストール方法の詳細が記載されています。The README that accompanies the Python samples has details about how to install the required packages.