AWS Solution Architect Professional ノート纏め

## Transit gateway

- VPC のハブのようなもの
  - Peering しなくてよくなる
  - 集約してここからオンプレに接続する
- ログ取得
- `Enable Acceleration` を有効化してGlobal Acceleratorと連携した高パフォーマンス・高可用性を実現
- リージョン間のピア接続が必要な場合、各リージョンに作成が必要

## Transit VPC

- AWS の VPC 間 VPN 接続を自動化
- ある VPC を転送専用の VPN HUB(Transit VPC)として作成することで、他のVPCからのVPN接続を終端し、スター型のトポロジを自動作成
- 💀 デメリット
    - EC2ベースのVPNアプライアンスを使用する為費用、運用コストがかかる
    - Transit VPC を通過するトラフィックに対して追加のデータ転送料金が発生する

### AWS Transit Gateway network manager

- ネットワークトポロジーの変更
- ルーティングの更新
- 接続ステータスの更新に関する組み込みのイベント通知

## AppRunner

- ERC イメージを使用してデプロイするフルマネージドサービス

## CloudFormation

### 組み込み関数

- テンプレートの特定の部分でのみ使用可能
  - 現在: Resource プロパティ、Output、Metadata、および Update

### DeletionPolocy スタック削除時の挙動

- Snapshot
  - スナップショットを削除時に作成: EC2, RDS
- Retain
  - 削除せず保持: あらゆるリソースタイプ
- Delete
  - すべて削除: あらゆるリソースタイプ

### ResourceSignal パラメーター

- 成功シグナルを受信

### resource Tags プロパティ

- リソースにタグを適用(対応サービスのみ)

### 待機属性

- WaitCondition
- CreationPolicy
  - 成功シグナルを受信するかタイムアウトするまでスタックを停止
  - EC2, AutoScaling では CreationPolicy が推奨

### クロスリージョン展開

- Mappings と FindInMap でリージョン固有の AMI ID を構成
- StackSetsの作成、更新権限 IAM ロール作成

### スタック管理

- 開発グループで分けるのが効率的
- スタックごとにロールでアクセス制限可能

### CFn / OpsWorks

#### 違い

- CFn
  - AWS リソースのモデリング、プロビジョニング、バージョン管理
  - ほぼあらゆる AWS リソースのプロビジョニングと管理を、JSON ベースのドメイン固有言語で行える
- OpsWorks
  - ソフトウェア設定、アプリケーションのデプロイ、スケーリング、モニタリングを簡素化
  - サポート範囲は、Amazon EC2 インスタンス、Amazon EBS ボリューム、Elastic IP、Amazon CloudWatch メトリクスなど、アプリケーション志向の AWS リソースに限られる

#### 連携

- OpsWorks スタックにネストした CFn テンプレートを使用可

## NAT インスタンス

- PrivateなEC2からインターネットアクセスをするために配置する **EC2インスタンス**
- 冗長化
    - 異なるパブリックサブネットに 2 つのインスタンスを配置
    - マルチ AZ 構成に設定
    - 障害発生時に自動で再起動するようなスクリプトを任意言語で記述・設定
    - そもそもNAT Gatewayに切り替えることを検討する

## EC2

### ハードウェア専有インスタンス

- Amazon EC2 Dedicated Instances（または専用インスタンス）
- 単一のユーザー専用のハードウェアで実行されるAmazon EC2インスタンス
- 何らかの規制や制限のために、マルチテナントの環境をご利用できないお客様向けに用意されたサービス  
    - どのハードウェアで起動するかまでは固定できない
    - EC2の起動設定作成時に「配置テナンシー」をnull(default)の場合、VPC側の設定によって決定される
        - VPCテナンシーが「専有」なら専有インスタンスになる

### Data Lifecycle Manager(DLM)

- EBS ボリュームのスナップショット取得を定期実行

### AMI コピー時の挙動

- 公開鍵: 同時にコピーされる
- 秘密鍵(PEM キー): 同時にコピーされない、AWLCLI でインストール

### 単一の EC2 のセキュリティ強化

- 複数の ENI(Elastic Network Interface)を接続

### Instance Profile

- EC2 にロールを紐づける際に作られるもの
- ロールを入れる箱（コンテナ）
- 同時に割り当てられるロールは 1 つのみ

### EC2 ハイバネーション

- 既存のインスタンスには設定不可（再起動が必要）
- 前回起動時の内容を修復
- C, M, R 系が対応（T 系は非対応）

### 休止機能

> 休止の機能は、現在、Amazon Linux、Amazon Linux 2、Ubuntu、および Windows を実行する、C3、C4、C5、I3、M3、M4、M5、M5a、M5ad、R3、R4、R5、R5a、R5ad、T2、T3、および T3a の各インスタンスで利用が可能です。Windows の場合、休止機能がサポートされるのは、使用する RAM が最大で 16 GB のインスタンスまでです。

### インスタンス性能

- i3
  - 高いランダム IO パフォーマンス
  - 低レイテンシー
- c4

  - コンピューティング集約型ワークロード
  - コスト効率

- t系
  - 高負荷処理時のみバーストできる
  - アイドル状態時にクレジットを蓄積

### インスタンスストアボリューム

- EC2のローカルストレージ
- EC2の一時的なデータが保持され、EC2の停止・終了と共にクリアされる
- 無料
- 一部のインスタンスタイプでのみ利用可能
    - 第5・6世代ではC5d, M6gdのように「d」がつくインスタンスタイプ
    - I3、F1
- EBSより高いIOPSを求められる場合に選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/39a2bd46-1cc1-eb8e-bc03-70ae462931b5.png)

- バックアップ
    - EBS と異なり CLI やコンソールからは不可
        - ec2-bundle-vol や ec2-upload-bundle などのツールを使用
    - スナップショットではなく AMI を作成する

### プレイスメントグループ

- インスタンス間の通信高速化
- グループ内のインスタンスタイプは同じである必要がある

### スポットフリート

- 予め最高価格とインスタンスタイプ、Availability Zone を設定しておくことで、それを満たす一番安いスポットインスタンスを n 個用意するということを自動で出来るようになる

### Auto Scaling

- Auto Scaling グループに属しているインスタンスは通常停止できない（次のコマンドを実行）
    - terminate-instance-in-auto-scaling-group
      - 必須パラメータ(グループサイズを調整するかの指定)
        - --should-decrement-desired-capacity
        - --no-should-decrement-desired-capacity

- リバランスアクティビティ
    - 異常なインスタンスを終了する前に新しいインスタンスを作成する
- スケーリングアクティビティ
    - 異常なインスタンスを終了してから新しいインスタンスを作成する

### ステートフル/ステートレス

- ステートフル
  - セッションがアクティブな限り DB に接続
  - 負荷が増大
- ステートレス
  - 分散
  - スケールイン、アウトが容易

### セキュリティグループ(SG)

- 最大5つのSGをインスタンスに割り当て可能
- サブネットレベルではなく、インスタンスレベルで機能する
- ステートフル
    - インスタンスからのリクエストに関する応答トラフィックは受信セキュリティグループのルールに関わらず送信可能

- デフォルトのSGのデフォルトルール
    - 同じSGに割り当てられているネットワークインターフェイス (およびその関連インスタンス)からの受信トラフィックを許可
    - すべての送信トラフィックを許可

- 新規作成したSGのデフォルトルール
    - 受信トラフィックを許可しない
    - すべての送信トラフィックを許可

### ネットワークACL(NACL)
- サブネットに関連付けられる
    - NACLの変更はサブネット内の全てのインスタンスに影響する
- ステートレス
    - 送信・受信共に明示的な許可が必要

### EC2 から SQS エンドポイントへのアクセス

> Amazon SQS エンドポイント（sqs.us-east-1.amazonaws.com）に接続するには、Amazon EC2 インスタンスがインターネットにアクセスできる必要があります。 したがって、パブリックサブネットにあるか、パブリックサブネットに NAT インスタンス/Gateway があるプライベートサブネットにある必要があります。

### IPv6 対応

- 現行世代は全対応
- m3.large 以前は非対応
- CIDR ブロックを VPC およびサブネットに関連づける

### Reserved InstanceとSaving Plans(SP) の違い

- いずれも期間は1~3年単位

- EC2 Instance Savings Plans:

    - 途中でインスタンスタイプ、サイズ変更しても割引を享受可能
    - 需要が予測しにくい・変動するシナリオに適している

- リザーブドインスタンス:

    - 特定のインスタンスタイプを固定

## Systems Manager

### Systems Manager Automation

- 問題の診断とシューティングを自動化

### AWSSupport-ExecuteEC2Rescue runbooks

- Automation で自動化

### Systems Manager Run Command

- 用意されたコマンドや、独自のShell Scriptを実行できる
- SSM Agentがインストールされている必要がある
- SSM Agent(Systems Manager エージェント)
    - EC2, オンプレ, VMなどにインストール可能なAWSのソフトウェア
    - Systems Manager経由でそれらのリソースを更新、設定、管理可能にする


### Systems Manager パラメータストア

- SecureString: 機密性の高いパラメータストア

### Patch Manager

- マネージドインスタンス・オンプレサーバー・仮想マシンにパッチ適用を自動化
- メンテナンスウィンドウでスケジュール設定
- SSM Agentを全てのインスタンスにインストール
- バッチベースラインを各環境に作成
- EC2 をバッチグループで分類してベースライン適用
- EC2 タグを使用してグループのインスタンスにパッチインストール
- サポートパッチタイプ
    - AWS-RunPatchBaseline: セキュリティ、その他の更新を行う
    - AWS-ApplyPatchBaseline: Windowsのみサポート

### ステートマネージャー

- プロセスの自動化
- スクリプトの定期実行

## DHCP

- オプションは設定変更不可。再作成する
- 以下二つのオプションが存在
  - domain-name-servers=AmazonProvidedDNS
  - domain-name=domain-name-for-your-region

## STS

- 無効化するには IAM コンソールでロールを取り消す

## Route 53

- Private hosted zone
    - Route 53の機能のひとつで、VPC内のみで名前解決をしてくれる
        - VPC外で名前解決をするのはPublic hosted zone
    - 以下2つの設定有効化が必要
        - DNS hostnames
        - DNS resolution

- トラフィック処理最適化やフェイルオーバー設定で可用性向上につながる
- 処理性能向上にはつながらない
- ヘルスチェック
    - Web アプリケーション、Web サーバー、その他リソースの健全性とパフォーマンスを監視
    - 作成したヘルスチェックごとに、次のいずれかを監視
        - 指定されたリソースの健全性
        - その他のヘルスチェックのステータス
        - CloudWatch アラームのステータス
- トラフィックフロー
    - ビジュアルエディタを使用し、レコードの複雑な階層構造をトラフィックポリシーとして定義し、レコード間の関係を視覚的に管理できる

### シンプルルーティング

- トラフィックを 1 つのリソースにルーティング
- 標準の DNS レコードのみ
- 加重ルーティングやレイテンシールーティングなどの特別なオプションを必要としない
- 同じ名前やタイプの複数のレコードを使用することはできない
- ただし、1 つのレコードに複数の値 (複数の IP アドレスなど) を含めることができる

### 加重ルーティング

- リソースが複数存在しているときに、どのように分配するかを設定
- リソースの負荷分散

### レイテンシールーティング

- （複数リージョンにリソースがある場合）レイテンシーの最も小さいリージョンにルーティング

### 位置情報ルーティング

- ユーザの位置情報に応じてルーティング（IPで判別）
- 用途
    - ユーザに適した言語へローカライズされたコンテンツを配信
        - 近いリージョンにルーティングしたい場合はレイテンシーベースルーティイングを選択
    - 同じ場所のユーザが同じエンドポイントへルーティングされるようにして負荷分散

### 地理的近接ルール

- 近くのリソースにルーティングさせる

### 複数値回答ルーティング

- 複数のリソースに DNS レスポンスを分散する場合に使用
- 複数のルーティングレコード（最大8つ）を Route 53 ヘルスチェックに関連付ける場合に使用
- DNS クエリに複数の値を返したり、複数の IP アドレスにトラフィックをルーティングしたりする場合に使用
- 可用性とロードバランシング改善
- Alias レコードに No と設定、複数値回答ルーティングを選択

### フェールオーバールーティング

- 複数リソースを用意し、プライマリの障害発生時、セカンダリにルーティング
- アクティブ/アクティブ
  - 複数のリソースを返す
  - 全てのリソースを殆どの時間に利用可能にする場合に選択
- アクティブ/パッシブ
  - プライマリリソースを返す
  - プライマリリソース(リソースグループ)を殆どの時間に利用可能にする場合に選択
  - プライマリが使えなくなるとセカンダリを返す
- Evaluate Target Health
  - フェールオーバースタンバイ構成の有効化

### シャッフルシャーディング / anycast ルーティング

- シャッフルシャーディング
    - 何らかの理由でユーザークエリが失敗した場合、再試行時に正常に処理される
- エニーキャストルーティング
    - ネットワークの近接度に基づいて DNS クエリを最も近いエッジロケーションに送信

## ベストプラクティス

### 複雑なクエリの実行

- AthenaよりRedshiftを選択

### アプリログの持ち方

- アプリログは SSE で暗号化して S3 に保存

### スケーラブルで弾力性を満たした 3 層 Web アプリケーション構成

- RDS はリードレプリカを利用する
- データベースを EC2 インスタンスにインストールするのは非効率なので RDS を使う
- EBS のスナップショットは自動で定期的に S3 に保存される
- セッション管理には DynamoDB を使う

### 開発者アクセス制限

- タグによるグループ分け
- SCP は細かい制限には向かない

## ECS

### タスク配置戦略

- binpack
  - CPU またはメモリの最小利用可能量に基づいてタスクを配置
    - 使用するインスタンス数を最小限に抑える
- random
  - タスクをランダムに配置
- spread
  - 指定された値に基づいてタスクを均等に配置
  - AZ 均一の場合属性に以下を指定
    `attribute：ecs.availability-zone`

### ECS クラスターのオートスケーリング

- Capacity Provider を設定
- 1 つの Capacity Provider は 1 つの EC2 Auto Scaling グループに関連付け
- 関連づけた Provider を ECS クラスターに追加すると以下によってオートスケーリング

  - Capacity Provider Reservation という新しいメトリックに対応するスケーリングポリシーが自動的に生成され、Auto Scaling グループにアタッチ

- 既存の Auto Scaling グループを ECS に設定するのではなく、Amazon ECS Cluster Auto Scaling と呼ばれる専用機能を利用した構成を行う

## Secrets Manager

- RDS(MySQL, Postgre), Aurora の認証情報ローテーションを提供
- それ以外の認証情報もLambdaカスタムでローテーション可能

### Parameter Store との使い分け

https://qiita.com/tomoya_oka/items/a3dd44879eea0d1e3ef5
- コスト最優先なら無料のParameter Store
- DBローテーションしたいならSecrets Manager

## Port

| システム                                                      | ポート       |
| ------------------------------------------------------------- | ------------ |
| 多くの Linux カーネル (Amazon Linux カーネルを含む)           | 32768〜61000 |
| Windows Server 2003 を介する Windows オペレーティングシステム | 1025〜5000   |
| Windows Server 2008 以降のバージョン                          | 49152〜65535 |
| NAT Gateway                                                   | 1024〜65535  |
| AWS Lambda 関数                                               | 1024-65535   |
| Elastic Load Balancing が送信元のリクエスト                   | 1024〜65535  |

## License Manager

- License をエミュレート
  - オンプレ DB のライセンスは RDS では流用できない
- License Manager コンソールで状況追跡

## Bastion ホスト

- パブリックサブネットに配置される
- プライベートサブネットのインスタンスに SSH アクセスを許可

## サブネットの CIDR ブロックが同じ場合はオーバーラップエラーが発生

- VPC とサブネットで重複の場合は問題なく作成可能

## 国単位のアクセス制限

- CloudFront
  - 全ファイル一括制限（ファイル単位制御が不可）
  - 国レベルでのアクセス制御
- サードパーティの位置情報サービスを利用
  - 関連するファイルサブセットへのアクセスを制御
  - 国より詳細レベルでのアクセス制御
- Route 53
  - 位置情報ルーティング
      - クライアントの IP から国を特定、近い地域からルーティング（制限はできない）

## S3

- ストレージサービス
- インターネットからのS3転送は無料
- headerにrangeオプションを指定すると、指定した先頭XXKBのみのチャンクを取得することが可能
    - S3 SelectのScanRangeパラメータでも同様のことが可能
- AWSアカウントごとに最大100バケットまで作成可能
- prefix は無制限
    - prefix ごとに 1 秒あたり少なくとも 3,500 の PUT/COPY/POST/DELETE リクエストまたは 5,500 の GET/HEAD リクエスト
    - prefixを作成して読み取りを並列化するとパフォーマンス向上（prefix ✖ 10 で 読み取り55,000）

### RRS

- 非推奨ストレージ

### 標準IA

- 最小ストレージ期間料金30日（その間に削除すると残り期間で日割りされて課金）

### Glacier

- Glacier Select
    - SQLで非圧縮CSV形式アーカイブをクエリ
    - 圧縮データには使用できない
- Athenaからクエリ不可

- Vault: アーカイブを格納するコンテナ。S3でいうバケットのこと
- Archive: データそのもの。S3でいうオブジェクトのこと
- Vault Lock
    - Vault Lockポリシーで削除不可などのコンプライアンス要件を適用
    - 一度Lockすると変更不可
- 最低保持期間90日

- 2タイプが存在
    - Glacier Instant Retrieval
        - ミリ秒で取り出し
        - 滅多にアクセスしないが即応性が求められる場合選択
    - Glacier Flexible Retrieval
        - 数分〜数時間で取り出し

### Glacier Deep Archive

- 取り出しは 12 時間以内
- 3 つの AZ で可用性担保
- 最低保持期間180日

### S3 Intelligent Tiering

- 30 日連続アクセス無しは低頻度に移動
- アクセスされると高頻度に再移動

### オブジェクト暗号化

- SSE-Cによる暗号化
    - AES-256
    - 以下を API コールヘッダに含める(aws:kms の値含める)

```
x-amz-server-side-encryption-customer-algorithm
x-amz-server-side-encryption-customer-key
x-amz-server-side-encryption-customer-key-MD5
```

- 強力な多要素暗号化
- サーバ側（保管中）の暗号化では、オブジェクトのみ暗号化され、メタデータは暗号化しない
- データキーでデータを暗号化
- マスタキーでデータキーそのものを暗号化
- マスタキーは定期的にローテーション
  ![2021-05-02-11-20-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/a6238d1f-812b-403f-2bbd-28bda336ea5d.png)

### バージョン管理

- 有効化すると既存ファイルのバージョン ID は Null になる

### 特定 Web サイトからの S3 オブジェクトにアクセス拒否

- aws:Referer キーをバケットポリシーで使用

### レプリケーション

- S3バケット間でオブジェクトを **自動的** に非同期にコピー可能
- 以下の2種類が存在
    - シングルリージョンレプリケーション(SRR)
    - クロスリージョンレプリケーション(CRR)

### S3DistCp

- 大量のデータコピーに使う Apache DistCp の拡張
- S3 ⇄ EMR の HDFS 間で大量データコピー
- S3 バケット間でデータコピーも可能

### Transfer Acceleration(S3TA)

- CloudFront 経由で大陸間データ通信を高速化
- テラバイト単位のデータを頻繁に転送する場合などがユースケース
- 高速化が可能と判断され、高速化された場合のみ料金が上乗せされる

### Multipart upload

- オブジェクトを分割アップロードし、高速化
- オブジェクトサイズが100MBを超える場合に検討

### S3 MFA Delete

- S3 でオブジェクトを削除する際に MFA 認証を必須とする機能
    - 特定バージョンの削除であり、表面的なファイル削除は可能
- 該当 S3 バケットのバージョニングが有効になっていることが前提条件
    - MFA Delete が有効になっている際はバージョニングの無効化不可
- マネジメントコンソール上で MFA 認証は行えないため、有効化したオブジェクトCLI からのみしか操作ができない
- 利用可能な MFA 認証は root アカウントの MFA デバイスのみ

### 静的サイトホスティング

- KMS暗号化が有効になっているとアクセスできない。代わりにAES-256暗号化を使う
- バケット所有アカウントがオブジェクトのOwnerでもある必要がある

### 外部IPの監視方法

- S3サーバーアクセスログを有効化
    - 有効化に数時間かかる可能性がある
- CloudTrailデータイベント
    - 過去90日間のPut/Delete Bucketイベントをキャプチャ
    - オブジェクトレベルLoggingを有効化するとPut/Delete ObjectしたIPを捕捉可能

### s3バケットに設定した CloudFront Distribution が HTTP 307 temporary redirect responseになる場合
- バケット作成後全リージョンに反映されるまで24時間かかる可能性がある
- 回避するためにはバケットと同一リージョンにdistributionを設定する
    - CloudFrontはデフォルトではus-east-1のバケットに向く

### RTC(Replication Time Control)

- 99.99%のオブジェクトを15分以内、通常は数秒以内にレプリケート完了させることができ、その時間を可視化できる
- 15分を超えた場合、レプリケートされなかった場合にSNS, SQS, LambdaでS3イベント受信可能

## Amazon MQ

- オンプレで RabbitMQ / ApacheActiveMQ を使っていて、そのまま移行したい場合に選択
- そうでない場合、インスタンスの管理が発生するなどコスト効率の観点からSQS/SNSを選択
- 単純なメッセージ通知では SNS、並列処理には SQS メッセージによるポーリング処理

## Kinesis

- Kinesis Data Streams の収集データ解析は Lambda で実装するより Data Analytics や KCL を使う

### Kinesis Data Streams

- 何十万ソースから毎秒ギガバイトデータを継続キャプチャ

### Kinesis Data Firehose

- ニアリアルタイム(60秒)で受信したデータをデータストアに送信
- リアルタイムを求める要件には適さない
- 送信先
    - S3
    - Redshift
    - OpenSearch
    - Splunk
    - HTTP|S エンドポイントを提供する3rd party service

### Kinesis Data Analytics

- データ分析

### Kinesis Client Library

- アプリ構築（EC2 とかに）
- チェックポイント
    - Kinesisストリーム内（正確にはシャード内）のレコードをどこまで処理したかを示す
    - チェックポイント作成にDynamoDBを使用する（テーブルが自動的に作られる
    - 以下の理由から各KCLアプリは個別のテーブルを使用する必要がある
        - シャードIDを主キーとして使用するため共有すると不整合が起こる
        - スキャン時に無関係のリソースが含まれる可能性がある

### Agent

- データ収集方法を提供する Java ソフトウェアアプリケーション
- ファイルを監視、Streams に送信
- Linux ベースサーバーにインストール

### Worker（処理ユニット）

- 分析

### Kinesis Video Streams

- 3 つのストリーミング処理方法
  - GetMediaAPI
    - 独自のアプリ構築が必要
  - HLS
    - 通信プロトコル
    - 標準のブラウザプレイヤーで再生可
  - MPEG-DASH
    - 通信プロトコル
    - 従来型

### パフォーマンス

- リシャーディング
  - シャードを分割
    - パフォーマンス向上
  - シャードをマージ
    - パフォーマンス低下
  - 分割およびマージは常に 2 セットペア
  - シャード単位での請求のため分割するとコスト増加

## MediaServices

- AWS Elemental MediaConnect
信頼性と柔軟性が高く、安全なライブビデオの転送

- AWSElemental MediaLive
ブロードキャストとマルチスクリーンビデオ配信のために入力をライブ出力に変換する

- AWS Elemental MediaPackage
ライブおよびオンデマンドのビデオコンテンツの作成とパッケージ化

- AWS Elemental MediaStore
ライブやオンデマンドのメディアワークフロー向けにビデオアセットを作成および保存する

- AWS Elemental MediaTailor
サーバー側の広告挿入を使って、ビデオコンテンツをパーソナライズし、収益化する

- AWS Elemental MediaConvert
オンデマンドブロードキャストとマルチスクリーン配信のためのファイルベースのビデオアセットを準備する

https://dev.classmethod.jp/articles/aws-mediaservices-role-with-live/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/956e4971-71a2-4018-eef5-99b68f80e6b1.png)

1. Elemental Liveでオンプレ側エンコード
1. MediaConnectで受信
1. Elemental Media LiveでAWS側エンコード
1. Elemental Media Packageでパッケージング
    - パッケージング: 再生環境に応じた形式（MPEG, HLSなど）に変換
1. Elemental Media Storeエンコード・パッケージングされた動画を格納
    - S3は結果生合成の為適さないのでこのサービスを使う
1. CloudFrontで配信 

## オンプレの LDAP 認証

- カスタム ID ブローカーを開発
- STS で AssumeRole または GetFederationToken アクションを呼び出し
  - 一時利用資格取得して S3 アクセス
- LDAP で AD 認証

## EC2 で実行している Windows Server のアップグレード方式

- インプレース
  - OS ファイルをアップグレード。個人の設定、ファイルは維持される
- 並行
  - 古いインスタンスを終了して新しインスタンスのセットを展開

## SSL セキュリティ責任分担

- 開発者がアクセスできない ELB に証明書を保持して SSL 接続を終了する
- X.509 証明書 = 公開鍵証明書標準フォーマット

## AWS とオンプレのハイブリッド構成

- Amazon VPC VPN 接続でデータセンターを VPC にリンク
- カスタマー Gateway(オンプレ) ⇄ 仮装プライベート Gateway(AWS)
- 接続点に別のデュアルトンネル VPN 接続を追加して可用性向上

## Canary リリース

- 本稼働の API に比べ以下の制限で新しい API をリリースする。
  - 低いトラフィック
  - ランダム選択
- ユーザーは悪影響を受けづらく、継続して受けることがない
- テストメトリクスが要件を満たしたら本稼働リリースに昇格させ、Canary を無効化

## CloudFront

### 証明書

- 自己証明書（認証局による署名なし）は使用できない
- サーとパーティの認証局から取得した証明書を使用している場合、期限切れ前にACMにインポートするか、更新する必要がある
    - ACMが提供する証明書を使用している場合はACMが更新を管理する
- オリジンサーバーの証明書が期限切れなどの場合、ヘッダにX-Cacheを含む 502 Bad Gateway エラーを返却

### キャッシュ

- デフォルト設定でキャッシュ実行には GET リクエストが必要
- 他のメソッドでキャッシュしたい場合はオプション設定が必要
- 全ての TTL(Time to live)を 0 に設定することで変更即時反映
- リージョンエッジキャッシュを経由せず直接Originに送信される条件
    - リクエスト時に決定される動的コンテンツ (すべてのヘッダーを転送するように構成されたキャッシュ動作) 
    - プロキシメソッド PUT/POST/PATCH/OPTIONS/DELETE

### Origin Protocol Policy

- CloudFront とビューワ間の通信接続を設定
  - HTTP Only
  - HTTPS Only
  - Match Viewer
    - ビューワーリクエストに応じて HTTP or HTTPS を選択

### 配信最適化

- Cache-Control max-age ディレクティブ最長設定でキャッシュヒット率向上
- エッジロケーションで gzip 圧縮することで配信高速化、コスト削減が可能(配信先が複数の場合に有効)

### オンプレの負荷分散

- CloudFront はオンプレミスサーバーをオリジンサーバーとして使用できる
- CloudFront 設定のみで可能
  - DirectConnect, VPN 接続は不要

### S3 直接 URL アクセス拒否制限

- CloudFront を利用せずに期間指定アクセス許可実現には S3 の「事前署名付き URL」
- CloudFront 利用の場合は署名付き URL か Cookie で制限
  - URL or Cookie 作成後に OAC を作成しバケット内ファイルへのアクセス許可を付与
  - クライアントには直接アクセス URL ではなく OAC を介したアクセスを要求

- signed URLs
    - 個別ファイルへのアクセス制限
    - custom http client など cookie非サポートの場合

- signed cookies
    - 複数ファイルへのアクセス制限
    - 単一のURLに留まったままメンバーエリアなどを実現

### 多言語対応

- QueryString Forwarding を有効化してパラメータで振り分け

### Field-Level Encryption

- HTMLフォームのフィールドレベルで暗号化可能
- 制約
    - オリジンプロトコルポリシーがHTTPS OnlyもしくはMatch Viewer であること
    - ビューワープロトコルポリシーがRedirect HTTP to HTTPSもしくはHTTPS Onlyであること
    - 保護対象になるのはPOSTのリクエストボディーのみ。クエリストリングやHTTPヘッダは保護対象外

## Amazon Elastic Transcoder

- 様々な動画形式への変換
  - MP4 から HTTP Live Streeming(HLS)
- CloudFront ディストリビューションで動画ストリーミング

## Amazon EMR

- Hadoop フレームワークを利用する Web サービス
- インフラは EC2 or S3
- インスタンス
  - コア・マスターといった重要な処理ノードはオンデマンドが望ましい
  - タスクノード（オプション）はスポットでコスト最適化
- SQL を使った分析はしない

## Organizations

- マスターアカウントでクロスアカウントルールを作成して各アカウントに設定する
  - マスターアカウントからでなく IAM から有効化
- マスターアカウントに対してアクセス権限を付与する
- OrganizationAccountAccessRole
  - メンバーアカウントの完全な管理権限
  - Organizations コンソールを使用してメンバーアカウントを作成すると作成される
  - 既存アカウント招待の場合には自動的に作成されない
- CloudTrailを一括有効化可能

### 推奨 Organization Units (OUs)
- セキュリティとインフラストラクチャを基盤（Fondational）とし、目的ごとにOUを作成する
https://docs.aws.amazon.com/ja_jp/whitepapers/latest/organizing-your-aws-environment/recommended-ous-and-accounts.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/90662682-bdf5-a374-02b3-1f89beea0dbb.png)


## AWS Organizations ボリュームディスカウント

- 組織全体でリソースを購入・利用
- ボリュームディスカウントが設定されているリソース料金を下げる
- マスターアカウントによる共有設定
  - リザーブドインスタンス共有のオンオフ切り替え
  - オフにするとディスカウントが適用外

### SCP

- サービスコントロールポリシー
- 組織(OU)内アカウントのアクセス権限を一元的に管理
  - 組織外のユーザーには適用されない
  - 組織を作るとデフォルトで有効になる
- 個別のサービスにリンクされたロールには影響しない
    - Amazon ECS による事前定義済みのロールなど
- 全ての機能が有効の場合のみ使用可能
  - 統合請求のみでは不可
- 導入時は誤り防止の為１アカウントか少数アカウントごとに OU へ移動することを推奨
- 継承はアタッチ可能な権限の範囲、アタッチして初めて権限が付く
- 紐づけたアカウントのrootユーザにも影響する

### 組織間のアカウント移動

1. 古い Organization からメンバーアカウントを削除する
2. 新しい Organization からメンバーアカウントに招待を送信する
3. メンバーアカウントで新しい Organization への招待を受け入れる

### Consolidated billing(一括請求)

- 複数アカウントのコスト使用状況を分析可能
- 複数アカウントの合計量でディスカウント

### StackSets

- 複数リージョン・アカウントにStackを作成。変更・削除・管理可能

### AWS Service Catalog

- IAMに直接権限を与えず、用意されたCFn TemplateからStack作成
- デプロイされたリソースにタグを自動付与可能

## AWS Config

- 組織内全アカウントでルールを一元的に作成・更新・削除

## Firewall Manager

- 組織内でWAF、Shield Advancedなどの設定を一元管理
- 開始方法
    - Organizations の「すべての機能」を有効化
            - すべての組織でAWS Configを有効化
    - Firewall 管理者を指定

## Trusted Advisor

- コストの最適化、パフォーマンス、耐障害性、セキュリティ、運用上の優秀性、サービスの制限などのカテゴリでベストプラクティスチェックを行い、継続的に評価
- 毎週メールで通知

## Amazon Rekognition

- API に画像・動画を与えて解析
- インスタンスは不要
- RecognizeCelebrities
  - 有名人画像認識
- SearchFaces
  - 類似顔検索
- DetectFaces
  - 画像内顔検索

## トラフィック制御

![2021-05-15-22-05-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/bd5241a6-5e26-04c3-12b3-3b001cdecba7.png)

## タグ戦略

- OU にタグ文字や有無の標準化を設定
- タグ設定を強制実行
  - OU の IAM ポリシーで ForAllValues 修飾子を使用
- 大文字小文字区別: aws: TagKeys

## Redshift

- ~~マルチ AZ 不可~~
    - re:Invent2022 でマルチAZ構成 導入
- 別リージョンにフェイルオーバー不可
    - クロスリージョンデータ共有は可能（Feb 17, 2022に導入）
- ワークロード管理（WLM）で優先順位を管理
- 実行ノードにスポットインスタンス採用は安定性が脅かされる為非推奨

### DR(ディザスタリカバリ)

- 監査ログ
    - デフォルト無効, 有効化するとS3に保存される
    - 暗号化はSSE-S3, AES-256のみサポート
- DR 元リージョンで KMS 暗号化されたクラスターのクロスリージョンスナップショットコピーを有効にする
  - DR 先にコピーを移転できるようになる
- 暗号化操作を実行できるように DR 先でマスターキーのスナップショットコピーを許可する
- Redshift のスナップショット
  - ポイントインタイムバックアップ
  - 自動・手動
    - スケジュール登録できる
    - 手動はいつでもできる
  - 増分スナップショット（自動対応）
  - 復元後、オンデマンドでストリーミングするのですぐ使える
    - バックグラウンドでロード

| バックアップ＆リストア | パイロットライト | ウォームスタンバイ   | マルチサイト           |
| ---------------------- | ---------------- | -------------------- | ---------------------- |
| DR 時に復元            | DB のみ同期      | 低スペックで常時起動 | 同等スペックで常時起動 |

## ActiveDirectory

- 既存の AD の移行は AD Connector より AWS Managed Microsoft AD が適切
- オンプレミス環境の IdP において、オンプレミス環境のユーザーまたはグループを IAM ロールにマッピングするアサーションを定義

### IAM Identity Center(旧AWS SSO)

- Organizationで管理している複数アカウントのログインを集中管理可能
- Organization管理アカウントで有効化
- 3種類の認証ソースから選択
    - Identity center directory
        - Identity centerでID/PWを管理
    - Active Directory
        - AWS Managed Microsoft AD or Simple AD
    - 外部IDプロバイダ(AzureAD, Okta ...etc)

### Active Directory Service

- AD を簡単に構築

### Simple AD

- AD をより簡単に構築
- 一部機能制限あり
    - 最大5000ユーザ
    - MFAなし

### AD Connector

- オンプレ AD にリダイレクト
- 認証情報、ポリシーなどオンプレを流用可

## CloudTrail

- API コールログ
- 個人特定
  - ユーザートークンを照合
  - sharedEventId, userIdentity 情報

- ベストプラクティス
    1. 証跡を作成する
    2. すべての AWS リージョンに証跡を適用する
    3. CloudTrail ログファイルの整合性検証を有効にする
    4. Amazon CloudWatch Logs と統合する

### 組織の一括ログ取得

- マスターアカウントで組織の証跡を有効化
- マスターアカウントを使わない場合は Cloud Trail にクロスアカウントアクセス権限付与
- S3 でバケット内データ削除不可設定を実施

### 複数リージョンログ

- 複数リージョンのログを 1 つの アカウントの 1 つの S3 バケットに配信可
- --is-multi-region-trail, --include-global-service-events パラメータを設定

## AWS Global Accelerator

- 通信レイテンシーの改善
    - ALB, NLB, EC2をエントリポイントとして、その前段で負荷を分散
    - ユーザーになるべく近い場所（エッジロケーション）で AWS ネットワークに入る

- 静的 IP によるアプリケーションへの単一エントリの提供
    - 静的な IP アドレス（anycast）が 2つ提供される
- アプリケーションの保護
    - オリジンとなる ALB や EC2 に対してパブリックなインターネットからのアクセスを防ぐことができる
- アクセラレータの種類
    - 標準
    - カスタムルーティングアクセラレータ
        - 1 人以上のユーザーを 1 つまたは複数の AWS リージョン内の特定の Amazon EC2 インスタンスの宛先に決定的にルーティング可能
        - 特定のEC2をターゲットとするVPCサブネットエンドポイントのみサポート

## ELB

- Layer

  - CLB
    - L4(TCP)または L7(HTTP(S)), SSL
    - 加重ルーティング不可
  - NLB
    - L4(TCP, UDP), TLS
  - ALB
    - L7(HTTP(S))

- Connection Draining
    - ELBからの登録解除中や、異常発生中のインスタンスがあっても、通信が切れないようにする
    - 新規のリクエストは失敗する
- ヘルスチェック
  - 異常な EC２を検知

### ALB
- ラウンドロビン = デフォルトのアルゴリズム。均等にルーティングする
- 最小未処理リクエストルーティング = リクエストが来た時点で、処理中のリクエストがもっとも少ないターゲットにルーティングする
- IPが変動するため固定不可
    - 固定したい場合はIPを割り当てたNLBを前段に登録する
- ホストベースルーティング
    - HTTPヘッダのホストフィールドに基づいたリクエストのルーティングが可能
    - ELB(ALB)に複数のドメインを紐付けてドメインごとにバックエンドの異なるEC2またはコンテナにルーティング
    - `*.example.com` のようにワイルドカード指定できる

### NLB
- フローハッシュアルゴリズム = プロトコル、送信先/送信元アドレス、送信先/送信元ポート、TCP シーケンス番号が⼀致している通信を⼀つのフローとし、これらが⼀致している場合は同じターゲットにルーティングする
- Elastic IPによるIP固定が可能

- 均一にトラフィックを分散
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html
- ドメイントラフィックを ELB にルーティング
  - Route53 で Alias レコードを作成

### スティッキーセッション

- 同じターゲットにリクエストをルーティングする設定
    - "AWS ELB" 名の Cookie を使用する
    - MultiAZ 間でなく EC2 間でスティッキーになる
- 状態維持が必要な場合に役立つが、処理が長時間にわたる場合トラフィックが不均衡となる可能性がある

## Gateway 種別

- 仮想プライベート Gateway: AWS 側
- カスタマー Gateway: オンプレ側
  - 動的ルーティングの場合、Static
  - 静的ルーティングの場合、BGP ASN は不要
- Egress Only Gateway: IPv6 でインターネット接続
  - NAT Gateway の IPv6 版

## Storage Gateway

- オンプレとクラウドストレージ(S3, EBS, Glacier)を接続
- AWS と各 Gateway 間のデータ転送は SSL で暗号化
- クラウドストレージ側のデータは AES-256 を用いて暗号化

### File Gateway

- SMB などのファイルインターフェイスを提供
- S3 に直接アクセス・保存
- （注意）S3コンソールなどで直接バケットのオブジェクトを操作してもStorage Gatewayには反映されない。キャッシュの更新（Refresh Cache)が必要。

### Volume Gateway

- オンプレサーバーから iSCSI として S3 をマウント

#### キャッシュ型

- データを S3 に保存し、頻繁にアクセスするサブセットをローカルにキャッシュ
- 頻繁にアクセスするデータに対しては低レイテンシー

#### 保管型

- データをローカルに保存し、非同期でS3にも保存
    - ポイントインタイムスナップショットで S3 に非同期バックアップ(EBS 復元可)
- データ全体に対して低レイテンシー

### TapeGateway

- クラウドベースの仮想テープストレージ
- Glacier または Deep Archive に退避

## DataSync

https://aws.amazon.com/jp/datasync/faqs/
- AWS 他クラウド、オンプレ間でインターネットまたはDirectConnect経由でデータ移動・複製を簡素化、自動化、高速化
    - Amazon S3、Amazon EFS、Amazon FSx for Windows File Server、Amazon CloudWatch、AWS CloudTrailと統合
- ユースケース
    - オンプレデータ削減
    - BCP目的でレプリケート
- コピーしたデータ量に対してのみ課金される
- データソースのマシンにAgentをインストールして使う
- VPC Endpoint経由でセキュアにデータ転送が可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/62be80ab-28ac-c839-faa4-4c7b97030fec.png)

## Elastic Beanstalk デプロイオプション

- All at once
- Rolling
- Rolling with additional batch
- Immutable

## CloudWatch

- CloudWatch Logs Agent : 古いバージョンであり非推奨
  - CloudWatch Agent 推奨
- Cross Account Data Shareing
    - Kinesis Data Streams, Firehose, Lambdaなどで、別のAWSアカウントからのログを受信できる
    - サブスクリプションフィルターでログを受信する

## CloudWatch RUM

- Real user monitoring
- ほぼリアルタイムでエンドユーザのデバイス・場所別にパフォーマンス、エラーをモニタリング

## CloudWatch Synthetics

- CanaryというLambda関数で自動スクリーンショット、Webサイト監視
- NodeならPuppetier, PythonならSeleniumが内部的に動く。カスタマイズ可能

### メトリクス

- SurgeQueueLength
  - ルーティング保留中リクエスト/接続合計数
- SpilloverCount
  - サージキューオーバーによる拒否リクエスト数
- HealthyHostCount, UnHealthyHostCount
  - 正常/異常インスタンス数
- RequestCount
  - 1 分または 5 分間の完了リクエスト/接続数
- 4XX Error
  - クライアントエラー
- 5XX Error
  - サーバーエラー
- IntegrationLatency
  - バックエンドレイテンシー
- Latency
  - API Gateway レイテンシー

### 複数リージョン監視

- 1 つのダッシュボードでモニタリング可能
- 他のリージョンで設定は不要

## Key Management System(KMS)

- 3種類のキータイプが存在
    - Customer managed key
        - 顧客が作成・管理
        - キーポリシー、IAM ポリシー、グラントの確立と管理、有効化と無効化、暗号化マテリアルのローテーション、タグの追加、KMS キーを参照するエイリアスの作成 、KMS キー削除のスケジューリングなどを完全に制御
    - AWS managed key
        - AWSが顧客のAWSアカウントで作成
    - AWS owned key
        - AWSが顧客のサービスアカウントで作成
https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/concepts.html#key-mgmt

## CloudHSM

- SSL オフロード
  - サーバーの処理を肩代わりする
- SSL アクセラレータ
  - 本来サーバが行う SSL 鍵交換やデータ暗号化を専用ハードウェアで行う

## 拡張ネットワーキング

- Elastic Network Adapter
  - 最大 100Gbps
- Intel 82599 Virtual Function インターフェイス
  - 最大 10Gbps

## プライベートホストゾーン

- カスタムドメインをデータベースに割り当てることができる
  - 関連づける VPC を指定
  - 応答するレコードを作成（A または AAAA レコード）、データベースの IP を指定

## EC2 個別コンポーネントに別々の SSL 証明書

- ENI を使用

## 個別のデバイスごとに個別の SSL

- 個別の ELB を使う

## ロールの資格情報

- EC2 にロールが設定されると資格情報は EC2 インスタンスメタデータに保存される

## ElastiCache

- インメモリデータストア
- NoSQL なので OLTP アプリには不向き

https://aws.amazon.com/jp/elasticache/redis-vs-memcached/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/c7a2982b-02e4-b6ec-99ed-cb41bac10890.png)

- ElastiCacheクラスタは通常EC2からアクセスされるので、SGを使ってアクセス制御をする

### Memcached

- マルチスレッド
>Memcached はマルチスレッドであるため、複数の処理コアを使用できます。これは、コンピューティング性能をスケールアップすることで、より多くの操作を処理できることを意味します。
- シンプル
- 自動検出機能
- セッション管理
- フラットな文字列をキャッシュする

### Redis

- ゲームのリアルタイム処理に適切
- 複雑な設定、より高性能
- レプリケーション可能（高可用性）
- シングルスレッド
- 構造化データをサポートし、キャッシュだけでなくデータストアとしても利用可能
- キャッシュデータの DR、フォールトトレランスの為の機能
  - 自動バックアップ
  - Redis AOF(Append-Only File)を使用した手動バックアップ(デフォルト無効)
  - 自動フェイルオーバーを備えたマルチ AZ のセットアップ
- 暗号化
    - 転送中の暗号化
        - クラスター内のノード間やキャッシュとアプリケーションの間など、ある場所から別の場所にデータが移動するたびに暗号化
    - 保存時の暗号化
        - 同期およびバックアップ操作中にディスク上のデータを暗号化
- auth-token
    - auth-tokenパラメータを使用してクラスタを作成すると、クライアントにコマンド実行前にトークンを要求できる。セキュリティが向上

### キャッシュ戦略

- ライトスルー

>データがデータベースに書き込まれるときや、更新される時に常に、ElastiCacheにもデータを書き込みます。

- 遅延読み込み

>アプリケーションがデータをリクエストするときは、常にElastiCacheに最初にリクエストします。ElastiCacheにデータが存在する場合は、そのままアプリケーションにデータを返却します。ElastiCacheにデータが存在しない場合は、データストアにデータをリクエストし、アプリケーションにデータを返却します。その後、アプリケーションからElastiCacheに対してデータを書き込みます。

## ポリシー

| 要素                   | 説明                                                   |
| ---------------------- | ------------------------------------------------------ |
| Effect                 | ポリシーがアクセスを許可または拒否するかどうか         |
| Action                 | ポリシーによって許可または拒否されるアクションのリスト |
| Resource               | アクションを起こすことができるリソースのリスト         |
| Condition (オプション) | ポリシーがアクセス許可を付与する状況                   |

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucketVersions", "s3:ListBucket"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "s3:prefix": ["custom"],
          "s3:VersionId": ["1234"]
        }
      }
    }
  ]
}
```

## Code シリーズ

### CodeStar （2024年7月31日サービス終了）

- プロジェクト生成
- 単一ダッシュボードで管理
- 類似リソース
  :exclamation:OpsWorks: インフラ展開
  :exclamation:Elastic Beanstalk: Web アプリ向け（≠ サーバレスアーキテクチャ）

### CodeDeploy

- 設定タイプ(Blue Green Deployment) :star:
- Linear
  - 設定した Interval 毎に毎分デプロイ
- Canary - 設定した Interval 後に増分デプロイ
  ![2021-05-02-11-19-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/f2a95362-0c4c-4f89-30f3-a5c0bfbc46b9.png)

### CodePipeline

- 承認フロー
  - SNS を使用
  - メールで通知、コンソール, CLI, SDK でコメント確認後承認可否
  - 7 日以内に承認されないと失敗扱い

## WAF

- トラフィック制御のルールを作成可能
- クロスサイトスクリプティング、SQL インジェクション対策ルールを作成可能

- IP set statement
    - IPでアクセスを制限
- Geo match statement
    - 国と地域で制限

### WAF サンドウィッチ

- 2 つの ELB の間に WAF を配置

### WebACL

- 特定のアクセスを制御して API Gateway、CloudFront ディストリビューション、ALB などで応答
- 防御対象
  - 特定の IP、国、正規表現パターン
  - 悪意ある SQL、悪意あるスクリプト
  - 5 分にわたって指定された数のリクエスト
  - CSRF

## GuardDuty

- AWSアカウント、EC2、EKS、S3に保存されているデータへの悪意のあるアクティビティを継続監視
    - 異常なAPIアクティビティ
    - VPC内ポートスキャン
    - ログイン失敗の異常なパターン
- Organizations 組織内のアカウントを GuardDuty の委任管理者として指定できる

- （注意）検知するのみでブロックするサービスではない

## Inspector

- EC2とコンテナのワークロードを継続的にスキャンし、ソフトウェアの脆弱性や意図しないネットワークへの露出を検出。

## モバイル認証管理 :star:

- FGAC(Fine Grained Access Control)
  - Dynamo テーブル所有者が詳細なアクセスコントロールを実施
  - IAM と組み合わせて使用
- WebID フェデレーション
  - IdP 認証
  - 受け取ったトークンを IAM ロールにマッピング

## ブルーグリーンデプロイメント戦略 :star:

- 稼働中のインフラをブルー、新しい構成をグリーン
- 平行で移行を進める
- 問題があればブルーを継続してロールバック

## Dynamo

- ローカルセカンダリーインデックスはテーブル作成時に設定する必要がある

### Lambda から のアクセス許可

- インラインポリシーの Action に`dynamodb：GetItem`と`dynamodb：PutItem`
- add-permission AWS Lambda コマンドを実行して、Amazon API Gateway サービスプリンシパルに呼び出し許可を設定

### 負荷改善とコスト削減の両立

- AutoScaling を有効化して一時的なスループットキャパシティ増加
    - ワークロードの増減が数分間維持された場合のみ発動することに注意（急激なスパイクには対応できない可能性がある）
- バーストキャパシティ(貯金的な？）
>DynamoDB は、未使用の読み込みおよび書き込み容量を最大 5 分 (300 秒) 保持します。読み込みまたは書き込みアクティビティが時折バーストする間、これらの余分な容量ユニットをすばやく消費できます。

- SQS でバッファ構築
- コスト最優先の場合、以下選択肢はアンチパターンとなる
  - DAX は永久的にパフォーマンス向上でコスト増
  - DynamoDB グローバルテーブルで複数リージョンにデータ保存するのはコスト増

### DynamoDB への Migrate

- エクスポートした CSV を S3 に配置
- DynamoDB をエンドポイントに指定
- テーブルマッピング（外部テーブル定義）を追加

### パフォーマンス

- カーディナリティの高い(値が分散する)パーティションキーを使用する
  - カーディナリティが低い=とりうる値が少ない e.g. 性別
- 複合プライマリキーはパーティションが増えパフォーマンス低下

### キャパシティ

- 結果整合性
  - 4KB = 1/2 Unit/s
- 強い整合性
  - 4KB = 1 Unit/s
- 上限
  - 40,000/テーブル
  - 400kb / 項目

### レプリケーション

1. Stream を有効化
2. グローバルテーブルを作成
3. リージョン間で共有

## DocumentDB

- VPC内部にデプロイされるため、EC2などから直接アクセス可能（VPCエンドポイントは不要）
- VPC外部からのアクセスにはSSHトンネリングを使用。

## Amazon keyspaces

- Cassandra互換のマネージドDB
- CassandraをAWS移行する場合に選択

## DataPipeline（非推奨）

- Dynamo のクロスリージョンレプリケーションも可
- 3 つの項目で関連付け

  - コンポーネント
    - ビジネスロジック
    - データ管理のルールを定義（データソース、アクティビティ、スケジュール、前提条件）
    - 親コンポーネントから継承可
  - インスタンス
    - コンポーネントをコンパイルして実行するインスタンス(EC2, EMR)
  - Attempt
    - 失敗したオペレーションを再試行
    - 最大許容回数まで試行
    - 以前の試行と同じリソースで再試行

- 複数のコンピューティングリソースを使用可
  - 複数のクラスターオブジェクトを定義ファイルに定義し、使用するクラスターを runsOn フィールドで各アクティビティに関連付け
  - 例えば、簡易スクリプトは t1.micro を使用して安価に実行し、その後で大型インスタンス群の能力が必要な Amazon EMR ジョブをそのパイプラインに設定することができる

## 永続的な Mac アドレス

- ENI(Elastic Network Interface)を EC2 にアタッチ
- ENI に Mac アドレスを付与
- EC2 が停止した場合には ENI を再アタッチ

## Step Functions

- あるステップの出力 ⇨ あるステップの入力になる
- 対応リソース
  - Lambda
  - Fargate
  - SageMaker
- 優先順位を定義可能
- SNS・SES でメール通知可能
- 標準ワークフローと Express ワークフローが存在
  - Express は毎秒 10 万リクエスト

- Parallel(並列処理)
- Map(動的並列処理)
    - 状態入力にある配列の複数エントリに対して同じステップを実行
    - 最大40同時実行
- Distributed Map
    - 最大1万同時実行

## SWF

- タイマー
  - 実行時間を通知
- タグ
  - 実行のリストをフィルタリング
- シグナル
  - 実行中のワークフローに情報を注入
- マーカー
  - 実行履歴のイベントを記録、実行回数など記録

### Step Functions より SWF を選択するユースケース

- プロセスにおいて介入する外部信号が必要な場合、または結果を親に返す子プロセスを起動する場合

## クライアント証明書認証

- ELB で TCP リスナー
- Route53 レコードに EIP をセットして直接ルーティング

## Shield Standard

- CloudFront のデフォルト設定（設定は不要）
- SYN フラッド, UDP リフレクション攻撃
  > Amazon Elastic Compute Cloud (EC2)、Elastic Load Balancing (ELB)、Amazon CloudFront、AWS Global Accelerator、および Amazon Route 53 などのリソースで実行されるアプリケーションを標的とした攻撃に対する高レベルな保護には、AWS Shield Advanced を使用できます。
- DDoS 保護
- Adbanced
  - ほぼリアルタイム通知
  - 可視化

## TCP/IP プロトコルスタックの事前定義範囲

1024〜65535

## Amazon Macie

- AWS 内機密データを自動検出、分類、保護

## ELB バックエンド EC2 の IP 確認

### L7 (ALB)

- X-Forwarded-For ヘッダーを確認

### L4 (NLB)

- Proxy protocol
- L4 で使えない x-forwarded-for の代わりに ClientIP を保持する
- TCP 接続 ELB がいる場合にクライアント IP アドレス識別に使える

## IAM

### AWS グローバル条件コンテキストキー

- 全てのAWSサービスで使用できる

- `PrincipalOrgID` 
    - Conditionに組織IDを指定することで、組織内のすべての AWS アカウントに権限を与えることができる

```yaml
"Condition": {"StringEquals":
    {"aws:PrincipalOrgID":["o-xxxxxxxxxxx"]}
}
```

### ロールに付与するポリシーの種類

- 信頼ポリシー
  - 必須
  - 信頼するプリンシパル（そのロールの権限を誰（何）に委譲するか）を定義
- 権限ポリシー
  - 使用できるアクションとリソースを定義

### IAM による証明書設定

- get-server-certificate
- set-load-balancer-listener-ssl-certificate

### IAM ロールと AWS CLI にアタッチされたロールの共存

- インスタンスプロファイルロールと AWS CLI によるロール両方の更新が必要

### 混乱した代理問題

- IAMロール名・ARBが推測できると意図したアカウントやユーザ以外からもアクセスできてしまうため、（代理アクセスによる）正しいアクセスが分からず混乱が生じる問題

- 外部ID(External ID)で回避する方法
    - serviceのユーザ毎に異なるIDをservice側から発行し、それをassume roleする際の条件とすることでなりすましを防ぐ

## パブリック証明書

- IAM と ACM を使う２種類が存在
- ACM が使えないリージョンでのみ IAM 利用を推奨
- **ACM** に SSL 証明書を保存する
- Amazon CloudFront、Elastic Load Balancing、または Amazon API Gateway で利用可能
- プライベート証明書と異なり EC2 で使用は不可

## AWS Certificate Manager(ACM)

- OriginがS3やALBで前段にCloudFrontがいる場合、ユーザアクセスはCloudFrontになるのでCloudFrontに証明書を設定する

## Cognito

- MFAはユーザプールに設定

## PrivateLink

- NLB 配下の WEB 等のサービスを、同一リージョン内の他の VPC に公開できる

## SNS

- FIFO では 1秒あたり最大300メッセージ
- Subscription は以下のいずれかで解除
  - 管理者が削除
  - メールで解除リンク送信

## SES/SNS 違い

- SES(Simple Email Service)
  - メール送信に特化
  - メールの装飾が可能
  - メルマガ、キャンペーンなどの用途
- SNS(Simple Notification Service)
  - 通知に特化
  - 他サービスとの連携
  - 運用系の用途

## HVMAMI

- HVM AMI > PVCAMI
- クラスタ配置グループは単一 AZ

## SR-IOV(シングルルート IO 仮想化)

- ハイパーバイザー層を介さずに直接 I/O する技術
- EC2 固有ではなく一般的な技術ワード
  ![2021-05-02-11-21-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/52fb2d5b-f752-8645-14f3-326ff7f34875.png)
  https://jp.fujitsu.com/platform/server/primergy/software/windows/technical/tips/w2012/pdf/03-01.pdf
- メリット
  - ネットワークスループットの向上
  - CPU 使用率の低下
  - ホストごとの VM のサポート
  - ホストでのネットワーク帯域幅利用率の向上

## 同じ IP によるフェイルオーバー

- ELB や Route53 では同じ IP を使用したフェイルオーバールーティングは不可
- ENI とセカンダリ IP を使用する

## Raid

- EBS では全ての標準的な Raid 構成を使用できる
- 標準的な Raid 構成
  - Raid0: 複数ディスクに分散読み書き=ストライピング。 **アクセスの高速化** 耐障害性低い
  - Raid1: 複数ディスクに同じデータを書き込み=ミラーリング。耐障害性を実現。ディスク効率 50%
  - Raid5: 3 台以上に分散書き込み。誤り訂正符号(パリティ)を同時に保存
  - Raid6: 4 台以上に分散書き込み。誤り訂正符号(パリティ)を同時に保存
  - Raid10: Raid0/1 を組み合わせ
  - Raid10 は 0/1 どちらをベースにするかで呼称が変わる
    - RAID10（1+0）： RAID1（ミラーリング）された領域を RAID0（ストライピング）で構成
    - RAID01（0+1）： RAID0（ストライピング）された領域を RAID1（ミラーリング）で構成
  - 誤り訂正符号
    - HDD に同時に保存。HDD の故障時にパリティをもとに復元

## Serverless Framework

- Serverless アーキテクチャを構築するOSSフレームワーク
- SAM 定義リソースを含めるには以下が必要
  - AWS :: Serverless-2016-10-31 の Transform
- AWS :: Serverless :: Lambda は SAM にない
- AWS :: Serverless :: Table は SAM にない

## SAM(Serverless Application Model)

- AWS純正フレームワーク
- 段階的なデプロイやロールバックをしたいならCFnよりこちらを選択

## AWS ブロックチェーンサービス

- Amazon QLDB
- Amazon Managed Blockchain
- AWS Blockchain Templates
  - 素早くデプロイ
- AWS ブロックチェーンパートナー
- オンプレには展開できない

## Mechanical Turk

- S3, SQS, SNS, SWF と統合（StepFunctions は不可）


## Site-to-Site VPN

- IPSec トンネルで通信し、イントラとAWS間にセキュアな接続を確立
- SSL は使われない
  - AWS Classic VPN or AWS VPN をサポート
- ユースケース: 緊急の必要があり、低〜中大域幅
- 高スループットを求める場合はDirect Connectと組み合わせる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/d82f0f14-046e-21e4-754a-33a2baaecd49.png)
https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/images/image10.png

## Direct Connect

- VPC で作成したサブネットとの通信、AWS クラウドサービスへのアクセスが可能
- VPN より 高速
- 単体ではデータセンターとクラウド間の接続を暗号化できない
https://docs.aws.amazon.com/ja_jp/directconnect/latest/UserGuide/encryption-in-transit.html
    - 必要ならSite to Site VPN と組み合わせるのがベストプラクティス
- プロビジョニングに数ヶ月かかる
- 接続方式
    - 専用接続
        - port 速度は1, 10, 100Gbps から選択
    - ホスト接続
        - port 速度は50, 100, 200, 300, 400, 500Mbps から選択
- 有効化手順
    - 仮想プライベート Gateway（VGW）ルート伝播を有効化
    - EC2 からオンプレに戻るルートを追加
      - BGP を介してオンプレの特定ルートを設定する
        - BGP(Border gateway protocol セッションで最大 100 ルールまで接続
        - インターネット Gateway ルートより優先される
        - デフォルトルートは 1 つしか設定できない
    - VPC サブネットルートテーブルを更新
    - 仮想インターフェイスを作成
    
### プライベート仮想インターフェイス

- プライベート IP アドレスを使って Amazon VPC にアクセス

### パブリック仮想インターフェイス

- パブリック IP アドレスを使用して、すべてのパブリックな AWS のサービスにアクセス

### Transit仮想インターフェイス

- Direct Connect ゲートウェイに関連付けられた 1 つまたは複数の Amazon VPC Transit Gateway にアクセス

### Direct Connect Gateway

- Direct Connect GatewayをいずれかのAWSリージョンに作成すると、AWSの全リージョンに複製され、相互接続できる
- Direct Connect Gatewayには複数のVIFおよびVGWが接続できる
- VPC ごとの BGP セッション確立が不要
  - 管理作業・ネットワークデバイス負荷軽減
- ネットワークメッシュ
  - データ転送パフォーマンス向上のために網の目状にネットワークを構築すること
- 次のいずれかに関連づけ - 複数 VPC in 単一リージョン: トランジット Gateway - 仮想プライベート Gateway
  ![2021-05-02-11-16-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/9fbd3140-5131-879f-19c2-4ab68f3f04df.png)

### 冗長化

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/411b6582-86e6-a0aa-00cb-fc2f21bd2b8f.png)
- 最大回復性
    - デバイス・接続、ロケーション障害があっても回復でき、冗長化できる
- 高い回復性
    - デバイス・接続、ロケーション障害があっても回復できるが、冗長化は失われる
- 開発とテスト
    - デバイス・接続の障害は回復できるがロケーションの障害には非対応

## LAG

- ルール
  - 全て同じ帯域幅である必要がある
  - 最大 4 つ
  - 全ての接続は同じ Direct Connect Endpoint で終了する
  - Link Aggregation Control Protocol（LACP）を使用して複数の接続を集約する

## AWS X-Ray

- アプリケーション着信トラフィック解析
- 着信トラフィック解析には CloudWatch よりこちらを選択
- Elastic Beanstalk コンソールで設定
- 設定ファイル場所
  - .ebextensions
- Lambda 処理時間を可視化、ボトルネックを調査

## OpenSearch

- DynamoDB のデータを OpenSearch に移動が必要
- より優れたクエリオプションで検索

## VPC

- 以下は予約された VPC IP アドレス

    - 10.0.0.0：ネットワークアドレス
    - 10.0.0.1：AWS によって VPC ルーター用に予約されています
    - 10.0.0.2：AWS により予約済み。 DNS サーバーの IP アドレスは、常に VPC ネットワーク範囲のベースに 2 を加えたものです。 ただし、各サブネット範囲のベースに 2 を加えたものも予約しています。  
    - 10.0.0.3：将来の使用のために AWS によって予約されています
    - CIDR ブロックの最後（10.0.0.255 など）：ネットワークブロードキャストアドレス

- CIDR ブロックは以下
    - IPv4: /16
    - IPv6: /56

### VPC ピアリング

- フルメッシュ
  > ネットワークを構成する個々の要素（ノード）をすべて直接接続するもの。
- 推移的な接続は不可 (A - B - C)
- 一方にインターネット接続が発生している場合、拡張できない
  - NAT、インターネット Gateway、AWS へのエンドポイント、IPv ６ ClassicLink 接続
- 1 つの VPC でのピアリング接続上限は 125

### VPC flow log

- 役割：接続・セキュリティのトラブルシューティング、SGが期待通り動いているか
- ENIへのトラフィックのログのみ
    - パケットの内容などトラフィックそのもののログが必要な場合はトラフィックミラーリングを使用

### トラフィックミラーリング

- 役割:
    - パフォーマンス問題原因調査
    - NW攻撃に対するリバースエンジニアリング
    - 侵害されたワークロードの検出・停止

- 送信先はENI, NLBから選択。CloudWatch Logsには送信できない

### VPC Endpoint

- インターネット Gateway を介さず VPC 外の AWS サービスにアクセス
- Interface型, Gateway型の2種類
- Gateway 型は S3, Dynamo のみ

- S3 Interface, Gatewayの違い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/045fdea7-8e61-0699-d66e-eb40c9beedca.png)

### VPC Sharing

- VPCサブネットを複数アカウントで共有できる
- 事前にOrganizations管理アカウントでリソース共有を有効化しておく必要がある

## AWS Client VPN

- Client(PC)からVPCへのアクセスができる
- 認証方法
    - Active Directory
    - SSO
    - 相互認証（証明書ベース）

## Work Spaces

- RDP

## EKS

- 2 つの AZ 構成が必要
- systems:master アクセス許可が付与されたロール、IAM でクラスター制御

## コスト配分タグ

- ２種類のタグ
  - ユーザー定義タグ
  - AWS 生成タグ
    - createdBy を生成、リソース作成者を特定
  - それぞれマスターアカウントで Billing and cost management コンソールでアクティブ化が必要

## Migration and transfer

### Snow Family

- 耐久性のあるローカルストレージ
- 現在は Edge のみ利用可
- 数テラバイトから数ペタバイト対象

#### Snowmobile

- エクサバイトデータ移行
- 10PB以上のデータ転送が要件の場合に選択

#### Snowball edge

- EC2, Lambda を使用したローカルコンピューティング
- データのインポート、エクスポート
- 10PB未満のデータ転送が要件の場合に選択
- 直接Glacierにインポートすることはできない

##### Storage Optimized

- 80TB

##### Compute Optimized

- デバイスのクラスターで使用する
- AWS Greengrass（IoT）で使用
- GUI を使用して NFS 経由でファイルを転送する
- GPU オプション
- 39.5TB

### AWS Application Discovery Service(ADS)

- オンプレデータセンターの情報を収集
- ADS のデータストアに結果を暗号化形式で保存
- 総所有コスト見積もりや移行計画に使用
- AWS以外の物理・仮想・オンプレサーバのスペック、負荷状況等を収集
- 収集したデータを元にAWSへ移行する場合の必要スペック（インスタンスタイプ等）を設計、計画を立案
- 収集したデータをAthenaやQuickSightで分析が可能
- ADS で環境調査をして、AWS Server Migration Service （AWSへの移行を行うサービス）等で実際にMigrationを行う。それらの進捗を管理画面AWS Migration Hub（マネージメントコンソール内で、移行関連サービスを一覧できる画面）で一元管理する

### Migration HUB

- 複数移行アプリステータスを追跡

### Server Migration Service(SMS) (※2022/3/31 サービス廃止)

※ 後継サービスはMGNを推奨

- VM をオンプレから移行
- 手順
    1. Server Migration Connector をオンプレミス側の VMware にインストール
    2. SMS コンソールからサーバーカタログをインポート
    3. レプリケーションプロセス中に S3 バケットを作成しサーバーボリュームをレプリケート、EBS スナップショットを作成
       - バケットのアイテムは 7 日後に削除

- :star: VM Import/Export はバックアップや災害対策でリポジトリ作成目的
- :star: VM Ware の移行要件のみに限定

### Application Migration Service(MGN)

- アプリケーションに対する変更を行わず AWS へ移行
- 大規模な AWS への移行を簡素化、迅速化、自動化
- 移行元環境へツール導入が必要（Agent版とAgentless版の2つを提供）
    - Agent: 物理環境、仮想環境のどちらにも対応
    - Agentless: 仮想環境からの移⾏に対応
- データのリアルタイム同期とダウンタイムの最小化を実現

### Database Migration Service(DMS)

- データベース間の移行
- DMSデータ検証
    - ソースとターゲットのレコードを比較、移行が正しく行われたか検証可能
- 移行前評価
    - 移行が正しく行われるか、移行実施前に評価可能
- オンプレ to オンプレは非対応
- テーブルマッピング(JSON 形式)
- DMS タスクにソースエンドポイントやターゲットエンドポイントを指定
  - コンソールで移行タスク定義
  - JSON 形式で移行タスク定義
- 移行タイプ

| 移行タイプ                                                | 特徴                                                                       |
| --------------------------------------------------------- | -------------------------------------------------------------------------- |
| Migrate existing data (FullLoad)                          | 現時点でソース DB にある全てのデータを移行                                 |
| migrate existing data and replicate ongoing changes       | ソース DB の変更をキャプチャしターゲットに適用。アプリは稼働したまま移行可 |
| Replicate ongoing changes only(Change Capture Data = CDC) |                                                                            |

- Schema Conversion Tool を使用してソーススキーマとコードをターゲットと一致するよう変換
- 移行中にデータ型自動変換
- 移行用のレプリケーションインスタンスの用意が必要
  - EC2 インスタンスではなく DMS コンソールで作成
    :exclamation:コスト最適の場合は Direct Connect より IPSec VPN 接続を利用する

## Aurora

- MariaDB からの移行には適さない
- DB クラスターにパブリック IP 割り当ては不可（VPC 内からのみアクセス可能）

### AutoScaling

- ワークロードに応じてレプリカ数を自動調整
- スケーリングポリシーで最大・最小レプリカ数を定義
- MySQL, PostgeSQL両方で利用可能

### 移行パターン

| 移行元                            | ソリューション                                 |
| --------------------------------- | ---------------------------------------------- |
| RDS for MySQL DB インスタンス     | リードレプリカをスタンドアロン DB に昇格させる |
| RDS for MySQL DB スナップショット | スナップショットから直接移行                   |
| RDS 外部の MySQL データベース     | mysqldump をインポート                         |
| ^                                 | S3 に配置したバックアップファイルをインポート  |
| ^                                 | S3 に配置したテキストファイルをインポート      |
| MySQL と互換性がないデータベース  | Database Migration Service (AWS DMS)           |

## RDS

- SSL エンドポイントを使用してインターネット経由でレプリケーションするのは不適切
- Raid設定を使いたいならEC2上でRDSをセットアップし、EBSを使う必要がある
    - Raid0: I/Oパフォーマンス向上
    - Raid1: ミラーリングし、冗長性向上
- パフォーマンス向上策
    - RDS Provisiond IOPS Storage で SSD化
    - RDS Proxyで接続プールの作成・再利用によりスループット向上
        - 使用手順
            - RDS Proxy作成
            - 認証情報 保存用Secret Manager作成

### RDS for Oracle

- 以下はRDSでは未サポートの為、EC2上でOracleセットアップが必要
    - RAC, 統合監査, Database Vault などのOracle独自機能
    - Cloud HSMによる専用ハードウェアの暗号化キーで暗号化
- Oracle Recovery Manager（Oracle RMAN）
  - マーケットプレイスの AMI で EC2 にデプロイが可能
  - 自動バックアップは提供されていない

### リードレプリカ

- インスタンスレプリカを複数作成、読み取りトラフィックをコピーから提供
- スループット向上
- スタンドアロンの DB インスタンスに昇格可能
- リードレプリカへのフェイルオーバーは手動
💡 CrossRegionの場合、追加転送料発生。コスト優先なら同一Regionを選択

#### Multi AZとの比較

- リードレプリカ
    - 非同期でレプリケート
    - AZ, CrossAZ, CrossRegionに存在可能
- Multi AZ
    - 同期的にレプリケート
    - 単一リージョン、最低2つのAZにまたがる

### ログの種類

- 一般ログ
  - mysqld の一般的な実行ログ
- スロークエリログ
  - 設定値以上に時間がかかったクエリのログ
- エラーログ
  - サーバー実行中のあらゆるクリティカルエラーログ

### バックアップ

- DB だけでなくサーバーのファイルシステムも必要であれば AMI をコピーして S3 に保存する
- EC2 with RDB はやむを得ない場合のみ選択する

### DB サブネットグループ

- 最低 2 つの AZ にサブネットが必要
- プライベートかパブリックのいずれか（混在はできない）
- VPC に作成した RDS インスタンスは DB サブネットグループから IP を選択してネットワークインターフェイスを割り当て
  - IP は Mutable なので通常 DNS を指定
- DB サブネットグループのサブネットごとに最低 1 つのアドレスを確保が必要

### RDS on VMWare

- サポート対象
  - パッチ適用
  - ポイントインタイムの復元
  - スケーリング、モニタリング
  - フェイルオーバー
- サポート外
  - マルチ AZ
  - VPC による IP アドレス割り当て

## Aurora MySQL

- 128TiB まで自動拡張
- CloudWatch Logsにログ連携可能
    - エラーログはデフォルトで有効
    - 一般、スロー、監査ログは明示的に有効化が必要

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.MySQL.LogFileSize.html#ams-audit-log

- Amazon Aurora Global Database
    - 各リージョンにデータベースを分散し、低レイテンシー・高速ローカル読み取りを可能にする

## Lambda

- Lambda から EMR クラスタを起動できる
- Lambda コンソールで関数のモニタリング
  - 合計リクエスト、実行時間、エラー率
  - CLI でアクセスするには
    `list-metrics`
    `get-metric-statistics`

### カスタムランタイム :star:

- Lambda で他言語を動かせる
- Bootstrap ファイル（エントリポイント）必須

## エラーコード対応

> Aws::CharlieInstanceService::Errors::UnrecognizedClientException -The security token included in the request is invalid.

- AWS OpsWorks の外部リソースが編集または削除された場合に発生
  - ELB をマニュアルで設定
  - インスタンスオフライン時にストレージを変更

> No 'Access-Control-Allow-Origin' header is present on the requested resource

- 以下が必要
  - オリジンの cross-origin resource sharing (CORS) ポリシーで、**オリジン**が「Access-Control-Allow-Origin」ヘッダーを返すことを許可している。
  - CloudFront ディストリビューションで、適切なヘッダーが転送されている、ホワイトリストに登録されている
  - CloudFront ディストリビューションのキャッシュ動作が **HTTP** リクエストに対して OPTIONS メソッドを許可している。

> The request could not be satisfied.Bad Request.

- Origin Protocol Policy が適切でない
- 関連づける CNAME の設定が必要

> EC2ThrottledException

- プライベート VPC 内のリソースにアクセス時発生
- 十分なサブネット ENI がない
- 十分なサブネット IP がない
  :exclamation:EIP ではない

## API Gateway

### レスポンス設定

- メソッドリクエスト・レスポンス
  - API Gateway ⇄ フロントの設定
- 統合リクエスト・レスポンス
  - API Gateway ⇄ Lambda の設定

### 段階的リリース :star:

- 設定した割合で新しいAPIにリクエストを振り分け
- 現行APIからステージ変数を追加・上書き可能
  - キーバリューペア
  - デプロイステージに関連づけられた属性
  - セットアップやマッピングテンプレートで利用可能

### タイムアウト :star:

- Lambda: 1s~15m 緩和不可
  - 502 の Bad Gateway を返却
- API Gateway: 50ms~29s 緩和不可
  - INTEGRATION_TIMEOUT 504 を返却
- https://oji-cloud.net/2019/07/02/post-2258/

## コストと使用状況レポート

- 統合請求機能有効の場合はマスターアカウントのみ利用可
- 以下サービスと連携
  - Athena
  - Redshift
  - QuickSight

## QuickSight

- Standard
- Enterprise
    - プライベート VPC およびオンプレミスのデータへのアクセス

## Athena

- Glacier に対してはクエリ不可
- ファイルが小さすぎる場合、オーバーヘッドにより追加の時間を費やす可能性がある
- ベストプラクティス
    - クエリ前に対象データをParquet, ORCなどの列指向形式に変換し、クエリパフォーマンス向上
    - 日付列をパーティションキーとして使用することで、クエリでスキャンされるデータ量を削減しパフォーマンス向上
    - 128MBを超える場合はファイルを圧縮する
        - Parquet
            - Snappy, GZIP, LZO
        - ORC
            - Snappy, ZLIB

## OpsWorks

- ChefとPuppetを使って構成管理を自動化
- Chef, Puppet
    - コードで構成管理を自動化するAutomation Platform
- サーバーの構成管理・デプロイを自動化できるものであって、Patch管理自動化はできない

### 自動ヒーリング

- EC2 ヘルスチェックに合格してもスタック内異常インスタンス、失敗したインスタンスを再起動
- 失敗したインスタンスは自動置き換え

### ライフサイクルイベント

| イベント | タイミング |
| -------- | ---------- |
| Setup    | 起動した後 |
| Shutdown | 終了する前 |

### スタックインスタンスに更新パッチ適用

- Chef 11.10 以前のスタックの Linux ベースのインスタンス
  - Update Dependencies スタックコマンドを実行

### Blue/Green

- レイヤーに新しい AMI を追加
- Route53 加重ルーティング

## SQS

- 標準キュー
    - 無制限のスループット
    - 少なくとも 1 回の配信
    - ベストエフォート型の順序付け
- FIFO キュー
    - 高スループット
    - 1 回だけの処理
    - 先入れ先出し配信

- メッセージグループ ID ＋ FIFO キューで同じメッセージグループ内は順番保証
- デッドレターキュー
  - 長時間未実行のキューを隔離

- 遅延キュー
    - キュー全体を遅延させる
    - 最小0秒、最大15分

- メッセージタイマー
    - メッセージ個別に遅延させる
    - 最小0秒、最大15分

- 配信不能キュー
    - 正常に処理 (消費) できないメッセージのターゲットとして他のキュー (ソース キュー) で使用できる
    - 問題のあるメッセージを隔離して、処理が成功しない理由を特定できる

### 可視性タイムアウト

- キューが処理をしている間、設定した時間ほかのコンシューマーからメッセージを見せないようにし、処理の重複を防ぐ
- 最小 0, 最大 12 時間, デフォルト30秒
- Console経由か SDK for Java で時間変更
- SDK では特定の Json ヘッダー付きメッセージに対して時間変更などが可能

### メッセージ重複排除 ID

- 送信されたメッセージの重複排除に使用されるトークン
- 同一の重複排除 ID が設定されたメッセージをキューへ送っても 5 分間は受付けられない

### 需要に応じたスケーリング

- 適正バックログをメトリクスに設定
    - トラフィックや処理時間はスケーリングのためのメトリクスには不適切

## EBS

- EC2に付随するBlockストレージ
- ストレージタイプ
    - 汎用SSD(gp2)
        - ストレージサイズによって100 ~ 16000 IOPSを増減
            - 1GBあたり3IOPS増加する
            - e.g. 1TB増やすと3000IOPS増加
        - 使用しているかに関わらず、プロビジョニングされたストレージ 1 GB あたり 0.10 ドル
    - プロビジョンド IOPS SSD (io1 および io2)
    - スループット最適化 HDD (st1)
    - およびコールド HDD (sc1)
- Nitroインスタンスの場合のみ複数インスタンスからアクセス可能
    - 同一AZのみ
    - 最大16インスタンスまで

## EFS

- マネージドファイルサーバー
- 複数 EC2 からアクセス可
- インターネットからアクセス不可、ローカルファイルシステムとして機能
- 単一リージョン、マルチ AZ に分散
- [暗号化](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/encryption.html)
  - データ保管時の暗号化: ファイルシステム作成時に有効化可能
  - データ転送時の暗号化: EC2へのマウント時に有効化可能
      - amazon-efs-utilsをインストール
      - マウントヘルパーコマンドで `-o tls` オプションをつけてマウント
      - EFSファイルシステムIDを指定するので名前解決されている必要がある
      - e.g. `sudo mount -t efs -o tls file-system-ID ~/efs
- NetApp ONTAP、OpenZFS、Windows ファイルサーバー、Lustreから選択
- Single-AZ1
    - SSD、Microsoft 分散ファイル システム レプリケーション (DFSR)、カスタム DNS 名の使用をサポート
- Single-AZ2
    - SSD, HDDをサポート
- Single-AZの場合はファイル システムのメンテナンス中、インフラストラクチャ コンポーネントの交換中、およびアベイラビリティ ゾーンが利用できない場合に利用できなくなるが低価格
- 大抵の場合においてMulti-AZを推奨
- POSIX準拠
- 使用したリソースに対してのみ、1GBあたり0.30ドル

## FSx

- 

## オンプレ RDS

- AWS クラウド上 RDS 同様自動バックアップ可能

## 注意事項

| リソース | MultiRegion |
| -------- | ----------- |
| EC2      | 不可        |
| RDS      | 不可        |

### GraphQL API

- グラフ DB の Neptune ではホストできない
- EC2 でホストする

## ソリューション

### URL ベースルールによるアウトバウンドアクセスの制御

- EC2 をプライベートサブネットに配置する
- プロキシサーバーでクライアントからの要求をブロック
- 以下では URL ベースで制御不可
  - Route 53 (要確認）
  - ネットワーク ACL, セキュリティグループ
    - ポート範囲、送信先 IP、プロトコルのみで制限可

### VPN でのアクセス制限

- パブリックサブネットに VPN SSL ソリューションを実装
- アクセス対象ユーザは端末に SSL クライアントをインストール
- アプリはプライベートサブネットにデプロイ

## AWS Health Dashboard

- 以前から存在する以下の2種が統合されたサービス
    - Personal Health Dashbaord(アカウント規模の障害確認)
    - Service Health Dashbaord(リージョン規模の障害確認)

## AWS Cloud Readiness Assessment Tool

- クラウド導入支援ツール
- Webフォームで質問に答えることで、クラウド移行の準備状況・推奨事項のレポートが作成される
- AWSアカウントが無くても利用可能

## Outposts

- AWS環境をオンプレミスに設置・利用可能

## 忘れやすい + よく問われる系

### ログ配信先

- WAF, VPC Flowlog
    - CloudWatch Logs
    - S3
    - Kinesis Firehose

- トラフィックミラーリング
    - ENI, NLB

###  ElastiCache redis / memcachedの違い
https://aws.amazon.com/jp/elasticache/redis-vs-memcached/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/2e9d73c9-46b4-8be2-c825-9eb86885d7c1.png)

### 移行戦略 (7R)

https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS_MGN_0430_v1.pdf
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713398/87479ffc-85e8-771b-2e90-539b9160de06.png)

## 【余談】合格記

### 試験前

2 時間前に会場付近のコメダ珈琲で最後の復習。
このノートの見直しと、今更ながら公式のサンプル（初めて目を通した）
サンプルで半分以上間違えて自信喪失しつつ、会場へ。

### 試験後

全問解き終わって時間は 90 分くらい余っていたと思います。

あれだけ勉強したのに、知らない単語が結構な数出てきた。覚えているもので DataSync とか。S3 の block とか。 CloudFormation のドリフト検出（これ２問くらい出てきた気がする）とか。結果合っていたのかはわからないが、英語と同じで知らない単語でも諦めず前後の文脈から判断して答えたのがよかったのかもしれない。

あとはやはり長文なので、よく読まないと物凄く細かい要件を見落としてミスというのが多そうだなと思った。見直していてそういうのを３、４つくらいは回収できたと思う。

### 最終的な勉強内容

- AWS Blackbelt
- [Udemy 模擬試験問題集](https://www.udemy.com/course/aws-53225/)
- [唯一の参考書](https://www.amazon.co.jp/dp/4865942483)
- [WEB 問題集で学習しよう](https://aws.koiwaclub.com/exam/sap/)

### 勉強ルーチン

- Udemy で全５回の模擬試験を合格点（75％）に達するまで（５回くらい）繰り返し。ポイントをノートにメモ。解説読んでわからなかったところは BlackBelt や公式ドキュメントで補足。
- 参考書の模擬試験を合格点（75％）に達するまで（3 回くらい）繰り返し。重要そうなポイントをマーキング。
- [WEB 問題集で学習しよう](https://aws.koiwaclub.com/exam/sap/)を試験の一ヶ月前くらいに総仕上げ的に登録。
  - Udemy が合格点に達した後なのにかなり間違えてしまったのだが、内容が古かったり、間違ってたり、日本語が微妙でそもそも問題の意味がわからなかったり、といった問題がかなり合ったように思う。ただ、Udemy と参考書でも出てこなかった内容があったりしたので登録する意味はなくはないと思う。が、６千円の価値があるかというと微妙か。
- 業務でほぼ使っておらず特に自信のない範囲（ネットワーク系、Snow ファミリー、AD 系）中心に BlackBelt で仕上げ。AD 系は最後まで各サービスの違いなどがよくわからなかった・・（本試験では全く出てこなかったのでラッキーだった）

## (2024.5.18) C02版 資格更新 合格しました

- 勉強期間
    - 3ヶ月程度（毎日1時間弱）
- 勉強方法
    - [Udemy](https://www.udemy.com/course/practice-exam-aws-certified-solutions-architect-professional/learn/quiz/5556330#overview) (買った時英語しかなかったが今は日本語版もあるっぽい)
    - いろんなブログで勧められていた [参考書](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%EF%BC%86%E5%95%8F%E9%A1%8C%E9%9B%86-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-%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB-%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88-%EF%BC%A1%EF%BC%B7%EF%BC%B3%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E5%B1%B1%E4%B8%8B%E5%85%89%E6%B4%8B/dp/4815617929/ref=sr_1_2_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3TTV4B09I7360&dib=eyJ2IjoiMSJ9.KVXQRNcJwh4fEvOphARIDZKwcRUsGRnJj04JTfFqdzLVEd1QoDRR5xQvonchg13oaj0QsY-h3eiT2pbDj76ln-HprFXfb2nsGRpfQDmTH5J5xhrTQz5odi5j2SZycvgZt3STUCXNDA2kQ1k1mVtr1sRFy8FWok8zpOwFtO2Fhn2Y6gryM9amcLpayNNyRPVKz_5N7x5Q55TrNMjtjUs5KHprNXKT1DDp2iqin9buPiAwf6Z-g-UIeeNvUb-MP4KCbFzDFMoIP2QaQ52nu1aTyh8ia6T70uIbbUk2e8EQIHc.QNhwZpfORG8MM9N41R5cybYCvHpBLS1uQ214NNMxe94&dib_tag=se&keywords=aws+sap&qid=1716109001&sprefix=aws+sap%2Caps%2C151&sr=8-2-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1) 
        - Kindle版が画像だったり、mac版のKindleだと出来悪すぎでストレス溜まるし、模擬問題も納得いかない問題が結構あったり（どちらとも解釈とれるような問題があると思う）するので、自分はお勧めしません
    - この記事を見直し
- 得点: 760
- 感想
    - ネットワーク、セキュリティ系は最後まで危なかった。業務で触っていないからいつまで経っても理解が進まない
    - 後半やたらOrganizations系の問題が多かったので、多分それに助けられた
    - C01から廃止されていたサービスが結構あり(SMS, CodeStar, OAIなど)、まぁ更新する価値はあるかなと思った
    - ただ、何度でも思うのはこの資格持っていても業務で役立つかというと微妙。「こんな課題に対して、こんな解決策あるよ」って知識レベルで提案はできるけれど、実際に手を動かすことはこの資格で得た知識だけでは無理。なので、既に手を動かせる知見を持っていて補助的に知識を得たいとか、取るとお金もらえるとかがある人が取るのが良いのかなと。3ヶ月勉強＋3時間の受験時間は結構しんどい損失なので・・（もう更新しなくてもいいかなとちょっと思ってしまった）