AWS SAAを勉強するうえで引っかかったところや要メモのまとめ

# AWS SAA 合格した感想など
去る2022年12月、AWS SAA（ソリューションアーキテクトアソシエイト）を合格しました。先立って合格していたCLF（クラウドプラクティショナー）と合わせると、6週間くらいの学習期間だったと思います。
採点されない問題が出題される（＝範囲外の難しい問題が何故か出る）ため、一見出題される問題の内容はCLFでも意外と難しく感じられましたが、やはり輪をかけてSAAのほうが難しかった印象です。

実際に出題された内容云々よりは、学習範囲、とくに03に内容がアップデートされていたりするので、引っかかるところが多く、学習しながら乱雑にまとめていたメモがあるので後進のために投下しておきます。

なお、ガチのメモなので、「ここまではわかっているけどここで引っかかった」という、私の脳みそのメモリ番地にアクセスしないと書いてあることの前提条件がわからない内容も多分に含まれます。
ですので、逆にこの中途半端な内容をもとに自らの知識とのすり合わせを行ったり、不明な点を調べるなどするとさらにブラッシュアップされるのではないでしょうか。物は言いようですが。

以下、乱雑にダーッとメモを投下しておきますので、煮るなり焼くなり印刷するなり、活用できそうでしたらどうぞ！

## SAA 引っかかったところメモや要メモと感じた点
CloudFormationはIAMユーザーの自動作成も担う
AWSの各リソースをYAMLテンプレートで定義して自動構築を行う
Elastic Beanstalkは定番構成を自動的に作ってくれるサービス（IAMは対象外）
OpsWorks は、Chef や Puppet のマネージド型インスタンスを利用できるようになる構成管理サービス

Codeシリーズ
CodeCommit gitリポジトリ
CodeBuild ソースコードのビルド・テストサービス
CodeDeploy ビルドされたモジュールのデプロイ
CodePipeline 上3つを束ねて一連を自動化する ※DataPipelineとの惑わせに注意
CodeStar 上4つを利用したCI/CD環境を自動構築するサービス

セキュリティグループはステートフルでEC2インスタンスに紐づく
・インバウンドを許可した場合はアウトバウンドは自動的に通過
ネットワークACLはステートレスでサブネットに紐づく
・インバウンド/アウトバウンド両方の許可がないと通過できない

AWS Cloud9はウェブブラウザからアクセスできるオンラインIDE
AWS CodeStarはアプリケーション開発をサポートするサービス
AWS Cloud Mapはクラウドリソース検出サービス あれはどこいったっけ的な
AWS X-rayはデバッグ

Config＝AWSの各リソースの設定変更を記録・監査するアプリ、1つのデータソース
CloudTrail＝あらゆる（API）アクティビティを記録するもの
CloudWatch＝インスタンスの稼働状況をモニタリング

EMR=（元Elastic Map Reduce）大規模分散 EC2に乗っかるのでOS管理できる

Kinesis Data Streamsはリアルタイム、Firehoseは非リアルタイム

ELBのConnection Draining機能は既存の接続を開いたまま、登録解除または異常なインスタンスへのELBのリクエスト送信を停止することができる

EBS ボリュームの DeleteOnTermination 属性を変更することでEC2終了時にEBSを保存しておける
デフォは削除

AppSyncを使用して、DynamoDBのデータをリアルタイムで最新の状態に保つコラボレーションアプリを簡単に構築できる

IPフローティングを使うとEC2障害発生時にElastic IPを別のEC2に自動で付け替えてくれる

Amazon RDS Proxyは、アプリケーションとRDSデータベース間の仲介役として機能するプロキシ機能
Lambda関数からRDS DBインスタンスへのコネクションプールを確立および管理して、アプリケーションからのデータベース接続を少なく抑えることができる

DynamoDBストリームはDynamoDB テーブルに保存された項目の変更をキャプチャする機能

GlacierはFlexibleが通常、Instantが高速

S3 Selectでもクエリ実行化（クエリが来たらアテナとは限らない）

Redshift Spectrum
S3バケットをRedShiftの解析用のデータレイクとして構成することができる

Step Functionsはinput()みたいな入力待ちが発生して滞ることがある

MySQLはInnoDBを使う。MyISAMというやつは使わない。
MySQLはInnoでいーの。

STSでウェブIDフェデレーションを使うと一時的なアクセス認証を実現できる
Security Token Service

Simple ADは新規にActive Directoryを構成するもの
AD ConnectorはIAMとオンプレミス環境のADを連携するのに利用
AWS Managed Microsoft ADはAWS側にフルマネージド型の互換性ADを作成（そのまま使わざるを得ない場合とかに）

IAMポリシーをOUに設定することはできない
サービスコントロールポリシー (SCP) 、もしくはサービス管理ポリシー をOUに設定（アタッチ）する

Redshiftはスナップショット用に無料ストレージを提供
上限のストレージ容量を超過すると課金が発生
設定を見直して節約も

Auto Scalingにおいてスケーリングがうまく実行されずに24時間以上たった場合はAWS側によって停止される

S3では事前署名付きURLによって特定の画像を一時的に共有するための特別なURLを発行することができる
キャッシュ付きにするとURLは変えずに特定の（有料ユーザーなど）リクエストに対してのみ表示できる

EBSのスループット最適化HDDはビッグデータで選択されやすい
プロビジョンドIOPSはNoSQLなどまた別のIOPS目的

S3 は、プレフィックス（日付ベース）を利用してアップロードを分散することで少なくとも 3,500 リクエスト/秒、データの取得で 5,500 リクエスト /秒をサポートできるようにパフォーマンスを自動的に向上させることができる ランダムハッシュのプレフィックスは以前は必要だったが今は日付ベースで大丈夫
マルチパートアップロードはあくまで1つの大きなファイルを分割アップロードすることで安定させるもの

DynamoDB
利用負荷があらかじめ予測できる：プロビジョンドスループットモード
予測できない：オンデマンドモード 自動的に拡大縮小

AWS ShieldのDDoSお守りプラン
Standard：L3L4のDDoSを保護 攻撃自動緩和
Advanced：L7も検出 大規模攻撃も緩和 請求金額の払い戻しも

RDS MySQLはレプリケーションラグによって古いデータが表示されることがある

IAMポリシーは書いてあることそのものが正解
Denyなら、〜を拒否するという選択肢
裏読みして「ということは全部許可されているということか」は基本ない
許可は別個でIAMポリシーを割り当てなければならないっぽい

疎結合のステートレスジョブの実現にはSQSのキューイング処理構成を使う
SNSは通知しかできないので使えない

CloudFormation:システム環境全体のリソース作成
OpsWorks:スタック管理。Chefを利用して主にEC2インスタンス上のOSの設定変更やソフトウエアのデプロイ、アプリケーションの管理をする 自動化 高度カスタマイズ可
Elastic Beanstalk:自動デプロイ インフラを任せてプログラミングだけしたい人向け

DynamoDBではトランザクションを有効化していろいろできる
書き込み時に機密性の高いデータを削除、など

WAF リンクのReferer制限でS3のURL無断アクセスを防げる
クッキーとはまた別の考え方

Aurora グローバルデータベース
スタンバイ用のDBを作成することができる
他リージョンに対する高性能なリードレプリカ作成機能

SQSはFIFOキュー
SNSはFIFOトピック
どちらもFIFO性能があるが名前が違う

関数URL（Function URLs）を使うことで、HTTP経由でLambda関数を実行できる
以前は必ずAPI Gateway を経由する必要があった もちろん経由するやり方も引き続き使い分ける
簡易な認証でOKな場合に有効

Route53のエイリアスはAWS独自のレコード機能
1リクエストでIPアドレスを返却できるので便利
CloudFrontやELBや静的S3やBeansTalkなどのAWSリソースをドメインと関連付ける

基本的に何かが反映されるのは即時（＝AWSは自らを自慢したい？ので何分かかるみたいな選択肢はハズレっぽい）
ただしAutoScallingの300秒など規定のインターバルタイム系は抑える必要がある

SQSは水平スケーリングができる
SQSはキューの優先度を付けられる（有料ユーザー優遇など） 遅延もできる

Lambda関数にデッドレターキューを追加してLambda関数の実行に失敗したメッセージをAmazon SQSのキューに蓄積することができる

SSHは22だがハッカーに狙われるのでEC2のポート番号をエフェメラルポートに変更して使う
ネットワークACLのアウトバウンドに当該エフェメラルポートを許可する設定をしないとSSHできないぞ

Amazon SESはあくまでEメール機能をAWS上で提供するサービス
サービス上のメッセージ通知機能としてメールアドレスを設定する場合はAmazon SNSを利用する
Amazon SESはアプリケーションの利用ユーザーに対して一斉メールによるお知らせを実施するといった機能に利用する

S3で暗号化を有効化して、サーバーサイド暗号化を適用すると、S3 はオブジェクトをデータセンター内のディスクに保存する前に暗号化を実施し、オブジェクトをダウンロードするときにS3側で自動で復号する

Auto ScalingグループのスケジュールドスケーリングポリシーはECSのインスタンスに直接アタッチするのではなく、それをトラフィック制御しているALBにアタッチすることが必要

VPCのDNS hostnamesオプションが有効化されていないと、サブネットで起動されたインスタンスがDNS名を取得できない

IAMデータベース認証をEC2インスタンスに付与することで、EC2インスタンスからIAMデータベース認証を利用してRDSのDB インスタンスにアクセスが可能となる

RDSには拡張モニタリングという機能がある
CloudWatch Logsを使って監視等できる

Redshift Spectrum
S3バケットに保存されたデータを直接分析

バケットのリクエスタ支払い
相手に払わせるやつ

S3 Access Analyzer
AWS アカウントの外部からアクセスできるリソースを特定する総合的な解析結果を生成、不正なアカウントアクセス設定がないかを確認
S3 分析のストレージクラス分析
ストレージアクセスパターンを分析し、適切なデータを適切なストレージクラスに移行すべきタイミングを判断できる

Amazon GuardDuty
AWS上の悪意ある操作や不正アクセスをモニタリングする驚異検出サービス
IPアドレスやドメインのリスト、機械学習による未知の脅威を予測

Config コンフォーマンスパック
アカウントとリージョン、または AWS Organizations の組織全体で 1 つのエンティティとして簡単にデプロイできる AWS Config ルールと修正アクションを集めたもの

Security Hub
AWS のセキュリティ状態を包括的に把握し、セキュリティ業界標準およびベストプラクティスに照らして環境をチェックするのに役立つマネージドサービス
セキュリティだけでなくガバナンス評価の標準セットが必要な場合は不向き

AWS DMS(Database Migration Service)はバックグラウンドで行えるのでメインを邪魔しない

Elastic Beanstalk は、
選択肢を狭めたり制御を制限したりすることなく、管理の複雑さを軽減できる
独自化しちゃうのでだめとかはない

Auto ScalingはデフォルトでEC2稼働数の多いAZからEC2を削減してくれる

等コストマルチパス (ECMP) ルーティング
Transit Gateway にアタッチされている VPN 接続で使用
複数の VPN 接続を集約して、より高い効果的なスループットを実現できる
Site-to-Site以上を求めるときに

EC2 の ModifyVolume アクションはダウンタイムなしに変更できる

AWS Systems Manager （SSM） パラメータストア 
改行を含む複数行の文字列も保存できるので、SSH の秘密鍵などを保存おける

ElastiCache
書き込みスルー
アプリケーションがデータベースにデータを書き込むたびに、キャッシュにデータを追加するかキャッシュ内のデータを更新する。アプリケーションがデータベースにデータを書き込むたびにキャッシュのデータが更新されるため、決して古くなることはない
遅延読み込みは、必要な場合にのみデータをキャッシュにロードするキャッシュ戦略
キャッシュミスが発生したときにのみアプリケーションがキャッシュにデータを書き込むと、キャッシュ内のデータが古くなる可能性がある。この結果は、データベース内のデータが変更されてもキャッシュが更新されないために発生する

PrivateLinke
自分のVPCのNLB配下のWEB等のサービスを、同一リージョン内の他のVPCに公開できるサービス。VPCピアリング等と異なり、IPアドレスレンジの重複等の考慮が不要で、AWS内に閉じた安全なNW接続を実現できる。
サービスを公開する側（エンドポイントサービス）と、サービスにアクセスする側（インターフェースエンドポイント）のセットで構成される。

EFSのスループットモード
バーストとプロビジョンド
瞬発か一貫性か