DVAメモ！

# ALB
## リスナールールに認証アクションを追加する
リスナールールに認証チェックを追加できる。cognitoユーザー属性などを確認できる。
OIDCを使用してIdPへのログインを要求することもできる。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/listener-authenticate-users.html

## ルーティングルール
クッキーの値などを参照して振り分けができる

## Lambda統合
できる

# Step Functions
## AWS Step Functions Local
ローカルでStep Functionsをテストできる

# cognito
## IDプレフィックス
cognitoのユーザーIDはS3バケットポリシーから動的に参照できる
ユーザーIDごとに自分のディレクトリしかGETできない、とかできる

https://dev.classmethod.jp/articles/cognito-trigger-allow-access-per-identity-id/

# DynamoDB
## DynamoDBストリーム
DynamoDBテーブルの変更をリアルタイムで捕捉し、その情報を時系列で保存する機能

## Time to Live (TTL) 
アイテムに設定された期限レコードを参照し、自動削除する機能

## パーティションキー、ソートキー、GSI、LSI
神記事。

https://qiita.com/shibataka000/items/e3f3792201d6fcc397fd

レコードはパーティションキーに基づいてパーティションされる。ソートキーが存在する場合、ソートキーを参照し並び替えが行われる。
パーティションキー＋ソートキー（あれば）がプライマリキー

GSIはパーティションキー＋ソートキー（あれば）を変更するインデックスを作成する
LSIはソートキー（あれば）を変更するインデックスを作成する

ID(P), name(S), type, created_atのテーブルがあるとして、、、
typeごとにレコードを取得する場合、パーティションキーを変更する必要があるため、GSIを作成する
最新のレコードを取得したい場合、パーティションキーはそのまま、ソートキーをcreated_atに変更する必要があるため、LSIを作成する

## batch系API
複数のテーブルに複数のレコード操作を行うことができる
操作は並列処理されるため、単一レコード以外を操作する場合はこれを使用する

# Amazon Macie
## 概要
S3に保存された機密データの検出ができるサービス。めいしー

## スキャン対象の選択
SensitiveData:S3Object/Personal：個人情報
SensitiveData:S3Object/Financial：支払い情報などの財務情報


# lambda
## イベントソースマッピング
DynamoDBやSQSなどのサービスの変更を、lambdaサービス側から検知してlambdaを実行するサービス
APIGatewayやS3からのトリガー機能は簡易イベントソースマッピングという認識

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-eventsourcemapping.html

## ウォームスタート時に一部処理を使いまわせる
DBへのコネクションの取得などをhandler関数外で実行すると、
ウォームスタート時に、そのコネクションを再利用するような仕様にすることができる

## 非同期呼び出し
関数の実行結果を待たず、実行できたかどうかだけのステータスコードが返却される
イベント駆動だとこの呼び出し方でいいなー

## 非同期呼び出しのdestination機能
失敗時はSQS、SNS、lambda、EventBridgeにメッセージを送信できる

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-async-retain-records.html#invocation-async-destinations

## eventとcontext
ソースイベントの内容はすべてeventオブジェクトにはいっている
リクエストIDやリソースの情報などのAWSリソースの情報はcontextオブジェクトにはいっている

## 同時実行数
アカウントごとに決まっている。デフォで1000件

## 予約済み同時実行数
lambda関数に個別設定する。最大どれだけ同時実行できるか？の設定
特に大事な関数に設定することが想定されている。他の関数がどれだけ実効されていても、予約済み同時実行数だけは必ず実行できるようになる

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-concurrency.html

## CPUリソースの割り当て設定
開発者が任意で設定できるのはメモリ量だけで、CPUリソースは設定できない
メモリ量から自動的に割り振られるので、CPUを強くしたい場合はメモリ量を多めに設定する必要がある

## バージョン間のルーティング比率設定
バージョンを指定してルーティング比率を設定できる
カナリアデプロイとかA/Bテストができる

# EFS
## lambdaからアクセス
できる

# AWS Systems Manager Parameter Store
## 詳細パラメータ機能
ExpirationとExpirationNotificationポリシータイプを設定でき、失効設定とその通知ができる

# AWS Elastic Beanstalk
## 概要
デプロイやホスティング、接続設定などを一気通貫にやってくれるサービス
amplifyの初歩ver

https://qiita.com/yShig/items/2120bba6649321623cad

https://aws.amazon.com/jp/elasticbeanstalk/

## イミュータブルデプロイとBlue/Greenデプロイ
Elastic Beanstalkでは、イミュータブルデプロイとBlue/Greenデプロイの意味がちょっと特殊
イミュータブルデプロイではスケーリンググループを追加し、ALBに紐づけて、検証後に移行する。CodeDeployのBlue/Greenな挙動
Blue/Greenデプロイでは、ALBごと環境を複製し、DNS切り替えで移行させる。めっちゃおおがかり

https://dev.classmethod.jp/articles/elastic-beanstalk-deploy-policy/

## ローリングデプロイ
バッチサイズでローリングするインスタンスの数を指定できる

# cloudfront
## cloudfront関数
簡単なjsを実行できる
キャッシュキーの編集や、ヘッダー操作、URL書き換え、リクエスト承認など

## Lambda@Edge
重めのものやAWS SDKの使用などが必要な場合、こっちを使う

## cloudfront関数とLambda@Edge

https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/edge-functions-choosing.html

## オリジンプロトコルポリシー
ディストリビューション→オリジン間のポリシー

## ビューワープロトコルポリシー
クライアント→ディストリビューション間のポリシー

# AWS KMS
## Encrypt API
データサイズの制限(4KB)がある暗号化API
平文とかの暗号化はこっち

https://qiita.com/kanagi/items/2008aa9f43be26bd2746

## GenerateDataKey API
各ファイルに一意なデータキーを作る
鍵での暗号化はopensslコマンドで実行する

https://qiita.com/mksamba/items/a7e902c6d5a12f2a36dc

# API Gateway
## ステージ変数
ステージごとに設定できるkey:value
マッピングテンプレートなどで参照できる

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/stage-variables.html

## lambda非同期呼び出し
[統合リクエスト] で、静的な値として 'Event' を使用して X-Amz-Invocation-Type ヘッダーを追加でできるらしい
プロキシ統合はサポートされていないので注意

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-integration-async.html

## 統合レイテンシーメトリクス
API Gatewayがバックエンドとの通信にかかったレイテンシー

## レイテンシーメトリクス
API Gatewayがフロントにレスポンスを返却するまでにかかったレイテンシー

## カナリア
ステージに設定することができる
デプロイ時にステージを選択する際、カナリアが設定されたステージを選択すると、A/Bが設定される

# ElastiCache
## キャッシュ戦略
キャッシュするタイミングについての戦略

https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/mem-ug/Strategies.html

## 遅延読み込み
キャッシュにない場合、プライマリにRクエリする
その後、キャッシュにセットする
キャッシュ最低限で良い場合

## 書き込みスルー
プライマリへのCUDクエリ時、常にキャッシュに追加する
MAXでキャッシュしたい場合

## Memcached
並列処理できる点だけredisより勝っている

https://aws.amazon.com/jp/elasticache/redis-vs-memcached/

# SAM
## 概要
サーバーレスアプリケーションモデルの略
CLIでlambda、APIGatewayの管理やローカルテストができる

## 段階的デプロイ
カナリアデプロイなどが利用できる

# CloudFormation
## CAPABILITY_IAM, CAPABILITY_NAMED_IAM
IAMを作成する際は、明示的にテンプレートの中で宣言しないといけない

## --disable-rollbackオプション
ロールバックしないように設定できる。デバッグとかできる

## カスタムリソース
cfnにフックしてlambdaなどのイベント駆動サービスを使用できる

https://qiita.com/deask/items/dd61c66f893ac114252f

# ECR
## 基本イメージスキャン
OS スキャンしてくれる

## 拡張イメージスキャン
OS とプログラミング言語の脆弱性をスキャンしてくれる

# AWS Encryption SDK
## 暗号化の仕様
暗号化したキーも暗号化後の値に合わせて保存する
複合もSDKで行うので、良い感じに処理できる

# AWS Secret Manager
## KMSでの暗号化
できる

https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/security-encryption.html

## クロスリージョンレプリケーション
できる

https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/replicate-secrets.html

## クロスリージョンアクセス
できる

# Parameter Store
## クロスリージョンアクセス
できない

# AWS X-Ray
## 概要
アプリのパフォーマンスを分析してくれるサービス

## X-Rayデーモン
インストールすると自身のX-Rayにデータを送信してくれるツール
オンプレのサーバーやEC2にインストールしたりして使う

## ECSをX-Ray分析できるようにする
1. taskdefを編集し、X-Rayコンテナを作成する。サイドカーコンテナと呼ばれることも
1. SDKを利用して、X-Rayコンテナへ情報を送信する

# S3
## Glacierの取り出し時間
- Glacier Instant Retrieval：即時
- Glacier Flexible Retrieval：迅速（5分未満）、標準（3~5時間）、大容量（5~12時間）
- Glacier Deep Archive：標準（12時間）、大容量バルク（48時間以内）