使用PowerShell部署到azure函数

时间:2016-04-19 22:56:20

标签: azure azure-functions

有什么办法,我可以使用PowerShell脚本部署到azure函数吗? CI不适用于我们,因为我们使用章鱼部署来部署到我们的所有生产服务。因此,如果有一种方法可以使用PowerShell脚本进行部署,那将是有益的。

谢谢!

5 个答案:

答案 0 :(得分:10)

您可以使用Kudu REST API将功能部署到Azure。您还可以在templates repository中看到一些代码/示例。在this代码示例中,您可以看到我们的测试脚本如何调用Kudu Rest apis来将zip部署到功能应用程序。

函数的folder structure是每个文件夹的函数。您需要在Function App上将Function文件夹部署到./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"

答案 1 :(得分:7)

以防万一像我这样的人需要一步一步的解决方案。以下是使用powershell(非ARM方式)

部署azure函数的过程
  1. 使用以下结构创建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
    
  2. 创建myFunctionName文件夹的压缩文件 - 让我们将其命名为my.zip。压缩后my.zip包含myFunctionName文件夹及其所有内容

  3. 按照here所述找到您的发布配置文件用户名和密码,即

  4.     $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"
    
    1. 转到<yourFunctionApp>.scm.azurewebsites.net -> Debug menu at the top -> CMD。在显示的页面中,导航至site -> wwwroot。您应该看到在那里提取的zip文件的内容,您还可以验证您的azure功能在azure门户中是否可用。
    2. <强>参考

      1. https://github.com/projectkudu/kudu/wiki/REST-API#sample-of-using-rest-api-with-powershell

      2. http://markheath.net/post/deploy-azure-functions-kudu-powershell

答案 2 :(得分:6)

除了Chris所描述的内容之外,还有一个可用于部署功能的第一类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

答案 3 :(得分:3)

您还可以使用Azure CLI 2.0 + Azure Function CLI从命令行/ powershell部署Azure功能

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>

方便的工具!

答案 4 :(得分:3)

除上述所有功能外,我们还发布了Azure功能(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)模块,请从https://github.com/PowerShell/PowerShell/releases下载最新版本的psws中运行以下命令。

Install-Module -Name Az.Functions -AllowPrerelease

请尝试一下,并通过https://github.com/Azure/azure-powershell/issues向我们发送反馈。打开问题时,请确保标题中包含[Az.Functions]。

干杯

Francisco