Sitecore 10 XM Single deployment using SAT 2.5.0
Pre-requisites:
a. Download and install Azure Storage Explorer (optional, can use portal instead)
b. Valid Azure subscription
c. Azure Storage Account to upload the Sitecore site and Identity server packages
d. Most important: Install Az module locally if using Sitecore Azure Toolkit 2.5.0 (SAT 2.5.0) or install AzureRm module if using SAT version below 2.5.0. Since we will use SAT 2.5.0, should install Az module:
e. Wdp file for the XM Single Topology relevant to Sitecore XP 10
Ensure to unzip and get the scwdp.zip.
f. Download the corresponding (XM Single, in this case) azuredeploy.parameters.json
g. Download Sitecore Azure Toolkit 2.5.0 (SAT) and unzip to a deployment folder like, c:\sitecore\azure
h. Get the raw Github url for Sitecore 10 azuredeploy.json. Note that this url will vary based on your deployment topology.
i. Download Sitecore Identity 5.0.0 Installation Package
Actual Steps:
1. Create an Azure Blob Storage Account with allow blob public access enabled in Advanced tab -
2. Open Azure Storage Explorer. login using the Azure subscription and create a Blob Container:
3. Upload the wdp file (Pre-requisite - e) to the Blob Container:
4. Create SAS URI for above WDP:
5. The URI generated from the above step will go into the variable singleMsDeployPackageUrl within azuredeploy.parameters.json (understandably, this file must be downloaded and changes should be made in the downloaded version)
6. Upload pre-requisite i (sitecore identity package) to Azure Storage similar to above wdp, generate SAS URI and copy over the uri to the variable siMsDeployPackageUrl in azuredeploy.parameters.json
7. Open Powershell in admin mode and traverse to the location where you unzipped SAT. In my case, it is c:\sitecore\azure. The SAT is unzipped in a folder named SitecoreAzureToolkit within c:\sitecore\azure.
8. Generate a self-signed certificate (Powershell in administrator mode) -
8.1
$thumbprint = (New-SelfSignedCertificate `
-Subject "CN=$env:COMPUTERNAME @ Sitecore, Inc." `
-Type SSLServerAuthentication `
-FriendlyName "$env:USERNAME Certificate").Thumbprint
8.2
In case of $certificateFilePath variable path, provide a valid path in your machine where you want the pfx file to be stored:
$certificateFilePath = "c:\windows\system32\$thumbprint.pfx"
Export-PfxCertificate `
-cert cert:\LocalMachine\MY\$thumbprint `
-FilePath "$certificateFilePath" `
-Password (Read-Host -Prompt "Enter password that would protect the certificate" -AsSecureString)
Note that you will be prompted to provide the password for the certificate, keep note of the password you provide. The certificate password will go into authCertificatePassword parameter in azuredeploy.parameters.json. Although the screen shot above shows c:\windows\system32, you can understandably generate the cert in your deploy folder. In my case, I created the pfx in c:\windows\system32 and copied over the file to c:\sitecore\azure
9. Apart from licenseXml, authCertificateBlob and deploymentId variables, all others must be filled in azuredeploy.parameters.json. Here is how my filled azuredeploy.parameters.json looks like:
https://raw.githubusercontent.com/navancommits/sitecore10/master/azuredeploy.parameters.json
10. With respect to deployment script, the Sitecore documentation is not updated for SAT 2.5.0 so, the highlighted commands (below) are irrelevant when using the SAT 2.5.0 since Az commands (installed as part of pre-requisite d) will be used instead:
11. Here are the equivalent Az PS Commands related to deployment: https://raw.githubusercontent.com/navancommits/sitecore10/master/xm0%20dep%20ps%20script.ps1
Ensure to add your correct subscription id, license file, certificate path etc.
12. Provide Azure credentials when executing the Connect-AzAccount cmd in the above list. The other option is to create a service principal and run the script in a non-obtrusive method.
13. Finally, here is how the final PS cmd window output should look without any (red) errors -
14. Login to Azure portal and pick up the resource group specified in the PS Script and you should see the two app service urls. One should be suffixed with single while the other suffixed with si. Login to Sitecore based on the parameter value provided in azuredeploy.parameters.json
-----
Common Errors:
Before unzipping, right click the zip file, go to security and select the Unblock button on the .ZIP file, then extract.
Error:
Start-SitecoreAzureDeployment : The term 'Start-SitecoreAzureDeployment' is not recognized as the name of a cmdlet,
function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the
path is correct and try again.
At line:1 char:1
+ Start-SitecoreAzureDeployment -Name $DeploymentId -Location $Location ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Start-SitecoreAzureDeployment:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Solution:
The above error is thrown when trying to directly start the deployment using Start-SitecoreAzureDeployment in step 11. Solution is to run Import-Module -Verbose .\sitecoreazuretoolkit\tools\Sitecore.Cloud.Cmdlets.psm1 in the deployment folder, in my case, c:\sitecore\azure and then re-try the cmd list in step 11.
Error:
New-AzResourceGroup : Run Connect-AzAccount to login.
At C:\sitecore\azure\sitecoreazuretoolkit\tools\Sitecore.Cloud.Cmdlets.psm1:105 char:13
+ New-AzResourceGroup -Name $Name -Location $Location -Tag ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [New-AzResourceGroup], PSInvalidOperationException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupCmd
let
New-AzResourceGroupDeployment : Run Connect-AzAccount to login.
At C:\sitecore\azure\sitecoreazuretoolkit\tools\Sitecore.Cloud.Cmdlets.psm1:115 char:35
+ ... eployment = New-AzResourceGroupDeployment -Name $Name -ResourceGroupN ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [New-AzResourceGroupDeployment], PSInvalidOperationException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDep
loymentCmdlet
Solution:
Run Connect-AzAccount and login to Azure when prompted
Error:
Start-SitecoreAzureDeployment : Exception calling "Add" with "2" argument(s): "Item has already been added. Key in
dictionary: 'licenseXml' Key being added: 'licenseXml'"
At line:1 char:1
+ Start-SitecoreAzureDeployment -Name $DeploymentId -Location $Location ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Start-SitecoreAzureDeployment
Solution:
The error is thrown when executing Start-SitecoreAzureDeployment in step 11 without setting the required parameters for the cmdlet, so set the required parameters before running this cmdlet: Start-SitecoreAzureDeployment -Name $DeploymentId -Location $Location -ArmTemplateUrl $SCTemplates -ArmParametersPath $ParamFile -LicenseXmlPath $LicenseFile -SetKeyValue $Parameters
Error:
New-AzResourceGroupDeployment : 6:51:45 PM - The deployment 'resgrp20200813' failed with error(s). Showing 2 out of 2
error(s).
Status Message: The resource operation completed with terminal provisioning state 'Failed'. (Code:
ResourceDeploymentFailure)
- 'sa' is not a valid login name in this version of SQL Server. (Code:InvalidLoginName)
Status Message: The resource operation completed with terminal provisioning state 'Failed'. (Code:
ResourceDeploymentFailure)
- At least one resource deployment operation failed. Please list deployment operations for details. Please see
https://aka.ms/DeployOperations for usage details. (Code: DeploymentFailed)
- {
"status": "Failed",
"error": {
"code": "ResourceDeploymentFailure",
"message": "The resource operation completed with terminal provisioning state 'Failed'.",
"details": [
{
"code": "InvalidLoginName",
"message": "'sa' is not a valid login name in this version of SQL Server."
}
]
}
} (Code:Conflict)
CorrelationId: 3e8227fb-8efe-4c64-af12-230718846f34
At C:\sitecore\azure\sitecoreazuretoolkit\tools\Sitecore.Cloud.Cmdlets.psm1:115 char:35
+ ... eployment = New-AzResourceGroupDeployment -Name $Name -ResourceGroupN ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-AzResourceGroupDeployment], Exception
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDep
loymentCmdlet
Solution:
This error was thrown in a context not relevant to current scenario. But , generally the Sql server created for sitecore instance in azure paas does not allow creation of sa as userid.
Error:
Connect-AzAccount : The term 'Connect-AzAccount' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:1
+ Connect-AzAccount
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Connect-AzAccount:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Solution:
Ensure Az module is installed (by executing in PS: Install-Module Az -AllowClobber) prior to issuing Connect-AzAccount command.
Error:
New-AzResourceGroupDeployment : 1:31:53 PM - The deployment 'newresgrp20200814' failed with error(s). Showing 1 out of
1 error(s).
Status Message: The resource operation completed with terminal provisioning state 'Failed'. (Code:
ResourceDeploymentFailure)
- At least one resource deployment operation failed. Please list deployment operations for details. Please see
https://aka.ms/DeployOperations for usage details. (Code: DeploymentFailed)
- {
"status": "failed",
"error": {
"code": "ResourceDeploymentFailure",
"message": "The resource operation completed with terminal provisioning state 'failed'.",
"details": [
{
"code": "Failed",
"message": "Failed to download package.\r\nARM-MSDeploy Deploy Failed: 'System.AggregateException: One or more
errors occurred. ---> 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 inner exception stack trace
---\r\n at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\r\n at
System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)\r\n at
System.Threading.Tasks.Task.Wait(TimeSpan timeout)\r\n at
Microsoft.Web.Deployment.WebApi.AppGalleryPackage.<Download>d__13.MoveNext()\r\n--- End
of stack trace from previous location where exception was thrown ---\r\n at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at
Microsoft.Web.Deployment.WebApi.AppGalleryPackage.<Download>d__11.MoveNext()\r\n--- End
of stack trace from previous location where exception was thrown ---\r\n at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.D
eployment.WebApi.DeploymentController.<DownloadPackageAndSettings>d__26.MoveNext()\r\n---
End of stack trace from previous location where exception was thrown ---\r\n at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.D
eployment.WebApi.DeploymentController.<DownloadAndDeployPackage>d__25.MoveNext()\r\n---&a
mp;amp;amp;gt; (Inner Exception #0) 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'\r\nARM-MSDeploy Deploy
Failed: 'Microsoft.Web.Deployment.DeploymentXmlException: The declared parameter 'Application Path' is not
recognized.\r\n\r\n at Microsoft.Web.Deployment.DeploymentSyncParameterCollection.LoadFromFile(XPathNavigator nav,
String fileName, Boolean ignoreExtraSetParameters)\r\n at
Microsoft.Web.Deployment.WebApi.AppGalleryPackage.LoadSetParameters(DeploymentObject deploymentObject, IDictionary`2
setParams, String setParamXmlFile)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.Deploy(String
deploymentSite, String siteSlotId, Boolean doNotDelete)\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.&
amp;amp;lt;DownloadAndDeployPackage>d__25.MoveNext()'\r\nARM-MSDeploy Deploy Failed:
'Microsoft.Web.Deployment.DeploymentXmlException: The declared parameter 'Application Path' is not recognized.\r\n\r\n
at Microsoft.Web.Deployment.DeploymentSyncParameterCollection.LoadFromFile(XPathNavigator nav, String fileName,
Boolean ignoreExtraSetParameters)\r\n at
Microsoft.Web.Deployment.WebApi.AppGalleryPackage.LoadSetParameters(DeploymentObject deploymentObject, IDictionary`2
setParams, String setParamXmlFile)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.Deploy(String
deploymentSite, String siteSlotId, Boolean doNotDelete)\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.&
amp;lt;DownloadAndDeployPackage>d__25.MoveNext()'\r\nARM-MSDeploy Deploy Failed:
'Microsoft.Web.Deployment.DeploymentXmlException: The declared parameter 'Application Path' is not recognized.\r\n\r\n
at Microsoft.Web.Deployment.DeploymentSyncParameterCollection.LoadFromFile(XPathNavigator nav, String fileName,
Boolean ignoreExtraSetParameters)\r\n at
Microsoft.Web.Deployment.WebApi.AppGalleryPackage.LoadSetParameters(DeploymentObject deploymentObject, IDictionary`2
setParams, String setParamXmlFile)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.Deploy(String
deploymentSite, String siteSlotId, Boolean doNotDelete)\r\n at
Microsoft.Web.Deployment.WebApi.DeploymentController.<DownloadAndDeployPackage>d__25.MoveNext()'"
}
]
}
} (Code:Conflict)
CorrelationId: 4c0b0266-4ecf-47fe-bca4-16b23a14cd1e
At C:\sitecore\azure\sitecoreazuretoolkit\tools\Sitecore.Cloud.Cmdlets.psm1:115 char:35
+ ... eployment = New-AzResourceGroupDeployment -Name $Name -ResourceGroupN ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-AzResourceGroupDeployment], Exception
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDep
loymentCmdlet
References:
https://sitecore.stackexchange.com/questions/3300/new-scwebdeploypackage-is-not-recognized/3344
https://www.koenheye.be/getting-started-with-powershell-sitecore-azure-toolkit-part-3/
Comments
Post a Comment