Программная загрузка пакета пакетных заданий Azure

Я нашел, как загружать / управлять пакетами приложений пакетных заданий Azure через пользовательский интерфейс:

https://docs.microsoft.com/en-us/azure/batch/batch-application-packages

А как загружать и управлять пакетами ресурсов программно:

https://github.com/Azure/azure-batch-samples/tree/master/CSharp/GettingStarted/02_PoolsAndResourceFiles

Но я не могу соединить 2 и 2, как программно управлять пакетами приложений. Есть ли конечная точка API, которую мы можем вызвать для загрузки / управления пакетом приложений при настройке пакетного задания?

2 ответа

Решение

Поскольку это не совсем просто, я запишу свои выводы. Это шаги для программной загрузки пакетов приложений через приложение, которое находится без присмотра - ввод пользователя (например, учетные данные Azure) не требуется.

В Azure Portal:

  • Создайте пакетное приложение Azure
  • Создайте новое приложение Azure AD (в качестве типа приложения используйте Web app / API)
  • Выполните следующие действия, чтобы создать секретный ключ и назначить роль учетной записи пакетной службы Azure.
  • Запишите следующие учетные данные / идентификаторы:

В вашем коде:

  • Установите пакеты NuGet https://www.nuget.org/packages/Microsoft.Azure.Management.Batch/, WindowsAzure.Storage и https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/
  • Получите токен доступа и создайте BatchManagementClient
  • Позвоните ApplicationPackageOperationsExtensions.CreateAsync метод, который должен вернуть ApplicationPackage
  • ApplicationPackage содержит StorageUrl, который теперь можно использовать для загрузки пакета приложения через API хранилища
  • После того, как вы загрузили ApplicationPackage Вы должны активировать его через ApplicationPackageOperationsExtensions.ActivateAsync

Собрать весь код выглядит примерно так:

private const string ResourceUri = "https://management.core.windows.net/";
private const string AuthUri = "https://login.microsoftonline.com/" + "{TenantId}";
private const string ApplicationId = "{ApplicationId}";
private const string ApplicationSecretKey = "{ApplicationSecretKey}";
private const string SubscriptionId = "{SubscriptionId}";
private const string ResourceGroupName = "{ResourceGroupName}";
private const string BatchAccountName = "{BatchAccountName}";

private async Task UploadApplicationPackageAsync() {
    // get the access token
    var authContext = new AuthenticationContext(AuthUri);
    var authResult = await authContext.AcquireTokenAsync(ResourceUri, new ClientCredential(ApplicationId, ApplicationSecretKey)).ConfigureAwait(false);

    // create the BatchManagementClient and set the subscription id
    var bmc = new BatchManagementClient(new TokenCredentials(authResult.AccessToken)) {
        SubscriptionId = SubscriptionId
    };

    // create the application package
    var createResult = await bmc.ApplicationPackage.CreateWithHttpMessagesAsync(ResourceGroupName, BatchAccountName, "MyPackage", "1.0").ConfigureAwait(false);

    // upload the package to the blob storage
    var cloudBlockBlob = new CloudBlockBlob(new Uri(createResult.Body.StorageUrl));
    cloudBlockBlob.Properties.ContentType = "application/x-zip-compressed";
    await cloudBlockBlob.UploadFromFileAsync("myZip.zip").ConfigureAwait(false);

    // create the application package
    var activateResult = await bmc.ApplicationPackage.ActivateWithHttpMessagesAsync(ResourceGroupName, BatchAccountName, "MyPackage", "1.0", "zip").ConfigureAwait(false);
}

Операции управления пакетными приложениями Azure выполняются в плоскости управления. Документы MSDN для этого пространства имен находятся здесь:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.batch

Пакет Nuget для Microsoft.Azure.Management.Batch это здесь:

https://www.nuget.org/packages/Microsoft.Azure.Management.Batch/

И в следующем примере показаны операции плоскости управления в C#, хотя это относится к операциям пакета, не относящимся к приложению:

https://github.com/Azure/azure-batch-samples/tree/master/CSharp/AccountManagement

Другие вопросы по тегам