前回の記事で、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コンテナ上にファイルのブロブデータ本体が存在していることを確認できます。
以上となります。
最後に各リンクをまとめておきます。
さんのコメント: さんのコメント: