Python için Azure Container Instances kitaplıkları

Azure Container Instances oluşturmak ve yönetmek için Python için Microsoft Azure Container Instances kitaplıklarını kullanın. Azure Container Instances genel bakışını okuyarak daha fazla bilgi edinin.

Yönetim API’leri

Azure'da Azure Container Instances oluşturmak ve yönetmek için yönetim kitaplığını kullanın.

Yönetim paketini pip aracılığıyla yükleyin:

pip install azure-mgmt-containerinstance

Örnek kaynak

Bağlam içinde aşağıdaki kod örneklerini görmek isterseniz, bunları aşağıdaki GitHub deposunda bulabilirsiniz:

Azure-Samples/aci-docs-sample-python

Kimlik Doğrulaması

SDK istemcilerinin kimliğini doğrulamanın en kolay yollarından biri (aşağıdaki örnekteki Azure Container Instances ve Resource Manager istemcileri gibi) dosya tabanlı kimlik doğrulamasıdır. Dosya tabanlı kimlik doğrulaması, bir kimlik bilgileri dosyasının yolu için ortam değişkenini sorgular AZURE_AUTH_LOCATION . Dosya tabanlı kimlik doğrulamasını kullanmak için:

  1. Azure CLI veya Cloud Shell ile kimlik bilgileri dosyası oluşturun:

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

    Kimlik bilgileri dosyasını oluşturmak için Cloud Shell kullanırsanız, içeriğini Python uygulamanızın erişebileceği yerel bir dosyaya kopyalayın.

  2. Ortam değişkenini AZURE_AUTH_LOCATION oluşturulan kimlik bilgileri dosyasının tam yoluna ayarlayın. Örneğin (Bash'te):

    export AZURE_AUTH_LOCATION=/home/yourusername/my.azureauth
    

Kimlik bilgileri dosyasını oluşturup ortam değişkenini AZURE_AUTH_LOCATION doldurduktan sonra ResourceManagementClient ve ContainerInstanceManagementClient nesnelerini başlatmak için client_factory modülünün yöntemini kullanınget_client_from_auth_file.

# 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 için Python yönetim kitaplıklarındaki kullanılabilir kimlik doğrulama yöntemleri hakkında daha fazla bilgi için bkz. Python için Azure Yönetim Kitaplıkları ile kimlik doğrulama.

Kapsayıcı grubu oluşturma - tek kapsayıcı

Bu örnek, tek bir kapsayıcı ile bir kapsayıcı grubu oluşturur


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,

Kapsayıcı grubu oluşturma - birden çok kapsayıcı

Bu örnek, iki kapsayıcı içeren bir kapsayıcı grubu oluşturur: uygulama kapsayıcısı ve sepet kapsayıcısı.


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)

Görev tabanlı kapsayıcı grubu oluşturma

Bu örnek, tek bir görev tabanlı kapsayıcı ile bir kapsayıcı grubu oluşturur. Bu örnekte çeşitli özellikler gösterilmektedir:

  • Komut satırını geçersiz kılma - Kapsayıcının Dockerfile CMD satırında belirtilenden farklı bir özel komut satırı belirtilir. Komut satırını geçersiz kılma, kapsayıcı başlangıcında yürütülecek özel bir komut satırı belirtmenize olanak tanır ve varsayılan komut satırı kapsayıcıda yerleşik olarak geçersiz kılınır. Kapsayıcı başlangıcında birden çok komut yürütmeyle ilgili olarak, aşağıdakiler geçerlidir:

    Örneğinecho FOO BAR, birkaç komut satırı bağımsız değişkeniyle tek bir komut çalıştırmak istiyorsanız, bunları Kapsayıcınıncommand özelliğine dize listesi olarak sağlamanız gerekir. Örnek:

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

    Ancak, birden çok bağımsız değişkenle (potansiyel olarak) birden çok komut çalıştırmak istiyorsanız, bir kabuk yürütmeniz ve zincirlenmiş komutları bağımsız değişken olarak geçirmeniz gerekir. Örneğin, bu hem hem echo de komutunu tail yürütür:

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

  • Ortam değişkenleri - Kapsayıcı grubundaki kapsayıcı için iki ortam değişkeni belirtilir. Çalışma zamanında betiği veya uygulama davranışını değiştirmek ya da kapsayıcıda çalışan bir uygulamaya dinamik bilgi geçirmek için ortam değişkenlerini kullanın.

  • Yeniden başlatma ilkesi - Kapsayıcı, bir toplu işin parçası olarak yürütülen görev tabanlı kapsayıcılar için yararlı olan "Asla" yeniden başlatma ilkesiyle yapılandırılır.

  • AzureOperationPoller ile işlem yoklaması - Oluşturma yöntemi çağrıldıktan sonra işlemin ne zaman tamamlandığını belirlemek için yoklanır ve kapsayıcı grubunun günlükleri alınabilir.

                               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,

Kapsayıcı gruplarını listeleme

Bu örnek, bir kaynak grubundaki kapsayıcı gruplarını listeler ve ardından özelliklerinden birkaçını yazdırır.

Kapsayıcı gruplarını listelediğinizde, döndürülen her grubun instance_view şeklindedir None. Kapsayıcı grubu içindeki kapsayıcıların ayrıntılarını almak için, ardından kapsayıcı grubunu almanız gerekir. Bu grup, özelliği doldurulmuş olarak grubu instance_view döndürür. Bir kapsayıcı grubunun kapsayıcıları üzerinde yineleme örneği için bir sonraki bölüm olan Mevcut kapsayıcı grubunu instance_viewalma bölümüne bakın.

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

Mevcut bir kapsayıcı grubunu alma

Bu örnek, bir kaynak grubundan belirli bir kapsayıcı grubunu alır ve ardından özelliklerinden birkaçını (kapsayıcıları dahil) ve değerlerini yazdırır.

get işlemi, instance_view doldurulmuş bir kapsayıcı grubu döndürür ve bu da gruptaki her kapsayıcıyı yinelemenizi sağlar. get Yalnızca işlem kapsayıcı grubunun özelliğini doldururinstance_vew; bir abonelik veya kaynak grubundaki kapsayıcı gruplarını listelemek, işlemin pahalı olabilecek doğası nedeniyle örnek görünümünü doldurmaz (örneğin, her biri birden çok kapsayıcı içerebilen yüzlerce kapsayıcı grubunu listelerken). Kapsayıcı gruplarını listeleme bölümünde daha önce belirtildiği gibi, sonrasında listkapsayıcı örneği ayrıntılarını almak için belirli bir kapsayıcı grubuna sahip olmanız gerekir get .

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

Kapsayıcı grubunu silme

Bu örnek hem kaynak grubundan hem de kaynak grubundan birkaç kapsayıcı grubunu siler.


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

Sonraki adımlar