【AWS】AWS 認定ソリューションアーキテクト – アソシエイト(SAA)の出題分野とキーワードを解説する

2022年1月30日にAWS認定ソリューションアーキテクトアソシエイトに合格した経験から、資格取得に向けて必要な出題分野の説明とキーワードを解説したいと思います。

# 試験概要

||概要|詳細|
|:-:|:-:|:-:|
|問題数|65問|傾斜配点がある。試験問題開発のため、点数が付かない問題が含まれている場合がある。|
|出題形式|選択式|4択または5択以上で指定された個数の正解を選択。|
|制限時間|130分|途中退出不可。試験会場によっては、別途前後5分にアンケートなどがある。|
|合格点|720/1000|100点は必ずもらえる。採点方法は非公開。|

# 試験の出題分野とキーワード

まずは試験の出題分野についてです。ソリューションアーキテクトの試験ではシステムの**アーキテクチャ**について以下の4テーマで出題されます。
**※2022/1/30現在**
参考 | [AWS Certified Solutions Architect – Associate (SAA-C02) 試験ガイド](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sa-assoc/AWS-Certified-Solutions-Architect-Associate_Exam-Guide.pdf)
![SAA_グラフ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1166959/6265f391-bd18-491d-5cfd-b56cd738d116.png)

各分野の概要とキーワードを確認しましょう。

## 弾力性に優れたアーキテクチャの設計

まず理解したいのは弾力性です。簡単に説明すると、どんな状況でも想定通りに動くアーキテクチャです。突然のアクセス集中にも対処できるようにスケーリングできたり、サーバで障害が起きてもすぐに復旧できるようなアーキテクチャが弾力性に優れていると言えるでしょう。

それを踏まえて、この分野のキーワードは以下です。

### キーワード

- スケーリング
- フォールトトレラントアーキテクチャ
- 高可用性
- 災害対策
- デカップリング
- サーバーレステクノロジー

### 重要なキーワード紹介

#### スケーリング

AWSにはスケーリングの設定ができるリソースがたくさんあります。
また、CloudWatchと連携して、CPUやメモリが設定した条件に当てはまった場合にスケーリングするなどの自動スケーリングもあります。
分野にある**弾力性**はスケーリングがカギであるため、試験でも頻出です。

練習問題でも問題としてよく出題され、試験でも出たのはRDSについてです。
RDSにも自動スケーリングがあります。しかし、自動スケーリングでスケーリングできるのは **ストレージ(容量)** のみです。CPU・メモリ・ネットワークキャパシティーでスケーリングはできませんので、引っかけ問題に気をつけましょう。

#### フォールトトレラントアーキテクチャ

フォールトトレラントアーキテクチャ(Fault Tolerant Architecture)とは システムの **Fault=障害** に対して **Tolerant=耐性** のあるシステムの **Architecture=構造** のことです。

試験では、障害に対する耐性を高めるために同じ機能を持つサーバを複数用意して、[Elastic Load Balancing](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/load-balancer-types.html)で負荷分散する例が良く出題されます。
また別の例では、アベイラビリティゾーンの障害に耐えられるように、ストレージをマルチAZ構成にする問題も多いです。ストレージではS3やRDSが頻出です。

## 高性能アーキテクチャの設計

大規模なシステムで直面するパフォーマンス問題を解決するアーキテクチャについてです。
1から構築する際に将来を見据えて拡張性の高いアーキテクチャについてや、既存のアーキテクチャで抱えているパフォーマンス問題に対して最適な解決策を求められます。

### キーワード

- 伸縮自在/スケーラブル
- モニタリング
- ハイパフォーマンス
- エッジキャッシュ戦略
- データ転送サービス

### 重要なキーワード紹介

#### エッジキャッシュ戦略

AWSにはリージョンという概念があり、それぞれのリージョンは完全に分離された状態でデータセンターが存在しています。また、リージョンは更にいくつかのアベイラビリティゾーンとして分割されたいます。同一リージョン内のアベイラビリティゾーンは相互に接続されています。
通常はリージョンを選択し、複数のアベイラビリティゾーンを使用して可用性・耐障害性を確保しながらシステムを構築します。

それに加えて、コンテンツの配信で高いパフォーマンスが求められるシステムのために、 **[CloudFront](https://aws.amazon.com/jp/cloudfront/)** というサービスが用意されています。
 **CloudFront** を使うと、リージョンとは別に用意されたエッジロケーションを使用して、低レイテンシーかつ高速な転送速度でコンテンツの配信が可能です。
**CloudFront** は、エッジロケーションにキャッシュを行う条件を設定することでパフォーマンスを向上させることができます。このキャッシュを行う条件が **エッジキャッシュ戦略** です。

#### データ転送サービス

大規模なシステムをAWSに移行するというテーマの問題は頻出です。その中で問われる問題の1つにオンプレミスのデータをAWSに移行する最適な方法についてがあります。
AWSには様々な **[データ移行サービス](https://aws.amazon.com/jp/cloud-data-migration/)** が存在します。大きく分けると、3種類あります。

|方法|内容|
|:-:|:-:|
|ハイブリッドクラウドストレージ|オンプレミスとAWSのクラウドを繋いでデータを管理する|
|オンラインデータ転送|オンラインでデータを転送する|
|オフラインデータ転送|オフラインでデータを転送する|

それぞれの方法に数種類のサービスがあります。コスト・期間・セキュリティなどの要件から、適切なデータ移行サービスを選択できるようにしましょう。

## セキュアなアプリケーションとアーキテクチャの設計 

セキュリティはクラウドサービスを使用するうえで特に意識すべきことです。AWSでセキュリティを向上させるためのアーキテクチャの構築やセキュリティのために用意されたサービスの適切な活用方法を理解しているかが問われます。
後述するキーワードからわかる通りセキュリティ特有の用語がいろいろあるので、セキュリティについて疎い場合は言葉を理解することから始めるのがおすすめです。

### キーワード

- トレーサビリティ
- トラフィック制御
- ネットワークセグメンテーション
- (ネットワーク)ルーティングメカニズム
- (外部の脅威からの)アプリケーション保護
- データセキュリティオプション

### 重要なキーワード紹介

#### トラフィック制御

AWS上のネットワークは[VPC](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html)という仮想ネットワークを使用します。さらにVPCのIPアドレスの範囲を指定することでサブネットを作成することができます。

VPCやサブネットのトラフィックを適切に制御することで、不要な外部通信を遮断して必要な通信のみにすることができ、セキュリティを向上させることができます。

**VPC内のリソース** 単位でトラフィックを制御する場合は **[セキュリティグループ](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html)** を使用します。セキュリティグループはインバウンドとアウトバウンドに対して **許可ルールのみ** 指定できます。
セキュリティグループは **ステートフル** なので、インバウンド通信に対する応答やアウトバウンド通信に対するレスポンスは設定されたルールに関わらず通過します。

**サブネット** 単位でトラフィックを制御する場合は **[ネットワークACL](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-network-acls.html)** を使用します。 ネットワークACLはインバウンドとアウトバウンドに対して **許可ルールと拒否ルール** の両方を指定できます。
ネットワークACLは **ステートレス** なので、インバウンド通信に対する応答はアウトバウンドルールが適用され、アウトバウンド通信に対するレスポンスはインバウンドルールが適用されます。

トラフィック制御の方法として **セキュリティグループ** と **ネットワークACL** を理解して、それぞれの特徴と活用場面を判断できるようにしましょう。

#### データセキュリティオプション

AWSにデータを保管するときやオンプレミスからAWSにデータを転送するときのセキュリティ対策は重要です。
そのようなデータ管理に対するセキュリティ要件を満たす方法がいくつかあります。
ここでは試験で頻出のS3を例に説明します。

データが管理されているS3バケット全体やその中のオブジェクトへの **アクセスの制御** をすることでセキュリティを高めることが出来ます。その場合は **[アクセスポリシー](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-policy-alternatives-guidelines.html)** を使用します。
アクセスポリシーには **リソースベースのポリシー・ユーザーポリシー・ACLベースのポリシー** など特徴の違う様々な種類があるので、要件に応じて適切なポリシー設定を選択できるようにしましょう。

また、S3のデータ(オブジェクト)の **暗号化** をすることでもセキュリティを高めることができます。
方法は大きく分けて2つあります。
1つは、 **サーバー側で暗号化** を実施する方法で **SSE(Server Side Encryption)** といいます。
もう1つは、 **クライアント側で暗号化** してからS3に保存する方法で **CSE(Client Side Encryption)** といいます。SSEは3種類、CSEは2種類あります。これらの違いを理解して、要件にあったオプションを選択できるようにしましょう。
参考 | [S3データ格納時のサーバ側暗号化（SSE-S3、SSE-KMS、SSE-C）と、クライアント側暗号化（CSE-KMS、CSE-C）](https://qiita.com/yz2cm/items/ca33ced6e1f5fbcff459)


## コストを最適化したアーキテクチャの設計

### キーワード

- Amazon EC2 請求オプション
- ストレージ階層
- データ転送コスト

### 重要なキーワード紹介

#### Amazon EC2 請求オプション

AWSのEC2は、もっとも一般的に使われている仮想マシンの一つです。
CPUやストレージなどEC2には様々なオプションがありますが、コスト最適化の観点では購入オプションの選択が問われます。デフォルトでは **オンデマンドインスタンス** を購入して、利用時間に応じて秒単位での支払いを行います。
使用方法によってはオンデマンドインスタンスよりもコストを削減できる購入方法が用意されています。

例えば、数年間にわたって24時間使用することが前提の場合、**リザーブドインスタンス** を購入することで割引きが適用されます。
また、使用する頻度や時間がある程度予測できる場合、 **Savings Plans** で予め利用料を宣言することで割引が適用されます。これは、リザーブドインスタンスなどと併用できます。

要件に対して最もコストが最適化されるオプションが何かを求められますので、それぞれのオプションの特徴を覚えておきましょう。
紹介した以外にも、支払方法を含めた様々なオプションが用意されていますので、詳しくは以下を参考にしてください。
参考 | [インスタンス購入オプション](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instance-purchasing-options.html)

#### データ転送コスト

AWS内のデータ転送コストを削減する方法として覚えておきたいのは、**VPC内からS3へのデータ転送** です。
例えば、あるVPC内にEC2があるとします。そのEC2からS3にデータ転送する場合、S3はVPCのネットワーク内にないので、通常は外部通信となります。その場合は、一般的な外部通信の利用料金がかかります。
一方で、S3に対する **[VPCエンドポイント](https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/vpc-endpoints.html)** の一つである **[ゲートウェイエンドポイント](https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/vpce-gateway.html)** を作成して **ゲートウェイエンドポイント経由でデータ転送** を行えば、データ転送コストはかかりません。
この例はS3を **DynamoDB** に置き換えても成り立ちます。

試験としてのウェイトは軽いので上記の例を覚えておけば対策としては十分だと思いますが、AWSを理解する観点ではその他のアーキテクチャのデータ転送コストについて学ぶのも良いと思います。

# さいごに

SAAの勉強と試験から考えたキーワードから、分野ごとのポイントをまとめてみました。
資格取得までに何をしたかなどは[合格体験記](https://qiita.com/Shoma0210/items/9f2e5431536742e80a9f)に書いていますので、そちらもご確認していただけると嬉しいです。