【问题标题】:Upload Azure Batch Job Application Package programmatically以编程方式上传 Azure Batch 作业应用程序包
【发布时间】:2017-02-15 20:14:39
【问题描述】:

我找到了如何通过 UI 上传/管理 Azure Batch 作业应用程序包:

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 端点来上传/管理应用程序包?

【问题讨论】:

  • 您好,您找到上传Jop申请包的方法了吗?
  • 我做到了,但我不记得如何并且不再参与该项目,因此我无法引用代码。我认为@fpark 下面的 cmets 帮助了我。抱歉,我无法提供更多帮助。 :(

标签: azure azure-batch


【解决方案1】:

由于这不是很简单,我会写下我的发现。 这些是通过无人参与的应用程序以编程方式上传应用程序包的步骤 - 不需要用户输入(例如 Azure 凭据)。

在 Azure 门户中:

  • 创建 Azure Batch 应用程序
  • Create a new Azure AD application(作为应用程序类型使用Web app / API
  • 按照 these steps 创建密钥并将角色分配给 Azure Batch 帐户
  • 记下以下凭据/ID:
    • Azure AD 应用程序 ID
    • Azure AD 应用程序密钥
    • Azure AD tenant id
    • Subscription id
    • 批量帐号名
    • 批处理帐户资源组名称

在您的代码中:

把整个代码放在一起看起来像这样:

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

【讨论】:

    【解决方案2】:

    Azure Batch 应用程序包管理操作发生在管理平面上。这个命名空间的 MSDN 文档在这里:

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

    Microsoft.Azure.Management.Batch 的 nuget 包在这里:

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

    以下示例显示了 C# 中的管理平面操作,尽管它是针对非应用程序包操作的:

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

    【讨论】:

    • 我会在文档中说明这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2012-06-01
    相关资源
    最近更新 更多