Sitecore on Azure web apps – Trouble Shooting error – AppGallery Deploy Failed – System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature

We were trying to deploy Sitecore XP1 environment on Azure Web App. To deploy Siecore on azure web apps we need to provide Web Deploy Packages as input to Azure. as per this link {}, sitecore recommend deploy the Web Deploy Packages to Azure Storage Account in Blob Container. To allow access for downloading these packages, we have created Shared Access Signatures and added the SAS Token correctly to the Blob Service in my parameter.json file. While deploying the Sitecore XP1 instance we go the below error.

Error Message: AppGallery Deploy Failed: ‘System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature

Details:

{ “status”: “failed”, “error”: { “code”: “ResourceDeploymentFailure”, “message”: “The resource operation completed with terminal provisioning state ‘failed’.”, “details”: [ { “code”: “Failed”, “message”: “AppGallery Deploy Failed: ‘System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature\r\n at Microsoft.WindowsAzure.Storage.Core.Util.NavigationHelper.ParseBlobQueryAndVerify(Uri address, StorageCredentials& parsedCredentials, Nullable`1& parsedSnapshot)\r\n at Microsoft.WindowsAzure.Storage.Core.Util.NavigationHelper.ParseBlobQueryAndVerify(StorageUri address, StorageCredentials& parsedCredentials, Nullable`1& parsedSnapshot)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.ParseQueryAndVerify(StorageUri address, StorageCredentials credentials)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlob..ctor(StorageUri blobAbsoluteUri, Nullable`1 snapshotTime, StorageCredentials credentials)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.IsPremiumApp()\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.CheckCanDeployIfAppIsPremium(AppGalleryPackageInfo packageInfo, Boolean& isPremium)’\r\nFailed to download package.\r\nAppGallery Deploy Failed: ‘System.Net.WebException: The remote server returned an error: (403) Forbidden.\r\n at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)\r\n at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)\r\n at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.<Download>d__a.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.<Download>d__0.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.<DownloadPackageAndSettings>d__1b.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.<DownloadAndDeployPackage>d__d.MoveNext()'” } ] } }
From error message, you can understand that Server couldn’t authorize the request and so it returned 403 forbidden error and the Web Deploy Packages couldn’t be downloaded.

There are couple of solutions you can try -

1. When you generate the Shared Access Signature, you should be careful with the Start Time and TimeZone.
By default, it takes, UTC. You should be setting your local Timezone.
Please make sure you set start time less then the current time. Hopefully this will resolve this issue but if you are still facing the same issue then you can try an alternative approch mentioned in second post

2. Instead of using storage account on azure you can deploy you SCWDP (Sitecore web deply package) to some server in your network and pass URL of this file as parameter in ARM parameter file. URL of SCWDP.zip file must accessable to your azure account. It should resolve the above issue

Azure Search Sitecore

Azure Search – Sitecore

With the advancing technology, you can’t continue using the same methods and tools for your business every time. It is essential to make use of the new technologies and tools so as to meet the changing and growing needs and demands of your business. One such new technology that has come up is Sitecore, which acts as an extensible platform to capture, store, manage and distribute your content in a secure and reliable manner. It is getting massively popular amongst businesses because of the flexibility, security and scalability that it provides, which helps in enhancing user experience and allows businesses to effectively maintain their online brand presence and visibility. Sitecore CMS enables businesses to have full control of their website.

Sitecore Azure

Although Sitecore itself has had a lot of success as an ‘on-premises’ software solution and content management system that facilitates on-premises deployments, deploying #Sitecore on #Azure makes it even more better as ‘Sitecore Azure’.

azure-search-1

There are two very important terms in Sitecore Azure:

1. Azure Search – Sitecore

2. Redis Cache – Sitecore

Here in this post, we are going to know in depth about Azure Search feature of Sitecore.

Sitecore Azure Search

Sitecore Azure Search provider integrates the Sitecore Search engine with Microsoft Azure’s Search Service, which is a part of Microsoft Azure computing platform.

Features of Azure Search

Which features of Azure Search make it a good deal to deploy Sitecore on Azure? And how does Azure Search – Sitecore help businesses? Some of the beneficial features of Azure Search services of Sitecore are as follows:

1. Azure Search offers extreme simplicity, scalability and stability that can be utilized to boost the user experience and performance on any business website.

2. You get support for all Sitecore search-driven UIs, including user-typed queries, and faceted searches.

3. Sitecore Azure Search also provides support for the majority of LINQ expressions, to enable rapid development of search-powered applications.

4. You get local/native support for fundamental data types such as numbers and dates in faceting, and range queries.

5. With Sitecore Azure Search, you get flexible configuration and precise control over the schema of the indexes.

6. It also offers support for running Sitecore in geo-replicated scenarios.

It is important to note here that Sitecore Azure Search is the default provider for Sitecore instances that are deployed using Sitecore Azure SDK.  Sitecore Azure Search supports on-premises and IaaS (Infrastructure as a Service) deployments. However, you shall have to configure Azure Search service with your Sitecore instance by creating a Search service, formatting the connection strings, setting up configuration files, rebuilding the indexes, mapping the Azure field types and fields and support for Azure Search.

How is Sitecore Azure Search different from Lucene and Solr search providers?

While using Sitecore Azure Search you must be aware that Sitecore Azure Search is different from the Lucene and Solr search providers. This is important to know, especially when you plan to switch between search providers.

azure-search-2.jpg

Azure Search Service is a fully managed, cloud-based service that allows developers to build rich search applications using REST APIs. This includes full-text search scoped over your content, along with advanced search behaviours similar to the ones found in commercial web search engines, like type-ahead, suggested queries based on near matches, and faceted navigation.

You can use Solr if you have a scaled environment with two or more delivering servers or two or more content authoring servers or in case you have separate servers for email, processing, reporting and publishing. The indexes are available to all servers in the environment.

On the other hand Lucene is a file-based indexing system, which means that if an index is not located on the server that the request is coming from you have to ensure that indexes across all servers remain in sync.

In the coming post, I shall also be talking about Redis Cache, what it is about and what it has to do with Sitecore.

What is Sitecore Azure

What is Sitecore Azure?

If you have come to this post, I assume that you’re a beginner with the terms Azure and Sitecore Azure. When you don’t want to be in charge of your own physical kit, you choose to deploy to something like Azure. This includes stuff like hardware, operating system, network load balancing and things that have nothing much to do with the core application.

Before moving forward to Sitecore Azure, let’s have a brief overlook at Microsoft Azure’s interface.

Microsoft Azure Interface

The Management Portal for Microsoft Azure looks somewhat like this:

sitecore-azure-1

Here is how the services look like:

Sitecore-Azure-2

Sitecore Azure

Now that you saw how the interface for Microsoft’s much hyped Azure looks like, let us come to using Azure for Sitecore.

We all know that Sitecore itself has had a lot of success as an ‘on-premises’ software solution and content management system that facilitates on-premises deployments. Sitecore, with its advanced personalization capabilities and marketing automation, gives all the power to deliver relevant content or ecommerce offers that their audiences want to see.

And then, deploying #Sitecore on #Azure makes it even better as #Sitecore Azure.

Sitecore-Azure-3

Implementing a cloud version of Sitecore, using Azure, is definitely a great idea because of the many added benefits you get while using Sitecore on Azure or Sitecore Azure. While using Azure to enjoy the cloud version of Sitecore, you get to choose from cloud platform services like IaaS and PaaS and increase your productivity. Hybrid cloud solutions open new IT options for you without adding on to the complexity of the whole thing. Sitecure Azure makes it way easier and way more efficient to build applications and dal with stuff like data storage, backup, recovery, etc. It’s not only scalable but economical with its per-minute billing to ensure that you pay only for what you use.

Sitecore-Azure-4

Going for Microsoft Azure with Sitecore only brings you more flexibility, superior infrastructure, predictable costs, enhanced performance and opportunity to review workload.

Understanding cloud platform services: IaaS, PaaS, SaaS

When using Sitecore on Azure, it is important to know what the cloud platform services like IaaS, PaaS and SaaS, have to do with Azure and services. Moving to the cloud is a very much hyped things but most remain confused about the various services and what each of them means for organizations. Here we shed some light on the differences between them.

IaaS, PaaS and SaaS are basically three approaches to deploy or consume ‘cloud’ applications.

What do IaaS, PaaS, SaaS stand for?

IaaS stands for Infrastructure as a Service

PaaS stands for Platform as a Service

SaaS stands for Software as a Service

Sitecore-Azure-5

The three of them are not services in themselves. These are just choices that you make about the level of abstraction you require. You can choose a final setup with the elements of any of these or your final Azure setup may also be a combination of IaaS, PaaS and SaaS elements.

Major Difference between IaaS, PaaS, SaaS

IaaS: IaaS or infrastructure as a Service means that you are handling over the responsibility of machines and network to a cloud platform. So, basically, with IaaS approach, you choose virtual machines over physical machines. You can still log in to the virtual machines and configure IIS, mess around in MSSQL or look at your web root.

The basic infrastructure including hardware, networking, servers is supplied by a service provider. A central, knowledgeable group holds the responsibility for infrastructure.

Sitecore-Azure-6

PaaS: However, while using PaaS or Platform as a Service, you are handling over the responsibility for SQL management to the cloud platform using its services. The 5 Azure PaaS services in Sitecore Azure module are:

1. Cloud Service

2. Storage Service

3. SQL Databases Service

4. Traffic Manager Service

5. Cache Service

Under PaaS approach, you let the cloud platform manage all these aspects.

Application platform components like persistence, runtime, frameworks, etc. are provided by a third-party. Private PaaS cloud offered as service provider and Public PaaS cloud that is offered by a third-party company.

The application development organization builds their solutions on a known, stable platform with a consistent set of components.

With PaaS, you need only to develop the application or business level logic.

The application teams and companies would have to pay a fee for this service.

Sitecore-Azure-7

SaaS: Finally, SaaS or Software as a Service takes over all your responsibility. All you need to do is to sign up, SaaS takes care of everything else. For example, Google Apps for Work is a SaaS.

In Saas, business or consumer software application is provided by a third party. Rather than calling it as Software as a Service, you can also call it Application as a Service.

Salesforce.com CRM and SAP SuccessFactors are a good example of SaaS in the business world while Facebook, Gmail and My Yahoo are consumer focused SaaS examples.

Customers typically pay some subscription, either time-based like monthly or yearly, or service-based like pay for n no. of messages, volume of photos, etc.

Where the three approaches should be used?

Who should use IaaS?

IaaS achieves cost-benefit gains at physical infrastructure level. It is a widely applicable approach. Small and medium sized organizations use IaaS from a third-party to alleviate the need for expensive infrastructure and resources in-house. Publc IaaS is used by large organizations to share up internal data centers by taking on additional load during peak periods or is used for temporary purposes like testing.

Who should use PaaS?

PaaS is applicable to organizations who develop their own comprehensive applications. PaaS drives consistency by enforcing a common application framework. It also provides access to a common development platform across the globe. As an organization, you must have knowledge of:

1. The programming languages you need to support

2. Application services/frameworks

3. Accessibility by development and the user base

4. Security policies and regulations

Who should use SaaS?

SaaS can be used by organizations of any size and in any type of business. Any organization can be used as a single SaaS application while large organizations can make use of several different SaaS applications like Salesforce.com for CRM, Office365 or Box.net.

Other Important Terms

Once you start with Sitecore Azure, there are two very important terms in Sitecore Azure:

1. Azure Search – Sitecore

2. Redis Cache – Sitecore

Check out my next posts to know more about what each one of them means and what they have to do with Sitecore Azure.