---
title: "既存のPaaS環境でContent Hub Sitecore Connectを展開する"
slug: "deploy-sitecore-connect-for-content-hub-in-an-existing-paas-environment"
abstract: "既存のAzure PaaS環境でコネクター Content Hub Sitecore Connectを展開する方法。"
---
# 既存のPaaS環境でContent Hub Sitecore Connectを展開する

既存のAzure PaaS環境でSitecore Connect for Content Hub(SCCH)を展開できます。

既存のPaaS環境に展開するには、既存のSitecore XMまたはXP Azure PaaS環境と[Microsoft Web Deploy](https://www.iis.net/downloads/microsoft/web-deploy)をインストールしている必要があります。

> !注新しいSitecore Azure PaaS環境を展開する場合は、代わりに [「Deploy Sitecore Connect for Content Hub in new PaaS environment(新しいPaaS環境)](https://doc.sitecore.com/xp/ja/developers/connect-for-ch/51/connect-for-content-hub/deploy-sitecore-connect-for-content-hub-in-a-new-paas-environment.html "Deploy Sitecore Connect for Content Hub in a new PaaS environment") 」の指示を使いましょう。

このウォークスルーでは、以下の方法を説明します:

## インストールフォルダーを用意してください

インストールフォルダーを作成するには:

1.  例えばファイルシステム内にローカルフォルダを作成します。 C:\\Temp\\SCCHInstallation。
    
2.  [Sitecoreダウンロードページ](https://dev.sitecore.net/Downloads/Sitecore_Connect_for_Content_Hub/5x/Sitecore_Connect_for_Content_Hub_510.aspx)からContent Hub WDPパッケージのSitecore Connectをダウンロードし、作成したローカルフォルダに保存してください。
    
3.  ローカルフォルダで新しいファイルを作成し、名前をDeploy.ps1。
    
4.  新しいファイルをメモ帳やVS Codeなどのエディタで開き、次のスクリプトを貼り付けます:
    
    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してください。スクリプト行は以下のようになります:
    
    Invoke-Expression "& '$MsDeployPath' --% $verb $source $dest $iisWebAppParam $coreParam $masterParam $doNotDeleteRule $appOfflineRule $retryAttemptsParam $retryIntervalParam $verboseParam"
    
    パラメータを削除した後、コアとマスター管理パラメータの接続文字列を更新してください:
    
    $coreParam = "-setParam:name=\`"Core Admin Connection String\`",value=\`"<core connection string>\`""
    $masterParam = "-setParam:name=\`"Master Admin Connection String\`",value=\`"<master connection string>\`"
    
    > !注[Azure SQLデータベース](https://learn.microsoft.com/en-us/azure/azure-sql/database/connect-query-content-reference-guide?view=azuresql#get-server-connection-information)に接続することでAzureポータルで接続文字列を確認できます。
    
6.  ファイルを保存して閉じてください。
    

## スクリプト入力を準備してください

スクリプトを実行し、コネクターをインストール・設定するためには、以下のパラメータを準備する必要があります:

-   ResourceGroupName - インストールしたいAzureのリソースグループ名。
    
-   WebAppName - インストールしたいAzureのWebアプリの名前。
    
-   CHClientIdおよびCHClientSecret - Content Hub OAuthクライアントIDおよびクライアントシークレットです。(これらの作成方法については認証を参照してください。)
    
-   CHUserNameそしてCHPassword - Content HubにアクセスするためのSitecore識別として使われるContent Hubユーザー名とパスワードです。
    
-   CHUri - 例えば、Content HubインスタンスへのURI https://mysandbox.stylelabs.io/。
    
-   CHServiceBusEntityPathInCHServiceBusEntityPathOut - これらの接続文字列を見つけるには、Content Hubで型*M Azure Service Bus*の新しいアクションを作成します。CHServiceBusEntityPathInの接続文字列は**Hub out**のもの、CHServiceBusEntityPathOutの は の**Hub**の中にあるものをメモしてください。例えば:
    
    ![The Edit action dialog box showing the Hub in and Hub out connection strings](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/connect-for-ch/51/connect-for-content-hub/images/edit_action.png)
    
-   CHServiceBusSubscription - あなたのSitecoreサブスクリプションの名前。
    
-   CHSearchPage - 例えば、DAMアセットを選択するために使いたいSearchページのURI https://mysandbox.stylelabs.io/en-us/sitecore-dam-connect/approved-assets。
    

## コネクタの設置と設定

コネクタの取り付けを実行し、設定を適用するには:

1.  管理者権限でPowerShellウィンドウを開きます。
    
2.  ローカルフォルダに移動してください。例えば:
    
    cd "C:\\Temp\\SCCHInstallation"
    
3.  次のコマンドを実行します:
    
    az account set –subscription “<subscription name or id>”
    
4.  準備済みのパラメータで次のコマンドを実行します:
    
    .\\Deploy.ps1 -ResourceGroupName "<MyResourceGroup>" -WebAppName "<MyWebApp>" -WdpPackagePath "C:\\Temp\\SCCHInstallation\\Sitecore.Connector.ContentHub.WDP.5.1.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 Applicationsの両方に対して実行する必要があります。
    
5.  SCCHのDAM機能を使う場合、コネクターがContent Hubからアセットを選択できるようにし、[すべてのホスト名をContent-Security-Policyタグに追加](https://doc.sitecore.com/xp/ja/developers/connect-for-ch/51/connect-for-content-hub/configure-the-dam-connector-in-sitecore.html "Configure the DAM connector in Sitecore")してください。
    
    > !注[CMPまたはDAMを有効にし](https://doc.sitecore.com/xp/ja/developers/connect-for-ch/51/connect-for-content-hub/enable-cmp-or-dam.html "Enable CMP or DAM")ていることを確認してください。
    

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

既存のAzure PaaS環境にSCCHをインストールする際に、以下のエラーに遭遇する可能性があります。

### エラー:ファイルまたはアセンブリ「System.Runtime.CompilerService.Unsafe」を読み込めませんでした

このエラーは、Azure redisキャッシュを設定したときに発生することがあります。バージョン4.0.4.1でバージョン競合エラーが出た場合System.Runtime.CompilerService.Unsafe 、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>