既存のPaaS環境にSitecore Connect for Content Hubをデプロイする
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
既存のAzure PaaS環境にSitecore Connect for Content Hub (SCCH) をデプロイできます。
既存のPaaS環境にデプロイするには、既存のSitecore XMまたはXP Azure PaaS環境とMicrosoft Web Deployがインストールされている必要があります。
新しいSitecore Azure PaaS環境をデプロイする場合は、代わりに 新しいPaaS環境でContent HubのSitecore Connectをデプロイする の手順を使用してください。
このチュートリアルでは、次の方法について説明します。
-
インストールフォルダを準備する
-
スクリプト入力を準備する
-
コネクタのインストールと構成
-
インストールエラーのトラブルシューティング
インストールフォルダを準備する
インストールフォルダを準備するには:
-
ファイル システムにローカル フォルダを作成します (例: C:\Temp\SCCHInstallation.
-
からContent Hub WDPパッケージのSitecore Connectをダウンロードし、作成したローカル フォルダーに保存します。
-
ローカル フォルダで新しいファイルを作成し、Deploy.ps1という名前を付けます。
-
メモ帳やVS Codeなどのエディターで新しいファイルを開き、次のスクリプトを内部に貼り付けます。
RequestResponse[CmdletBinding(DefaultParameterSetName = "no-arguments")] param( [Parameter(HelpMessage = "Name of the resource group in Azure to target.")] [string]$ResourceGroupName, [Parameter(HelpMessage = "Name of the web app in Azure to target.")] [string]$WebAppName, [Parameter(HelpMessage = "Path to the WDP to deploy to the target.")] [string]$WdpPackagePath, [Parameter(HelpMessage = "Content Hub Client Id.")] [string]$CHClientId, [Parameter(HelpMessage = "Content Hub Client Secret.")] [string]$CHClientSecret, [Parameter(HelpMessage = "Content Hub Username.")] [string]$CHUserName, [Parameter(HelpMessage = "Content Hub Password.")] [string]$CHPassword, [Parameter(HelpMessage = "Content Hub URI.")] [string]$CHUri, [Parameter(HelpMessage = "Content Hub Azure Service Bus connection string path in.")] [string]$CHServiceBusEntityPathIn, [Parameter(HelpMessage = "Content Hub Subscription name. (must be unique per Sitecore CM deployment)")] [string]$CHServiceBusSubscription, [Parameter(HelpMessage = "Content Hub Azure Service Bus connection string path out.")] [string]$CHServiceBusEntityPathOut, [Parameter(HelpMessage = "Content Hub Search Page Uri.")] [string]$CHSearchPage, [Parameter(HelpMessage = "Content Hub External Redirect Key.")] [string]$CHExternalRedirectKey = "Sitecore", [Parameter(HelpMessage = "Path to MSDeploy.")] [string]$MsDeployPath = "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe", [Parameter(HelpMessage = "Skips Azure Login when True.")] [switch]$SkipAzureLogin = $False, [Parameter(HelpMessage = "Amount of retry attempts. 6 by default which with default retryinterval would come down to 1 minute.")] [int]$RetryAttempts = 6, [Parameter(HelpMessage = "Amount of time to wait between retries in milliseconds. 10000 by default which is 10 seconds which adds up to 1 minute with default retry attempts.")] [int]$RetryInterval = 10000 ) Add-Type -AssemblyName "System.IO.Compression.FileSystem" function PreparePath($path) { if(-Not (Test-Path $path)) { $result = New-Item -Path $path -Type Directory -Force } else { $result = Resolve-Path $path } return $result } function UnzipFolder($zipfile, $folder, $dst) { [IO.Compression.ZipFile]::OpenRead($zipfile).Entries | Where-Object { ($_.FullName -like "$folder/*") -and ($_.Length -gt 0) } | ForEach-Object { $parent = Split-Path ($_.FullName -replace $folder, '') $parent = PreparePath (Join-Path $dst $parent) $file = Join-Path $parent $_.Name [IO.Compression.ZipFileExtensions]::ExtractToFile($_, $file, $true) } } function DownloadWebsiteFile($filePath, $downloadFolderName) { $basePath = Split-Path ".\$downloadFolderName\$filePath" $fileName = Split-Path $filePath -Leaf if(-Not (Test-Path ".\$downloadFolderName\$filePath")) { New-Item -Path $basePath -Type Directory -Force } $outFilePath = Join-Path (Resolve-Path "$basePath") $fileName Invoke-WebRequest -Uri "https://$WebAppName.scm.azurewebsites.net/api/vfs/site/wwwroot/$filePath" -Headers @{"Authorization"=("Basic {0}" -f $base64AuthInfo)} -Method GET -OutFile $outFilePath } function UploadWebsiteFile($filePath, $uploadFilePath) { Invoke-WebRequest -Uri "https://$WebAppName.scm.azurewebsites.net/api/vfs/site/wwwroot/$filePath" -Headers @{"Authorization"=("Basic {0}" -f $base64AuthInfo);"If-Match"="*"} -Method PUT -InFile $uploadFilePath } function ApplyTransform($filePath, $xdtFilePath) { Write-Verbose "Applying XDT transformation '$xdtFilePath' on '$filePath'..." $target = New-Object Microsoft.Web.XmlTransform.XmlTransformableDocument; $target.PreserveWhitespace = $true $target.Load($filePath); $transformation = New-Object Microsoft.Web.XmlTransform.XmlTransformation($xdtFilePath); if ($transformation.Apply($target) -eq $false) { throw "XDT transformation failed." } $target.Save($filePath); } if(-Not (Test-Path $MsDeployPath)) { Write-Host "MS Deploy was not found at `"$MsDeployPath`"!" -ForegroundColor Red return } if(-Not $SkipAzureLogin) { Write-Host "Logging into Azure..." -ForegroundColor Green & az login } Write-Host "Fetching Publish Profile..." -ForegroundColor Green $publishProfile = az webapp deployment list-publishing-profiles --resource-group $ResourceGroupName --name $WebAppName --query "[?publishMethod=='MSDeploy']" | ConvertFrom-Json $userName = $publishProfile.userName $password = $publishProfile.userPWD $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $userName, $password))) Write-Host "Preparing configuration..." -ForegroundColor Green $xdtsPath = (PreparePath ".\xdts") UnzipFolder $WdpPackagePath "Content/Website/App_Data/Transforms/scch/xdts" $xdtsPath Get-ChildItem $xdtsPath -File -Include "*.xdt" -Recurse | ForEach-Object { $targetWebsiteFile = $_.FullName.Replace("$xdtsPath\", "").Replace("\", "/").Replace(".xdt", "") DownloadWebsiteFile $targetWebsiteFile "Configuration" } $configurationPath = (PreparePath ".\Configuration") $currentDateTime = (Get-Date).ToString("dd-MM-yyyy-hh-mm-ss") $backupPath = (PreparePath ".\Backup-$currentDateTime") robocopy $configurationPath $backupPath /s Write-Host "Preparing transformations..." -ForegroundColor Green $nupkgPath = Join-Path (Resolve-Path ".") "microsoft.web.xdt.3.1.0.nupkg" $xdtDllBinPath = PreparePath ".\bin" Invoke-WebRequest -Uri "https://www.nuget.org/api/v2/package/Microsoft.Web.Xdt/3.1.0" -OutFile $nupkgPath UnzipFolder $nupkgPath "lib/netstandard2.0" $xdtDllBinPath Add-Type -Path (Resolve-Path ".\bin\Microsoft.Web.XmlTransform.dll") Write-Host "Fill ConnectionStrings..." -ForegroundColor Green $connectionStringsXdtPath = Join-Path $xdtsPath "App_Config\ConnectionStrings.config.xdt" ((Get-Content -Path $connectionStringsXdtPath -Raw).Replace("{client_id}", $CHClientId).Replace("{client_secret}", $CHClientSecret).Replace("{username}", $CHUserName).Replace("{password}", $CHPassword).Replace("{uri}", $CHUri).Replace("{Azure Service Bus connection string with incoming topic}", $CHServiceBusEntityPathIn).Replace("{Subscription name}", $CHServiceBusSubscription).Replace("{Azure Service Bus connection string with outcoming topic}", $CHServiceBusEntityPathOut).Replace("{Content Hub search page URI}", $CHSearchPage).Replace("{External redirect key}", $CHExternalRedirectKey)) | Set-Content -Path $connectionStringsXdtPath Write-Host "Running transformations..." -ForegroundColor Green Get-ChildItem $xdtsPath -File -Include "*.xdt" -Recurse | ForEach-Object { $targetFilePath = $_.FullName.Replace($xdtsPath, $configurationPath).Replace(".xdt", "") if (-not(Test-Path $targetFilePath -PathType Leaf)) { Write-Verbose "No matching file '$targetFilePath' for transformation '$($_.FullName)'. Skipping..." } else { ApplyTransform $targetFilePath $_.FullName } } Write-Host "Starting MSDeploy..." -ForegroundColor Green $verb = "-verb:sync" $source = "-source:package=`"$WdpPackagePath`"" $dest = "-dest:auto,ComputerName=`"https://$WebAppName.scm.azurewebsites.net/msdeploy.axd?site=$WebAppName`",UserName=`"$userName`",Password=`"$password`",AuthType=`"Basic`"" $iisWebAppParam = "-setParam:name=`"IIS Web Application Name`",value=`"$WebAppName`"" $coreParam = "-setParam:name=`"Core Admin Connection String`",value=`"notUsed`"" $masterParam = "-setParam:name=`"Master Admin Connection String`",value=`"notUsed`"" $skipDbFullSql = "-skip:objectName=dbFullSql" $skipDbDacFx = "-skip:objectName=dbDacFx" $doNotDeleteRule = "-enableRule:DoNotDeleteRule" $appOfflineRule = "-enableRule:AppOffline" $retryAttemptsParam = "-retryAttempts:$RetryAttempts" $retryIntervalParam = "-retryInterval:$RetryInterval" $verboseParam = "-verbose" Invoke-Expression "& '$MsDeployPath' --% $verb $source $dest $iisWebAppParam $coreParam $masterParam $skipDbFullSql $skipDbDacFx $doNotDeleteRule $appOfflineRule $retryAttemptsParam $retryIntervalParam $verboseParam" Write-Host "Uploading configuration..." -ForegroundColor Green Get-ChildItem $configurationPath -File -Recurse | ForEach-Object { $targetWebsiteFile = $_.FullName.Replace("$configurationPath\", "").Replace("\", "/") UploadWebsiteFile $targetWebsiteFile $_.FullName }
-
Sitecore Experience Platform (SXP) 10.1より前のバージョンにSCCHをインストールする場合は、dacpacファイルを使用して、スクリプトの $skipDbFullSqlパラメーターと $skipDbDacFxパラメーターを削除します。スクリプト行は次のようになります。
RequestResponseInvoke-Expression "& '$MsDeployPath' --% $verb $source $dest $iisWebAppParam $coreParam $masterParam $doNotDeleteRule $appOfflineRule $retryAttemptsParam $retryIntervalParam $verboseParam"
パラメータを削除した後、Core管理パラメータとMaster管理パラメータの接続文字列を更新します。
RequestResponse$coreParam = "-setParam:name=`"Core Admin Connection String`",value=`"<core connection string>`"" $masterParam = "-setParam:name=`"Master Admin Connection String`",value=`"<master connection string>`"
手記Azureポータルで接続文字列を見つけるには、Azure SQLデータベースに接続します。
-
ファイルを保存して閉じます。
スクリプト入力を準備する
スクリプトを正常に実行し、コネクタをインストールして構成するには、次のパラメーターを準備する必要があります。
-
ResourceGroupName - インストール先のAzureのリソース グループ名。
-
WebAppName - インストール先のAzureのWebアプリの名前。
-
CHClientIdCHClientSecret - Content Hub OAuthクライアントIDクライアントとクライアント シークレット。(これらを作成する方法については、「認証」を参照してください)。
-
CHUserNameCHPassword - Content HubにアクセスするためのSitecoreの識別として使用されるContent Hubユーザー名とパスワード。
-
CHUri - Content HubインスタンスへのURI (例: https://mysandbox.stylelabs.io/.
-
CHServiceBusEntityPathInand CHServiceBusEntityPathOut - これらの接続文字列を見つけるには、Content HubでM Azure Service Bus型の新しいアクションを作成します。CHServiceBusEntityPathInの場合はHub out 、CHServiceBusEntityPathOutの場合はHub inの接続文字列をメモします。例えば:
-
CHServiceBusSubscription - Sitecoreサブスクリプションの名前。
-
CHSearchPage - DAMアセットを選択するために使用するSearchページへのURI (例: https://mysandbox.stylelabs.io/en-us/sitecore-dam-connect/approved-assets)
コネクタのインストールと構成
コネクタのインストールを実行し、設定を適用するには:
-
管理者アクセス権でPowerShellウィンドウを開きます。
-
ローカルフォルダに移動します。例えば:
RequestResponsecd "C:\Temp\SCCHInstallation"
-
次のコマンドを実行します。
RequestResponseaz account set –subscription “<subscription name or id>”
-
準備したパラメーターを使用して、次のコマンドを実行します。
RequestResponse.\Deploy.ps1 -ResourceGroupName "<MyResourceGroup>" -WebAppName "<MyWebApp>" -WdpPackagePath "C:\Temp\SCCHInstallation\Sitecore.Connector.ContentHub.WDP.5.2.0-r00328.4145.scwdp.zip" -CHClientId "<ClientId>" -CHClientSecret "<ClientSecret>" -CHUserName "<UserName>" -CHPassword "<Password>" -CHUri "https://mysandbox.stylelabs.io/" -CHServiceBusEntityPathIn "<Hub out connectionstring>" -CHServiceBusSubscription "<MySitecoreSubscription>" -CHServiceBusEntityPathOut "<Hub in connectionstring>" -CHSearchPage "https://mysandbox.stylelabs.io/en-us/sitecore-dam-connect/approved-assets"
手記このコマンドは、CMとCD Azure PaaS Webアプリケーションの両方に対して実行する必要があります。
-
SCCHのDAM機能を使用する場合、コネクタがContent Hubからアセットを選択できるようにするには、すべてのホスト名をContent-Security-Policyタグに追加します。
手記CMPまたはDAMが有効になっていることを確認します。
インストールエラーのトラブルシューティング
既存のAzure PaaS環境にSCCHをインストールするときに、次のエラーが発生する可能性があります。
エラー: ファイルまたはアセンブリ 'System.Runtime.CompilerService.Unsafe' を読み込めませんでした
このエラーは、Azure Redisキャッシュを構成した場合に発生する可能性があります。 System.Runtime.CompilerService.Unsafeバージョン4.0.4.1でバージョン競合エラーが発生した場合は、次のノードをwebconfigファイルに追加します。
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.0"/>
</dependentAssembly>