Modifier

Partager via


Bibliothèques Azure Container Instances pour PythonAzure Container Instances libraries for Python

Utiliser les bibliothèques Azure Container Instances pour Python pour créer et gérer des instances de conteneurs Azure.Use the Microsoft Azure Container Instances libraries for Python to create and manage Azure container instances. Pour en savoir plus, consultez Vue d’ensemble d’Azure Container Instances.Learn more by reading the Azure Container Instances overview.

API de gestionManagement APIs

Utilisez la bibliothèque de gestion pour créer et gérer des instances de conteneurs Azure dans Azure.Use the management library to create and manage Azure container instances in Azure.

Installez le package de gestion via pip :Install the management package via pip:

pip install azure-mgmt-containerinstance

Exemple de sourceExample source

Si vous souhaitez voir les exemples de code suivants en contexte, vous pouvez les trouver dans le référentiel GitHub suivant :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

Une des méthodes plus simples pour authentifier les clients Kit de développement logiciel (comme les clients Azure Container Instances et Gestionnaire des ressources dans l’exemple suivant) est l’authentification basée sur un fichier.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. L’authentification basée sur un fichier interroge la variable d’environnement AZURE_AUTH_LOCATION en quête d’un accès à un fichier de données d’identification.File-based authentication queries the AZURE_AUTH_LOCATION environment variable for the path to a credentials file. Pour utiliser l’authentification basée sur un fichier :To use file-based authentication:

  1. Créer un fichier d’informations d’identification avec Azure CLI ou Cloud Shell :Create a credentials file with the Azure CLI or Cloud Shell:

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

    Si vous utilisez Cloud Shell pour générer le fichier d’informations d’identification, copiez son contenu dans un fichier local auquel votre application Python peut accéder.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. Définissez la AZURE_AUTH_LOCATION variable d’environnement sur le chemin d’accès complet au fichier d’informations d’identification généré.Set the AZURE_AUTH_LOCATION environment variable to the full path of the generated credentials file. Par exemple (dans Bash) :For example (in Bash):

    export AZURE_AUTH_LOCATION=/home/yourusername/my.azureauth
    

Une fois que vous avez créé le fichier d’informations d’identification et renseigné la variable d’environnement AZURE_AUTH_LOCATION, utilisez la méthode get_client_from_auth_file des objets client_factory module to initialize the ResourceManagementClient et 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")

Pour plus d’informations sur les méthodes d’authentification disponibles dans les bibliothèques de gestion Python pour Azure, consultez S’authentifier avec les bibliothèques de gestion Azure pour 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.

Créer un groupe de conteneurs : conteneur uniqueCreate container group - single container

Cet exemple crée un groupe de conteneurs à un seul conteneurThis 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))

Créer un groupe de conteneurs : plusieurs conteneursCreate container group - multiple containers

Cet exemple crée un groupe de conteneurs avec deux conteneurs : un conteneur d’application et un conteneur side-car.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))

Créer un groupe de conteneurs basé sur des tâchesCreate task-based container group

Cet exemple crée un groupe de conteneurs à un seul conteneur basé sur des tâches.This example creates a container group with a single task-based container. Cet exemple montre plusieurs fonctionnalités :This example demonstrates several features:

  • Command line override : une ligne de commande personnalisée, différente de celle spécifiée dans la ligne CMD du fichier Docker du conteneur est spécifiée.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 vous permet de spécifier une ligne de commande personnalisée à exécuter au démarrage du conteneur remplaçant la ligne de commande par défaut intégrée dans le conteneur.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. En ce qui concerne l’exécution de plusieurs commandes au démarrage du conteneur, ce qui suit s’applique :Regarding executing multiple commands at container startup, the following applies:

    Si vous souhaitez exécuter une commande unique avec plusieurs arguments de ligne de commande, par exemple echo FOO BAR, vous devez les fournir sous forme de liste de chaînes à la propriété command du Conteneur.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. Par exemple :For example:

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

    Si, toutefois, vous souhaitez exécuter plusieurs commandes avec (éventuellement) plusieurs arguments, vous devez exécuter un interpréteur de commandes et passer les commandes en chaînes en tant qu’argument.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. Par exemple, cela exécute à la fois une commande echo et une commande tail :For example, this executes both an echo and a tail command:

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

  • Variables d’environnement : deux variables d’environnement sont spécifiées pour le conteneur du groupe de conteneurs.Environment variables - Two environment variables are specified for the container in the container group. Utilisez des variables d’environnement pour modifier le comportement du script ou d’une application lors de l’exécution, ou transmettre des informations dynamiques à une application s’exécutant dans le conteneur.Use environment variables to modify script or application behavior at runtime, or otherwise pass dynamic information to an application running in the container.

  • Restart policy : le conteneur est configuré à l’aide d’une stratégie de redémarrage « Never », utile pour les conteneurs basés sur des tâches exécutés dans le cadre d’un programme de traitement par lots.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.

  • Interrogation des opérations avec AzureOperationPoller : une fois la méthode create appelée, l’opération est interrogée pour déterminer quand elle est terminée et à quel moment les journaux du groupe de conteneurs peuvent être obtenus.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))

Répertorier des groupes de conteneursList container groups

Cet exemple répertorie les groupes de conteneurs dans un groupe de ressources, puis imprime certaines de leurs propriétés.This example lists the container groups in a resource group and then prints a few of their properties.

Lorsque vous listez les groupes de conteneurs, l’instance_view de chaque groupe retourné est None.When you list container groups,the instance_view of each returned group is None. Pour obtenir les détails des conteneurs d’un groupe de conteneurs, vous devez ensuite obtenir le groupe de conteneurs, qui retourne le groupe avec sa propriété instance_view renseignée.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. Consultez la section Obtenir un groupe de conteneurs existant suivant, pour obtenir un exemple d’itération sur les conteneurs d’un groupe de conteneurs dans son 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))

Obtenir un groupe de conteneurs existantGet an existing container group

Cet exemple obtient un groupe de conteneurs spécifique à partir d’un groupe de ressources, puis imprime certaines de ses propriétés (y compris ses conteneurs) et ses valeurs.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.

L’opération get returns a container group with its instance_view est renseignée, ce qui vous permet d’itérer sur chaque conteneur du groupe.The get operation returns a container group with its instance_view populated, which allows you to iterate over each container in the group. Seule l’opération get remplit la propriété instance_vew du groupe de conteneurs. Le fait de répertorier les groupes de conteneurs dans un abonnement ou un groupe de ressources n’a pas pour effet d’alimenter la vue d’instance en raison de la nature potentiellement onéreuse de l’opération (par exemple, lorsque vous répertoriez des centaines de groupes de conteneurs contenant potentiellement plusieurs conteneurs).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). Comme mentionné précédemment dans la section Répertorier des groupes de conteneurs, après un list, vous devez get un groupe de conteneurs spécifique pour obtenir les détails relatifs à l’instance de conteneur s’y rapportant.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("  ----------")

Supprimer un groupe de conteneursDelete a container group

Cet exemple supprime plusieurs groupes de conteneurs à partir d’un groupe de ressources, ainsi que le groupe de ressources.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)

Étapes suivantesNext steps