近年、クラウドベンダーが提供するサービスが充実し、より多くのクラウドサービスが誕生してきました。しかし、一つのニーズに対して、複数のサービスを選択できるようになってきているものの、どのサービスが最適なのかを判断することは逆に難しくなってきていると考えられます。最近、SASを活用しているお客様から、「Microsoft社のAzureを使っていますが、これからクラウドにデータを移行して、安くて使い勝手なストレージサービスは何かありませんか」と聞かれたこともありました。
このブログシリーズでは、クラウド上のストレージサービスの一種であるMicrosoft Azure CloudのBlobストレージサービスの概要を紹介した上で、SAS ViyaからそのBlock Blobストレージに格納されているデータへアクセスする方法をご紹介させていただきます。
このブログシリーズは合計2回です。今回のブログでは、まず特定の一つファイルへのアクセス方法をご紹介します。次回のブログでは、より汎用的なアクセス方法、つまり、Blobストレージを一つのファイルシステムとして、SASサーバと連携し、一度に複数のデータにアクセスする方法をご紹介します。ぜひ最後まで、お付き合いいただければと思います。
第1回:https://blogs.sas.com/content/sasjapan/2020/10/01/sas-azure-blob-1/
第2回:https://blogs.sas.com/content/sasjapan/2020/10/05/sas-azure-blob-2/
Blobストレージとは何か?
まず、Blobストレージとは何かを紹介する前に、Blobって何でしょうか、から始めます。聞きなれない方もいらっしゃるかと思いますので。実際、BlobはBinary Large OBjectの略称です。本来はデータベースで用いられているデータタイプの種類で、メディアファイルや、圧縮ファイル、実行ファイルなどのデータを格納する時に使用されているものです。
では、Blobストレージとは何か?Microsoft社の紹介では、こう書かれています。
「Blob Storage は、テキスト・データやバイナリ・データなどの大量の非構造化データを格納するために最適化されています。非構造化データとは、特定のデータ・モデルや定義に従っていないデータであり、テキスト・データやバイナリ・データなどがあります。」
少し言い換えますと、Blobストレージは、ログファイルから、画像ファイルやビデオ・オーディオファイルまで格納できます。もちろん、通常目的でのデータ利用にも対応しているため、データの格納場所として使っても問題ありません。(Microsoft Azureの資料によりますと、4.75 TiBまで可能です。)
なぜBlobストレージなのか
前文で少し申し上げたSASのお客様から頂いた質問の中で、「安くて使い勝手の良いストレージサービスは」と聞かれた事に関して、安いというポイントに関しては、下記の図をご覧ください。
ソース:https://azure.microsoft.com/ja-jp/pricing/details/storage/(2020/09/09アクセス時点)
ご覧のように、ブロックBlobのストレージサービスは、安価で、かつ非構造化データに対応し、一般目的でのデータストレージとして、非常に向いています。
もちろん、ビジネスケースによっては、様々考慮すべき点(既存環境にHadoop環境があるかどうか、スループット、ビッグデータ等々)もありますが、今回は、主にこのブロックBlobストレージを例として紹介します。
SAS ViyaからBlobストレージにアクセスする方法
ここからは、SAS ViyaからBlobストレージにアクセスする方法をご紹介します。下記の方法を使うために、前提条件として、SAS ViyaサーバとBlobストレージがあるAzure間でネットワーク通信ができる必要がありますので、ネットワークセキュリティ条件を確認してから、下記の方法をお試しください。
方法①:
SASのPROC HTTPプロシージャを使って、Blobストレージ内の特定の一つのデータにアクセスする方法。
Microsoft Azure側:
1.まず、Azureポータルに入り、「すべてのリソース」をクリックします。(図1-1)
図1-1
2.その配下で、利用されているストレージアカウントをクリックします。(図1-2)
図1-2
3.次に、表示された左側のメニューの中で、「Blob Service」配下のコンテナーをクリックします。(図1-3)
図1-3
*豆知識: ここで、いきなりコンテナーが出てくることに関して、混乱している方もいらっしゃるかもしれないので、少し解説します。こちらのコンテナーとは、Dockerコンテナーの意味ではありません。Blobストレージサービス配下のデータ格納用のサブ階層のことであり、フォルダーのようなものとイメージしてください。(図1-4)
図1-4
4.上記図1-3のように、その中に一つ「folderfirst」というコンテナーが存在しており、それをクリックすると、中に保管されているデータが見えるようになります。(図1-5)
図1-5
5.ここからが重要なポイントです。特定のデータ、例えば、「sas7bdat」データにSAS Viyaからアクセスしたい場合は、該当ファイルの名前をクリックして、下記のようなプロパティ情報を表示させます。(図1-6)
図1-6
6.次に、「SASの生成」をクリックします。(図1-7)
図1-7
*豆知識:このSASはSAS ViyaのSASではなく、Shared Access Signatureサービスの略称です。この「SASの生成」というのは特定のアクセス権限を付与するための識別子を生成することを意味します。同時に、アクセスできる権限とその期間も設定できます。
7.ここでは、アクセス許可をすべてチェックします。(図1-8)
図1-8
8.次に、画面の下にスクロールし、SAS ViyaサーバのIPアドレスを入力して、プロトコルにhttpを選択し、「SASトークン及びURLを生成」ボタンを押します。(図1-9)
図1-9
9.生成された、トークンとURLをメモしてください。後で、SAS Viyaサーバからアクセスする際に使用するので、適切に保管してください。
以上で、Azure上での準備作業が完了します。上記に示した方法は、GUIベースでの操作でビジネスユーザも簡単に行うことができます。もちろん、プログラマーの方であれば、REST APIでそれらを取得する方法もMicrosoftから提供されていますので、興味のある方は、ぜひこちらもご確認ください。
(リンク:https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-rest-api)
SAS Viya側:
今回SAS ViyaのSAS Studioを使って、PROC HTTPプロシージャを通して、Microsoft AzureのBlobストレージ内の特定データをSAS側にダウンロードしてきます。下記のコード使って、これを実現します。
SASコード: /* ライブラリパスを定義 */ /*1*/ libname test "/path-for-this-program"; /* 定義されたライブラリに該当データにアクセスできるよう設定 */ /*2*/ filename outsas "/path-for-this-program/sampledata.sas7bdat " ; /*トークンをマクロで定義*/ /*3*/ %let AZURETOKEN=XXXX /* Microsoft Azure Blobからデータをダウンロードしてくる*/ /*4*/ proc http url="XXXX" oauth_bearer="&AZURETOKEN" out=outsas ; debug level=1 ; run ;
上記サンプルコードは合計4ステップです。
1と2はSASサーバがデータファイルを受け取るためのライブラリとパスの定義です。
3は、先ほど、Azure側で生成されたトークンをマクロに定義するステップです。
4は、PROC HTTPを使って、urlで先ほどAzure側で生成されたURLリンクを貼りつけます。
上記コードの実行が正常に完了すれば、下記図1-10のように左ペインのライブラリでtestというライブラリが表示され、その中に、先ほどのBlobストレージ中のSASデータセットが表示されます。
図1-10
これで、データをBlobストレージから取得することができましたね。
これが実現できる理由を一言で言いますと、Blobストレージ内の各データが、httpやhttpsのエンドポイントを持っているため、適切なネットワークを設定すれば、簡単に取得できるような仕組みになっているからです。
ここから先は、SASの世界で、Baseエンジンをつかって、データを加工していくことももちろんできます。
またはPROC CASやPROC CASUTILを使って、CASインメモリにインポートし、処理することもできるので、ご自由に試してみてください。
いかがでしょうか。意外と簡単にできてしまいますね。
ここまで、SASからMicrosoft Azure Blobストレージ上にある特定のデータにアクセスする方法を紹介しました。ただ、通常のビジネスシーンでは、やはり、複数のデータに同時にアクセスする必要があり、毎回トークンやURLを貼りつけるなどは面倒な作業になります。それも考慮し、次回のブログでは、2つ目の方法をご紹介します。
2つ目の方法では、BlobストレージをFile SystemとしてSASサーバにマウントし、SASのBase LibraryまたはCASLIBをアサインして、Blobストレージ上の複数データに効率的にアクセスする方法を紹介します。
ぜひ、楽しみにしてください。
第2回リンク: https://blogs.sas.com/content/sasjapan/2020/10/05/sas-azure-blob-2/