AWS SAA 勉強メモ

# 背景

SAA 受験に向けて問題を解いていたが、レアケースな問題や、よく理解できていない問題が結構ある。
ので、記憶に定着することを目指して、少しずつメモを貯めることとした。

# メモ

## Amazon Redshift にデータを転送する要件があるため、Amazon Kinesis Data Firehose を選択する

Kinesis Data Firehose と Kinesis Data Stremas の違いがよく分かってなかったので、[クラスメソッド様の記事](https://dev.classmethod.jp/articles/difference-between-kinesis-streams-and-kinesis-firehose/) を拝読。

それぞれの特徴は、

- Kinesis Data Streams
    - レイテンシが速い (1s 以下)
    - データをリアルタイムで加工・表示するのに適している
- Kinesis Data Firehose
    - ゼロ管理 (Lambda 等のコードが必要ない)
    - S3, Redshift 等にデータを貯めて、分析するのに適している

Kinesis Data Firehose については、[こちらの記事](https://dev.classmethod.jp/articles/amazon-kinesis-data-firehose-for-beginner/) も参考になった。

##  Amazon Redshift のデータの処理については、費用対効果を高めるため、AWS Lambda を使う

どうやってクエリを投げるのかな？と思ったが、[Data API 経由でクエリを実行できるようだ](https://dev.classmethod.jp/articles/redshift-dataapi-from-lambda/)。

## Amazon DynamoDBにはテーブルで読み込みおよび書き込みを処理するための読み込み/書き込みキャパシティーモードが 2つある

[オンデマンドモードと、プロビジョニングモードの２つがあるようだ] (https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html)。

料金については、[クラスメソッド様の記事](https://dev.classmethod.jp/articles/reinvent2018-compare-dynamodb-on-demand-price-with-provisioned-price/) がめっちゃ分かりやすい。

## Auto Scalingの終了ポリシーは、追加で起動したインスタンスの終了順序を決める

Default の終了ポリシーは、

- インスタンスが最も多い AZ を選択する
- 最古の launch configuration を使用するインスタンスを選択する
- 上記インスタンスが単一の場合、そのインスタンスを終了する
- 複数の場合、次の請求時間が最も近いインスタンスを選択し、ランダムにインスタンスを選んで終了する

という感じのようだ（[by クラスメソッド様の記事](https://dev.classmethod.jp/articles/auto-scaling-termination-policy/)）。

## Elastic BeanstalkのユースケースとしてはWEBアプリケーションやワーカー環境などの構築によく用いられる

Web アプリケーションは分かるが、ワーカー環境って何だかよく分からない。
[クラスメソッド様の記事](https://dev.classmethod.jp/articles/aws-job-worker-sqs/) を読んだ感じでは、

- 処理依頼（ジョブ）を受け付けて、待ち行列（キュー）に追加する
- ジョブの完了に関係なく、制御が依頼元に戻る

という非同期処理を行う環境を指すようだ。

## マイクロサービス化されたコンポーネント間の処理を連携するにはSQSを利用したポーリング処理が最適

SQS ではメッセージをキューに追加して、ポーリング処理できるのが強みのようで、マイクロサービスに適しているようだ。
([クラスメソッド様の記事](https://dev.classmethod.jp/articles/re-introduction-2020-amazon-sqs/))

## AWS は各サービスに対するアクションの権限、各アクションが実行する内容に基づいて、5 つのアクセスレベル (List、Read、Write、Permissions management、または Tagging) のいずれかに分類する

[AWS のガイド](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_understand-policy-summary-access-level-summaries.html) に、詳しく書かれていた。

## IAM Access Analyzer はアクセス権限の最小化構成をモニタリングするための機能

[クラスメソッド様の記事](https://dev.classmethod.jp/articles/iam-accessanalyzer-vs-iam-accessadvisor/) で詳しく解説されている。

## 別のAWSアカウントに自分が所有するS3バケットへのアクセス利用を許可したい場合、バケットポリシー及びユーザーポリシーの両方の許可設定が必要

[クロスアカウントでアクセスできるようだ](https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-folder-user-access/)。

## 何らかのIAMグループに所属しているIAMユーザーに対し、パスワードを変更する機能を制限する

- ユーザーが自分のパスワードを変更できないように IAM パスワードポリシーの設定を変更する
- ユーザーが自分のパスワードを変更できる IAM ポリシーをユーザーグループにアタッチする

上記で実現できる。[AWS 公式の解説]
(https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_passwords_enable-user-change.html)

## ElastiCache における Redis と Memcached の違い

| 項目 | Redis | Memcached |
|:--|:--|:--|
| 負荷分散 | ノードの追加/削除<br>or<br>レプリカノードの登録、クラスターモード | ノードの追加/削除 |
| 単一ノードの性能 | シングルスレッド<br>(CPU のコア数を上げてもそれほど上がらない) | マルチスレッド<br>(CPU のコア数を上げるほど上がる) |
| データ型 | 豊富なデータを扱える | string のみ |
| バックアップ | クラスター毎にスナップショットを取れる | AWS でサポートされてない |

[クラスメソッド様の記事](https://dev.classmethod.jp/articles/which-choice-redis-memcached/) を参考にした。

## メッセージが256KBを超えなければSQSに保存するのが最も基本的な方法

By [AWS 公式](https://aws.amazon.com/jp/sqs/features/)。

また、256KBを超えるような場合は、拡張クライアントライブラリを使用してS3にメッセージを保存できるようだ。

## クラスタープレイスメントグループを設定できるインスタンスは、バーストパフォーマンスインスタンス・ Mac1 インスタンス以外の現世代のインスタンス

By [AWS 公式](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/placement-groups.html#placement-groups-cluster)。