Azure Function App deployment with PowerShell but not through REST?












0














I currently have a bash script that uses dotnet to compile a Function App and the Azure CLI to push deploy a .zip file. The script is essentially:



dotnet clean --configuration Release
dotnet build --configuration Release
cd bin/Release/netstandard2.0
zip -r ${functionappName}.zip *
az functionapp deployment source config-zip -g group -n functionapp --src ${functionappName}.zip


Before this, an az login is done using a Service Principal that has permissions to deploy to the Function App.



I'd like to translate this into PowerShell. I can do the dotnet compilation and the creation of the zip file, but I haven't been able to figure out the deployment yet. I've tried using:



$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password )))
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"


...with username and password being the Service Principal ID and secret, but that gives a 401 - Unauthorized: Access is denied due to invalid credentials error.



Is there some way to use PowerShell to zipdeploy to a Function App using a Service Principal?










share|improve this question



























    0














    I currently have a bash script that uses dotnet to compile a Function App and the Azure CLI to push deploy a .zip file. The script is essentially:



    dotnet clean --configuration Release
    dotnet build --configuration Release
    cd bin/Release/netstandard2.0
    zip -r ${functionappName}.zip *
    az functionapp deployment source config-zip -g group -n functionapp --src ${functionappName}.zip


    Before this, an az login is done using a Service Principal that has permissions to deploy to the Function App.



    I'd like to translate this into PowerShell. I can do the dotnet compilation and the creation of the zip file, but I haven't been able to figure out the deployment yet. I've tried using:



    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password )))
    Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"


    ...with username and password being the Service Principal ID and secret, but that gives a 401 - Unauthorized: Access is denied due to invalid credentials error.



    Is there some way to use PowerShell to zipdeploy to a Function App using a Service Principal?










    share|improve this question

























      0












      0








      0


      1





      I currently have a bash script that uses dotnet to compile a Function App and the Azure CLI to push deploy a .zip file. The script is essentially:



      dotnet clean --configuration Release
      dotnet build --configuration Release
      cd bin/Release/netstandard2.0
      zip -r ${functionappName}.zip *
      az functionapp deployment source config-zip -g group -n functionapp --src ${functionappName}.zip


      Before this, an az login is done using a Service Principal that has permissions to deploy to the Function App.



      I'd like to translate this into PowerShell. I can do the dotnet compilation and the creation of the zip file, but I haven't been able to figure out the deployment yet. I've tried using:



      $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password )))
      Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"


      ...with username and password being the Service Principal ID and secret, but that gives a 401 - Unauthorized: Access is denied due to invalid credentials error.



      Is there some way to use PowerShell to zipdeploy to a Function App using a Service Principal?










      share|improve this question













      I currently have a bash script that uses dotnet to compile a Function App and the Azure CLI to push deploy a .zip file. The script is essentially:



      dotnet clean --configuration Release
      dotnet build --configuration Release
      cd bin/Release/netstandard2.0
      zip -r ${functionappName}.zip *
      az functionapp deployment source config-zip -g group -n functionapp --src ${functionappName}.zip


      Before this, an az login is done using a Service Principal that has permissions to deploy to the Function App.



      I'd like to translate this into PowerShell. I can do the dotnet compilation and the creation of the zip file, but I haven't been able to figure out the deployment yet. I've tried using:



      $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password )))
      Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"


      ...with username and password being the Service Principal ID and secret, but that gives a 401 - Unauthorized: Access is denied due to invalid credentials error.



      Is there some way to use PowerShell to zipdeploy to a Function App using a Service Principal?







      powershell azure-functions azure-powershell






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 20 '18 at 20:34









      CanSpice

      25.7k106382




      25.7k106382
























          1 Answer
          1






          active

          oldest

          votes


















          2














          If you are using PowerShell you can directly obtain the publish credentials during deployment.



          Login-AzureRmAccount
          Get-AzureRmSubscription | Select SubscriptionName, SubscriptionId
          Select-AzureRmSubscription -SubscriptionName "My Subscription"
          $resourceGroup = "MyResourceGroup"
          $functionAppName = "MyFunctionApp"


          Obtaining creds for deployment



          $creds = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config ` -ResourceName $functionAppName/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
          $username = $creds.Properties.PublishingUserName
          $password = $creds.Properties.PublishingPassword
          $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))


          Now proceed to deployment



          $apiUrl = "https://$functionAppName.scm.azurewebsites.net/api/zip/site/wwwroot"
          Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data"





          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401094%2fazure-function-app-deployment-with-powershell-but-not-through-rest%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            If you are using PowerShell you can directly obtain the publish credentials during deployment.



            Login-AzureRmAccount
            Get-AzureRmSubscription | Select SubscriptionName, SubscriptionId
            Select-AzureRmSubscription -SubscriptionName "My Subscription"
            $resourceGroup = "MyResourceGroup"
            $functionAppName = "MyFunctionApp"


            Obtaining creds for deployment



            $creds = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config ` -ResourceName $functionAppName/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
            $username = $creds.Properties.PublishingUserName
            $password = $creds.Properties.PublishingPassword
            $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))


            Now proceed to deployment



            $apiUrl = "https://$functionAppName.scm.azurewebsites.net/api/zip/site/wwwroot"
            Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data"





            share|improve this answer


























              2














              If you are using PowerShell you can directly obtain the publish credentials during deployment.



              Login-AzureRmAccount
              Get-AzureRmSubscription | Select SubscriptionName, SubscriptionId
              Select-AzureRmSubscription -SubscriptionName "My Subscription"
              $resourceGroup = "MyResourceGroup"
              $functionAppName = "MyFunctionApp"


              Obtaining creds for deployment



              $creds = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config ` -ResourceName $functionAppName/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
              $username = $creds.Properties.PublishingUserName
              $password = $creds.Properties.PublishingPassword
              $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))


              Now proceed to deployment



              $apiUrl = "https://$functionAppName.scm.azurewebsites.net/api/zip/site/wwwroot"
              Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data"





              share|improve this answer
























                2












                2








                2






                If you are using PowerShell you can directly obtain the publish credentials during deployment.



                Login-AzureRmAccount
                Get-AzureRmSubscription | Select SubscriptionName, SubscriptionId
                Select-AzureRmSubscription -SubscriptionName "My Subscription"
                $resourceGroup = "MyResourceGroup"
                $functionAppName = "MyFunctionApp"


                Obtaining creds for deployment



                $creds = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config ` -ResourceName $functionAppName/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
                $username = $creds.Properties.PublishingUserName
                $password = $creds.Properties.PublishingPassword
                $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))


                Now proceed to deployment



                $apiUrl = "https://$functionAppName.scm.azurewebsites.net/api/zip/site/wwwroot"
                Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data"





                share|improve this answer












                If you are using PowerShell you can directly obtain the publish credentials during deployment.



                Login-AzureRmAccount
                Get-AzureRmSubscription | Select SubscriptionName, SubscriptionId
                Select-AzureRmSubscription -SubscriptionName "My Subscription"
                $resourceGroup = "MyResourceGroup"
                $functionAppName = "MyFunctionApp"


                Obtaining creds for deployment



                $creds = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config ` -ResourceName $functionAppName/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
                $username = $creds.Properties.PublishingUserName
                $password = $creds.Properties.PublishingPassword
                $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))


                Now proceed to deployment



                $apiUrl = "https://$functionAppName.scm.azurewebsites.net/api/zip/site/wwwroot"
                Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data"






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 21 '18 at 4:33









                HariHaran

                512112




                512112






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401094%2fazure-function-app-deployment-with-powershell-but-not-through-rest%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Costa Masnaga

                    Fotorealismo

                    Sidney Franklin