Deploy to azure functions using powershell
Just in case there are people like me who need step by step solutions. Here is the procedure to deploy azure functions using powershell (non ARM way)
Create an azure function with the following structure
myFunctionName(Folder) | |_ function.json (contains info on input, output, trigger) |_ run.csx (contains code) |_ [OPTIONAL] project.json (for nuget packages) |_ [OPTIONAL] bin(Folder) |_ all custom DLLs go in this folder
Create a zip of the
myFunctionName
folder - let's name itmy.zip
. Make sure that after zippingmy.zip
contains themyFunctionName
folder and all its contentsFind your publish profile username and password as described here, namely
$creds = Invoke-AzureRmResourceAction -ResourceGroupName YourResourceGroup -ResourceType Microsoft.Web/sites/config -ResourceName YourWebApp/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
$username = $creds.Properties.PublishingUserName
$password = $creds.Properties.PublishingPassword
and then invoke the Kudu REST API using powershell as follows
$username = '<publish username>' #IMPORTANT: use single quotes as username may contain $
$password = "<publish password>"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$apiUrl = "https://<yourFunctionApp>.scm.azurewebsites.net/api/zip/site/wwwroot"
$filePath = "<yourFunctionName>.zip"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $filePath -ContentType "multipart/form-data"
- Go to
<yourFunctionApp>.scm.azurewebsites.net -> Debug menu at the top -> CMD
. In the page that appears, navigate tosite -> wwwroot
. You should see the contents of your zip file extracted there and you can also verify that your azure function is available in the azure portal.
REFERENCES
https://github.com/projectkudu/kudu/wiki/REST-API#sample-of-using-rest-api-with-powershell
http://markheath.net/post/deploy-azure-functions-kudu-powershell
You can deploy functions to Azure using the Kudu REST API. You can also see some code/samples of doing this in our templates repository. In this code sample, you can see how our test script calls out to the Kudu Rest apis to deploy a zip to the Function App.
The folder structure for functions is a function per folder. You need to deploy your Function folders to ./site/wwwroot
on the Function App. You also need to add any app settings which might contain your secrets if you add any new bindings between updates.
The PowerShell code would look something along the lines of:
$apiUrl = $config.scmEndpoint + "/api/zip/"
if ($destinationPath)
{
$apiUrl = $apiUrl + $destinationPath
}
$response = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $config.authInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data"