すのふら

すのふら

日々の備忘録

Amazon EBS/インスタンスストア/EFSについて勉強

AWS 認定ソリューションアーキテクト – アソシエイトを受けるため、改めてAmazon Web Service(AWS)の勉強をする。

今回もこの本を一読したうえで機能単位で勉強していく。


Amazon EBSとは

EC2インスタンスにアタッチして利用する永続可能なブロックストレージサービス。
ブロックストレージとは、データをブロック単位で分割して保存する方式。

www.atmarkit.co.jp

OSやアプリケーション、データ格の場所などの用途に使われる。

スナップショット機能が使えるので、EBSをバックアップしたいときやディスクの暗号化を実施したいときにも使用できる。

EBSはEC2と同一のAZ内でのみアタッチができるというのが注意。
もし、別のAZやリージョンのEC2にEBSの情報を使用させたいという場合、SnapshotをS3に取得し、そこから復元することで対応が可能。


高可用性

Amazon EBS ボリュームは、高い可用性と信頼性を実現するように設計されています。Amazon EBS ボリュームのデータは、追加料金なしで、同じアベイラビリティーゾーン内の複数のサーバーにレプリケートされます。これは、コンポーネントの 1 つに障害が発生したことが原因でデータが失われるのを防ぐためです。詳細については、Amazon EC2 および EBS のサービスレベルアグリーメント (SLA) を参照してください。
特徴 - Amazon EBS | AWS

複数AZ内で複製されるので、単一のディスク障害を回避することができる。また障害を見越した冗長化AWSが実施てくれるため不要。

ただしあくまでも単一AZ内の話なので、AZ自体の障害が起きた場合は復旧できない可能性がある。
そのため定期的にスナップショットを取ってバックアップをとるのがよい。


EBSをマウントする

f:id:snofra:20201204231621g:plain
Amazon EBSを活用してデータをバックアップしてみよう ~Amazon EC2/S3環境構築のすべて~ (2/6):CodeZine(コードジン) より引用

  • EBSボリュームを作成する
  • EBSボリュームをEC2にアタッチする
  • ファイルシステムを作成する
  • EBSボリュームをマウントする


EBSボリュームを作成する

そのまま。EBSボリューム自体を作成する。
ボリュームタイプやサイズを指定する。


EBSボリュームをEC2にアタッチする

作成したボリュームをアタッチ(取付)する。EC2は停止されていなければならないので注意。


ファイルシステムを作成する

EBSボリュームを使用可能の状態にする。


EBSボリュームをマウントする

Q.EBSインスタンスをEC2インスタンスにアタッチする場合、マウントと同じではありませんか?さまざまなガイドによると、彼らは異なることをします。 EBSインスタンスのアタッチとマウントの違いは何ですか?

A.ボリュームをアタッチすると、単にボリュームがブロックデバイスとしてインスタンスにアタッチされます。このアクションは、デバイスオペレーティングシステム内でのみ表示されるようにします。

それを使用するには、フォーマットし、ファイルシステムにマウントする必要があります。マウントは、WindowsよりもLinuxで頻繁に使用される用語です。 Linuxでは、実際にmountコマンドを使用して、デバイスファイルシステム内のポイントに割り当てています。 Windowsでは、ディスク管理を介してボリュームにドライブ文字を割り当てます。
amazon-ec2 - アマゾンec2のebsのアタッチとマウントの違いは何ですか - ITツールウェブ

ハードをくっつけるだけみたいなのがアタッチ。
中身をくっつけるのがマウント。


スナップショットによるバックアップ

スナップショットを用いてS3にバックアップすることができる。

スナップショット実施時はデータ整合性を担保するために静止点を設けることが推奨されている。
ただ、実際は推奨なのでやらなくてもよい。(アプリを停止やEBS自体のアンマウントなどは運用時において現実的ではないので、夜中など処理が発生しないタイミングで実施する形になる)

取得の実行タイミングのものが保管され、完了までEBSが使用できないというようなダウンタイムは発生しない。
バックタイミングは実行タイミングの時点のものとなるため、処理中に追加されたものについては更新されないので注意。

スナップショットは初回はフルバックアップだが、以降は増分バックアップ
1世代目はフルバックアップして、2世目でそこからの増分をバックアップするが、2世代目は1世代目のフルバックアップも保持している状態となる。
そのため1世代目を削除してしまっても問題がない。


www.backstore.jp

スナップショットはプロックレベルで圧縮されるため、課金はその圧縮サイズによって課金されるため、スナップショットの作りすぎは課金の原因となるので、削除するなども検討する。

スナップショットで保存できる世代数や保存期間などはAWSでは設定していない。
そのためスナップショットの世代管理などを行いたい場合は別途考慮する必要がある。


スナップショットを自動化する

Amazon Data Lifecycle Manager を使用して、Amazon EBS ボリュームをバックアップするスナップショットの作成、保持、削除を自動化できます。スナップショット管理を自動化すると、次のことが可能になります。
・定期的なバックアップスケジュールを実施して貴重なデータを保護する。
・監査担当者または社内のコンプライアンスが必要とするバックアップを保持する。

・古いバックアップを削除してストレージコストを削減する。
Amazon CloudWatch Events と AWS CloudTrail のモニタリング機能と組み合わせることで、Amazon Data Lifecycle Manager は EBS ボリューム用の完全バックアップソリューションを追加コストなしで提供します。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/snapshot-lifecycle.html

dev.classmethod.jp

通常、スナップショットは手動で取得する必要があるが、運用時の障害発生時の切り戻し作業などで毎週X曜日のバックアップを取るほうが良い。
どのように対応するのかというと、Amazon Data Lifecycle Manager (DLM)を使用することでスナップショットを取るのが良い。無料。

AWS Backlupを使用してもいいが、他のサービスと含めて一元管理するときに使用するのがよさそう。


スナップショットとAMIの違い

スナップショットも、EC2のAMIもどっちもEBSボリュームのバックアップを実施する。
そのため、どっちを使用すべきかという点がある。

AMI:EC2インスタンスのOS設定などをイメージして保存して新規インスタンス設定に転用。つまりOSなどの情報+EBSの情報となる。
この情報を使用して他のリージョンやAZに新規でインスタンスをセットアップしたいという場合に活用できる。

スナップショット:EBSのその時点の情報をバックアップする。ストレージ自体の復元や複製に使用できる。


EBSのボリュームタイプ

SSDとHDDでそれぞれ複数のボリュームタイプを持つ。


汎用SSD

デフォルトで提供されるストレージタイプ。

ユースケースは、以下のような感じ。

  • 仮想デスクトップ
  • レイテンシーが低いアプリケーション
  • 小中規模のデータベースサービス
  • 開発・テスト環境
  • 負荷が読めないシステム(汎用SSDはバースト機能を持っているため)

上記は主に高性能なI/Oを求めていないときに使用するものとなる。
SSDを安価に利用することができるのが特徴。

最小IOPSは100~最大は16,000まで。
サイズは1GB~16TBまで。


プロビジョンドIOPS SSD

高パフォーマンスを実現できるストレージタイプ。

ユースケースは、以下のような感じ。

  • 大規模なRDBSの構築(高速データ処理を求める場合)
  • 持続的なIOPSが必要なアプリケーションを使用する場合
  • 高いIO性能を求めるNoSQLやアプリケーション

SSDをベースにユーザが自由にIOPSを設定して利用できる。
主に汎用SSDよりも高いパフォーマンスを求められる時に利用。
ただしコスト面で、ストレージ要領+指定したIOPSに対しても課金される。

最小IOPSは100~最大は32,000まで。*1
サイズは4GB~16TBまで。


スループット最適化HDD

HDDタイプのストレージタイプ。
シーケンシャルアクセス時に高い性能を発揮する。長いスループットを使用するビッグデータ解析などに活用できる。

ユースケースは、以下のような感じ。

  • ビッグデータ分析
  • DWH(データウェアハウス)
  • 大規模なETL処理やログ分析

サイズは500GB~16TBまで。
最大500IOPS。


コールドHDD

スループット最適化HDDの高いシーケンシャルアクセスが不要な場合に使用される。

ユースケースは、以下のような感じ。

ログデータなどは基本的にS3に保持するので、どうしてもS3に保存できない場合などに考慮される。

サイズは500GB~16TBまで。
最大250IOPS。


EBSの暗号化

EBSボリュームを暗号化(AES-256)すると、ボリューム内の保持データ、インスタンス→EBSボリューム間で通信されているデータ、スナップショットすべてが暗号化される。

暗号化(復号化)はハードウェア機能で実施されるため、パフォーマンス影響はかなり小さく済む。
そのため、暗号化の時間とかは設計時に考慮不要。

暗号化したスナップショットを使用して、EBSを復元すると暗号化したままなので安心。


AWS KMSを利用したKEYの生成

EBSボリュームを作成する際にAWS KMSを使用して、ボリュームを暗号化するオプションがあるので、それを利用する。
snofra.hatenablog.com

暗号化された Amazon EBS ボリュームを別の AWS アカウントと共有するにはどうすればよいですか ?

1. Amazon EBS スナップショットを作成します。
注: EBS ボリュームがインスタンスにアタッチされている場合は、データの整合性を確保するために インスタンスを停止 します。
2. 次の AWS Key Management Service (AWS KMS) キーポリシーの例を使用して、暗号化されたスナップショットを共有 します。
3. 共有スナップショットのコピーを作成します。詳細については、スナップショットをコピーする を参照してください。
注: 必ず AWS アカウントのカスタマーマスターキー (CMK) を選択してください。そうしないと、デフォルトのマスターキーが使用されます。
4. スナップショットから EBS ボリュームを作成します。詳細については、スナップショットからの Amazon EBS ボリュームの復元を参照してください。
注: スナップショットは、スナップショットが作成された AWS リージョン でのみ復元できます。別のリージョンの EBS ボリュームの場合は、最初にそのリージョンにスナップショットをコピーしてから、スナップショットを復元します。

dev.classmethod.jp


上の情報からも単純にスナップショットを取るだけでは不足している。KMSを利用することになる。

また別リージョンに持っていくことは可能だが、リージョンにスナップショットをコピーが必要。


後からEBSを暗号化したい場合

EBSボリュームを後から暗号化したい場合は、スナップショットを作成しなければ変更できない。

  1. スナップショットを取得
  2. 暗号化を有効にしてスナップショットをコピー
  3. コピーしたスナップショットで復元
  4. 新しいEBSボリュームをEC2インスタンスにアタッチする

スナップショットを取って、さらにそれをコピーするのが必要。


EBS最適化インスタンス

EBSのパフォーマンスとして、EBS最適化の設定を選択することでEC2とEBS間の専用通信帯域を確保することができる。


f:id:snofra:20200302232459p:plain
EBS最適化インスタンスの効果を知るべくベンチマークを取ってみた | Developers.IOより引用


インスタンスストア

EC2のインスタンスで利用できる無料のストレージサービス。
EC2のホストコンピュータ上にのっているストレージなので、パフォーマンスはよいが揮発性ディスクなので、インスタンスを停止すると情報が消える。

高パフォーマンス+可用性を求める場合、インメモリーキャッシュのAmazon ElastiCacheなどを利用する。


Amazon Elastic File System(EFS)

複数EC2インスタンスからアクセス可能な共有ストレージ。
具体的には、複数EC2からNFSNFS v4.0/4.1)を使用して、ネットワーク経由でアクセスするものとなる。

ファイルシステム当たり最大 2GB/秒のスループット、数百万の IOPS、一貫したミリ秒未満のレイテンシーという高速パフォーマンスが実現可能な高性能なストレージ。
(EFSよりもIOPSという面で優れているのも特徴)

NFSなので、Windowsのファイル共有サービス(SMB)ではないことに注意Windowsのファイルサーバーを使用したいのであれば、Amazon FSx for Windows を利用する。
www.designet.co.jp

ファイルシステムなので、ファイル単位でのアクセスとなる。
ルートディレクトリ(ファイルシステム)とその配下のディレクトリあってその中にファイルがある。

EC2だけではなく、オンプレミスサーバーからも利用できるのが特徴。
ストレージ要領やパフォーマンスを自動的にスケーリングすることもできる。

ユースケース

主にいかような場合に利用される。

  • S3で対応できないリアルタイム更新したい場合でのアプリケーションの共有ディレクトリとして利用
  • ビッグデータなどの分散並列処理を実行する環境におけるデータアクセス用のストレージとして利用
  • AutoScalingするWebサーバ群がアクセスする、ユーザーがアップロードした画像ファイルなどコンテンツの共有リポジトリとして利用

上記のようなEBSではできない複数インスタンスからの同時アクセスや、S3のような長期保存ではなく秒単位でデータが追記されるケースでの活用が考えられる。


高耐久性・高可用性

Amazon EFS では、複数の AZ 間で自動的にデータをレプリケートします。自己管理型クラウドソリューションでは、AZ 間のレプリケーションのためにストレージ容量を追加する必要があり、さらに AWS AZ 間でデータを転送するためにコストが発生します。Amazon EFS の場合、このようなコストは 1 か月あたり 0.30 USD/GB の料金に含まれています。
総所有コスト - Amazon EFS | AWS

自動で複数AZ間で複製して保存する点や、複数AZの複数EC2インスタンスから読み書きできる。
また、読み取り整合性も強力で、書き込み完了直後に即時反映されている。
(S3はデータ整合性モデルのため書き込み直後に反映していないケースがあるのでそれを比べても有用)
※ロックはファイル単位・バイト範囲単位

データの保護

EFSは耐久性が高いことは分かったが、バージョニングができない。そのため、オペミスをしてファイル消しちゃったみたいな場合にはEFS単体ではどうしようもできない。

データ自体の保護はAWS Backup サービスでデータを保護できる。

docs.aws.amazon.com

EBSのようにスナップショットを取得することはできない。

セキュリティ

EC2とEFSの間にはマウントターゲットという接続先が存在する。
同じAZのインスタンスは同じマウントターゲットに接続する。

f:id:snofra:20201126231722p:plain

このマウントターゲットに対し、セキュリティグループを設定することが可能。

またネットワークACLでサブネット単位でアクセス制御も可能。


パフォーマンス

EFSには二つのモードが存在する。

  1. 汎用モード
  2. 最大I/Oモード


汎用モード

一般的な用途を想定したモード
ファイル操作のレイテンシーが低いが、1秒あたりのファイル操作回数が7000に制限されている。
大体はこれを選択する。


最大I/Oモード

何十~何千単位の大規模なクライアントから同時アクセスされる構築で使用する。
仮想的に無制限にスケールアウトできるスループットとIOPSであるが、レイテンシーがわずかに長くなる。


バースト機能

ファイルストレージの以下のような負荷に対して一時的に性能を向上させる機能。

  • NFSサーバー容量増大に応じたスループット性能の拡張
  • 一時的なピーク時の負荷が増大する可能性がある場合

制限事項

  • アカウント当たりのファイルシステム数:1000
  • AZごとのファイルシステム当たりのマウンスターゲット:1
  • ファイルシステムあたりのタグ数:50
  • マウントターゲットあたりのセキュリティグループ:5
  • ファイルシステム当たりのVPC数:1
  • VPC内でのマウントターゲットの数:400
  • インターネット、インターネットVPN、インターリージョン(リージョン間)VPC Peeringからアクセスはできない
  • バックアップ機能、バージョニング機能は未提供

インターネット、インターネットVPN、インターリージョン(リージョン間)VPC Peeringからアクセスはできないという点がポイントになる。
またDirect Connectからはアクセスすることが可能。


EFSマウントヘルパー

マウントヘルパーとはEFSを簡単にマウントすることができる機能です。
この機能は、AWSが公開しているamazon-efs-utilsというパッケージを導入することで使うことができます。
Amazon Elastic File System(EFS)を使ううえでの勘所 - Qiita

Amazon EFS は、ファイルシステムの 2 つの暗号化形式、転送時の暗号化と保管時のデータの暗号化をサポートします。Amazon EFS ファイルシステムを作成する場合、保管時のデータの暗号化を有効にすることができます。後でファイルシステムをマウントする時、伝送中のデータの暗号化を有効にすることができます。
https://docs.aws.amazon.com/ja_jp/efs/latest/ug/encryption.html#encryption-in-transit

マウントヘルパーを使用せずに、stunnelを利用することで転送中のデータの暗号化を有効にすることが可能だが、作業が必要なので基本的にはマウントヘルパー安定

dev.classmethod.jp

EFSに似たファイルストレージ

EFS以外にも似たファイルストレージサービスが存在する。
これらはオンプレミス型と互換性のあるファイルストレージとなる。


Amazon FSx for Windows ファイルサーバー

Windowsファイルサーバーと互換性のあるストレージ。(SMBプロトコル
Windowsファイルサーバーをオンプレ→クラウドに移行したい場合などに利用される。

f:id:snofra:20201127000007p:plain
Amazon FSx で簡単に作れる Windows ホームディレクトリ | Amazon Web Services ブログ より引用

Windows上に構築され、Windows Active Directoryを使用できるので、現状利用している場合などに便利。


Amazon FSx for Lustre

スーパーコンピュータに領される分散ファイルシステム
高速コンピューティング処理を実現する分散・並列処理専用の超高性能ストレージを提供している。

EBS vs インスタンスストア vs EFS

f:id:snofra:20200302232249p:plain

ポイントはひとつのEBS/EFSが何台のEC2に接続できるかという点。

〇EBS
EC2から見るとEC2:EBS=1:Nで接続、つまりひとつのEC2に対し複数のEBSを接続できる。
EBSから見ると、EBS:EC2=1:1となる。ひとつのEBSは、ひとつのEC2にしか接続できない。
*2

〇EFS
EC2から見るとEC2:EFS=1:Nで接続、つまりひとつのEC2に対し複数のEFSを接続できる。
EFSから見ると、EFS:EC2=1:Nとなる。ひとつのEFSは、複数のEC2に接続できる。

また、ひとつのEC2インスタンスに対しEBSとEFSを組み合わせてアタッチできない。
(EBS+S3やECS+S3、EBS+ECSはできるらしい)

*1:Nitroベースインスタンスでは64,000IOPSまでだせるらしい

*2:日本リージョンにまだ来ていないがプロビジョン度IOPSボリューム上でEBSが複数アタッチできるようになった。https://aws.amazon.com/jp/about-aws/whats-new/2020/02/ebs-multi-attach-available-provisioned-iops-ssd-volumes/