Python 用 Azure Container Instances ライブラリAzure Container Instances libraries for Python

Python 用 Microsoft Azure Container Instances ライブラリを使用して、Azure コンテナー インスタンスを作成し、管理します。Use the Microsoft Azure Container Instances libraries for Python to create and manage Azure container instances. 詳細については、Azure Container Instances の概要に関するページをご覧ください。Learn more by reading the Azure Container Instances overview.

管理 APIManagement APIs

管理ライブラリを使用して、Azure で Azure コンテナー インスタンスを作成して管理します。Use the management library to create and manage Azure container instances in Azure.

pip で管理パッケージをインストールします。Install the management package via pip:

pip install azure-mgmt-containerinstance

サンプル ソースExample source

以下のコード例をコンテキスト内で確認するには、次の GitHub リポジトリでサンプルを検索してください。If you'd like to see the following code examples in context, you can find them in the following GitHub repository:

Azure-Samples/aci-docs-sample-pythonAzure-Samples/aci-docs-sample-python

AuthenticationAuthentication

SDK クライアント (次の例の Azure Container Instances クライアント、Resource Manager クライアントなど) を認証する最も簡単な方法の 1 つは、ファイル ベースの認証を使用することです。One of the easiest ways to authenticate SDK clients (like the Azure Container Instances and Resource Manager clients in the following example) is with file-based authentication. ファイル ベースの認証では、資格情報ファイルへのパスを表す AZURE_AUTH_LOCATION 環境変数を照会します。File-based authentication queries the AZURE_AUTH_LOCATION environment variable for the path to a credentials file. ファイル ベースの認証を使用するには:To use file-based authentication:

  1. Azure CLI または Cloud Shell で資格情報ファイルを作成します。Create a credentials file with the Azure CLI or Cloud Shell:

    az ad sp create-for-rbac --sdk-auth > my.azureauth

    Cloud Shell を使用して資格情報ファイルを生成する場合は、その内容を、お使いの Python アプリケーションがアクセスできるローカル ファイルにコピーします。If you use the Cloud Shell to generate the credentials file, copy its contents into a local file that your Python application can access.

  2. AZURE_AUTH_LOCATION 環境変数を、生成された資格情報ファイルの完全なパスに設定します。Set the AZURE_AUTH_LOCATION environment variable to the full path of the generated credentials file. 次に例を示します (Bash の場合)。For example (in Bash):

    export AZURE_AUTH_LOCATION=/home/yourusername/my.azureauth
    

資格情報ファイルを作成し、AZURE_AUTH_LOCATION 環境変数を設定したら、client_factory モジュールの get_client_from_auth_file メソッドを使用して、ResourceManagementClient オブジェクトと ContainerInstanceManagementClient オブジェクトを初期化します。Once you've created the credentials file and populated the AZURE_AUTH_LOCATION environment variable, use the get_client_from_auth_file method of the client_factory module to initialize the ResourceManagementClient and ContainerInstanceManagementClient objects.

# Authenticate the management clients with Azure.
# Set the AZURE_AUTH_LOCATION environment variable to the full path to an
# auth file. Generate an auth file with the Azure CLI or Cloud Shell:
# az ad sp create-for-rbac --sdk-auth > my.azureauth
auth_file_path = getenv('AZURE_AUTH_LOCATION', None)
if auth_file_path is not None:
    print("Authenticating with Azure using credentials in file at {0}"
          .format(auth_file_path))

    aciclient = get_client_from_auth_file(
        ContainerInstanceManagementClient)
    resclient = get_client_from_auth_file(ResourceManagementClient)
else:
    print("\nFailed to authenticate to Azure. Have you set the"

Azure の Python 管理ライブラリで使用できる認証方法の詳細については、「Python 用 Azure 管理ライブラリを使用した認証」を参照してください。For more details about the available authentication methods in the Python management libraries for Azure, see Authenticate with the Azure Management Libraries for Python.

コンテナー グループを作成する - 1 つのコンテナーCreate container group - single container

この例では、1 つのコンテナーを含むコンテナー グループが作成されますThis example creates a container group with a single container


def create_container_group(aci_client, resource_group,
                           container_group_name, container_image_name):
    """Creates a container group with a single container.

    Arguments:
        aci_client {azure.mgmt.containerinstance.ContainerInstanceManagementClient}
                    -- An authenticated container instance management client.
        resource_group {azure.mgmt.resource.resources.models.ResourceGroup}
                    -- The resource group in which to create the container group.
        container_group_name {str}
                    -- The name of the container group to create.
        container_image_name {str}
                    -- The container image name and tag, for example:
                       microsoft\aci-helloworld:latest
    """
    print("Creating container group '{0}'...".format(container_group_name))

    # Configure the container
    container_resource_requests = ResourceRequests(memory_in_gb=1, cpu=1.0)
    container_resource_requirements = ResourceRequirements(
        requests=container_resource_requests)
    container = Container(name=container_group_name,
                          image=container_image_name,
                          resources=container_resource_requirements,
                          ports=[ContainerPort(port=80)])

    # Configure the container group
    ports = [Port(protocol=ContainerGroupNetworkProtocol.tcp, port=80)]
    group_ip_address = IpAddress(ports=ports,
                                 dns_name_label=container_group_name,
                                 type="Public")
    group = ContainerGroup(location=resource_group.location,
                           containers=[container],
                           os_type=OperatingSystemTypes.linux,
                           ip_address=group_ip_address)

    # Create the container group
    aci_client.container_groups.create_or_update(resource_group.name,
                                                 container_group_name,
                                                 group)

    # Get the created container group
    container_group = aci_client.container_groups.get(resource_group.name,
                                                      container_group_name)

    print("Once DNS has propagated, container group '{0}' will be reachable at"
          " http://{1}".format(container_group_name,

コンテナー グループを作成する - 複数のコンテナーCreate container group - multiple containers

この例では、アプリケーション コンテナーとサイドカー コンテナーという 2 つのコンテナーを含むコンテナー グループが作成されます。This example creates a container group with two containers: an application container and a sidecar container.


def create_container_group_multi(aci_client, resource_group,
                                 container_group_name,
                                 container_image_1, container_image_2):
    """Creates a container group with two containers in the specified
       resource group.

    Arguments:
        aci_client {azure.mgmt.containerinstance.ContainerInstanceManagementClient}
                    -- An authenticated container instance management client.
        resource_group {azure.mgmt.resource.resources.models.ResourceGroup}
                    -- The resource group in which to create the container group.
        container_group_name {str}
                    -- The name of the container group to create.
        container_image_1 {str}
                    -- The first container image name and tag, for example:
                       microsoft\aci-helloworld:latest
        container_image_2 {str}
                    -- The second container image name and tag, for example:
                       microsoft\aci-tutorial-sidecar:latest
    """
    print("Creating container group '{0}'...".format(container_group_name))

    # Configure the containers
    container_resource_requests = ResourceRequests(memory_in_gb=2, cpu=1.0)
    container_resource_requirements = ResourceRequirements(
        requests=container_resource_requests)

    container_1 = Container(name=container_group_name + '-1',
                            image=container_image_1,
                            resources=container_resource_requirements,
                            ports=[ContainerPort(port=80)])

    container_2 = Container(name=container_group_name + '-2',
                            image=container_image_2,
                            resources=container_resource_requirements)

    # Configure the container group
    ports = [Port(protocol=ContainerGroupNetworkProtocol.tcp, port=80)]
    group_ip_address = IpAddress(
        ports=ports, dns_name_label=container_group_name, type='Public')
    group = ContainerGroup(location=resource_group.location,
                           containers=[container_1, container_2],
                           os_type=OperatingSystemTypes.linux,
                           ip_address=group_ip_address)

    # Create the container group
    aci_client.container_groups.create_or_update(resource_group.name,
                                                 container_group_name, group)

    # Get the created container group
    container_group = aci_client.container_groups.get(resource_group.name,
                                                      container_group_name)

タスク ベースのコンテナー グループを作成するCreate task-based container group

この例では、1 つのタスク ベースのコンテナーを含むコンテナー グループが作成されます。This example creates a container group with a single task-based container. この例では、複数の機能を示します。This example demonstrates several features:

  • コマンド ライン オーバーライド - コンテナーの Dockerfile の CMD 行で指定されているものとは異なるカスタム コマンド ラインが指定されます。Command line override - A custom command line, different from that which is specified in the container's Dockerfile CMD line, is specified. コマンド ライン オーバーライドを使用すると、コンテナーの起動時に実行するカスタム コマンド ラインを指定して、コンテナーに組み込まれている既定のコマンド ラインをオーバーライドできます。Command line override allows you to specify a custom command line to execute at container startup, overriding the default command line baked-in to the container. コンテナーの起動時に複数のコマンドが実行される場合は、次が適用されます。Regarding executing multiple commands at container startup, the following applies:

    echo FOO BAR など、1 つのコマンドを、複数のコマンド ライン引数を指定して実行する場合、その引数は、1 つの文字列リストとして Containercommand プロパティに指定する必要があります。If you want to run a single command with several command-line arguments, for example echo FOO BAR, you must supply them as a string list to the command property of the Container. 例:For example:

    command = ['echo', 'FOO', 'BAR']

    ただし、複数のコマンドを、複数の (可能性がある) 引数を指定して実行する場合は、シェルを実行し、チェーンされたコマンドを 1 つの引数として渡す必要があります。If, however, you want to run multiple commands with (potentially) multiple arguments, you must execute a shell and pass the chained commands as an argument. たとえば、これにより echotail コマンドの両方が実行されます。For example, this executes both an echo and a tail command:

    command = ['/bin/sh', '-c', 'echo FOO BAR && tail -f /dev/null']

  • 環境変数 - 2 つの環境変数が、コンテナー グループ内のコンテナーに対して指定されています。Environment variables - Two environment variables are specified for the container in the container group. 環境変数を使用して、実行時のスクリプトまたはアプリケーションの動作を変更するか、動的な情報を、コンテナー内で実行されているアプリケーションに渡します。Use environment variables to modify script or application behavior at runtime, or otherwise pass dynamic information to an application running in the container.

  • 再起動ポリシー - コンテナーは再起動ポリシー "Never" を使用して構成されます。これは、バッチ ジョブの一環として実行されるタスク ベースのコンテナーに有用です。Restart policy - The container is configured with a restart policy of "Never," useful for task-based containers that are executed as part of a batch job.

  • AzureOperationPoller による操作のポーリング - create メソッドの呼び出し後、その操作はポーリングされます。これにより、操作が完了したことを判断し、コンテナー グループのログを取得できます。Operation polling with AzureOperationPoller - After the create method is invoked, the operation is polled to determine when it has completed and the container group's logs can be obtained.

                               container_group.ip_address.fqdn))


def run_task_based_container(aci_client, resource_group, container_group_name,
                             container_image_name, start_command_line=None):
    """Creates a container group with a single task-based container who's
       restart policy is 'Never'. If specified, the container runs a custom
       command line at startup.

    Arguments:
        aci_client {azure.mgmt.containerinstance.ContainerInstanceManagementClient}
                    -- An authenticated container instance management client.
        resource_group {azure.mgmt.resource.resources.models.ResourceGroup}
                    -- The resource group in which to create the container group.
        container_group_name {str}
                    -- The name of the container group to create.
        container_image_name {str}
                    -- The container image name and tag, for example:
                       microsoft\aci-helloworld:latest
        start_command_line {str}
                    -- The command line that should be executed when the
                       container starts. This value can be None.
    """
    # If a start command wasn't specified, use a default
    if start_command_line is None:
        start_command_line = "python wordcount.py http://shakespeare.mit.edu/romeo_juliet/full.html"

    # Configure some environment variables in the container which the
    # wordcount.py or other script can read to modify its behavior.
    env_var_1 = EnvironmentVariable(name='NumWords', value='5')
    env_var_2 = EnvironmentVariable(name='MinLength', value='8')

    print("Creating container group '{0}' with start command '{1}'"
          .format(container_group_name, start_command_line))

    # Configure the container
    container_resource_requests = ResourceRequests(memory_in_gb=1, cpu=1.0)
    container_resource_requirements = ResourceRequirements(
        requests=container_resource_requests)
    container = Container(name=container_group_name,
                          image=container_image_name,
                          resources=container_resource_requirements,
                          command=start_command_line.split(),
                          environment_variables=[env_var_1, env_var_2])

    # Configure the container group
    group = ContainerGroup(location=resource_group.location,
                           containers=[container],
                           os_type=OperatingSystemTypes.linux,
                           restart_policy=ContainerGroupRestartPolicy.never)

    # Create the container group
    result = aci_client.container_groups.create_or_update(resource_group.name,
                                                          container_group_name,
                                                          group)

    # Wait for the container create operation to complete. The operation is
    # "done" when the container group provisioning state is one of:
    # Succeeded, Canceled, Failed
    while result.done() is False:
        sys.stdout.write('.')
        time.sleep(1)

    # Get the provisioning state of the container group.
    container_group = aci_client.container_groups.get(resource_group.name,
                                                      container_group_name)
    if str(container_group.provisioning_state).lower() == 'succeeded':
        print("\nCreation of container group '{}' succeeded."
              .format(container_group_name))
    else:
        print("\nCreation of container group '{}' failed. Provisioning state"
              "is: {}".format(container_group_name,
                              container_group.provisioning_state))

    # Get the logs for the container
    logs = aci_client.container.list_logs(resource_group.name,
                                          container_group_name,

コンテナー グループの一覧を表示するList container groups

この例では、リソース グループ内のコンテナー グループの一覧が表示され、そのプロパティがいくつか出力されます。This example lists the container groups in a resource group and then prints a few of their properties.

コンテナー グループの一覧を表示すると、返された各グループの instance_viewNone になっています。When you list container groups,the instance_view of each returned group is None. コンテナー グループ内のコンテナーの詳細を取得するには、コンテナー グループに対して get を使用します。これにより、instance_view プロパティが設定されたグループが返されます。To get the details of the containers within a container group, you must then get the container group, which returns the group with its instance_view property populated. コンテナー グループのコンテナーをその instance_view で反復処理する例については、次の「既存のコンテナー グループを取得する」を参照してください。See the next section, Get an existing container group, for an example of iterating over a container group's containers in its instance_view.

    print("Logs for container '{0}':".format(container_group_name))
    print("{0}".format(logs.content))


def list_container_groups(aci_client, resource_group):
    """Lists the container groups in the specified resource group.

    Arguments:
       aci_client {azure.mgmt.containerinstance.ContainerInstanceManagementClient}
                   -- An authenticated container instance management client.
       resource_group {azure.mgmt.resource.resources.models.ResourceGroup}
                   -- The resource group containing the container group(s).
    """
    print("Listing container groups in resource group '{0}'...".format(
        resource_group.name))

既存のコンテナー グループを取得するGet an existing container group

この例では、リソース グループから特定のコンテナー グループが取得され、そのプロパティ (そのコンテナーを含む) とその値がいくつか出力されます。This example gets a specific container group from a resource group, and then prints a few of its properties (including its containers) and their values.

取得操作によって、returns a container group with its instance_view が設定されたコンテナー グループが返されます。これにより、グループ内の各コンテナーを反復処理できます。The get operation returns a container group with its instance_view populated, which allows you to iterate over each container in the group. コンテナー グループの instance_vew プロパティは get 操作によってのみ設定されます。サブスクリプションまたはリソース グループ内のコンテナー グループを一覧表示しても、この操作は性質上負荷がかかる可能性があるため、インスタンス ビューは設定されません (たとえば、数百のコンテナー グループを一覧表示すると、それぞれのグループに複数のコンテナーが含まれる可能性があります)。Only the get operation populates the instance_vew property of the container group--listing the container groups in a subscription or resource group doesn't populate the instance view due to the potentially expensive nature of the operation (for example, when listing hundreds of container groups, each potentially containing multiple containers). 前に「コンテナー グループの一覧を表示する」で説明したように、list の実行後、特定のコンテナー グループのコンテナー インスタンスの詳細を取得するには、そのグループに対して get を実行する必要があります。As mentioned previously in the List container groups section, after a list, you must subsequently get a specific container group to obtain its container instance details.

        resource_group.name)

    for container_group in container_groups:
        print("  {0}".format(container_group.name))


def print_container_group_details(aci_client, resource_group, container_group_name):
    """Gets the specified container group and then prints a few of its properties and their values.

    Arguments:
        aci_client {azure.mgmt.containerinstance.ContainerInstanceManagementClient}
                    -- An authenticated container instance management client.
        resource_group {azure.mgmt.resource.resources.models.ResourceGroup}
                    -- The name of the resource group containing the container
                       group.
        container_group_name {str}
                    -- The name of the container group whose details should be
                       printed.
    """
    print("Getting container group details for container group '{0}'..."
          .format(container_group_name))

    container_group = aci_client.container_groups.get(resource_group.name,
                                                      container_group_name)
    print("------------------------")
    print("Name:   {0}".format(container_group.name))
    print("State:  {0}".format(container_group.provisioning_state))
    print("FQDN:   {0}".format(container_group.ip_address.fqdn))
    print("IP:     {0}".format(container_group.ip_address.ip))
    print("Region: {0}".format(container_group.location))

コンテナー グループを削除するDelete a container group

この例では、リソース グループの複数のコンテナー グループと、リソース グループが削除されます。This example deletes several container groups from a resource group, as well as the resource group.


# Clean up resources
input("Press ENTER to delete all resources created by this sample: ")
aciclient.container_groups.delete(resource_group_name,
                                  container_group_name)
aciclient.container_groups.delete(resource_group_name,
                                  multi_container_group_name)
aciclient.container_groups.delete(resource_group_name,
                                  task_container_group_name)

次の手順Next steps