どうも、フリーランスエンジニアのMakotoです。
今回は、Azureが提供するストレージサービスについて解説します。
初めてクラウドを学ぶ人にとってはあまり聞いたことがない用語が多く登場するのがこのストレージサービスだと感じています。
こんなふうに感じるかもしれません。
それはきっと日常で利用するパソコンのディスクやファイルサーバ「以外」の用途のストレージに馴染みがないからだと思います。ほんでオプション(選択肢)が多い。。
今回も図解やAzureポータルの画面を交えながらわかりやすく解説しますので、ぜひ最後までお読みください。
それではいってみましょう!
Azure Storageとは?
Azure Storageは、データを保存するためのストレージを提供するサービスでIaaSに分類されます。
耐久性、拡張性、安全性が高く、クラウドならではの特性を備えています。例えば、イレブンナイン(99.999999999%)以上の耐久性を提供できるよう設計されていたり、保存するデータは自動的に暗号化されるようになっています。
まず、次の図解で全体のイメージを掴みましょう。
Azure Storageには大きく次の2つがあります。
- 仮想マシンのディスクを提供するマネージドディスク
- アプリケーションが用途に応じて利用するストレージ
イメージしやすいのが前者の仮想マシンのディスクです。OSディスクやデータディスクは内部的にはAzure Storageの「Blob」と呼ばれるストレージに保存されており、Azureによって管理されているため保存場所を意識する必要がありません。
Azureによって管理されているので「マネージドディスク」と呼びます。詳細はこちらの記事をご覧ください。
後者は「ストレージアカウント」と呼ばれるリソースを作成することで4つのサービスを利用することができます。サービスの用途は後述します。
- Blob(ブロブ)
- File(ファイル)
- Talbe(テーブル)
- Queue(キュー)
Azure Storageといえばこのストレージアカウントを作成して利用する4つのサービスを指す事が多いです。本記事でもストレージアカウントに関する内容を解説します。
公式ドキュメントにも記載のあるとおりAzure StorageのサービスはBlob/File/Table/Queue/Diskの5種類ですが、Diskストレージ=マネージドディスクのことで仮想マシン専用なので、AzureStorage解説の文脈ではDiskを除いた4種類で語られることがあります。
ストレージアカウントを作成するとデータストレージとして4つのサービスが表示されていることがわかります。なお、「コンテナー」はBlobのことで、「ファイル共有」はFileのことだと思ってください。
ストレージアカウントを作成する時には次のような項目を指定します。パフォーマンスや冗長性についても後述します。
- ストレージアカウント名
- 3 ~ 24文字の小文字と数字のみ。記号は不可
- 全世界でユニークである必要あり
- 地域(リージョン)
- パフォーマンス
- 冗長性
Azure Storageを利用するにはストレージアカウントの作成が必要
ストレージアカウントには既定で最大5PiBのデータを保存できて、データの数に制限はありません。詳細はストレージの制限を参照してください。
ストレージアカウントの性能
ストレージアカウントには次の2種類の性能(パフォーマンス)があります。
種類 | 用途 |
---|---|
Standard(汎用) | 一般的なほとんどのシナリオに推奨 |
Premium | 低遅延が求められるシステム向け |
さらに、Standardにはv1、v2の2種類あり、v2が新しいサービスです。
v1は古いレガシーなアカウントのタイプで、v2は最新の機能が利用できてv1よりコストが最適化されています。
AZ-900試験の対策としてはこのv1、v2のバージョンの違いはあまり意識しなくても問題ないと思われます。レガシーな選択肢が問われる可能性は低いです。
現時点でストレージアカウントといえば「汎用 v2 アカウント」が主な選択肢になります。先のAzureポータル画面で「Standard」を選択すれば「汎用 v2 アカウント」で作成されます。(v1はAzureポータルから作成できなくなっています)
ストレージサービスの種類
前述のとおりAzure Storage(ストレージアカウント)にはBlob / File / Talbe / Queueの4つのサービスがあります。File以外はアプリケーション(プログラミングのコード)から利用するのが一般的です。
Blob(ブロブ)
Blobは、テキストデータやバイナリデータなどの大量の非構造化データを格納できるオブジェクトストレージサービスです。AWSでいう「S3」です。
例えば、ストリーミング配信する動画や音声ファイルを保存したり、長期保管が必要なバックアップデータの保存といった用途があります。
1GBあたりおよそ2.5円と安価に利用できるのも特徴です。1TB保存しても月2500円程度ですね。
オブジェクトストレージとは
オブジェクトと呼ばれる単位でデータを管理するストレージのことです。パソコンのローカルディスクのようにディレクトリ構造(パス)で保存場所を管理せずオブジェクトIDと呼ばれる識別子で管理します。階層構造を持たないフラットな構造なので拡張性・可用性に優れています。詳細は5分で絶対に分かるオブジェクトストレージを参考にしてください。
Blobストレージは次のような構造を持ちます。
ストレージアカウントを作成したらその次に「コンテナー」と呼ばれる入れ物を作成します。ルートフォルダのような概念です。AWSでいう「バケット」です。
コンテナーを作成したらその中にファイルをアップロードして保存します。このファイルのことを「Blob」と呼びます。オブジェクトストレージは階層構造を持たないと述べましたが、論理的なフォルダを作成してわかりやすいように階層で整理することもできます。
File(ファイル)
Fileは、SMB/NFSプロトコルに対応したファイル共有サービスです。オンプレミスのファイルサーバの代わりとして利用するのが一般的です。AWSでいう「EFS」です。
最も身近に感じるサービスですが、Blobと比較すると約3倍の価格になっているので割高に感じられるかもしれません。
Fileを利用するには共有フォルダにあたる「ファイル共有」を作成します。この時、共有フォルダの名前の他に性能と価格の要素となる「レベル(アクセス層)」を選択します(後述)
ファイル共有を作成すると「接続」ボタンからマウントできます。Windows、Linux、macOSごとにマウントするためのコマンドが表示されます。SMBプロトコルの場合はアウトバウンドの445番ポートが開いていないと接続できないので注意しましょう。
Table(テーブル)
Tableは、半構造化データを格納するNoSQLキーバリューストアサービスです。大容量のデータに高速にアクセスできるといった特徴があります。
例えば、ユーザーの属性情報やデバイス情報などをJSONやXML、YAMLなどの形式(半構造化データ)で保存して利用します。Table Storageのほか、Azure Cosmos DBも代表的なNoSQLのサービスです。
NoSQL(Not only SQL)とは
データベースの分類を表す言葉で、リレーショナルデータベースではない = 表形式のテーブルが相互に関連付けられたデータベースではないという意味です。
Queue(キュー)
Queueは、コンポーネント間の非同期通信に使うメッセージングサービスです。次の言葉を聞いたことはないでしょうか?
- 密結合
- 疎結合
ざっくり言うと複数のサーバや機能の結びつきが強いか/弱いか、依存しているか/独立しているかを表す用語です。
密結合なアプリケーションの場合、1つのサーバの障害、1つの機能のバグ、1か所のボトルネック(遅延)がシステム全体に及んでしまったり、それを修正するのが困難になります。
そういった課題を解消するためにメッセージングサービスを使います。仲介役としてQueueストレージを間にかまして、サーバ同士、機能同士を疎結合になるように設計します。
例えば、ユーザーから大容量データのアップロードを受け付けるWebアプリケーションがあった場合、ストレージにデータを保存し終わるまでリクエストの応答を待機する(同期処理)ような仕組みになっているとレスポンスの悪化に繋がります。
こういった場合に、データの保存処理に関する情報をメッセージという形でQueueに保存しておいて、データの保存完了を待たずに(非同期処理)ユーザーに応答を返します。
実際にはデータの保存に失敗したらどうするか?など考慮点はありますがイメージとしてはこんな感じです。疎結合なアプリケーションを作るために利用するのがQueueです。
ストレージのアクセス層
アクセス層は、保存するデータのアクセス頻度と保存期間に基づいてコストを最適化したり、パフォーマンスを決定するためのオプションです。
BlobとFileでそれぞれ設定できますが、設定内容が少し異なります。AZ-900試験の対策としては特にBlobのアクセス層をおさえておきましょう。
Blobのアクセス層
Blobのアクセス層は次の4つがあります。
種類 | 用途 |
---|---|
ホット | 頻繁にアクセスされるデータ向け 保存コスト高、読み書きコスト低 |
クール | あまりアクセスされず少なくとも30日以上保管されるデータ向け ホットに比べて保存コスト低、読み書きコスト高 |
コールド new | めったにアクセスされず少なくとも90日以上保管されるデータ向け クールに比べて保存コスト低、読み書きコスト高 |
アーカイブ | めったにアクセスされず少なくとも180日以上保管されるデータ向け 保存コストが最も低く、読み書きコストが最も高い |
※コールドアクセス層は2023年8月に追加(GA)されました
クール / コールド / アーカイブには「少なくともxx日」と早期削除期間が設けられており、これより前にアクセス層を移動したり削除すると早期削除料金が適用されます。
ホット / クール / コールドは「オンライン層」の括りでいつでもアクセスできますが、アーカイブは「オフライン層」となり読み取りや変更はできなくなります。
アーカイブに保存しているデータを取得するには、ホット / クール / コールドのいずれかに変更する必要があり数時間かかります。
この処理のことを「リハイドレート(rehydrate)」と呼びます。rehydrateは、乾燥食品に水を加えて戻したり、脱水症状を治すために水分補給することを指す用語です。
アーカイブ層のデータをオンラインに戻すために必要な処理で次の2通りの方法がある
- オンライン層にファイル(Blob)をコピーする
- アクセス層をホット / クール / コールドに変更する
リハイドレートの完了までに数時間かかることがあります。アーカイブ層はこのリハイドレートにかかる時間を許容できるような長期保存が目的のデータ保存に適しています(監査ログなど)
Fileのアクセス層
Fileのアクセス層(レベル)には次の4つがあります。
種類 | 用途 |
---|---|
Premium | 低遅延が求められるシステム向け 保存コストが最も高い、読み書きコスト無料 |
トランザクション最適化 | トランザクション負荷の高いシステム向け 保存コスト高、読み書きコスト低 |
ホット | チーム共有など汎用的なシナリオ向け 保存コスト中、読み書きコスト中 |
クール | 長期保存のシナリオ向け 保存コスト低、読み書きコストが最も高い |
PremiumはSSDで、その他はHDDで提供されます。
そして、Premiumはその名の通りストレージアカウントの性能がPremiumでないと選択できないようになっています。
ストレージの冗長オプション
ストレージアカウントには6つの冗長オプションが用意されており、データセンターやリージョン障害から保護できるようになっています。デフォルトで最低でも3つのコピーが保存され、冗長性が高くなるほどコストも高くなります。
- LRS
- ZRS
- GRS
- RA-GRS
- GZRS
- RA-GZRS
それぞれの用語の末尾にあるRSは「Redundant Storage」の略で「冗長ストレージ」という意味で、重要なのは頭につくLとかZなどの地理(場所)を表す文字です。
全体のイメージ図はこんな感じです。プライマリを東日本リージョン、セカンダリを西日本リージョンで例示しています。
もしリージョンペア、可用性ゾーンあたりの用語を知らない場合はこちらの記事を先にご覧になることをオススメします。
ローカル冗長ストレージ(LRS)
同一リージョン、同一データセンター内に3つのコピーを保存します。データセンター、リージョンの障害に耐えることはできませんが、最も安価なオプションです。
※説明簡略のためにここでは一つのゾーンを単一データセンターとして解説を進めます。
ゾーン冗長ストレージ(ZRS)
同一リージョン、別々のデータセンター(可用性ゾーン)に3つのコピーを保存します。リージョンの障害に耐えることはできませんが、ゾーンが分かれているためデータセンターの障害に耐えることができます。
地理冗長ストレージ(GRS)
プライマリリージョンの単一データセンター内に3つのコピー、加えてセカンダリリージョンの単一データセンター内に3つのコピー、計6つのコピーを保存します。
加えて、頭にRAが付いた冗長オプションの場合は「読み取りアクセス地理冗長ストレージ(RA-GRS)」と呼び、文字通りセカンダリリージョンに保存されているデータに読み取りアクセスすることができます。
データセンター、リージョン障害いずれの場合もフェールオーバーすることでセカンダリリージョンのデータにアクセスすることが可能です。
読み取りアクセスが可能かどうかは、耐障害性というよりはアクセスを分散させるための手法で、プライマリリージョンへの読み取りアクセスをセカンダリリージョンへ分散させたいような場合に利用します。
地理ゾーン冗長ストレージ(GZRS)
GRSのプライマリリージョン側を単一データセンターではなく、別々のデータセンター(可用性ゾーン)に変更した形です。
頭にRAが付いた冗長オプションの場合は「読み取りアクセス地理ゾーン冗長ストレージ(RA-GZRS)」と呼びます。
以上が6つの冗長オプションです。和名、アルファベット表記どちらとも呼び方の法則がわかればそれほど難しくないと思います。
RA(読み取りアクセス)は地理冗長(G)にした時のオプションですので、実質、LRS/ZRS/GRS/GZRSの4つが耐障害の冗長オプションとも言えます。
プライマリリージョンへのコピーは同期して書き込まれます。セカンダリリージョンへのコピーは非同期で書き込まれます。非同期的に行うコピー間隔のSLAは定められていませんが、目安としては15分未満です。プライマリとセカンダリ間で一時的に差異が起こりうる点は理解しておく必要があります。
まとめ
今回はAzureが提供するストレージサービスについて解説について解説しました。
データを保存するためのサービスなのでほぼ間違いなく利用することになる重要なサービスです。Blob/File/Table/Queueの概要をおさえた上で、性能、コスト、耐障害性などを左右するそれぞれのオプションについて理解を深めていきましょう。