Задание. Доступ к Batch-аккаунту, используя .NET клиентскую библиотеку

Завершено

Важный

Для выполнения этого упражнения вам потребуется собственная подписка Azure, и возможно возникнут расходы. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись перед тем, как начать.

API клиента пакетной службы Azure позволяет программно управлять созданием, выполнением и мониторингом всех ресурсов в учетной записи пакетной службы.

В этом упражнении мы создадим консольное приложение и подключите его к учетной записи пакетной службы Azure, созданной ранее с помощью пакета Microsoft.Azure.Batch NuGet. Чтобы проверить, работает ли эта настройка, мы запросим учетную запись пакетной службы, чтобы проверить правильность добавления ffmpeg в учетную запись.

Создание локального консольного приложения

Используйте Cloud Shell для выполнения оставшихся упражнений в этом модуле.

  1. Запустите Cloud Shell на портале Azure, выбрав значок Cloud Shell в верхнем меню портала.

  2. В раскрывающемся списке в верхней части окна Cloud Shell выберите Bash.

  3. Выполните следующие команды в Cloud Shell, чтобы создать новый каталог для приложения:

    mkdir cutifypets
    cd cutifypets
    
  4. Создайте консольное приложение .NET Core с помощью команды dotnet new, а затем выполните следующую команду:

    dotnet new console
    dotnet run
    

    Если консольное приложение успешно создано, в консоли отобразится следующее:

    Hello World!
    

Настройка сведений о подключении для приложения

  1. В Cloud Shell добавьте пакет NuGet Azure Batch с помощью следующей команды dotnet add package:

    dotnet add package Microsoft.Azure.Batch
    
  2. Выполните следующую команду в Cloud Shell, чтобы сохранить группу ресурсов в переменной среды, чтобы использовать ее в последующих командах. Замените [YOUR RESOURCE GROUP] именем группы ресурсов, которую вы использовали при создании учетной записи Batch.

    export RESOURCE_GROUP=[YOUR RESOURCE GROUP]
    
  3. Используйте следующие команды для хранения учетных данных batch-счета в переменных окружения, к которым можно получить доступ с помощью консольного приложения.

    export BATCH_URL='https://'$(az batch account list --query "[?contains(name,'cuti')].accountEndpoint" --output tsv)
    export BATCH_NAME=$(az batch account list --query "[?contains(name,'cuti')].name" --output tsv)
    export BATCH_KEY=$(az batch account keys list --name $BATCH_NAME --query primary -o tsv --resource-group $RESOURCE_GROUP)
    
  4. Используйте следующую команду, чтобы проверить правильность сохраненных значений:

    echo 'URL='$BATCH_URL 'NAME='$BATCH_NAME 'KEY='$BATCH_KEY
    

    Убедитесь, что у вас есть эти значения. Если вы должны перезапустить Cloud Shell в любой момент, необходимо снова задать эти переменные.

  5. Используйте следующий код, чтобы изменить файл Program.cs в редакторе:

    code Program.cs
    
  6. Замените весь существующий код следующим кодом:

    namespace cutifypets
    {
        using System;
        using Microsoft.Azure.Batch;
        using Microsoft.Azure.Batch.Auth;
        using Microsoft.Azure.Batch.Common;
    
        class Program
        {
            private const string envVarBatchURI = "BATCH_URL";
            private const string envVarBatchName = "BATCH_NAME";
            private const string envVarKey = "BATCH_KEY";
    
            private static string batchAccountName;
            private static string batchAccountUrl;
            private static string batchAccountKey;
    
            static void Main(string[] args)
            {
                // Read the environment variables to allow the app to connect to the Azure Batch account
                batchAccountUrl = Environment.GetEnvironmentVariable(envVarBatchURI);
                batchAccountName = Environment.GetEnvironmentVariable(envVarBatchName);
                batchAccountKey = Environment.GetEnvironmentVariable(envVarKey);
    
                // Show the user the batch the app is attaching to
                Console.WriteLine("URL: {0}, Name: {1}, Key: {2}", batchAccountUrl, batchAccountName, batchAccountKey);
    
                // The batch client requires a BatchSharedKeyCredentials object to open a connection
                var sharedKeyCredentials = new BatchSharedKeyCredentials(batchAccountUrl, batchAccountName, batchAccountKey);
                var batchClient = BatchClient.Open(sharedKeyCredentials);
    
                // The batchClient object can reference all the application packages, and get a summary of their details
                foreach (var app in batchClient.ApplicationOperations.ListApplicationSummaries() ) {
                    // For each application package, print to the console their name and version number
                    Console.WriteLine("Installed app: {0}({1})", app.Id, app.Versions[0]);
                }
            }
        }
    }
    

    Ознакомьтесь с предыдущим кодом и комментариями. Консольное приложение импортирует библиотеку клиента Microsoft.Azure.Batch, чтобы добавить возможности пакетной службы Azure. Используя переменные среды, хранящиеся на предыдущих этапах, приложение открывает подключение к учетной записи Batch, созданной на портале Azure. Затем клиент пакетной службы может запрашивать свойства служб в пакете. Пример кода выполняет итерацию по пакетам приложений, где отображаются сведения о приложении ffmpeg, которое вы загрузили.

  7. В редакторе кода щелкните правой кнопкой мыши и выберите Сохранить, а затем щелкните правой кнопкой мыши и выберите Выйти.

  8. В Cloud Shell скомпилируйте и запустите приложение с помощью следующей команды:

    dotnet run
    
  9. Запуск приложения записывает пакет приложения в консоль. Вы должны получить следующий результат:

    Installed app: ffmpeg(3.4)
    

Поздравляю! Вы успешно интегрировали библиотеки пакетной службы Azure и службы хранилища Azure в приложение, чтобы получить список установленных приложений в учетной записи пакетной службы. Следующим шагом является создание пула вычислительных узлов для выполнения заданий.