AWSソリューションアーキテクトアソシエイトで勉強したことまとめ

私が合格した2018年末頃の情報です
AWSはどんどん新サービスが出ているので全然変わっているかもしれませんが参考までにどうぞm(_ _)m

## 出題範囲
- よく出るらしい😆
  - VPC, S3, EC2, EBS, AutoScaling, EBL, RDS, DynamoDB, Glacier, CloudWatch, IAM
- 出るらしい😁
  - CloudFront, Route53, ElastiCache, Redshift, Aurora DirectConnect, CloudFormation, SQS, Lambda, EFS
- 出るかも😌
  - OpsWorks, Elastic Beanstalk, Systems Manager, SNS, TrustedAdvisor, CloudTrail, Storage GW, EMR, Kinesis
  
## 勉強したこと
- [Blackbelt](https://aws.amazon.com/jp/aws-jp-introduction/)
  - 出題範囲のよく出るらしいやつを中心に読みました
- [AWSよくある質問](https://aws.amazon.com/jp/faqs/)
  - あまり読まなかったです、が、結構問題に直結する質問もあるようなので読んでおけばよかったと思いました
- [手を動かしながら2週間で学ぶ AWS 基本から応用まで(Udemy)](https://www.udemy.com/aws-14days/)
  - 操作のイメージを掴むためにやりましたが、試験に受かるためだけならやらなくてもよかったと思います
- [合格対策 AWS認定ソリューションアーキテクト - アソシエイト](https://www.amazon.co.jp/%E5%90%88%E6%A0%BC%E5%AF%BE%E7%AD%96-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%EF%BC%8D%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-%E5%A4%A7%E5%A1%9A%E5%BA%B7%E5%BE%B3-ebook/dp/B01LZ2CBKB)
  - 受験当時は唯一の日本語対策本でした。ただし旧試験の内容だったので半分くらいしか範囲を網羅できていません
  - 今はちゃんとした（？）対策本が何冊も出てるので、そちらを読んだほうが良いかと思います

## Well-Architected Framework
- 試験に直接出るわけではないですが、その背景にある考え方がわかります
- おすすめBlackbelt
  - [AWSご利用開始時に最低限おさえておきたい１０のこと](https://aws.amazon.com/jp/blogs/news/aws-white-belt-online-seminar-aws-10/)
  - [Well-Architected Frameworkによるコスト最適化](https://aws.amazon.com/jp/blogs/news/aws-black-belt-online-seminar-well-architected-framework-cost/)

## 出題範囲まとめ

### リージョン
- 地理的に離れた領域のこと。
- 複数のアベイラビリティゾーンから構成される
- 物理的に隔離されている
- 東京リージョンにのみ、大阪にローカルリージョンが存在（AZ１個）
 
### アベイラビリティゾーン
- 独立したロケーションのことで、それぞれのAZは複数のデータセンターからなる
 
### VPC (Virtual Private Cloud)
- AWS内に構成することができるプライベートネットワークのこと
- VPCからインターネットに接続する場合はインターネットゲートウェイを使用する
- イントラネットとはDirect Connect or VPNを使って接続する
- NATゲートウェイ、VPCエンドポイント(PrivateLink)ってのが新しめの機能なので、解答として採用されやすいかも
- 逆にNATインスタンスはあんまし解答にならないか
- VPCはAZを跨いでネットワークが組める
- インターネットに接続するまでの手順
  - VPC作成
  - サブネット切る
  - インターネットゲートウェイをVPCにアタッチ→インターネットへの経路を設定（ルートテーブル）
  - パブリックIP or EIPを振る
  - ファイアウォール（セキュリティグループ and ネットワークACL）で許可
      - セキュリティグループはホワイトリスト方式、サーバ単位でステートフル
      - ACLはブラックリスト方式、サブネット単位でステートレス
- VPC Peering（VPCぴあ接続）を使用するとVPC間で通信ができる
  - VPC同士を直繋ぎしていないとだめ
  - 使用する場合はルートテーブルにVPC Peeringを指定する

### EC2 (Elastic Compute Cloud)
- インスタンスと呼ばれる仮想コンピューティング環境のこと
- 1秒毎の従量課金
- OSまではAWSが管理してくれる
- インスタンスファミリーの種類
  - M、T・・・汎用（中規模システム向け、Tは開発環境向け）
  - C・・・コンピューティング最適化（バッチ、動画エンコ向け）
  - H、D、I・・・ストレージ最適化（ビックデータ、NoSQL向け）
  - R、X・・・メモリ最適化（ハイパフォーマンス）
  - F、P、G・・・GUP最適化（機械学習、ゲノムに使うよ良い）
- インスタンスファミリーは簡単に変更可能（要再起動）
- NAT
  - プライベートIPをパブリックIPに変換する機能
  - プライベートサブネットからインターネットへ接続する際に必要
  - AWSにはNATインスタンスとNATゲートウェイが用意されている
  - NATインスタンス
      - 昔からある古いサービス
      - EC2にNAT機能を入れたもの（OSログイン可能だが自分で管理する必要あり）
	 - ソース/宛先チェックを無効にする必要あり（EC2は自分宛てのパケットをデフォルトで弾いてしまうため）
  - NATゲートウェイ
      - 新しくできたサービス（テストで解答に採用されやすい）
	  - AWSが管理してくれるマネージドNATサービス（運用コストが低い）
	  - 高パフォーマンス、高可用性（冗長化）
      - EIPの割当が可能（自動で冗長化するがEIPは１個だけ指定しておけばいい）
	  - AZ毎に設定するのがベストプラクティス
	  - OSへのログインは不可
- EC2に設定するIPアドレス
  - Elastic IP
      - 明示的なパブリックIP
	  - 利用していない（EC2にアタッチしていない）と課金発生
  - パブリックIP
	  - ランダムに割当られるIP
      - EC22をStop/Startすると再割当てされる（別のIPになる）
  - プラベートIP
	  - 必ず割り当てられるIPアドレス
	  - EC2作成時に割当られる
	  - EC2をStop/Startしても固定
- EC2コストの最適化、購入オプション
  - オンデマンドインスタンス
      - 一般的な購入オプション。従量課金制
  - リザーブドインスタンス
      - 1年間または3年間の利用予約。オンデマンドの24時間使用に比べ25〜75%割引
  - スポットインスタンス
      - 使われていないEC2インスタンスに入札して格安利用（最大９割引）
	  - 途中で使えなくなる可能性がある（強制ターミネートされる恐れ。5秒毎にポーリングしよう）
	  - 開発／テスト環境やクラスタ(Amazon EMR：↓で説明)で使うと良い
  - Dedicated Host
	  - 専用の物理サーバ。高い
- Amazon EMRとは
  - 大量データを処理するためのサービス。以下の３種類のノードから構成されている
      - Master Node・・・管理ノード（１つだけ）
	  - Core Node・・・データを持って計算する（分散ストレージ）
	  - Task Node・・・Core Nodeの処理を補佐。データを持たずに計算する（追加も削除も自由）
	    - 例）コアノードにオンデマンドインスタンス、タスクノードにスポットインスタンスを当てるのが良い
- EC2関連のデータ
  - ユーザーデータ
      - 起動時にスクリプト実行を行う機能
	  - AMIでカバーできない起動時の設定変更を行う
	    - CloudFormation、OpsWorksを組み合わせて複数台の自動構成とかできる
  - インスタンスメタデータ
      - インスタンス自身に関するデータ（インスタンスタイプとかIPアドレスとか）
- EC2のストレージ
  - インスタンスストア（エフェメラルディスク）
      - ホストコンピュータに内蔵されたディスク（高速I/O）
	  - EC2をStop/Terminateするとクリア
	  - インスタンスタイプによって性能・容量が決定
	  - 無料で使える
	  - バッファ、キャッシュ等の保存に使おう
  - EBS (Elastic Block Store)
	  - ホストコンピュータにネットワークで接続されるストレージ
	  - EC2をStop/Terminateしても保持する
	  - 利用には別途費用が発生

### EBS (Elastic Block Store)
- EC2にネットワークで接続するブロックストレージ
- (参考)AWSのストレージ種類
  - ブロックストレージ
      - 仮想サーバにマウントして使用する
	  - 例）インスタンスストア、EBS
  - オブジェクトストレージ
      - オンラインのストレージサービス
	  - 例）S3
  - ファイルストレージ
      - 共有ストレージサービス
- EBSの特徴
  - ブロックストレージであり、OSやアプリケーション、データの置き場所に利用できる。データの暗号化が可能
  - 容量は1GB単位で最大16TB。同一AZのインスタンスからのみ利用可能
  - Snapshotを作成し、別のAZに復元することは可能
  - EC2に複数のEBSを接続することが可能。ただしEBSに複数のEC2を接続することはできない
  - AZ内で複数レプリケートされている
  - セキュリティグループによる通信制御の対象外
- EBSのボリュームタイプ
  - 汎用SSD
      - データベースやファイルサーバに良い
	  - 費用対効果が高いSSD
  - プロビジョンドIOPS（SSD)
      - ハイパフォーマンス。最大32000IOPS
      - スループット最大500MB/s
  - スループット最適化HDD
      - EMR、データウェアハウスに最適
	  - HDDのため最大500IOPSと低性能だがスループットは最大500MB/s
  - コールドHDD
	  - ログデータ保管、バックアップ、アーカイブに良い
  - マグネティック（磁気ディスク）
	  - コストを最重要視する場合に良い
      - ほとんど使われてないため試験には出にくい
- EBSの機能
  - EBS最適化オプション
	  - 通常のネットワークとは別にEBS専用の帯域を確保するオプション
	  - 起動時に有効/無効を選択可能
  - Sanpshot
	  - EBSのバックアップ機能。リストア時は新しいボリュームで作成する必要
	  - S3に保存（圧縮後の容量が課金対象）。2世代目以降は増分バックアップ
		- 第1世代を消す場合、2世代目以降で使用しない部分のみが削除される
	  - 作成時は静止点を設けることを推奨（取得後すぐI/O再開可能）
	  - AZ間移動や容量変更、ボリュームタイプ変更はSnapshot経由で行う
	  - リージョン間コピーも可能
  - データボリュームの暗号化
	  - EBSボリュームの作成時に暗号化を指定可能（Snapshotも暗号化される）
	  - 作成後の暗号化はSnapshotコピー時か、新規ボリュームを作成してコピーする

### S3
- AWSのオブジェクトストレージ（キーバリューストア）
- 安全に、どこからでも、容量制限なく保存可能
- S3の特徴
  - 容量無制限（１ファイル５TBまで)
  - 耐久性99.999999999% イレブンナイン
  - 月1GB/約3円
  - データ容量に依存しない性能
  - リージョン内の３箇所以上に自動複製（複製先のリージョンは指定可能）
- S3のユースケース
  - コンテンツ配信や保管サーバ
	  - データをS3にオフロードし、CloudFrontでキャッシュさせる
  - ログ＆データハブストレージ
	  - データレイク
  - バックアップやディザスタリカバリ
	  - バックアップ/DR環境を安価に構築可能
- バケット
  - オブジェクトの入れ物。１００個まで作成可能。
  - 全世界で一意の名前にする必要あり
  - プレフィックスをつけてディレクトリっぽいことはできる
- ストレージクラス
  - スタンダード
	  - 通常ストレージ。耐久性はイレブンナイン
  - スタンダードIA（低頻度ストレージ）
	  - 耐久性はスタンダードと一緒
	  - データの読み出し容量に対して課金（読み込み頻度が低いと安くなる）
  - One Zone-IA
	  - AZ跨ぎの複製は行わない。その分安い
  - Glacier
      - アーカイブ用。読み出しに時間がかかる。一番安い
  - 低冗長化ストレージ（RRS）
	  - 耐久性が99.99%。重要じゃないデータの置き場に
- データ整合性
  - 新規登録は即時データ参照可能
  - データの更新・削除は結果整合性（更新直後は古いデータが参照されることがある）
	  - 処理時間重視でテーブルロックを行わないため
- S3にはAWS SDKやSWS CLIでアクセス可能
- パフォーマンスの最適化
  - PUTは通常5GBまで
  - 大容量のダウンロード/アップロードにはマルチパートアップロードを使う
	  - 5TBまでOK
  - キー名の先頭部分が同じものが多いと検索に時間がかかる
	  - 先頭にランダム文字列をつけると早くなる（今はもうそうでもないけど試験には出る）
- 署名付きURL
  - セキュアにS3とのデータやり取りができる機能
  - 特定ユーザーに一定時間のみアクセスを許可したい場合に使用
  - CloudFrontと連携して負荷を減らしましょう
- VPC EndPoint
  - プライベートサブネットからNATを経由せず直接S3とセキュアに通信できる機能
- アクセス管理
    - ユーザーポリシー
	   - IAMユーザーに対してバケットのアクセス権限を付与できる
	- バケットポリシー
	  - 任意のIPから許可拒否を設定可能
	- ACL
- 暗号化
  - サーバサイド暗号化
  - クライアントサイド暗号化
	  - AWS KMSを使う
- バージョン管理機能
  - バケットに対して設定
  - 誤操作による削除対策に有効
- MFA Delete（他要素認証）
  - ワンタイムパスワードとか他要素認証が実装できる機能
  - 誤操作による削除対策に有効
- S3ライフサイクル管理
  - オブジェクトに対してストレージクラスの変更（アーカイブ）や削除を自動化することができる
  - アーカイブ先にはGlacierが選ばれる
    - 復元方法が選べる
	  - Expedited・・・迅速
	  - Standard
	  - Bulk・・・低価格

### Lambda
- サーバを意識せずにコードを実行できるサービス
- インフラ管理不要、オートスケール、ソースコード(Node.js,java,python,C#,Go)を持ち込むだけ
- ステートレスでリクエスト駆動なコード実行が可能
- 他のサービスのイベントをトリガーとして設定する
- ユースケース
  - Data Processing
	  - リアルタイムファイル処理（サムネイル生成、バリデーション等）
	  - リアルタイムストリーム処理（クレンジング、フィルタリング等）
	  - AWS WAFのルールを動的に更新
	  - Slackとの統合
	  - 監査と通知
  - Backend
	  - APIのバックエンド処理
	  - IoT
  - Worker
	  - スケジュール実行（特定時刻、繰り返し処理）
			
### Autoscaling
- ルールに従ってEC2インスタンスを増減させる機能
- CloudWatch、ELBと連携して自動的なリソース増減
- Autoscalingの設定
  - Auto Scaling Group
      - 起動インスタンスの台数を最小値以上を設定
      - 最大値以上のインスタンスは起動しない
  - Launch Configuration
      - 起動するインスタンスの設定
  - Scaling Plan
	  - どのようにスケールするかを定義
      - 負荷がなん％になったらなん台増やすとか

### EBL (Elastic Load Balancing)
- クラウドネットワークのロードバランサー。EC2インスタンスに負荷分散できる
- AZに跨って高レベルの耐障害性を実現
- スケーラブルで高い可用性
- 従量課金制
	
### RDS
- AWSのリレーショナルデータベースマネジメントサービス
- トランザクションが必要な業務データベースに良い
- フルマネージド。低コストな従量課金制
- バックアップ、スナップショット、バッチ更新を自動化
- AZを跨いでデプロイ可能（マルチAZデプロイメント）
- 別AZにデータを同期、自動的にフェイルオーバー
- 読み取り専用レプリカを作成可能（MySQL、PostgreSQL、MariaDB、Auroraのみ）
- AWSにおけるDBのデプロイメントモデル
  - オンプレミス・・・自分で管理。構成含め自分の好きにできる
  - On EC2・・・OSまではAWSが管理。OSへログイン可能
  - RDS・・・OS含めAWSが管理。ただしOSログイン不可
- RDSのスケールアップ
  - マネージメントコンソールやAPIからスケールアップ可能
  - CUPとメモリだけでなくI/O帯域も変更されるので活用していきましょう
- ストレージタイプ（EBSと同様）
  - 汎用SSD
  - プロビジョンドIOPS
  - スループット最適化HDD
- Aurora
  - Amazonが作ったMySQL、PostgreSQLと互換性のあるRDS
  - 3AZの6本のディスクに書き込み（マスタと最大15のリードレプリカ）
  - キャッシュとログをAuroraプロセスから分離（再起動しても消えない）
  - 64TBまでシームレスにスケール
  - S3にストリーミングバックアップ
  - クラスターを構成
      - プライマリインスタンス（書き込み可能）
	  - Auroraレプリカ（リードレプリカ）
	  - クラスターボリューム（共有して使う）
  - 2つのコピーに障害が起こっても読み書きに影響なし
  - 3つのコピーに障害が起こっても読み込み可能
  - AWSも積極的に押しているサービスなので試験で解答となる確率高し

### DynamoDB
- シームレスな拡張性と高い信頼性のあるNoSQLデータベース。結果整合性
- NoSQLとは
  - SQL文を使用せずにアクセスするデータベース
  - トランザクション処理は限定的
  - 高いスケーラビリティ
  - クラスタの運用負荷低減が可能
  - キーバリューストア
      - 超高速なパフォーマンス
  - ドキュメント志向
      - JSON
  - おすすめリンク
      - [AWSのNoSQL入門](https://www.slideshare.net/akuwano/awsnosql)
- DynamoDBの特徴
  - ハイスケーラブル、低レイテンシー、高可用性
  - 3つのAZに保存させる（2つのAZに書き込みで完了）
  - プロビジョンドスループット（性能を指定して課金する）
  - Consistent Readオプションも可能（Capacity Unitを２倍消費）
- ユースケース
  - キーバリューストア
  - 行動履歴DBとかに使用すると良い

### SQS/SNS
- SQS
  - メッセージを貯める場所（疎結合を実現）
  - Visibility Timeout
      - １回受信したら30秒間（変更可）メッセージを隠す
	  - 削除は良くないので（失敗した場合にメッセージが消失してしまう）

### Elastic Beanstalk
- アプリデプロイの自動化サービス
  - ウェブサーバー環境の構築
	  - スケーラブルなウェブアプリケーションを実行
  - ワーカー環境の構築
	  - バッチアプリケーション