既存のPaaS環境にSitecore Connect for Content Hubをデプロイする

Version: 5.2
日本語翻訳に関する免責事項

このページの翻訳は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をデプロイする の手順を使用してください。

このチュートリアルでは、次の方法について説明します。

  1. インストールフォルダを準備する

  2. スクリプト入力を準備する

  3. コネクタのインストールと構成

  4. インストールエラーのトラブルシューティング

インストールフォルダを準備する

インストールフォルダを準備するには:

  1. ファイル システムにローカル フォルダを作成します (例: C:\Temp\SCCHInstallation.

  2. からContent Hub WDPパッケージのSitecore Connectをダウンロードし、作成したローカル フォルダーに保存します。

  3. ローカル フォルダで新しいファイルを作成し、Deploy.ps1という名前を付けます。

  4. メモ帳や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
    }
    
  5. Sitecore Experience Platform (SXP) 10.1より前のバージョンにSCCHをインストールする場合は、dacpacファイルを使用して、スクリプトの $skipDbFullSqlパラメーターと $skipDbDacFxパラメーターを削除します。スクリプト行は次のようになります。

    RequestResponse
    Invoke-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データベースに接続します

  6. ファイルを保存して閉じます。

スクリプト入力を準備する

スクリプトを正常に実行し、コネクタをインストールして構成するには、次のパラメーターを準備する必要があります。

  • 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 outCHServiceBusEntityPathOutの場合はHub inの接続文字列をメモします。例えば:

    The Edit action dialog box showing the Hub in and Hub out connection strings
  • CHServiceBusSubscription - Sitecoreサブスクリプションの名前。

  • CHSearchPage - DAMアセットを選択するために使用するSearchページへのURI (例: https://mysandbox.stylelabs.io/en-us/sitecore-dam-connect/approved-assets)

コネクタのインストールと構成

コネクタのインストールを実行し、設定を適用するには:

  1. 管理者アクセス権でPowerShellウィンドウを開きます。

  2. ローカルフォルダに移動します。例えば:

    RequestResponse
    cd "C:\Temp\SCCHInstallation"
  3. 次のコマンドを実行します。

    RequestResponse
    az account set –subscription <subscription name or id>
  4. 準備したパラメーターを使用して、次のコマンドを実行します。

    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アプリケーションの両方に対して実行する必要があります。

  5. 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ファイルに追加します。

RequestResponse
<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>

何かフィードバックはありますか?

この記事を改善するための提案がある場合は、