【AWS-SAA-C02対策】メモ

##はじめに

udemyの下記講座の模擬試験問題の中で、私が見落としがちだった知識や間違えやすいと感じたポイントなどをまとめました。<br>

〜参考〜
勉強期間 2020/11〜2021/01
受験日  2021/01/13

######＊講座名＊

1. 【これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座（SAA-C02試験対応版）】
2. 【SAA-C02版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（6回分390問）

##ワンポイント
######S3
- デフォルト設定でパフォーマンスの最大化が可能
- CORS(Cross-Origin Resource Sharing)<br>
アプリ上で複数ドメインからのコンテンツアクセスを有効化<br>
→Ajax通信を使用したアプリケーションの構築が可能
- 特定のIPアドレスからのアクセスはIAMロールで設定。SGでの制御はできない！
- デフォルトで高可用性であり1つのAZに依存していない
- S3のクロスリージョンレプリケーションとはS3のオブジェクトを別リージョンのバケットに自動複製するサービスであり、オブジェクトの登録と同時に実行される
- サーバーサイドの暗号化はSSE-S3（暗号化方式はAES-256）。暗号化、復号化は自動でS3が実施するため暗号化キーの管理に手間がかからない。バケットの暗号化によりログの暗号化も自動で実行される。
- Access Analyzerで不正アクセスの確認、アクセス権限の最小化構成のモニタリングが可能
- ストレージクラス分析で適切なデータをいつ適切なストレージクラスに移行するかを判断できる
- 全てのデータに対するパブリックアクセスを拒否する場合、S3パブリックアクセス設定機能でブロックを有効化する
- S3 Intelligent-Tieringで低頻度アクセスのオブジェクトを自動的に低頻度アクセス層に移動できる
- S3からwebサイトをホスティングした際のURL例<br>
    - 通常<br>
http://【bucket-name】.s3-ap-northeast-1.amazonaws.com/ai.jpg<br>
    - 静的<br>
http://【bucket-name】.s3-website-ap-northeast-1.amazonaws.com

######S3 Glacier
- データ取得時間<br>
迅速　　－　1～5分<br>
標準　　－　3～5時間<br>
大容量　－　5～12時間<br>
※Glacier Deep Archive<br>
標準　　－　～12時間<br>
大容量　－　～48時間<br>
- データ保持期間<br>
最低　　－　90日<br>

######CloudFront
- ウェブアプリケーションのコンテンツ配信処理を向上させる<br>
- ALIASコード

＊S3との連携がポイント！

- Amazon S3 Transfer AccelerationでクライアントとS3の間で長距離にわたるファイル転送を高速・簡単・安全に行う。<br>Transfer AccelerationはCroudFrontのエッジロケーションを利用
- CloudFrontのディストリビューションにWAFで作成したWEB ACL（WAFの設定の塊）を関連づけることでアクセス制御が可能<br>
×CroudFrontにおけるReferer制限を実施する　〇AWS WAFでRefererによって制御する。
- オリジンアクセスアイデンティティ (OAI) と呼ばれる特別な CloudFront ユーザーを作成してアクセス制限が可能

######Lambda
- 最大一時実行ボリューム　512MB
- デフォルトアイムアウト時間3秒。最大実行時間は15分

######SQS
- メッセージサイズ<br>
最大　　　　　－　256KB<br>
※拡張クライアントライブラリを利用すると最大2GBまで
- メッセージ保存期間<br>
デフォルト　　－　4日<br>
最小　　　　　－　60秒<br>
最大　　　　　－　14日<br>
- 優先度の設定が可能
- Auto Scalingトリガーを構成する場合はSQSのキューサイズを確認する

######EBS
- DLM(Data Lifecycle Manager)を使用すると定時バックアップが可能
- EBS自体にSnapShotのライフサイクル機能、レプリケーションという機能はない
- バックアップは最初はフルバックアップでその後は増分バックアップ
- プロビジョンドIOPSのみ複数のEC2インスタンスをアタッチできる（2020/02～）
- アクセス頻度の低いが大切なデータの保存のストレージにはEBSのコールドHDDを選択

######RDS
- マルチAZ配置を有効化することでDBインスタンスの高可用性及びフェイルオーバーサポートを提供<br>
※RedshiftはマルチAZ構成は不可
- 自動的にバックアップを取得しS3に保存
- スナップショットを元にDBインスタンスを作成してリストアが可能。データ復旧、災害対策、システム拡張に利用できる。
- フェールオーバーするとDBインスタンスのCNAMEレコードを自動で切り替える
- RDS ProxyがアプリとRDSを仲介する<br>
LambdaをRDSと連携させたいときに利用。利用しないとデータセッションを効率的に継続できない
- RDSの拡張モニタリングを有効化するとCPUの使用率がCloudWatchLogsで表示できる
- シャーディングが可能

######DynamoDB
- メタデータ・ユーザー設定・セッションデータや一連のストリームデータを蓄積することでビッグデータ解析に利用できる
- DynamoDBストリームの有効化により、イベントによる通知処理などが可能（※DynamoDBイベントという機能は無い）
- DynamoDB Accelerator(DAX)は高い！リードレプリカを増設する際はDAXを有効化する必要がある

######CloudWatch
- CloudWatchエージェントのインストールによりEC2とオンプレミスサーバーのログの詳細なログを収集し、CloudWatchLogsで取得したログを集約できる。

######CloudFormation
- テンプレート<br>例）<br>NetworkACL<br>
RuleNumber:100<br>
RuleAction:allow<br>
Egress:true　※アウトバウンドトラフィック設定。falseだとインバウンド。<br>
･･･<br>
（以下略）

※port番号
80/HTTP
20/FTP
22/SSH

######ElastiCache
- RDSなどのDB（NoSQL型）の読み込み処理を高速化する<br>
- シンプルに利用する場合はMemcached、それ以外はRedis
    - Redis<br>

######AWS Elastic Beanstalk
- Dockerの仕組みを利用して構成したアプリケーションを展開する
- アプリケーションのバージョン管理や状態の監視の詳細を自動化する
- ウェブアプリケーションやワーカー環境の構築に利用される
    
##用語集
- RedShiftの拡張VPCルーティング<br>
VPC内の全てのデータ移動のトラフィック制御・モニタリングが可能
- プレイスメントグループ<br>単一のAZ内のEC2間の通信を高速化
- Amazon FSx for Windows<br>ファイルシステムあたり最大2GB/秒のスループット、数百万のIOPS、一貫したミリ秒未満のレイテンシーという高速パフォーマンスが可能な高性能なストレージ。SMBプロトコルで転送を行う
- Amazon EFS<br>NFSv4プロトコル
- Amazon EMR<br>ビッグデータ解析処理（※AWS AppSync･･リアルタイム分析、ランキング処理）
- AWS Cognito<br>アプリケーションの認証、許可、ユーザー管理をサポート
- AWS Certificate manager<br>SSL証明書を集中管理する
- AWS DataPipeline<br>定期的なデータ移動やデータ処理といったアクティビティのスケジュールを簡単に設定できるウェブサービス
- Snowball Edge Storage Optimized<br>AWSとオンプレミス間でのデータ転送。利用可能な領域ー80TB
- Aurora Serverless<br>Aurora 用のオンデマンドの Auto Scaling 設定。アプリケーションの使用状況に合わせて自動的に起動・シャットダウンを行う
- カスタマーゲートウェイ<br>AWSでVPN接続を構成する際に利用する（カスタマーゲートウェイに静的ルートテーブルを構成）
- AWS Transit Gateway<br>ネットワーク間の連携・管理を効率化する。Amazon VPC、オンプレミスのデータセンター、リモートオフィスそれぞれを連携してハブアンドスポーク型を構築する
- SAML（Security Assertion Markup Language）<br> ユーザー情報を一元管理するActiveDirectoryやクラウドサービスとの連携、シングルサインオンを実現
- AWS CloudTrail<br>ユーザーのアクティビティ、APIコールのログの取得。AWSアカウントのガバナンス・コンプライアンス・運用監査・リスク監査に利用する
- AWS Step Functions<br>個々のサーバーレスの関数（Lambda、SQSなど）を簡単につないでプロセス処理を実行するアプリケーションを構築する。人間による操作を必要とするような半自動化されたワークフローの作成が可能<br>
参考:　[Amazon SWF と AWS Step Functions の使い分け](https://aws.amazon.com/jp/swf/faqs/)

##どっちか迷う問題
- S3へのアクセス制御
    - バケットポリシー<br>
    対バケット
    - ACL<br>
    対バケット&個々のオブジェクト<br>

※バケット‥オブジェクトの保存場所
オブジェクト‥ファイル

- トラフィック制御
    - セキュリティグループ<br>
    インスタンス間
    - ACL<br>
    サブネット間

- 自動化
    - Cloud formation<br>
    容易
    - Opsworks<br>
    ムズイ。異なるレイヤーを用意するのに相応しい。
 
- ストレージゲートウェイ
オンプレミスからクラウドストレージへのアクセスを提供する
    - 保管型ボリューム<br>
    オンプレミスのサーバーにローカルストレージをプライマリーとして必要とする場合に選択
    - キャッシュボリューム<br>
    オンプレミスのサーバーにS3をプライマリーとして必要とする場合に選択

- CloudFrontが配信するコンテンツへのアクセス制御
    - 署名付きURL<br>
    ･･･
    - 署名付きcookie<br>
    現在のオブジェクトURLを変更したくない

- ルーティングポリシー
    - 位置情報ルーティングポリシー<br>
    ユーザーの位置に基づいてトラフィックをルーティング
    - 地理的近接性ルーティングポリシー<br>
    リソースの場所に基づいてトラフィックをルーティング

- Amazon Kinesis
    - Streams<br>
    ストリームデータ処理用の分析システムやアプリケーションを構築するサービス
    - Firehose<br>
    各種DB（S3やRedShift）に配信・蓄積するためのストリーム処理を実施する

- DNSレコード
    - CNAME<br>
    ドメインを別のドメインにマッピング！
    - A (AAAA)<br>
    ドメインとIPアドレスをマッピング
    - ALIAS<br>
    AWSサービスのエンドポイントのIPアドレスを返答

- 物理対応可能なインスタンス
    - ハードウェア専有インスタンス<br>
    同じAWSアカウントのインスタンスとはHWを共有する可能性がある物理サーバー
    - Dedicated Host<br>
    完全に1アカウントのユーザー専用として利用できる物理サーバー

-  VPCエンドポイント
    - ゲートウェイ型<br>
    特殊なルーティングを設定し、VPC 内部から直接外のサービスと通信する<br>
    対象サービス…S3/DynamoDB
    - プライベートリンク型<br>
    サブネットにエンドポイント用のプライベート IPアドレスを生成し、DNSが名前解決でルーティングする

##メモ
######VPC内のEC2インスタンスにアクセスできない要因
1. IGW(インターネットゲートウェイ)がサブネットに設定されていない
2. パブリックIPアドレスが付与されていない
3. ネットワークACLの設定でインターネットアクセス許可がない
4. SG(セキュリティグループ)の設定でインターネットアクセス許可がない
![nat-gateway-diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538291/2a3d4db9-10f9-98e6-a929-062467b2b133.png)
<br>
参考:　[VPC](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-nat-gateway.html)

######本番環境のインスタンス削除防止法
1. 開発者向けのアカウントを作成
2. インスタンスにタグを付与
3. 開発環境とのVPCを分割

##注意
- RDSのAutoScalingはストレージ容量を増加させる仕組み。
- RDSではライフサイクルポリシーによるバックアップは設定できない
- VPCポイントはリージョン内のポイントのため、リージョン外からはアクセスできない
- インスタンスのトラフィック分散はRoute53ではなくELB
- ストリーミングデータはKenesisをとりあえず使うのが最適
- AZ内 or region内　のどちらの条件か
- スケジュール起動 or イベント起動　のどちらの条件か
- 費用対効果を考えているか否か
- 処理が重複しないか　（例）ラムダとEC2

##ざっと見とく
- AWS Lake Formation<br>
S3を利用したデータレイク構成を容易に実現する
- EBSのAutoScaling<br>
スケールイン時にEBSボリュームのデータを保存したいとき→EBSのDeleteOnTerminationを非有効化する
- AutoScaling<br>
クールダウンのデフォルトタイム　－　 300秒<br>
ウォームアップ条件はステップスケーリングポリシーによって設定する
- AWS SMS(Server Migration Service)<br>
オンプレミスシステムの多数のワークロードを移行できる
- AWS SAM(Serverless Application Model)<br>
サーバレスアプリケーション構築用のデプロイツール。CloudFormationと連携する
- 高速コンピューティング<br>
AI機能を実装できるGPUを利用可能なインスタンス
- Amazon WorkSpaces<br>
クラウド上でのデスクトップ管理を実施できる仮想デスクトップサービス
- IAMデータベース認証<br>
EC2が固有のプロファイル認証情報を利用してRDSにアクセス可能にする認証方法
- Route Origin Authorization(ROA)<br>
オンプレミス環境で利用していたホワイトリストに登録したIPアドレスをAWSに移行する方法
- API Gatewayの処理性能の向上(最小の努力で実行可能)<br>
API Gatewayのスロットリング制限設定とキャッシュを有効化する
- IPフローティング<br>
ELBやRoute53によるDNS情報の伝播の際の一定のダウンタイムを防止するため、仮想IPアドレスを使って可用性を高めるサービス
- Amazon Simple Workflow (SWF)<br>
分散アプリケーションコンポーネント間での作業の調整を用意にするサービス
- パイロットライト<br>
停止した状態の最小限の構成を別リージョンに用意しておき、障害発生時に立ち上げるもの
- AD Connector<br>
IAMとオンプレミス環境のADとを連携する
- パブリックホストゾーン<br>
インターネット上に公開されたDNSドメインレコードを管理するコンテナ
- EC2 Image Builder<br>
AMIの設定の更新の自動化
- AWS IoT Core<br>
デバイスを簡単かつ安全にクラウドに接続する
- IAMのセキュリティ認証情報<br>
アクセスキーIDとシークレットアクセスキー

##おわりに
普段業務等でAWSを利用する機会は無く、2ヶ月半の間自主的に勉強し受験しました。模擬試験問題集にある問題にはほぼ正解できるようにしたつもりでしたが…。
なんとか一発で合格はしたものの、テスト中は回答に自信がない問題も多かったです…。