Как получить ключ хоста приложения-функции Azure по умолчанию из шаблона ARM? - PullRequest
0 голосов
/ 09 мая 2019

Я могу получить ключ хоста по умолчанию для приложения-функции Azure, используя / admin / host / keys REST API от Postman.

Я получаю токен от Куду, используя учетные данные развертывания и обычную аутентификацию на https://{{Function-App-Kudu-Url}}/api/functions/admin/token. Затем я включаю возвращенный токен с использованием аутентификации Bearer против https://{{Function-App-Url}}/admin/host/keys/default и получаю ключ хоста по умолчанию.

Однако я хотел бы получить это значение из шаблона ARM JSON. Поиск в Google не оказался плодотворным в раскрытии того, как это можно сделать.

Кажется, что, возможно, функция listkeys или listsecrets могла бы работать, но любые параметры, которые я им предоставляю, не возвращают ключ.

Как получить доступ к ключу хоста по умолчанию из шаблона ARM JSON?

1 Ответ

1 голос
/ 09 мая 2019

Вы сможете использовать функциональную клавишу хоста в своем функциональном коде, но, кроме того, функция выведет вашу функциональную клавишу в виде строки, совместимой с шаблоном ARM, так что вы сможете ссылаться на нее внутри основного шаблона ARM.

Вот код функции, адаптированный для получения ввода из шаблона ARM.

[FunctionName("GetKeys")]
public static async System.Threading.Tasks.Task<HttpResponseMessage> RunAsync([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, TraceWriter log, ExecutionContext context)
{
  //get the publishing profile information from function argument
  var queryStrings=req.GetQueryParameterDictionary();
  string publishingUserName = "";
  string publishingPassword = "";  
  string hostKey = "";  
  queryStrings.TryGetValue("publishingUserName", out publishingUserName);
  queryStrings.TryGetValue("publishingPassword", out publishingPassword);
  //get the JWT token to call the KUDU Api
  var base64Auth = Convert.ToBase64String(Encoding.Default.GetBytes($"{publishingUserName}:{publishingPassword}"));
  var apiUrl = new Uri($"https://{Environment.GetEnvironmentVariable("WEBSITE_CONTENTSHARE")}.scm.azurewebsites.net/api");
  string JWT;
  using (var client = new HttpClient())
  {
    client.DefaultRequestHeaders.Add("Authorization", $"Basic {base64Auth}");
    var result = client.GetAsync($"{apiUrl}/functions/admin/token").Result;
    JWT = result.Content.ReadAsStringAsync().Result.Trim('"'); //get  JWT for call funtion key
  }
  //get the key from KUDU
  var siteUrl = new Uri($"https://{Environment.GetEnvironmentVariable("WEBSITE_CONTENTSHARE")}.azurewebsites.net");
  using (var client = new HttpClient())
  {
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + JWT);
    string jsonResult = client.GetAsync($"{siteUrl}/admin/host/keys").Result.Content.ReadAsStringAsync().Result;
    dynamic resObject = JsonConvert.DeserializeObject(jsonResult);
    hostKey = resObject.keys[0].value;
  }
  var template = @"{'$schema': 'https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#', 'contentVersion': '1.0.0.0', 'parameters': {}, 'variables': {}, 'resources': [],
   'outputs': {
      'HostKey':{
            'value': {hostKey},
            'type' : 'string'
          }
        }
}";
  HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
  response.Content = new StringContent(template, System.Text.Encoding.UTF8, "application/json");
  return response; 
}

Для более подробной информации, код, вы можете обратиться к этой статье .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...