AWS SAA 受験に向けた学習メモ⑦

# はじめに
個人的に何度も忘れてしまうものや分かりにくいものをまとめていきます！
試験範囲を網羅しているわけではないのでご注意を！
その他の範囲まとめはこちら↓

https://qiita.com/hoshi_/items/b3c101a3e92a73728789

# コンテナ関連
## ECS
### ECS Anywhere
従来のECSはAWSのクラウド内のEC2インスタンスやFargateでコンテナを実行することを前提としていたが、
ECS Anywhereでは、オンプレ環境やエッジ環境など、AWSクラウド外のインフラでもECSを使える。
オンプレやハイブリッド環境でECSを使いたい場合に適している。

### ECR
コンテナイメージの保存と管理に特化したAWSのプライベートコンテナイメージリポジトリ。
脆弱性スキャン機能がある。
プッシュ時スキャンフィルタを指定すれば、イメージのプッシュ時にスキャンを自動的に実行できる。

## EKS
### Kubernetes Cluster Autoscaler
EKSクラスターのノードを自動的にスケールアウト／スケールインするツール。

### EKSクラスタのシークレット暗号化オプション
EKSクラスタ内のログイン情報などのシークレットはデフォルトでAWSによって暗号化されているが、さらに強力な暗号化が必要な場合には、クラスタ作成時に「シークレットの暗号化」を有効化する必要がある。

### VPC CNIプラグイン
EKSクラスター内のPodネットワークを管理するためのコンポーネント。
**できること**
+ EKSとVPCの連携
    EKSクラスターをAWSのVPCに接続し、PodがVPCのリソースに直接アクセスできるようにする
+ PodへのIPアドレス割り当て
    各PodにユニークなIPアドレスを割り当て、ネットワーク通信を可能にする
+ サービスディスカバリー
    Kubernetes Serviceを介して、Podへのアクセスを可能にする
> CNI: Container Network Interface

### Load Balancer Controller
EKS上で動作するアプリケーションを外部に公開する際に、ELBを自動的に構成、管理するためのツール。

### StorageClass
EKSで利用する外部ストレージを設定する。
EBS CSIドライバーやEFS CSIドライバーがよく使われる。
> StorageClass: EKSクラスターにおけるStorageClass（ストレージクラス）は、Kubernetesの永続ボリューム（PersistentVolume）を動的にプロビジョニングするための仕組み。
> ユーザーがストレージの詳細を意識することなく、必要なストレージを要求できるようにするための「ストレージのテンプレート」のようなもの。

### EKS Connector
AWS環境外にあるKubernetesクラスターをAWSのEKSコンソールに接続し、一元管理できるようにするツール。

## App Mesh
AWSが提供するサービスメッシュ。
サービスメッシュとは、マイクロサービスアーキテクチャにおいて、サービス間の通信を制御・監視するためのインフラストラクチャレイヤー。
### できること
+ トラフィック制御
+ サービス間の通信状況（メトリクス、ログ、トレース）収集／可視化
+ サービス間の通信暗号化
+ ヘルスチェックなどの障害対策

## Fargate
サーバーレスコンテナ実行環境。

**メリット**
+ サーバー管理不要
+ 従量課金（固定費不要）
+ 自動スケーリング

## App2Container
既存のアプリケーションをコンテナ化するためのサービス。
ASP.NETやJavaで作られたアプリケーションを自動でコンテナ化し、ECSやEKSなどへのデプロイを簡素化する。

## App Runner
コードやコンテナイメージをサーバーレスで簡単にデプロイできるサービス。
自動的にスケーリングできるので、運用管理の負担を減らせる。

# AWS Systems Manager
## Parameter Store
パラメーターストアは、設定データ管理と機密管理のための安全な階層型ストレージ。
自動ローテーションなどの、シークレットのライフサイクル管理はできない。

## Automation
AWSリソースへの操作をランブックに従って自動的に実行するサービス。
ランブックは、自動実行されるワークフローを定義するドキュメントのこと。
指定したKMSのカスタマーマネージド型のキーの削除をキャンセルする定義済みのランブックなどがあるほか、ユーザーが独自にランブックを定義することもできる。

## Session Manager
EC2インスタンスへブラウザ（マネジメントコンソール）やCLIからセキュアにログインできる機能。

:::note 
Secrets Managerと似ているが別物。SecretsManagerでは**シークレット**保存。Systems Managerでは主に環境変数や設定データ管理を行う。
:::

## Inventory
AWS環境内およびオンプレミス環境のマネージドインスタンスに関する情報を収集し、集中的に管理するためのサービス。
+ AWSインスタンスのID、AMI ID、インスタンスタイプ、IPアドレス
+ OS名、バージョン、パッチレベルなど
+ インストールされているアプリケーション、バージョンなど
+ ネットワークインターフェース、IP構成、DNSなどの情報

## Patch Manager
EC2インスタンスやオンプレサーバーなどのマネージドインスタンスに対してOSおよびアプリケーションのパッチ適用プロセスを自動化するサービス。
複数のAWSリージョンに存在するインスタンスに対して、一元的にパッチポリシーを管理できる。

## Systems Manager Agent (SSM Agent)
SSM Agentを管理対象のインスタンスにインストールすることで、Systems Managerの各機能をそのインスタンスで利用することができる。

# 機械学習関連
## AIサービス一覧
| サービス名 | 説明 |
|:-:|:-:|
| Comprehend  |  テキストの感情分析、キーフレーズ抽出、インサイト抽出 |
| Transcribe  |  音声をテキストに変換する。PII(個人情報)を識別・削除する機能がある。PIIリダクション機能を有効にすれば、自動的に個人情報を削除することも可能 |
| Translate  |  テキスト翻訳。リアルタイム翻訳も可能 |
|  Lex | 音声やテキスト型のチャットボットを作成する構築サービス  |
| Kendra  |  自然言語の非構造化データを機械学習により検索 |
|  Polly | テキストを自然な音声に変換する  |
|  Forecast |  数値データを活用した時系列予測サービス。S3データから需要計画や財務計画の予測モデルを作成できる |
| Fraud Detector  |  不正なオンラインアクティビティを検出するモデルを作成できるフルマネージドサービス |
| Rekognition  |  画像と動画の解析サービス。不適切なコンテンツの識別もできる |
|  Textract |  電子ドキュメントからテキストデータを抽出するサービス |
|  Machine Learning |  機械学習のモデルを構築し、予測を生成するデータソースとして、S3のデータやRedshift、RDS for MySQLが使用できる |
|  SageMaker | 前処理やモデル作成に利用可能なブラウザベースのIDEやJupiterノートブック環境などの開発環境が提供される。SageMaker Canvasというものもあり、これはノーコード |
|  Augmented AI | 機械学習アプリに対する人のレビューが必要なワークフローを構築・管理するサービス  |

# ELB
## ALB
### クライアントとELB間のデータ保護（HTTPS通信）
AWS Certificate Manager（ACM）を利用してSSL/TLS証明書を発行し、ALBに設定すると、無料でSSL通信が可能になる。
具体的には、ALBのリスナー設定にHTTPSの設定を追加し、ALBに証明書を設定する必要がある。

### WAFと組み合わせてリクエストを制御する
WAFのWeb ACLを使用して、アクセス元のコントロールが可能
+ リクエストのIPアドレスの送信元
+ リクエストの送信元の国
+ リクエストの一部に含まれる文字列や正規表現一致
+ リクエストの特定部分のサイズ
+ 悪意のあるSQLやスクリプトの検出

## クロスゾーン負荷分散
複数のAZに登録済みのターゲットに対して均等に負荷分散を行う
## Connection Draining
既存の接続を開いたまま、インスタンスが登録解除されるか、異常が発生したインスタンスへの新規リクエストを中止する。
インスタンス登録解除を報告する前に、LBが接続維持する最大時間を1～3,600秒の間で設定できる（デフォルトは300秒）。

## NLB

:::note
Elastic IPアドレスを関連付けられる唯一のLB
:::

### NLBを構成したWEBアプリケーションにおいて、HTTPエラーを検出した場合に自動でEC2インスタンスを再開できるようにするには…
異常なターゲット数を検知するUnhealthyHostCountメトリクスをモニタリングするCloudWatchアラームを作成し、ALARM状態になった場合に異常状態のインスタンスを置換するようにAutoScalingアクションを構成すればよい。
> UnhealthyHostCountメトリクスとは：LBが管理するEC2インスタンスなどのターゲットのうち、正常に動作していないと判断されたターゲットの数を示す指標

# API Gateway
## API Gateway APIの処理性能を向上させるには…
スロットリング制限設定とキャッシュを有効化する。
+ スロットリング制限設定：リクエスト数が多すぎる場合に制限をかけることで、トラフィックが急増した際にバックエンドを守る
+ キャッシュを有効化する：リクエスト処理結果をキャッシュに保存することで、頻繁にアクセスされるAPIコールはキャッシュによって処理される

## VPCリンク
VPCリンクは、API GatewayがVPC内のプライベートリソースにアクセスするための仕組み。
インターネットを経由せずに、安全にプライベートなサービスやアプリケーションと通信することができる。

## リソースポリシー
APIへのアクセスを制御するためのJSON形式のポリシー。
実現できること
+ IPアドレスによる制限：特定のIPアドレスからのみアクセスを許可
+ IAMロールによる制限：特定のIAMロールを持つユーザーのみアクセスを許可
+ メソッドレベルでの制限：GETメソッドのみ許可するなどが可能
+ リソースレベルでの制限：特定リソースからのみアクセスを許可
+ クロスアカウントアクセス：異なるAWSアカウントからのアクセスを許可

:::note
+ VPCリンクはAPI**が**アクセスできるリソースを設定
+ リソースポリシーではAPI**への**アクセス権限を設定
:::

## API Gateway オーソライザー
+ Lambdaオーソライザー
+ Cognitoオーソライザー
+ IAMオーソライザー

## API Destinationsとの違い
似たようなサービスにEventBridgeのAPI Destinationsがある。
| 機能 | API Gateway | API Destinations |
|:-:|:-:|:-:|
|  トリガー |  HTTPリクエスト |  EventBridgeのイベント |
| 処理  | 同期／非同期  | 非同期  |
|  認証 | さまざまな認証方式に対応  | 認証情報の安全な管理  |
| エラー処理  | カスタム実装が必要  | 再試行、デッドレターキューなど  |
| 利用シーン  | 外部からのリクエストを受け付けるAPI  | イベント駆動型の処理（S3にデータが保存されたことをEventBridgeで検知したときに呼び出すなど）  |

# ストリーミング関係
## Kinesis Data Streams
+ メッセージは失われず、重複されず、到着と同じ順序で伝送することができる
+ バッチサイズやバッチ間隔を設定できる
+ データ保持期間は最大65日まで設定できる（デフォルトは24h）
+ 配信ストリームは自動的にスケーリングされ、1つのシャードは最大1MB/secのデータを取り込むことができる
+ 書き込みは1,000レコード/sec取り込みできる
+ KMS暗号化キーを指定して、自動的にデータを暗号化できる
+ コンソールやCloudWatchからメトリクスを参照できる
+ 送信データ量とデータ形式の変換に対してのみ課金される

:::note warn
Kinesis Data Streamsはあくまでもストリームデータを扱うもので、写真などを処理するのには向いていない
:::

## StepFunctions
### Mapステート
ワークフローの一部として機能する。
繰り返し処理を並列で実行する。
小規模向けのInlineモードと大規模向けのDistributedモードがある。

## Amazon Managed Service for Apache Flink
:::note 
旧 Kinesis Data Analytics
:::
ストリーミングデータを処理し、可視化・分析できる。
標準SQLのクエリが発行できるほか、PythonやJavaもサポートしている。
また、異なる形式のデータを統一した形式に変換することもできる。
> Apache Flinkのコネクタ
> + ソース：外部データの読み取りに使用されるコネクタ
> + シンク：外部データの書き込みに使用されるコネクタ
> + オペレータ：アプリケーション内のデータを処理するために使用されるコネクタ

# Cloud Front
CloudFrontでは静的／動的にかかわらず配信できる。
S3やALB、EC2もオリジンとして設定できる。

## 署名付きURLと署名付きCookie
| 項目 | 署名付きURL | 署名付きCookie |
|:-:|:-:|:-:|
| 有効期限  | 各URLに有効期限を設定可能  |  Cookieの有効期限を設定可能 |
| アクセス制限  | 特定のファイルへのアクセスを制限  |  複数のファイルへのアクセスを制限 |
| 利用シーン  |  ダウンロードなど個別のファイルへのアクセス制限 |  有料会員など複数のファイルへのアクセス制限、セッション管理 |
| URL  |  URLに署名が含まれる | URL自体は変わらない  |
### AWS WAF × Cloud Front
Cloud Frontでコンテンツ配信する場合に、外部からのURLリンクが利用できないようにするには、WAF Referer制限を使えばよい。

## アクセス制限
地理的制限: アクセスを国別に制限できる

:::note
WAFの「Web ACL」にも地理的制限と同等の機能がある
:::

## カスタムドメイン名を使用してHTTP通信をするには
SSL/TLS証明書が必要。
この証明書は、AWS Certificate Manager (ACM) を利用する場合、アメリカ東部（バージニア北部）リージョン（us-east-1）で発行されたパブリック証明書である必要がある。
これは、CloudFrontがACM証明書を使用する際に、us-east-1リージョンで発行されたもののみをサポートしているため。

## Cost管理
CloudFrontはオリジンからファイルを取得するときに、各エッジロケーションでファイルを圧縮することができる。
CloudFrontのデータ転送コストは供給されたデータの総量に基づくので、圧縮することにより通信コストが安くなる。

## Lambda@Edge
CloudFrontの機能の一つ。
アプリケーションのユーザーに近い場所（エッジロケーション）でLambda関数を実行できるサービス。

# データ転送系
## DataSync
オンプレ⇔AWSストレージ、AWSストレージ⇔AWSストレージ間でのデータ移行と同期を実現するマネージドサービス。
データ転送量に応じた従量課金制なのでコストを抑えられる。
大量データでも対応できる。
データ整合性の確認が自動的に行われる。
DataSyncの代替となりうるSnowファミリーでもデータ整合性の確認は行われる。
Direct Connectでは組み込みのデータ整合性の確認は行われないため、アプリケーションレベルでの整合性チェックなどを必要に応じて実装する必要がある。


## AppFlow
Salesforce, ServiceNow, SlackなどのSaaSとS3, Redshift, DynamoDBなどのAWSサービス間でデータを安全に転送できるフルマネージドサービス。
KMSがデフォルトで有効になっており、データ保存時や転送中に暗号化され、セキュアな転送が可能。
また、AWS PrivateLinkをサポートするSaaSアプリケーションでは、インターネットを介さずにプライベートなデータ転送も可能。

## データ転送について
+ EC2 to EC2: **同一リージョン内かつ同一AZ内**であれば無料
+ S3 to S3: 同一リージョン内であれば基本無料
+ S3 to EC2: 同一リージョン内であれば無料
+ VPC to VPC: 同一リージョン内であれば無料

# その他
## SQS
+ メッセージの制約
    + メッセージ数は無制限
    + メッセージサイズは最大256KB(→拡張クライアントライブラリを使用すると2GBまで)
+ メッセージの保持期間
    + デフォルト4日間(60sec～14日で設定可能)
:::note
SQSのアクセスポリシーでは、特定のSQSキューに対するアクセス権を定義できる。他のAWSアカウントからのアクセスも許可できる。
:::

## Glue
### Glueクローラー
S3などのデータ保存場所にあるファイルの形式（CSVやJSONなど）やスキーマを自動的に認識し、
データカタログに自動的に登録する。
このデータカタログを利用して、AthenaやRedshiftSpectrum、QuickSightなどと連携することで簡単にクエリを実行できる。

### Glue DataBrew
データ分析や機械学習の前処理段階で必要となるデータ準備作業を、コードを書かずに簡単に行えるフルマネージドサービス。
データのクレンジング、変換、正規化などを迅速に簡単に行えるようになる。

## Lambda
設定できるメモリの範囲は**128MB～10,240MB(=10GB)**
一時ストレージは最大10GBまで

### 他のAWSリソースと連携するには
他のAWSリソースと連携するにはIAMロールをLambdaファンクションに設定してアクセス権限を付与することが必要。
+ HTTP経由でLambdaファンクションを呼び出す方法
    + API GatewayをLambdaファンクションに統合してAPIを起動する
    + 関数URLをパブリックに設定する（Lambdaのネイティブ機能）
:::note
APIGatewayでHTTP経由でのアクセスを可能にする場合には、最大ペイロードサイズは10MB。
関数URLの場合には最大1MB。
:::

### Lambdaレイヤー
Lambdaファンクション間で共通する処理などがある場合、その処理をLambdaLayerを利用することで、共通機能として複数のLambdaファンクションから利用することができる。

### VPC Lambda
LambdaはVPC内にもデプロイできる。これをVPC Lambdaと呼ぶ。
VPC内にLambdaを配置するとVPC内のプライベートなリソースに安全にアクセスできる。
（LambdaをVPC内から呼び出す場合、VPCエンドポイント for Lambdaを使うとインターネットを経由せずにLambdaにアクセスできる）

### コールドスタート時の遅延削減戦略
SnapStartとプロビジョンドコンカレンシー。
| 項目 | SnapStart | プロビジョンドコンカレンシー |
|:-:|:-:|:-:|
| 対象ランタイム  | **Java**  | 全てのランタイム  |
| コールドスタートへの対応  | スナップショットからの復元  | 事前ウォームされた実行環境の維持  |
| 料金  | 無料  |  時間単位の料金が発生 |
| 適用シナリオ  | スパイク性の高いワークロード、頻繁に呼び出されない関数など  | 常に低レイテンシが求められるワークロードや予測可能なトラフィックなど  |
| 復元／起動時間  |  スナップショットの復元時間（短い） |  ほぼ即時 |

:::note alert 
SnapStartはJavaにしか適用できないのでそれ以外のランタイムの場合はプロビジョンドコンカレンシー一択。
:::

### Lambda関数からVPCへのアクセス
LambdaはLambda専用のVPCに配置されていて、インターネットや、インターネットを介してパブリックサブネット内のAWSリソースにはアクセスできるが、プライベートサブネットには接続できない。
直接パブリックサブネットのAWSリソースに接続したり、プライベートサブネットのAWSリソースに接続するには、Lambda関数のVPCアクセスを設定する必要がある。
VPCアクセスを設定したLambda関数は、設定先のサブネットへアクセスできるようになる変わりに、インターネットへはアクセスできなくなる。

## Outposts
AWSのインフラやサービスをオンプレに拡張して利用できるサービス。
Outpostsを使うと、EC2、S3、RDS、EMRなどをローカルで使用できる。
物理的なラックやサーバーを設置するため、オンプレとAWSのインフラが物理的に接続され、低レイテンシーな接続が可能。

> ユースケース
>  + 金融取引やリアルタイムデータ処理などの低遅延が要求されるアプリケーション
> + 契約上の規制などでデータをオンプレから移動できないケース

## AWS Secrets Manager
データベースやその他のサービスの認証情報を安全に暗号化してシークレットとして保存・取得する仕組みを提供する。
ライフサイクル機能を通じて、シークレットの管理、取得、ローテーションが可能。
シークレットはKMSを利用して暗号化される。

:::note warn
他のAWSリソースがSecretsManager内の情報にアクセスするには、IAMポリシーによる許可設定が必要。
:::

### BatchGetSecretValue API
Secrets Managerで複数のシークレットを効率的に取得するためのツール

## Key Management System (KMS)
:::note warn 
KMSキーはアカウント単位で管理されているため、例えばOUのARNを直接追加することはできない。
:::

### KMS外部キーストア
KMSで作成されたカスタマーマネージドキー（CMK)のキーマテリアル（キーの実態）は通常はAWSが管理するHSM（ハードウェアセキュリティモジュール）内で保管される。
外部キーストアを選択すると、キーマテリアルをAWS外で管理することができる。


### CloudHSMとの関係
CloudHSMは、KMSと連携することでカスタムキーストアとして利用できるサービス。
顧客専用のハードウェアでHSMを提供する。
きわめて高いセキュリティ要件の場合に利用される。
キーマテリアルはAWS環境内に存在するが、顧客が完全に制御でき、AWSはキーマテリアルにアクセスできない。

## Transfer Family
SFTP、FTPS、FTPなどをサポートし、S3やEFSにセキュアなファイル転送を実現するマネージドサービス。
### 管理ワークフロー
ファイルが転送された後に自動的に実行される一連のステップを定義する機能。
例えば以下のようなことができる
+ ファイルの移動: ファイルを特定のフォルダに移動する
+ ファイルのタグ付け: ファイルにメタデータを付与する
+ カスタム処理: Lambda関数をワークフローにアタッチすることで独自の処理ロジックを組み込める
+ 通知: ファイル転送された際などに通知を送信できる
+ エラー処理: ワークフローの各ステップでエラーが発生した場合の処理方法を定義できる

## Event Bridge
アプリケーションの可用性の問題やリソースの変更などのシステムイベント発生時に自動的に実行されるワーク処理を作成する機能。
例えば、AWS Certificate Managerのイベントをトリガーにすることもできるので、ACMの証明書が有効期限が切れる10日前にSNSから通知することも可能。

:::note
AWS Configでも有効期限が切れる予定の証明書を検出することはできるが、これだけでは通知はされない。通知まで行いたい場合にはEvent Bridgeを使うのが適切
:::

## オンプレからの移行
+ オンプレのIPアドレスをAWSで利用可能なように移行する方法
    ROA(Route Origin Authorization)を利用して、AWSアカウントに対して特定のIPアドレスを移行する

## IPフローティング
IP切り替えを自動化するAPIを利用することで、Elastic IPアドレスをフローティングし、即時に別のEC2インスタンスにElastic IPアドレスを割り当てることができる。

## CloudFormation
 + テンプレート：スタックを作成するための設計図のようなもの
 + スタック：AWSのリソースを1つの単位として管理するための仕組み
 + スタックセット：複数のAWSアカウントと複数のリージョンに対してスタックを作成する機能
 + 変更セット：スタックの変更を行う前に、その変更をプレビューできる機能。スタックの変更は、変更セットによる変更か、直接更新が可能
 + ドリフト：テンプレートによって展開したAWSリソースを展開後に変更した際に、変更前との差分を検出する機能
> Service Catalog：CloudFormationテンプレートを製品として登録し、他のAWSユーザーに共有できるサービス
:::note
ElasticBeanstalkでCloudFormationのテンプレートを利用し、デプロイを効率化・自動化することもできる
:::

## Quantum Ledger Database（QLDB)
フルマネージドの台帳データベース。データの変更履歴をイミュータブル（不変的）に記録し、履歴が改ざんされていないことを検証できる。
金融取引の監査や法的文書の管理に適している。

## AppSync
GraphQLとPub/Sub APIを使って、様々なデータソースにアクセスし、操作できるAWSのマネージドサービス。
WebSocketをサポートしているので、リアルタイムなデータ更新に関する実装コストが抑えられる。
また、直接DynamoDBテーブルのデータを取得／更新できる。

## SAM
SAM (Serverless Application Model)は、AWSのサーバーレスアプリケーションを簡単に開発、デプロイするためのサービス。
### 特徴
 + 簡単な記述：CloudFormationの機能を拡張してサーバーレスアプリケーションのインフラをより簡単に記述できる。
 + ローカル開発：ローカル環境で簡単にサーバーレスアプリケーションを開発・テストできる
 + 迅速なデプロイ：AWS CloudFormationを使って、アプリケーションを迅速にデプロイできる

## AZとエッジロケーションの違い
### AZ
AZはデータセンターの集まりで、リージョン内で物理的に区分され独立している。
発電機や冷却装置はAZ単位に設定されていて、一般的な障害ポイントとなる設備はAZ間で共有されない。
### エッジロケーション
エッジロケーションはキャッシュコンテンツを配信するための地理的ロケーション。
リージョンやAZとは独立したロケーションとして世界中に配置されている。

## CodeDeploy
デプロイ手順を記したAppSpecファイルを作成することで、デプロイの自動化ができる。
対象サービス：EC2、オンプレサーバー、Lambda、ECSなど様々。
### デプロイ戦略
+ ブルー／グリーンデプロイ
    現在の環境（ブルー環境）と別にグリーン環境を用意し、トラフィックを切り替えることでデプロイを行う。
    ダウンタイムを最小限に抑えつつ、安全にデプロイできる。
+ ローリングデプロイ
    複数のサーバーを段階的に更新していく方法。
+ カナリアデプロイ
    少数のユーザーに新しいバージョンを公開し、問題がないことを確認してから全体に展開する方法。