SAA再認定202502

# はじめに
AWS認定ソリューションアーキテクトアソシエイトの更新に向けて、調べたことの個人メモを書き留めました。
完全に自分向けの内容にはなりますが、どこかで参考になる人がいるかもしれないと思いましたので記事として公開します。

## 先に試験結果
昨年、転職をして実務ではAWSから離れてしまっていたので不安でしたが、今回も無事に認定を更新できました。

https://www.credly.com/badges/bc602587-bd73-471f-8f05-87b2acc0d76b/public_url

## 学習リソース
せっかくなので今回の学習で利用したリソースも書いておきます。
### Udemy
会社で契約しているアカウントの方で講座を受講できたので利用しました。

SAA-C03対応の模擬試験を実施しましたが、途中でやめました。
「難しすぎる」のと「解説に納得できないものが多かった」印象でした。
いろいろレビューされてると思うので、ここでは詳細は省きます。

### Ping-t
https://mondai.ping-t.com/g

Udemyをいったんやめてこちらに乗り換えましたが、
正直こっちだけで全然OKでした。

Udemyほど難易度は高くありませんが、本番で想定されるレベル通りの問題集だったと思います。

無料会員登録が必要です。

### 公式リソース
何度も間違えたり不安な箇所は、AWS公式の[BlackBelt](https://aws.amazon.com/jp/events/aws-event-resource/archive/?cards.sort-by=item.additionalFields.SortDate&cards.sort-order=desc&awsf.tech-category=*all)やドキュメントを参照して一度読んでみました。

### 書籍
書籍などは購入していません。

### ハンズオン
私は前職でAWSを使用していたので、今回の試験に向けて実際に手を動かしたりはしませんでした。
AWS未経験の場合は、無料枠を活用してご自身の手を動かした方が良いとは思います。

# 学習メモ
ここからが本編？です。

自分の抜けている知識が中心となりますが、もし試験をこれから受けられる方がいましたら、一次情報を少しかみ砕いた取っ掛かりにでもなれば幸いです。

## AWS Parallel Cluster
https://docs.aws.amazon.com/ja_jp/parallelcluster/latest/ug/what-is-aws-parallelcluster.html

AWS上にハイパフォーマンスコンピューティング（HPC）リソースを必要とするクラスターのデプロイや管理するのに役立つサービス。PoCや本番稼働といったフェーズにおいてHPCクラスタ環境を迅速に構築できる。
## Elastic Fabric Adapter（EFA）
https://aws.amazon.com/jp/hpc/efa/

EC2用のネットワークインターフェース。
EC2インスタンス間の通信において低レイテンシ・低ジッターなチャネルを利用でき、通信パフォーマンスを向上できる。
機械学習といったHPCリソースを必要とするユースケースでネットワークボトルネックを低減する目的で活用されるっぽい。

## EC2
### インスタンスタイプおさらい
https://aws.amazon.com/jp/ec2/instance-types/

#### ストレージ最適
ディスクIOやスループットを最適にしたい場合に選択するタイプ。機械学習とかで大容量データを高速に読み書きしたいユースケースなど。
I系：SSD
D系、H系：HHD

## ECS
### ALB/Auto Scaling/ECSクラスタ
ちゃんと読めばわかりそうだけど、演習で間違えたので整理
- ECSクラスタのキャパシティプロバイダーとしてAuto Scalingをアタッチする
    - ECSクラスタ内のタスク量をコントロールする
- ECSクラスタのロードバランシングとしてALBをアタッチする
    - 負荷分散
    - ヘルスチェック機能を有効にして、冗長化

## EKS
### Fargate
2019年からできるようになっていた。
## Route 53
### ルーティングポリシー（ちゃんと分かってなかった）
位置情報ルーティングと地理的近接性ルーティングの違いについて、ちゃんと理解できてなかった。
#### 位置情報ルーティング
単純にユーザーの地理的位置情報（IPアドレスにより特定）に基づいてトラフィックを処理する。接続元地域に応じて異なるレコードを返す場合に有効。
#### 地理的近接性ルーティング
ユーザーとリソースの場所（AWSリソースの場合はリージョン）に基づいたルールを作成し、トラフィックを処理する。必要に応じてバイアスを設定でき、特定のリソースにトラフィックを寄せたりとかもできる。
#### ユースケースの違い（私のイメージ）
| ルーティングポリシー | 想定されるユースケース |
|:-:|:-:|
| 位置情報ルーティング  | アクセスされた地域により、異なるコンテンツを配信したい。  |
| 地理的近接性ルーティング  | レスポンス速度に対してシビアなため、アクセスされた地域から近いリージョンのリソースを利用させたい。  |
## RDS
### IAMデータベース認証
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html#UsingWithRDS.IAMDBAuth.ConnectionsPerSecond

IAMユーザーやIAMロールとして認証し、認証トークンを使ってRDSに接続可能。
ただし、有効にできるのはデータベースエンジンがMySQL（MariaDB）/PostgreSQLのRDSか、Auroraのみ。

EC2に付与されたIAMロールベースでRDSに接続させるシナリオなどで使われる。
### Aurora
#### 可用性について（AZ障害の観点から）
Auroraはデータボリュームを複数AZにまたがって配置するクラスタ構成がデフォルトなので、RDSに比べてAZ障害には強い。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html#Concepts.AuroraHighAvailability.Data

レプリカインスタンスをマルチAZ配置することにより、データベースインスタンス自体の可用性を高くすることができる。
これにより、AZ障害発生時のダウンタイムを抑制することができる。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html#Concepts.AuroraHighAvailability.Instances
ただし、インスタンスを冗長に作成する必要があるので、その分コストがかかる。

マルチAZ配置によるレプリケーションを行うかどうかは、ダウンタイムの許容時間とコストの天秤で決める必要がある。

#### グローバルデータベース
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html

複数のリージョンにまたがってセカンダリクラスタを作成できる。
通常であれば1秒未満のレイテンシーで、プライマリクラスタに書き込まれたデータをセカンダリクラスタにレプリケートすることができる。

## S3
### 日付プレフィックスによるパフォーマンス最適化
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/optimizing-performance.html

プレフィックスによってパーティショニングされる。
パーティションごとにS3はリクエストを並列処理できるのでパフォーマンスがよくなる。
ってこと。

### 保存データの整合性について
https://aws.amazon.com/jp/blogs/news/amazon-s3-update-strong-read-after-write-consistency/

現在は「強い整合性」が適用されるようになっていて、PUT直後でもすぐにデータが読み取れ、LISTの内容も正確に反映されるようになっている。
（知らなかった・・・恥ずかしい）

### オブジェクトロック
PUTしたオブジェクトを削除・上書きできないようにする機能。
~~**バケット作成時にのみ設定できる**~~
後からオブジェクトロックを設定することは可能。
後からオブジェクトロックを解除することは不可能

以下2つの保持モードが選択できる。
| 保持モード | 説明 |
|:-:|---|
| **ガバナンスモード** | 許可されたユーザーのみ、削除や上書きができる |
| **コンプライアンスモード** | AWSアカウントのrootユーザーを含め、すべてのユーザーの削除や上書きを制限する |

### VPCエンドポイント（インターフェースエンドポイント）への対応
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/privatelink-interface-endpoints.html

これまではS3と言えばゲートウェイエンドポイントだったが、インターフェースエンドポイントにも対応したみたい。

### リクエスタ支払い機能
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/RequesterPaysExamples.html

データ取得にかかるコストをリクエスタ（データ取得しようとした側）のユーザに負わせる機能。
クロスアカウントアクセスと組み合わせることで、データを公開しつつ相手の取得頻度に応じて相手にコストを請求することができる。

### ストレージクラス分析
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/analytics-storage-class.html

アクセスパターンを分析して最適なストレージクラスを検討するための指標を提供してくれる

## Kinesis関連
### Amazon Kinesis Data Firehose と Amazon Kinesis Data Streams の違い
#### レイテンシ
ストリーミングデータをロードして実際に処理が行えるようになるまでの時間に差がある。
| サービス | ロード時間 |
|:-:|---|
| **Amazon Kinesis Data Firehose** | 60秒以下 |
| **Amazon Kinesis Data Streams** | 1秒以下 |

ミリ秒単位のレイテンシが求められるかどうかで、どちらを採用するか決める。

#### データ処理
| サービス | データ処理をするには？ |
|:-:|---|
| **Amazon Kinesis Data Firehose** | 単体では処理できない。Lambdaに送信してLambdaで処理させる。 |
| **Amazon Kinesis Data Streams** | Kinesis Data Streamsアプリケーションを構築、設定することが可能。 |

### Amazon Kinesis Data Streams
#### シャード
https://docs.aws.amazon.com/ja_jp/streams/latest/dev/key-concepts.html

ストリーム内の一意に識別されたデータレコードのシーケンス。
Kinesis Data Streamsで処理するデータのまとまり？

1シャードあたりの処理パフォーマンスが担保される形になるので、
シャードが多い＝単位時間あたりに扱えるリソース（データ容量、処理リソース）が多くなる、と考えられそう。

実際、課金もシャード単位になるため、
ストリーム内の処理に応じて適切なシャード数を維持することが、コストパフォーマンスの上で大切。

https://docs.aws.amazon.com/ja_jp/streams/latest/dev/how-do-i-size-a-stream.html

他のサービスと同じように、オンデマンドとプロビジョンドを選択できる。

https://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-using-sdk-java-resharding.html

プロビジョンドの場合、シャードの使用状況に応じて確保しておくシャード数を調整する必要がある。
これをリシャーディングという。以下の2種類の操作が可能。
- 分割：シャードを増やす。コスト増、リソース増。
- 結合（マージ）：シャードを減らす。コスト減、リソース減。

:::note warn
実際はこんな単純な話ではないが、試験に出るレベルとしてはこの辺の基本をおさえておけばよさそう。
シャード戦略については、ストリームデータのパーティションを適切にするとか、ほかにもおさえておかない観点がありそう。
:::

## AWS AppSync
https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-appsync-2019/

GraphQLのマネージドサービス。
簡単にGraphQLバックエンドを構築できます、という代物。
（前回も調べた気がする）

Lambdaとは違いコーディング不要。
具体的には以下のステップでGraphQLバックエンドが構築できちゃう。
1. Schema定義
1. DataSource/Resolverの設定（要はデータ取得元）
1. RequestとResponseのマッピングを定義（1と2の紐づけ）

クライアントライブラリも用意されているので、GraphQLクライアントも簡単に実装できる。

AWS上にデータソースはあって、とりあえずクライアントのプロトタイプ作りたいって時は便利かも。

## AWS IAM Identity Center
旧 AWS SSO（Single Sign-On）
とりあえず、SSOとIdentity Centerが選択肢にあって迷うようなら、Identity Center選んでおいた方がよさそう（雑
## セキュリティ系サービスのざっくりまとめ
### 脅威検知と監視

| サービス名 | 特徴 |
|:-:|---|
| **Amazon GuardDuty**     | - 脅威検知サービス<br>- ネットワークアクティビティやAWSログを分析し、不正アクセスや異常を検出 |
| **AWS Security Hub**     | - セキュリティダッシュボード<br>- 複数のAWSセキュリティサービス（GuardDuty、Inspectorなど）を統合 |
| **Amazon Detective**     | - セキュリティインシデントの調査支援<br>- 不審なアクティビティの根本原因を特定 |

### アプリケーションセキュリティ

| サービス名 | 特徴 |
|:-:|---|
| **AWS WAF** | - Webアプリケーションの保護<br>- SQLインジェクションやXSS攻撃を防御 |
| **AWS Shield** | - DDoS攻撃対策<br>- 標準版（無料）と高度版（有料）で異なるレベルの保護を提供 |
| **Amazon Inspector** | - セキュリティ評価<br>- EC2やコンテナイメージの脆弱性をスキャン |

## 番外編
### サードパーティベンダーについて
問題文にサードパーティベンダーが登場することもあるようだが、問題文に明記されていなくても、前提としてそのベンダーは「AWSアカウントを有している」と考えておく必要があるみたい。