【问题标题】:Start/Stop An Azure SQL Data Warehouse via Azure Rest API or Azure Management SDK通过 Azure Rest API 或 Azure 管理 SDK 启动/停止 Azure SQL 数据仓库
【发布时间】:2017-09-22 17:03:47
【问题描述】:

我将创建一个 .NET api,它将由我的 Node.Js 服务器持续 ping。使用服务器时,api 将保持唤醒状态。当服务器不被使用时,它会停止 ping,并且 api 将处于空闲状态。我可以使用 API 中的 global.asax 文件来控制数据仓库的关闭。

有没有办法通过 Azure 资源管理客户端 SDK 在 C# 中暂停 SQL DW?还是我手动构建到 REST api 的 POST?

我一直在关注这篇博文中的详细信息,我觉得这很有帮助,但在 ResourceMangementClient 中找不到暂停资源(我的 DW)的方法。

https://zimmergren.net/developing-with-azure-resource-manager-part-3-build-an-application-using-c-which-is-using-the-azure-resource-manager-apis/

如果这是不可能的,我可以为 REST api 手动构建一个帖子,如下所示(感谢 azure twitter 支持!):

https://docs.microsoft.com/en-us/rest/api/sql/databases#Databases_Pause

**编辑(下面的工作答案):

我能够成功地使用 REST api 来停止/启动 DW,如下面的回答所示。还是不知道能不能用资源管理SDK来做。

如果您尝试这样做,请确保将身份验证设置为使用其余 API。详细信息可以在这里找到:

https://docs.microsoft.com/en-us/rest/api/?redirectedfrom=MSDN

【问题讨论】:

  • 据我所知,Azure App Service 没有任何生命周期事件。您需要在应用程序级别检查 webapp 何时空闲。

标签: .net http azure azure-sql-database


【解决方案1】:

这是我用来通过 Azure Rest API 正确关闭我的 DW 的解决方案。我仍然不确定 Azure SDK 是否有可能做到这一点。

    private static string AuthToken { get; set; }
    private static TokenCredentials TokenCredentials { get; set; }
    private static readonly HttpClient client = new HttpClient();


    AuthToken = GetAuthorizationToken();
    TokenCredentials = new TokenCredentials(AuthToken);

    createPost();


    private static string GetAuthorizationToken()
    {
        ClientCredential cc = new ClientCredential(ClientId, ServicePrincipalPassword);
        var context = new AuthenticationContext("https://login.windows.net/" + AzureTenantId);
        var result = context.AcquireToken("https://management.azure.com/", cc);
        if (result == null)
        {
            throw new InvalidOperationException("Failed to obtain the JWT token");
        }

        return result.AccessToken;
    }

    public void createPost()
    {
        var request = (HttpWebRequest)WebRequest.Create("https://management.azure.com/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/MYGROUP/providers/Microsoft.Sql/servers/MYSERVER/databases/MYDW/pause?api-version=2014-04-01");

        request.Method = "POST";
        request.ContentType = "application/json";
        request.ContentLength = 0;
        request.Headers.Add("Authorization", "Bearer " + AuthToken);

        var response = (HttpWebResponse)request.GetResponse();

        var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
        System.Diagnostics.Debug.WriteLine(responseString);
    }

【讨论】:

    猜你喜欢
    • 2022-10-04
    • 2020-02-21
    • 2016-10-26
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2016-06-30
    • 2016-02-06
    相关资源
    最近更新 更多