使用 powershell 部署到 azure 函数
Deploy to azure functions using powershell
有什么方法可以使用 powershell 脚本部署到 azure 函数吗? CI 对我们不起作用,因为我们使用章鱼部署来部署到我们所有的生产服务。因此,如果有一种使用 powershell 脚本进行部署的方法,那将是有益的。
谢谢!
您可以使用 Kudu REST API. You can also see some code/samples of doing this in our templates repository. In this 代码示例将函数部署到 Azure,您可以看到我们的测试脚本如何调用 Kudu Rest api 以将 zip 部署到函数应用程序。
函数的 folder structure 是每个文件夹一个函数。您需要将 Function 文件夹部署到 Function App 上的 ./site/wwwroot
。如果您在更新之间添加任何新绑定,您还需要添加任何可能包含您的秘密的应用设置。
PowerShell 代码类似于:
$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"
除了 Chris 描述的内容之外,还有第一个 class ARM API 可用于部署功能。这是它在 PowerShell 中的样子:
Function DeployHttpTriggerFunction($ResourceGroupName, $SiteName, $FunctionName, $CodeFile, $TestData)
{
$FileContent = "$(Get-Content -Path $CodeFile -Raw)"
$props = @{
config = @{
bindings = @(
@{
type = "httpTrigger"
direction = "in"
webHookType = ""
name = "req"
}
@{
type = "http"
direction = "out"
name = "res"
}
)
}
files = @{
"index.js" = $FileContent
}
test_data = $TestData
}
New-AzureRmResource -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/functions -ResourceName $SiteName/$FunctionName -PropertyObject $props -ApiVersion 2015-08-01 -Force
}
有关底层 API 的信息,请参阅 https://github.com/projectkudu/kudu/wiki/Functions-API。
您还可以使用 Azure CLI 2.0 + Azure Function CLI 部署 Azure 函数形式 commandline/powershell
Azure CLI API 可用于配置函数应用程序,使用命令
az functionapp create --name $functionappName --resource-group $resourceGroup --storage-account $storageAccountName --consumption-plan-location $consumptionPlanLocation
并应用应用程序设置
az functionapp config appsettings set --name $functionappName --resource-group $resourceGroup --settings "test=value"
并且 Azure Function CLI api 可用于部署您拥有的功能
func azure functionapp publish <azurefunctionapp>
得心应手的工具!
以防万一有像我这样的人需要逐步解决。这是使用 powershell 部署 azure 函数的过程(非 ARM 方式)
创建具有以下结构的 azure 函数
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
创建 myFunctionName
文件夹的 zip - 我们将其命名为 my.zip
。确保压缩后 my.zip
包含 myFunctionName
文件夹及其所有内容
按照here所述找到您的发布配置文件用户名和密码,即
$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
然后使用 powershell 如下调用 Kudu REST API
$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"
- 前往
<yourFunctionApp>.scm.azurewebsites.net -> Debug menu at the top -> CMD
。在出现的页面中,导航到 site -> wwwroot
。您应该会在此处看到解压缩的 zip 文件的内容,您还可以验证您的 azure 函数在 azure 门户中是否可用。
参考资料
除上述所有内容外,我们还发布了 Azure Functions 的预览模块 (https://www.powershellgallery.com/packages/Az.Functions/0.0.1-preview)。
目前,此模块包含托管函数应用程序和函数应用程序计划的 cmdlet。我已经打开一个问题来请求创建一个 cmdlet 来部署函数应用程序。如果您对此功能感兴趣,请在 https://github.com/Azure/azure-powershell/issues/10966 投票。
要安装 Azure Functions (Az.Functions) 模块,运行 来自最新版本 psws
的以下命令,可在 https://github.com/PowerShell/PowerShell/releases 下载。
Install-Module -Name Az.Functions -AllowPrerelease
请试一试并通过 https://github.com/Azure/azure-powershell/issues 向我们发送反馈。打开问题时,请确保标题中包含 [Az.Functions]。
干杯,
弗朗西斯科
有什么方法可以使用 powershell 脚本部署到 azure 函数吗? CI 对我们不起作用,因为我们使用章鱼部署来部署到我们所有的生产服务。因此,如果有一种使用 powershell 脚本进行部署的方法,那将是有益的。
谢谢!
您可以使用 Kudu REST API. You can also see some code/samples of doing this in our templates repository. In this 代码示例将函数部署到 Azure,您可以看到我们的测试脚本如何调用 Kudu Rest api 以将 zip 部署到函数应用程序。
函数的 folder structure 是每个文件夹一个函数。您需要将 Function 文件夹部署到 Function App 上的 ./site/wwwroot
。如果您在更新之间添加任何新绑定,您还需要添加任何可能包含您的秘密的应用设置。
PowerShell 代码类似于:
$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"
除了 Chris 描述的内容之外,还有第一个 class ARM API 可用于部署功能。这是它在 PowerShell 中的样子:
Function DeployHttpTriggerFunction($ResourceGroupName, $SiteName, $FunctionName, $CodeFile, $TestData)
{
$FileContent = "$(Get-Content -Path $CodeFile -Raw)"
$props = @{
config = @{
bindings = @(
@{
type = "httpTrigger"
direction = "in"
webHookType = ""
name = "req"
}
@{
type = "http"
direction = "out"
name = "res"
}
)
}
files = @{
"index.js" = $FileContent
}
test_data = $TestData
}
New-AzureRmResource -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/functions -ResourceName $SiteName/$FunctionName -PropertyObject $props -ApiVersion 2015-08-01 -Force
}
有关底层 API 的信息,请参阅 https://github.com/projectkudu/kudu/wiki/Functions-API。
您还可以使用 Azure CLI 2.0 + Azure Function CLI 部署 Azure 函数形式 commandline/powershell
Azure CLI API 可用于配置函数应用程序,使用命令
az functionapp create --name $functionappName --resource-group $resourceGroup --storage-account $storageAccountName --consumption-plan-location $consumptionPlanLocation
并应用应用程序设置
az functionapp config appsettings set --name $functionappName --resource-group $resourceGroup --settings "test=value"
并且 Azure Function CLI api 可用于部署您拥有的功能
func azure functionapp publish <azurefunctionapp>
得心应手的工具!
以防万一有像我这样的人需要逐步解决。这是使用 powershell 部署 azure 函数的过程(非 ARM 方式)
创建具有以下结构的 azure 函数
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
创建
myFunctionName
文件夹的 zip - 我们将其命名为my.zip
。确保压缩后my.zip
包含myFunctionName
文件夹及其所有内容按照here所述找到您的发布配置文件用户名和密码,即
$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
然后使用 powershell 如下调用 Kudu REST API
$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"
- 前往
<yourFunctionApp>.scm.azurewebsites.net -> Debug menu at the top -> CMD
。在出现的页面中,导航到site -> wwwroot
。您应该会在此处看到解压缩的 zip 文件的内容,您还可以验证您的 azure 函数在 azure 门户中是否可用。
参考资料
除上述所有内容外,我们还发布了 Azure Functions 的预览模块 (https://www.powershellgallery.com/packages/Az.Functions/0.0.1-preview)。
目前,此模块包含托管函数应用程序和函数应用程序计划的 cmdlet。我已经打开一个问题来请求创建一个 cmdlet 来部署函数应用程序。如果您对此功能感兴趣,请在 https://github.com/Azure/azure-powershell/issues/10966 投票。
要安装 Azure Functions (Az.Functions) 模块,运行 来自最新版本 psws
的以下命令,可在 https://github.com/PowerShell/PowerShell/releases 下载。
Install-Module -Name Az.Functions -AllowPrerelease
请试一试并通过 https://github.com/Azure/azure-powershell/issues 向我们发送反馈。打开问题时,请确保标题中包含 [Az.Functions]。
干杯,
弗朗西斯科