Программная загрузка пакета пакетных заданий Azure
Я нашел, как загружать / управлять пакетами приложений пакетных заданий Azure через пользовательский интерфейс:
https://docs.microsoft.com/en-us/azure/batch/batch-application-packages
А как загружать и управлять пакетами ресурсов программно:
Но я не могу соединить 2 и 2, как программно управлять пакетами приложений. Есть ли конечная точка API, которую мы можем вызвать для загрузки / управления пакетом приложений при настройке пакетного задания?
2 ответа
Поскольку это не совсем просто, я запишу свои выводы. Это шаги для программной загрузки пакетов приложений через приложение, которое находится без присмотра - ввод пользователя (например, учетные данные Azure) не требуется.
В Azure Portal:
- Создайте пакетное приложение Azure
- Создайте новое приложение Azure AD (в качестве типа приложения используйте
Web app / API
) - Выполните следующие действия, чтобы создать секретный ключ и назначить роль учетной записи пакетной службы Azure.
- Запишите следующие учетные данные / идентификаторы:
- Идентификатор приложения Azure AD
- Секретный ключ приложения Azure AD
- Идентификатор клиента Azure AD
- Идентификатор подписки
- Пакетное имя аккаунта
- Имя группы ресурсов учетной записи пакета
В вашем коде:
- Установите пакеты 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