Azure BlobをメディアライブラリーのBlobストレージとして使用する - マイグレーション編

samatsu 12/4/2019 677 N/A Sitecore XP

前回の記事で、Sitecore  Azure Blob モジュールのインストールと構成が完了しました。あとは、既存の環境のメディアアイテムに関連する本体のファイルがmaster,webデータベースに保存されているので、そのデータをAzure Blob ストレージに移行します。手順に関しては、ドキュメントサイトの記事がオフィシャルな内容です。

1.ブロブデータの移行

Sitecore Azure Blob モジュールのインストールに成功していると、 App_Data\Migration フォルダーに Invoke-Migration.ps1というファイルが作成されているはずです。ちなみに、Revert-Migration.ps1は、Azure Blob ストレージから、SQL Server のデータベースにブロブストレージを戻す場合に使用するスクリプトです。

スクリプトの中身を見るとわかりますが、AzureRM PowerShellモジュールを使用しています。次のコマンドを実行してAzureRMモジュールがインストールされている確認します。

Get-Module -Name AzureRm -ListAvailable

インストールされていなければ、こちらの記事を参考に、インストールします。といっても次のコマンドレットを実行するだけです。

 Install-Module -Name AzureRM

Azモジュールを使用することもできるとのことなので、その場合は適宜スクリプトの内容を変更してください。

後は、ドキュメントサイトで紹介されているコードを実行します。例えば次のように実行します。少なくとも、BlobContinareNameパラメーターは適宜環境に合わせて変更してください。

 .\Invoke-Migration.ps1 -SqlDBConnectionNames @("master", "web") -AzureBlobConnectionName "azureblob" -BlobContainerName "medialibrary" -Force *>&1 | Tee-Object -FilePath Invoke-Migration.log

移行スクリプトが成功すると、コンテナ配下にデータが作成されます。名前は、メディアファイル本体のIDになります。

2.レンダリングされるURLについて

これまでの手順で、メディアライブラリーで管理されるメディアアイテムの本体のファイルがデータベースから、Azure Blobストレージに変更されました。

Image型のフィールドを使用して、実際にそのフィールドをレンダリングした場合、/-/mediaで始まる、変更前と同じ形式のURLが生成されることに注意してください。あくまでURLはメディアライブラリー上のメディアアイテムのパスを表します。ストレージとして、Azure Blobストレージを使用しているだけで、レンダリングする際にAzure BlobストレージのURLを参照するように変わるわけではありません。

BlobストレージのPublic Accessの設定はデフォルトではPrivateであり、Azure Blob Storageモジュールを有効化する際に、Publicに変更していないことに注意して下さい。そのため引き続きブロブデータ本体はセキュリティーで保護されます。

3. ブロブデータの名前(GUID)について

データをAzure Blobストレージに移行すると、移行されたデータの名前にGUIDが使用されていることがわかります。これが何かというと、メディアアイテムのBlobフィールド(表示名は Media, メディア) の値に設定されているファイル本体のブロブデータを表すIDです。どのような値になっているかはSQL Serverのテーブルを検索して調べられます。

Blobフィールドの定義アイテムのIDは "{40E50ED9-BA07-4702-992E-A912738D32DC}"です。後はメディアアイテムのIDがわかれば調べられます。例えば、下図の画像を表すメディアアイテムの場合は、アイテムのIDが、 "{50518B8C-B380-4367-A10B-C6A125A4FDA9}" です。

後は、SQL Server Management Studioなどを使用してSharedFieldsテーブルに次のようなクエリを発行するだけです。

SELECT *
  FROM [dbo].[SharedFields]
  where FieldId = '{40E50ED9-BA07-4702-992E-A912738D32DC}'
    and ItemId = '{50518B8C-B380-4367-A10B-C6A125A4FDA9}'

うまくレコードを見つけることができたら、そのレコードのValue列の値がブロブ本体のIDです。

そのIDを検索してあげると、Blobコンテナ上にファイルのブロブデータ本体が存在していることを確認できます。

以上となります。

最後に各リンクをまとめておきます。

Azure BlobをメディアライブラリーのBlobストレージとして使用する