SAA勉強記録[4 ~ 6章]

4章

AWSのストレージサービスは、
- ブロックストレージ
- ファイルストレージ
- オブジェクトストレージ
の3タイプに分類できる。

「IO」とはデータの「書き込み・読み込み」であり、「書き込んだり、読み込んだり」と一連の動作を表しているわけではありません。あくまで「書き込み」と「読み込み」という単語を、ひとまとめにしただけです。
まとめただけなのか
IOはデータの書き込み・読み込みを表してる
IOPSとは「ストレージが1秒あたりに処理できるI/Oアクセスの数」
このIOPSが高いほど1秒間に処理できる数が多いので、高性能ということになる。
IOPS=1/(1ミリ秒+1ミリ秒)=500 IOPS
上の1秒はミリに換算すると1000msだから、500IOPSになる

スループット(Throughput) は、単位時間あたりのデータ転送量。

EBSは内部的にAZ内に複数の物理ディスクに複製が行われていて、AWS内で物理的な故障が発生しても利用者が意識することはほとんどない。

SLAは、ユーザーがサービスを提供する者との間で、サービスの品質について合意する契約のことを言います(影島広泰『法律家・法務担当者のためのIT技術用語辞典〔第2版〕』(商事法務、2021年)より)。具体的には、「サーバーの稼働率を月間99.9%以上とする」「問い合わせには24時間以内に一次回答する」といった内容を明確に定義し、もしその基準を達成できなかった場合の対応(利用料金の減額など)までを取り決めます。
なるほど。責任範囲を明確にしたり、サービス品質の共通認識を形成するためにあった方が良いそう。

EBSでボリュームタイプは作った後でも変更できる。
EBSのディスクサイズは拡張できるが縮小はできない。
EBSボリュームを拡張した後は、EC2インスタンス上でOSに応じたファイルシステムの拡張作業(Linuxであればresize2fsやxfs_grwfsなど)を別途実施してOS側でも認識できるようにする必要がある。

EFSは容量無制限で複数のEC2インスタンスから同時にアクセスが可能なファイルストレージサービス

EFS(Elastic File System)は以下の3つの要素から構成されている
- ファイルシステム
- マウントターゲット
- セキュリティグループ

EFSはファイルが作成されると自動的に3箇所以上のAZに保存される分散ファイルシステムを構成する

EFSには複数のストレージクラスがある

EFSにはパフォーマンスモードという概念があって、ユースケースごとに何を選択すれば良いか変わる。パフォーマンスモードは後から変更できないので導入前によく検討する必要がある

EFSにはスループットモードという概念もある。
aws efsのスループットモードって後から変えられる

FQDNは:
ホスト名
すべてのサブドメイン
メインのドメイン名
トップレベルドメイン
を含んだもの。
インターネット上でコンピュータやサーバーの場所を完全に特定できる正式なアドレスのこと
通常のドメインはホスト名を含んでいない

s3は非常に優れた耐久性をもつ、容量無制限のオブジェクトストレージサービス。
ファイルストレージと違い、ディレクトリ構造を持たないフラットな構成になってる。

s3にもストレージクラスって概念がある

s3のオブジェクトのライフサイクルで、アクションを設定できる。
例えばオブジェクトに移行アクションを設定すると、一定時間が経った後により安価なストレージクラスのs3に保存したりできる。

s3のバケットへのアクセス制御は主にバケットポリシーで行う。

アタックサーフェス、または攻撃対象領域とは、サイバー攻撃を試みることができるすべてのポイントや経路を指します。具体的には、ネットワーク、インターネットに接続されたシステムやアプリケーション、デバイス、外部に公開しているAPIなどが含まれます。
アタックサーフェスって言葉、初めて知った。攻撃対象領域という意味だそう。

データレイクとは、データの構造や大きさ、性質、種類などにかかわらず、あらゆるデータをそのままの形で一時的に保存できる格納庫のことです。
そのままの形でデータを保存する場所がデータレイクか。
振る舞いを持たない感じ
レイクは湖って意味。
データウェアハウスはデータレイク内のデータを分析しやすいように加工して保存する場所。
データマートは、データウェアハウスのデータで特定の用途に沿って抽出したものを保存する場所。

ホスティングサービスとは、インターネットサービス事業者からインターネット経由でサーバーをレンタルして利用できるサービスのこと

s3は、静的なコンテンツに限ってwebサイトとしてホスティングする環境を作成できる。
静的コンテンツのリリスは、s3バケットへ保存することで行える。
サーバ側で動的なコンテンツを生成してクライアントに転送する方針だとこれはできない。

- s3のwebサイトホスティングを設定すると、自動的にドメイン(FQDN)が作成される
- そのサイトに独自ドメインでアクセスしたい場合、Route53などのDNSサービスにCNAME情報を設定することで可能になる。この際、バケット名とドメイン名を一致させる必要がある。
- s3の前段にCloudFrontを配置するとバケット名とドメイン名を合わせる必要がない。そのためs3とCloudFrontを組み合わせて使うことが一般的。

s3のアクセス管理にはバケットポリシー、ACL、IAMでの制御の3つがある。
バケットポリシーはバケット単位でアクセス制御したいときに使う
ACLはオブジェクト単位でアクセス制御したいときに使う
IAMはユーザー単位でアクセス制御したいときに使う

s3の署名付きURLは、アクセスを許可したいオブジェクトに対して期限を指定してURLを発行する機能である。
この機能はユーザー制御ではないため、署名付きURLを知っていれば期間中は誰でもアクセスできるので、そこは注意。

s3のバケット内のオブジェクトはインターネット上に公開できる
ブロックパブリックアクセスはs3バケット内のオブジェクトへの不適切な公開アクセスを防ぐための設定。4つある

Storage Gatewayはオンプレミスにあるデータをクラウドへ連携させるためのインターフェースを提供するサービス。独自のストレージは持たず、ストレージはs3, s3 Glacier、ebsなどを利用する。
DRとはディザスタリカバリ(Disaster Recovery)の略であり、日本語に訳すと「災害復旧」となります地震や津波などの天災や、テロ、不正侵入などによりシステムが壊滅的な状況になった際に復旧・修復すること、また、その災害に備えたシステムや体制を指します。
DR初めて知った

テープゲートウェイはこの記事がわかりやすい

5章

Amazon RDSってRelational Database Serviceの略なのか。
AWSが提供するマネージドなRDBサービス。
最大のメリットは運用の効率化

RDSを使うときにデータベースエンジンを指定する必要があって、そのときにMySQLとかRDSを指定する

データベースエンジンによっては選択できるインスタンスタイプが限定されているので、そこは注意。

rdsのデータ保存用ストレージにはEBSを利用する。
Amazon RDS は、データベースとログの格納に EBS ボリュームを使用します。要求されるストレージのサイズによって、Amazon RDS は自動的に複数の EBS ボリューム全体をストライプして、IOPS パフォーマンスを向上させます。MySQL と Oracle については、ストレージをスケールアップすると、既存の DB インスタンスの I/O 容量がある程度向上することがあります。AWS マネジメントコンソール、ModifyDBInstance API、modify-db-instance コマンドを使用して、DB インスタンスに割り当てられたストレージ容量をスケールできます。
これ普通に知らんかった

Auroraは違うのかも
Amazon RDS for Db2、Amazon RDS for MariaDB、Amazon RDS for PostgreSQL、Amazon RDS for Oracle、および Amazon RDS for Microsoft SQL Server の DB インスタンスは、データベースおよびログのストレージに Amazon Elastic Block Store (Amazon EBS) ボリュームを使用します。
場合によっては、データベースワークロードは、プロビジョニングした IOPS を 100% 到達できません。詳細については、「ストレージのパフォーマンスに影響する要因」を参照してください。
インスタンスストレージの料金の詳細については、「Amazon RDS の料金」を参照してください。

ストレージは64TBまで拡張が可能だそう。
EBSの中でもRDSで利用可能なストレージタイプは、
- 汎用SSD
- プロビジョンドIOPS SSD
- マグネティック

フェイルオーバーとは、稼働中のシステムで問題が生じてシステムやサーバーが停止してしまった際に、自動的に待機システムに切り替える仕組み

リードレプリカは、読み取り専用のDBインスタンスのことである。
DBインスタンスが1つだと1つでreadとwriteの全てを処理しなければいけなくて負荷高いので、読み取りだけリードレプリカに分散することでDBインスタンスの負荷を軽減できる

rdsのマスターとスタンバイはマルチAZ構成の話。
リードレプリカは参照用のDBインスタンスを用意する話。
前者は同期でレプリケーションするが、後者は非同期でレプリケーションする
RDSのマルチAZは、データベースの障害時の影響を最小化するために同期レプリケーションを行っています。これは、マスターへの変更後にスレーブを変更し確定してから反応するという流れです。よって、マスターとスレーブ間の通信の分だけ遅くなってしまいますが、RDSはデータセンター間を高速な回線で繋ぐことで数msの遅延と非常に高速です。RDSのようなマルチAZ構造において同期レプリケーションは非常に便利なシステムです。

マルチAZは同期でレプリケーションするから、書き込み速度が多少遅くなる
リードレプリカを作る方式にすると、マスターとリードレプリカのデータ同期は非同期なので、タイミングによっては、マスターの更新がリードレプリカに反映されてないことがある。

RDSでは自動バックアップ(DBスナップショット)を設定することができる。
バックアップからDBを復旧する場合、取得したスナップショットを選択して新規RDSを作成する。新しく立ち上げるのか。
稼働中のRDSにバックアップのデータを戻すことができない。
削除するDBインスタンスを再度利用する可能性がある場合は、削除時に最終スナップショットを取得するオプションを利用する

RDSにデータをリストア(元に戻す)場合、自動バックアップおよび手動で取得したスナップショットから新規のRDSを作成する。

EC2と同様、セキュリティグループによる通信要件の制限が可能です。
セキュリティグループでdbインスタンスへのアクセス制御できるのは強いな。ただし、ec2インスタンスに侵入されないようにする必要があるが

RDSでシングルAZ構成をしててスナップショットを撮る場合、短時間のI/O中断時間があるので要注意。
この仕様は手動・自動関らずある。
マルチAZ構成の場合は、スタンバイ側のDBインスタンスからスナップショットを取得するため、マスターのDBインスタンスには影響を与えない。
なので、本番環境でRDSを使うならマルチAZ構成にした方がやっぱいい

Amazon Redshiftってリレーショナルdbなのか
AWSが提供するデータウェアハウス向けのデータベースサービス

Redshiftにはシェアードナッシングって仕組みがある。ノードがディスクを共有せずに、ノードとディスクセットで拡張する仕組み。
複数のノードが同一のディスクを共有することによるI/O性能の性能の劣化を回避するために採用されている。

Amazon DynamoDBは単一障害点を持たない構成となっているので、サービス面での障害対応やメンテナンス時の運用を考える必要がほとんどない。またDynamoDB内のデータは自動的に3つのAZに保存される仕組みになっているので非常に可用性が高い

DynamoDBではスループットキャパシティを指定する。
スループットキャパシティはいつでも変更できる。
スループットキャパシティは、読み取りと書き込み、それぞれ個別に、キャパシティユニットを単位として指定する

負荷の状況に応じてスループットキャパシティを自動的に増減することができる

DynamoDBのプライマリーキーは、パーティションキー or パーティションキー + ソートキー

DynamoDB Streamsとは、DynamoDBに対して行われた直近24時間の追加・更新・削除の変更履歴を保持する機能。

結果整合性は、データの更新が完了してなくてもそのデータを参照できることを表す性質。
その場合、更新前のデータを参照することになる。一時的に古いデータを参照することが許容できるなら問題ない。
強い整合性は、変更中のデータが完了するまで、他の人は古いデータが参照できないことを表す性質
つまり、見ているデータは最新のものであることを保証している

dynamodbには強い整合性のオプションがある

DynamoDB Accelerator(DAX)は、DynamoDBの前段にキャッシュクラスタを構成する拡張サービス。

ローカルセカンダリインデックスはテーブルと同じパーティションキーを指定する必要がある。
gsiはプライマリーキーとは異なる属性を使って作成する

AWS ElastiCacheもNoSQLサービスで、インメモリ型のデータベースサービス。

Redisはシングルスレッドで動くそう。なので1コアで動作する。
4コアのインスタンスタイプを使用しても、1コアしか使用しないので、 CPU使用率は25%が最大値。
6系からマルチスレッドに対応したそう。

Memcachedクラスタをスケールアップ・スケールダウンしたい時は、新規のクラスタを作成する必要がある。Memcachedにはデータ永続性がないため、クラスタを再作成した場合、それまで保持していたデータは全て削除される

Amazon Neptuneはフルマネージドのグラフデータベースサービスである
初めて聞いた

Amazon MemoryDB for RedisはRedis互換のフルマネージドなインメモリデータストアサービスである。
MemoryDBではデータの永続化を可能としているので、そこがElastiCacheとの大きな違い

6章

- CloudFrontは静的コンテンツ(HTML, CSS, JS, 画像, 動画)をキャッシュして、オリジンサーバーの代わりに配信するCDNサービス
- オリジンサーバーは元となるコンテンツを保持するバックエンドサーバー(ELB, EC2, S3, オンプレサーバー, etc)
- CloudFrontを使うことで利用者から最も近いエッジロケーションからコンテンツを配信することができる
- CloudFrontを使うことで都度発生するサーバーの負荷を下げて利用者に素早く安定してコンテンツを提供できる。
- CloudFrontはパスに応じたオリジンサーバーを指定したりできる。
CDNとは「Contents Delivery Network」の略で、Webコンテンツを迅速に、効率よくユーザーに配信するためのネットワークです。日本語では「コンテンツ配信ネットワーク」とも呼ばれます。
CDNを利用すれば、サーバーからの応答に時間がかかりやすい以下のような状況でも、コンテンツの配信をスピーディーに行えます。
動画など配信するコンテンツが大容量
アクセスが集中している状況
物理的に離れた場所からのアクセス
CDNはWebコンテンツを迅速かつ効率よくユーザーに配信するためのネットワーク

CloudFrontの管理の単位はディストリビューションと呼ばれる。

CluodFrontは最初の1回はオリジンサーバーにリクエストが行って、オリジンサーバーがコンテンツを返しているのだが、同じコンテンツへのリクエストの2回目以降は、利用者から最も近いエッジロケーションから返してる

ユーザーからサーバーまでの物理的距離が遠い場合も、コンテンツの配信には時間がかかります。しかしCDNのサービス業者は、キャッシュサーバーを世界各地に分散して所有。ユーザーから最も近いキャッシュサーバーがアクセス要求に応答することで、表示・配信を高速化します。
普通に考えると確かにそうだよな。高レイテンシーになると思う

CloudFrontでは拡張子やURLパスごとにキャッシュ期間を指定できる

Lambda@EdgeはCloudFrontとLambdaを組み合わせたサービス。
CloudFrontが稼働するエッジロケーションで、Lambdaの関数を実行することができる。
距離的にユーザーにより近いエッジロケーションでLambdaを動かすことで、ユーザー体験の向上などが期待できる

Route 53は、ドメイン管理機能と権威DNS機能を持つサービス。
webコンソールやAPIから簡単にドメイン情報やゾーン情報を設定、管理できる。
Route53はネットワークトラフィックのルーティングや接続先のシステム状況に応じた接続先の変更など、オプション機能も持っている。

Route53を使うと、ドメインの取得からゾーン情報の設定までできる。ドメインの年間利用料はAWS利用料の請求に含まれる

権威DNSはドメイン名とipアドレスの変換情報を保持しているDNSのこと。
変換情報を保持していないDNS(キャッシュDNS)と区別するときに使う。
Route53は権威DNSなので、保持しているドメイン名以外の名前解決をリクエストしても応答しない。

ホストゾーンは、レコード情報の管理単位を表す。

DNSフェイルオーバーは、Route53が持つフォールトトレラントアーキテクチャである。
フォールトトレラントアーキテクチャとは、システムに異常が発生した場合でも被害を最小限度に抑えるための仕組みのことを指す

Route53はゾーン情報を登録する際に、名前解決の問い合わせをどのように応答するかを決める8種類のルーティングポリシーがある

ABテストとかでサーバーごとに振り分けたい時とかにルーティングポリシー使える。
あとユーザーの位置情報によってサーバーを変えたりとかもルーティングポリシーを使えばできる。

通信の分野におけるトラフィックとは、インターネットやLANなどのコンピュータなどの通信回線において、一定時間内にネットワーク上で転送されるデータ量のことを意味します。
ネットワーク上で一定時間内に転送されるデータ量を、トラフィックと呼ぶ。

- AWS Global Acceleratorは、ネットワークパフォーマンス最適化サービスである
- インターネットトラフィックをAWSグローバルネットワークを通じて効率的にルーティングすることで、通信のレイテンシーの改善や静的IPアドレスによるエントリーポイントの提供、アプリケーションの保護などが可能となる。
- Global Acceleratorを利用すると、最適化されたAWSネットワークを経由して通信が行われるため、レイテンシーが改善される

Global AcceleratorとCloudFrontの大きな違いとしては、Global Acceleratorはオリジンまでのアクセスを最適化するもので、CloudFrontはできるだけエッジロケーションでレスポンスを返すようにするもの