Editar

Partilhar via


Bibliotecas de Instâncias de Contêiner do Azure para PythonAzure Container Instances libraries for Python

Use as bibliotecas de Instâncias de Contêiner do Microsoft Azure para Python para criar e gerenciar as instâncias de contêiner do Azure.Use the Microsoft Azure Container Instances libraries for Python to create and manage Azure container instances. Saiba mais lendo a Visão geral das Instâncias de Contêiner do Azure.Learn more by reading the Azure Container Instances overview.

APIs de gerenciamentoManagement APIs

Use a biblioteca de gerenciamento para criar e gerenciar instâncias de contêiner do Azure no Azure.Use the management library to create and manage Azure container instances in Azure.

Instalar o pacote de gerenciamento com pip:Install the management package via pip:

pip install azure-mgmt-containerinstance

Fonte de exemploExample source

Se quiser ver os seguintes exemplos de código em contexto, você pode encontrá-los no repositório do GitHub a seguir: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

Uma das maneiras mais fáceis para autenticar clientes SDK (como os clientes de Instâncias de Contêiner do Azure e do Gerenciador de Recursos no exemplo a seguir) é com a autenticação baseada em arquivo.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. A autenticação baseada em arquivo consulta a variável de ambiente AZURE_AUTH_LOCATION para o caminho para um arquivo de credenciais.File-based authentication queries the AZURE_AUTH_LOCATION environment variable for the path to a credentials file. Para usar a autenticação baseada em arquivo:To use file-based authentication:

  1. Criar um arquivo de credenciais com a CLI do Azure ou o Cloud Shell:Create a credentials file with the Azure CLI or Cloud Shell:

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

    Se você usar o Cloud Shell para gerar o arquivo de credenciais, copie o conteúdo em um arquivo local onde seu aplicativo Python possa acessar.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. Defina a variável de ambiente AZURE_AUTH_LOCATION para o caminho completo do arquivo de credenciais gerado.Set the AZURE_AUTH_LOCATION environment variable to the full path of the generated credentials file. Por exemplo, (no Bash):For example (in Bash):

    export AZURE_AUTH_LOCATION=/home/yourusername/my.azureauth
    

Depois que você criar o arquivo de credenciais e preencher a variável de ambiente AZURE_AUTH_LOCATION, use o método get_client_from_auth_file dos objetos client_factory module to initialize the ResourceManagementClient e 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_AUTH_LOCATION environment variable?\n")

Para obter mais detalhes sobre os métodos de autenticação disponíveis nas bibliotecas de gerenciamento do Python para Azure, confira Autenticar com Bibliotecas de Gerenciamento do Azure para Python.For more details about the available authentication methods in the Python management libraries for Azure, see Authenticate with the Azure Management Libraries for Python.

Criar grupo de contêineres - contêiner únicoCreate container group - single container

Este exemplo cria um grupo de contêineres com um único contêinerThis 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,
                               container_group.ip_address.fqdn))

Criar grupo de contêineres - vários contêineresCreate container group - multiple containers

Este exemplo cria um grupo de contêineres com dois contêineres: um contêiner do aplicativo e um secundário.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)

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

Criar grupo de contêineres baseado em tarefasCreate task-based container group

Este exemplo cria um grupo de contêineres com um único contêiner baseado em tarefas.This example creates a container group with a single task-based container. Este exemplo demonstra vários recursos:This example demonstrates several features:

  • Substituição de linha de comando - uma linha de comando personalizada, diferente da que é especificada na linha CMD do Dockerfile do contêiner, é especificada.Command line override - A custom command line, different from that which is specified in the container's Dockerfile CMD line, is specified. A substituição de linha de comando permite que você especifique uma linha de comando personalizada para executar na inicialização do contêiner, substituindo a linha de comando padrão salva no contêiner.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. Sobre a execução de vários comandos na inicialização do contêiner, aplica-se o seguinte:Regarding executing multiple commands at container startup, the following applies:

    Se você quiser executar um único comando com vários argumentos da linha de comando, por exemplo echo FOO BAR, deve fornecê-los como uma lista de cadeia de caracteres para a propriedade command do Contêiner.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. Por exemplo:For example:

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

    Se, no entanto, quiser executar vários comandos com (potencialmente) vários argumentos, deve executar um shell e passar os comandos em cadeia como um argumento.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. Por exemplo, isso executa os comandos echo e tail:For example, this executes both an echo and a tail command:

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

  • Variáveis de ambiente - Duas variáveis de ambiente são especificadas para o contêiner no grupo de contêiner.Environment variables - Two environment variables are specified for the container in the container group. Use variáveis de ambiente para modificar o comportamento de script ou aplicativo em tempo de execução ou, caso contrário, passar informações dinâmicas para um aplicativo em execução no contêiner.Use environment variables to modify script or application behavior at runtime, or otherwise pass dynamic information to an application running in the container.

  • Reiniciar política - O contêiner está configurado com uma política de reinicialização de "Nunca", útil para contêineres baseados em tarefas que são executados como parte de um trabalho em lotes.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.

  • Sondagem da operação com o AzureOperationPoller – Depois que o método de criação é chamado, a operação é sondada para determinar quando será concluída e os logs do grupo de contêineres poderão ser obtidos.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.

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, 
                                          container.name)

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

Listar grupos de contêineresList container groups

Este exemplo lista os grupos de contêineres em um grupo de recursos e, em seguida, imprime algumas de suas propriedades.This example lists the container groups in a resource group and then prints a few of their properties.

Ao listar grupos de contêineres, o instance_view de cada grupo retornado é None.When you list container groups,the instance_view of each returned group is None. Para obter os detalhes dos contêineres dentro de um grupo de contêineres, você deve obter o grupo de contêineres, que retorna o grupo com sua propriedade instance_view preenchida.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. Confira a próxima seção, Obter um grupo existente do contêiner, para obter um exemplo de iteração em contêineres do grupo de contêineres em seu 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.

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))

    container_groups = aci_client.container_groups.list_by_resource_group(resource_group.name)

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

Obter um grupo de contêineres existenteGet an existing container group

Este exemplo obtém um grupo de contêineres específico de um grupo de recursos e, em seguida, imprime algumas de suas propriedades (incluindo os contêineres) e os valores.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.

A operação get returns a container group with its instance_view preenchida, que permite iterar com cada contêiner no grupo.The get operation returns a container group with its instance_view populated, which allows you to iterate over each container in the group. Somente a operação get preenche a propriedade instance_vew do grupo de contêineres – listar os grupos de contêineres em um assinatura ou grupo de recursos não preenche a exibição de instância devido à natureza potencialmente cara da operação (por exemplo, ao listar centenas de grupos de contêineres, cada uma contendo potencialmente vários contêineres).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). Como mencionado anteriormente na seção Listar grupos de contêineres, após um list, você deve subsequentemente get um grupo de contêineres específico para obter detalhes da instância de seu contêiner.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.

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))
    print("Containers:")
    for container in container_group.containers:
        print("  Name:  {0}".format(container.name))
        print("  Image: {0}".format(container.image))
        print("  State: {0}".format(container.instance_view.current_state.state))
        print("  ----------")

Excluir um grupo de contêineresDelete a container group

Este exemplo exclui vários grupos de contêineres de um grupo de recursos, além do grupo de recursos.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)
resclient.resource_groups.delete(resource_group_name)

Próximas etapasNext steps