2017-10-02 2 views
0

Ist es überhaupt möglich, einen Funktionsschlüssel für eine gerade erstellte azure-Funktion aus dem Powershell-Skript zu erstellen? Ich habe eine Release-Pipeline, um die gesamte Umgebung für die azurblaue Funktion zu erstellen, und es funktioniert gut, aber ein Teil fehlt mir ist eine benutzerdefinierte Funktionstaste für die Funktion. Ich möchte den Standardschlüssel nicht verwenden. Ich könnte den neuen Schlüssel im Portal erstellen, aber ich muss es aus dem Skript machen.Funktionstaste für Azure-Funktion aus Powershell erstellen

+0

Es wäre besser, wenn Sie weitere Details hinzufügen und was Sie bis jetzt getan haben. –

+0

Zur Frage –

Antwort

0

Momentan gibt es kein solches Power Shell-Cmdlet, aber Sie könnten Function Api verwenden.

Erzeugt oder aktualisiert der Schlüssel in der angegebenen Ressource mit einem Autoschlüssel erzeugt:

POST /admin/functions/{functionname}/keys/{keyname} 

Verwenden der folgenden Power Shell API zu verwenden.

$tenant = "" 
$clientId = "" 
$clientSecret = "" 
$subscriptionId = "" 

$body = @{ 
    "grant_type"="client_credentials"; 
    "client_id"=$clientId; 
    "client_secret"=$clientSecret; 
    "resource"="https://management.azure.com/" 
} 
$resourceGroup="shuiapp" 
$name="shuifunction" 

$authInfo = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenant/oauth2/token" -Body $body -Method Post -Headers @{"Content-Type"="application/x-www-form-urlencoded"} 

$publishData = Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Web/sites/$name/publishxml?api-version=2016-08-01" -Method Post -Headers @{"Authorization"="Bearer $($authInfo.access_token)"} 

$userName = $publishData.publishData.publishProfile[0].userName 
$password = $publishData.publishData.publishProfile[0].userPWD 

$apiBaseUrl = "https://$name.scm.azurewebsites.net/api" 
$siteBaseUrl = "https://$name.azurewebsites.net" 

# For authenticating to Kudu 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))  

# Call Kudu /api/functions/admin/token to get a JWT that can be used with the Functions Key API 
$jwt = Invoke-RestMethod -Uri "$apiBaseUrl/functions/admin/token" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET 

# Call Functions Key API to get the master key 
$x = Invoke-RestMethod -Uri "$siteBaseUrl/admin/host/systemkeys/_master" -Headers @{Authorization=("Bearer {0}" -f $jwt)} -Method GET 

$masterKey = $x.value 

# create a custom function key 
$functionname="HttpTriggerPowerShell1" 
$v=Invoke-RestMethod -Uri "$siteBaseUrl/admin/functions/$functionname/keys/shui" -Headers @{Authorization=("Bearer {0}" -f $jwt)} -Method POST 
$v.value 

# get function key value 
$x = Invoke-RestMethod -Uri "$siteBaseUrl/admin/functions/HttpTriggerPowerShell1/keys" -Headers @{Authorization=("Bearer {0}" -f $jwt)} -Method GET 

Hinweis: Sie müssen ein neues Service-Haupt erstellen und contributor Rolle geben. Bitte beachten Sie die official document.

+0

@Y verschoben. A. Funktioniert es jetzt? Bitte lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen. –

+0

Entschuldigung, dass Sie noch nicht geantwortet haben. Ich habe versucht, eines der registrierten Apps clientId und clientsecretId zu verwenden. Es funktioniert nicht so weit: Der Remote-Server hat einen Fehler zurückgegeben: (403) Verboten. –

+0

Also meine Frage ist, ob ich registrierte App Principal überhaupt verwenden kann? Oder muss ich einen Benutzer in AD erstellen? –

Verwandte Themen