AWS Developer Associate メモ

:::note warn
※学習用のメモのため、内容が正しくない可能性があります。
:::

## ECS
- タスク配置戦略
    - binpack
        - 利用可能なCPUまたはメモリが最も少ないインスタンスにタスクを配置し、効果的にワークロードを少数のインスタンスに集約→限られたインスタンス数でタスクを実行する。フルまで使い切りたいやつ
- コンテナインスタンスが停止状態で終了された場合、ECSはその状態の変更を監視しないため、クラスターから自動的に登録解除されません
- Task definition
    - コンテナとホストインスタンス間のポートベースの通信を可能にするために設定するコンポーネント
## X-ray
- 分散アプリケーション、特にマイクロサービスアーキテクチャを持つアプリケーションの分析とデバッグに使用される
- Annotations
    - キーと値のペアで、フィルター式で使用するためにインデックス化されており、開発者が自分のコードに関連する特定のデータを記録できるように
    - フィルター式で使用できるインデックス付きのキーと値のペア
- metadata
    - カスタムのメトリクスを含める
    - インデックスされないカスタムデータを保存するために使用
- サブセグメント
    - より細かい分析が可能
    - ダウンストリームコールに関するより詳細なタイミングと依存関係の情報を提供
- EC2インスタンスにX-Rayデーモンをインストールして構成するためにユーザーデータスクリプトを利用
- GetTraceSummaries APIは、フィルター式に基づいてトレースIDとアノテーションを含むトレースサマリーを効率的に取得できる
## SQS 
- 遅延キュー
    - 新しい取引注文のキューへの配信を指定した秒数だけ延期することができます。
    - 設定すると、キューに送信された新しい取引注文は、遅延期間中、プロセッサから見えない状態になります
- MessageDeduplicationIdパラメータを含めることで、Amazon SQS FIFOキューで重複メッセージの処理を最小限に抑える
- メッセージサイズ制限は256 KB
    - これを超えるメッセージを処理するにはAmazon S3とAmazon SQS Extended Client Library for Javaを併用する必要がある
- StartMessageMoveTask
    - デッドキューレターから元のSQLにキューを移動する
## beanstalk
- env.yamlファイルは、環境名、ソリューションスタック、環境リンクを指定するための環境マニフェストで、アプリケーションのソースバンドルのルートに配置する
- Dockerrun.aws.jsonファイルでコンテナの設定を定義
- cron.yamlでタスクスケジュール
- デプロイタイプ
    - Immutable
        - 更新されたバージョンで完全に新しいインスタンスセットを作成し、新しいインスタンスが検証されるまで既存のキャパシティを維持する
    - Rolling with additional batch
    - all at once
        - 切断はあるが、素早くデプロイ（検証環境向き
    - Blue/Green
- .ebextensions
    - カスタム設定ファイルを格納
- 
## Dynamo DB
- projection expression
    - 返却するカラムを指定する
- filter expression
    - 条件に合わせてフィルタリングする
- レート制限のある並列スキャン
    - DynamoDBのパーティショニングと並列処理機能を活用し、ワークロードを複数のパーティションに分散させることで、全体の実行時間を大幅に短縮
- 楽観ロック
    - データに変更を加える前に、最後に読み取られてから変更されていないことを確認する
    - 各アイテムにバージョン番号を割り当てることで、アプリケーションは更新をコミットする前に、最後に取得されてから変更されていないかを確認できます
- 各操作で消費された書き込みキャパシティユニットに関する詳細な情報を提供
    - 書き込み操作でReturnConsumedCapacityパラメータにINDEXESの値を含める
- DynamoDB Streams
    - StreamViewTypeをNEW_IMAGEに設定することで、最近更新されたアイテムの新しいデータのみを追跡
    - StreamViewType "OLD_IMAGE" は、変更前のアイテムの全属性をキャプチャし、更新前の完全なデータを取得可能
- DynamoDB Accelerator (DAX
    - 頻繁にアクセスされるデータをキャッシュすることで大幅なパフォーマンス向上
- インデックス
    - ローカルセカンダリインデックス（LSI）は、同じパーティションキーを維持しながら異なるソートキーを使用
    - GSIは異なるパーティションキーとソートキーを使用
- 1つのRCUが
    - 4 KBまでのアイテムに対して1つの強力な整合性読み取り
    - 2つの結果整合性読み取りをサポート
- 1 WCUは
    - 1秒あたり1KBまでの書き込みを処理
- 条件付き更新と条件付き書き込み
    - 新規登録が現在の登録定員内に収まるかどうかを条件式でチェックすることで、データベースレベルで登録ロジックを強制
- パフォーマンスを向上する低コスト対応
    - Query使用
    - 結果セットサイズを減らす
- ProvisionedThroughputExceededExceptionの原因
    - グローバルセカンダリインデックスに割り当てられた書き込みキャパシティがプライマリテーブルの書き込みキャパシティと比較して不十分
- バッチオペレーション API
    - 最大25個のアイテムに対する読み取り（BatchGetItem）や書き込み（BatchWriteItem）を1回のAPI呼び出しで実行可能
    - ネットワークのラウンドトリップ回数が削減され、アプリケーションのパフォーマンスが向上する
- Time To Live (TTL)機能
    - 各アイテムに有効期限のタイムスタンプを設定することで古いデータを自動的に削除する
- アトミックカウンター
    - 数値属性の無条件のインクリメントを可能にし、同時更新を効率的に処理できる
- グローバルセカンダリインデックスのプロビジョンドWCUは、ベーステーブルのWCU以上に設定する必要がある
- TransactWriteItems操作は、最大25個のアクションを25個の異なるアイテムに対して実行でき、すべての操作が一緒に成功するか失敗するかを保証する
- GSIに対するクエリは結果整合性のみをサポート
- クエリやスキャン時に消費されるキャパシティユニットは、ベーステーブルではなくGSI自体から取得
- レスポンスサイズの制限（16MB）により、UnprocessedKeysが発生する
- エクスポネンシャルバックオフ
    - 連続したリクエスト間の待機時間を徐々に増やすことにより、過度のリクエストによる負荷を軽減
## Step Functions
- Catchフィールドを組み込んでエラーをキャプチャ
- ResultPathは入力データと出力データのマージを可能にする
- InvalidParameterValueException
    - CreateStateMachine APIで指定されたIAMロールをAWS Step Functionsが引き受けられない
- AWS Step Functions Local を使用してモック化されたサービス統合にて、パイプラインをローカルでテストできる
## SAM
- Transformセクションを利用することで、アプリケーションに必要なサーバーレスアーキテクチャを効率的にデプロイおよび管理するためのAWS SAMの機能を活用できます
- Serverless Application Model
- コマンド
    - sam build
        - 依存関係を解決
        - SAMテンプレートで定義されたすべての関数とレイヤーのデプロイメントアーティファクトを作成
    - sam deploy
        - サーバーレスアプリケーションのパッケージング、S3へのアップロード、CloudFormationテンプレートの生成、アプリケーションのデプロイを一括で実行
    - sam publish
        - AWS SAMアプリケーションをAWS Serverless Application Repositoryに公開する
    - sam package
        - アーティファクトのパッケージング、S3へのアップロード、アップロードされたアーティファクトへの参照を含むCloudFormationテンプレートの生成のみを行う
    - sam sync --watch
        - ソースコードに変更があると自動的に検出し、変更された Lambda 関数のみを再デプロイ
    - sam local invoke
        - lambda関数をlocalで実行  1 回限りの呼び出し
    - sam local start lambda 
        - Lambda をエミュレートするローカルエンドポイントを起動
    - sam local start lambda-api
        - API Gatewayを含むRestAPIをローカルでｍ起動
- サーバーレスアプリケーションの開発とデプロイを簡素化するために特別に設計
- リソースタイプ
    - LayerVersion
        - Lambda関数用の再利用可能なコードやライブラリを含むLambdaレイヤーの作成と管理のために設計されている
    - Api
        - サーバーレスアプリケーション内のAPI Gatewayリソースを記述および設定するために主に使用される
    - Application
        - AWS Serverless Application RepositoryやS3バケットからアプリケーションを既存のサーバーレスアーキテクチャに組み込むために使用
## API Gateway
- ステージ変数を使用すると、単一のAPI Gatewayで複数のリリースステージ（DEVELOPMENT、STAGING、UAT、PRODUCTION）を管理し、各ステージに異なるエンドポイントを設定できる
-  API Gatewayのステージ変数は環境変数のように機能
-  統合タイプ
    -  HTTP
        -  バックエンドサービスとの間でカスタムデータ変換とマッピングを行うための柔軟性を提供
    -  LAMBDA_PROXY、AWS_PROXY
        -  Lambdaプロキシ統合に使用
        -  マッピング無しでLambdaと直接やり取り
    -  AWS
        -  Lambda関数を使用したより複雑なセットアップが可能
-  APIキーを使用量プランに関連付けないと、そのキーは機能せず403 Forbiddenエラーが発生する
-  CreateUsagePlanKey操作を使用して、APIキーを特定の使用量プランにリンクすることで、そのキーに適切なアクセス権を付与できる
-  パフォーマンスチューニング
    -  'IntegrationLatency'は、API GatewayがLambda関数にリクエストを中継してから応答を受け取るまでの時間
    -  'Latency'は、API Gatewayがクライアントリクエストを受け取ってから応答を返すまでの全体的な時間
##  Lambda
-  Lambda関数の同時実行制限
    -  デフォルトでリージョンあたりのアカウント全体で1000に設定
    -  予約済み同時実行数を設定すると、個別の関数に対して特定の同時実行数を確保し、上限もその値になる
    -  Lambda関数の同時実行制限が低すぎると、ピーク時にリクエストがスロットリングされる
-  カスタムランタイム
    -  Lambda環境内でサポート外の言語を実行可能
    -  関数の初期化コードの実行方法や呼び出しイベントの処理方法をカスタマイズできる
-  関数の呼び出しタイプを「Event」に設定すると、関数は非同期に実行され、即座に応答を返すため、長時間実行される処理に適している
-  関数の非同期呼び出しは、Amazon S3やAmazon SNSなどのAWSサービスからのイベントソースマッピングと組み合わせて使用することで、効率的な非同期処理パイプラインを構築できる
-  デッドレターキュー
    -  失敗した呼び出しを処理するために設計されており、分析とトラブルシューティングのためにAmazon SQSキューやSNSトピックにリダイレクトする
-  環境変数は、キーと値のペアとして設定でき、関数のコンテキストオブジェクトを通じてコード内からアクセス可能
-  実行コンテキスト
    -  関数の複数の呼び出しにわたって持続する一時的なランタイム環境を提供し、データベース接続などの外部依存関係の初期化を可能にする
-  Lambdaエイリアス
    -  関数の複数のバージョン間でトラフィックを段階的に移行できる
-  /tmpディレクトリ
    -  同じインスタンスの複数の呼び出しにわたってデータを保持できる
    -  キャッシュとして使用可能
    -  最大10,240 MBまで設定可能で、最初の512 MBは無料
-  Amazon S3 Object Lambda
    -  S3バケットからオブジェクトを取得する際に、オンザフライでLambda関数を使用してデータを変換できる機能
-  非同期実行
    -  Invoke APIを使用し、呼び出しタイプリクエストパラメータをEvent
-  デプロイパッケージの最大サイズは50MB（圧縮時）、500MB（解凍時）
##  Cognito
-  アイデンティティプールは主に、AWSサービスに直接アクセスするための一時的なAWS認証情報を提供するために使用
-  ユーザープールは、ユーザー登録、認証、JWTの発行を管理し、API Gatewayの認可者として使用可能
-  Adaptive Authentication
    -  デバイス、場所、ユーザーの行動などの要因に基づいてログイン試行のリスクを動的に評価し、必要に応じてMFAを適用する機能
-  アイデンティティプールは、認証済みおよび未認証ユーザーの両方に一時的なAWS認証情報を提供し、未認証IDのアクセスを有効にできる機能を持つ
    - Amazon Cognito ユーザープール内のユーザー
    - Facebook、Google、Appleなどの外部IDプロバイダーで認証するユーザー
    - 未認証ユーザ
## S3
- クロスリージョンレプリケーション
    - バケットでバージョニングが有効化するひつようがある
- アイデンティティプール
    - 認証されたユーザーに対してAWSリソース（S3バケットなど）へのアクセスを許可する一時的な認証情報を発行する
- x-amz-server-side-encryptionヘッダー
    - バケットにアップロードされるすべてのオブジェクトに対して暗号化を強制
## Code Deploy
- Blue/Greenデプロイメント
    - 完全に別の環境を作成し、全てのトラフィックを一度に切り替える
- All-at-onceデプロイメント
    - 即座に全てのトラフィックを新バージョンにシフトする
- Linear
    - 一連の間隔で均等な増分でトラフィックを徐々に移行
    - 負荷を徐々に上げたいときに使用
- Canary
    - 最初に指定した割合（例：15%）のトラフィックを新バージョンにルーティングし、指定した時間（例：10分）後に残りのトラフィックをシフト
    - 動作確認したいときに使用
- EC2インスタンス、オンプレミスサーバー、Lambda、ECSにデプロイ可能で、特にEC2とオンプレミスサーバーへの同時デプロイをサポートしている
- Lambdaへのデプロイメントでは、CodeDeployはBlue/Greenデプロイメントのみをサポート
- appspec.ymlでアプリケーションのデプロイを一連のライフサイクルイベントフックを通じて管理
- デプロイ対象サービス
    - Amazon EC2/オンプレミスインスタンス
        - 従来のサーバーベースアプリケーション向け
        - インプレースデプロイとブルー/グリーンデプロイの両方をサポート
    - AWS Lambda
        - サーバーレス関数のデプロイをサポート
        - 新しいバージョンの関数を段階的にトラフィック移行可能
        - カナリアデプロイ戦略を使用して小さな割合のトラフィックに新バージョンをデプロイ可
    - Amazon ECS（Elastic Container Service）
        - コンテナ化されたアプリケーションをタスクセットとしてデプロイ
        - ブルー/グリーンデプロイ方式でのみサポート
        - EC2とFargateの両方の起動タイプをサポート
- ローカルからデプロイする場合はS３経由のみOK
## KMS
- GenerateDataKeyWithoutPlaintext
    - カスタマーマスターキー（CMK）で暗号化された一意のデータキーを生成しますが、平文のデータキーは返しません
    - 即時暗号化するなら平文も出力する。後ほど別プロセスで暗号化するならWithoutでその都度Decryptを実行する必要がある
- GenerateDataKey
    - 平文と暗号化の両方のデータキーのコピーを提供する
    - プレーンテキストと暗号化された両方のバージョンのデータキーを返し、プレーンテキストキーを使用してローカルでデータを暗号化
    - エンベロープ暗号化のベストプラクティスとして、使用後にプレーンテキストのデータキーをメモリから削除し、暗号化されたデータキーのみを暗号化されたデータと一緒に保存する
- 以前に無効化されたキーを再アクティブ化できるが、削除されたキーは復元不可能であり、30日間の待機期間後に完全に削除される
- 対称キーと非対称キーの両方のKMSキーを生成
- 自動ローテーション
    - AWS KMSが直接管理する対称KMSキーに対してのみ利用可
- 対称キーと非対称キーの両方のKMSキーの生成をサポート
- APIのコール数制限あり
## CloudWatch
- 追加の設定なしでは、メモリ使用率を自動的にモニタリングしません
- CPU使用率はデフォルトメトリクスに含まれる
- カスタムネームスペースを使用して、各取引プラットフォーム固有のメトリクスを分離し、監視の明確さと正確性を確保できる
- Evaluation Period
    - アラーム状態を評価する最近の期間数を指定
- Datapoints to Alarm
    - アラームをトリガーするためにしきい値を超える必要があるデータポイントの数を指定する
## IAM
- 実行ロール
    - 、AWS内のリソースやエンティティ（EC2インスタンス、Lambda関数など）が他のAWSリソースとやり取りするために必要な権限セット
- リソースポリシー
    - S3バケットやSNSトピックなどのリソースに直接添付され、どのプリンシパル（AWSユーザー、アカウント、サービス）がそのリソースにアクセスできるかを指定
## Systems Manager 
- Parameter Store
    - 動的な値（AMI IDなど）を保持でき、CloudFormationテンプレート内で直接参照可能
    - 暗号化キーとかも保持する
## Kinesis Data Streams
- デフォルトのデータ保持期間は24時間であり、この期間を過ぎるとデータにアクセスできなくなる
    - 最小24時間から最大365日まで設定可能
## CloudFront
- オリジングループ機能を使用して、プライマリオリジンが失敗した場合に自動的にセカンダリオリジンに切り替わるフェイルオーバーメカニズムを設定できる
- HTTP 504エラーが発生する場合、オリジンサーバーの応答時間が長すぎることが原因であり、オリジングループを使用してバックアップオリジンを設定することで解決できる
- Cloud Front関数はリクエストの改変やコンテンツのカスタマイズに特化、複雑なことはできない
## RDS
- Amazon RDS for OracleでTransparent Data Encryption (TDE)を有効にすると、アプリケーションコードを変更せずにデータを自動的に暗号化・復号化できる
- RDS Proxy
    - ウォームな接続のプールを維持し、Lambda関数が毎回新しい接続を作成するのではなく、既存の接続を再利用できるようにします
- ElastiCache for Redies クラスタモード
    - 高可用性、暗号化、スケーラビリティを提供
- ElastiCache for Memcached
    - 高速かつスケーラブルな分散キャッシュサービスを提供, 高機能ではないシンプルなキャッシュ
## Cloud Formation
- cfn-initルパースクリプト
    - EC2インスタンス上でリソースメタデータの取得と解釈、パッケージのインストール、ファイルの作成、サービスの開始を行うように特別に設計
- CAPABILITY_NAMED_IAM
    - AWS CloudFormation を使用してカスタム名の IAM リソースを含むスタックをデプロイする場合必要
- disable rollback
    - 失敗したとしてもすでにプロビジョニング済みのリソースは削除しない
## CDK
- IaCをプログラミングコードで実現
- cdk synth
    - Cloud Formation定義が出力される
- cdk bootstrap
    - CDKが利用するリソース群をCloudFormationスタックとしてデプロイ
- cdk deploy
    - CloudFormationを媒介にインフラ構築
## Code Build
- buildspec.yml
    - ファイルのproxy要素で、HTTP_PROXYとHTTPS_PROXYの環境変数を設定し、プロキシサーバーのURLを指定する
##  Systems Manager Parameter Store
- アドバンストティアでは、NoChangeNotificationポリシーを設定して、パラメータが指定期間更新されていない場合にイベントを生成できる



# 特に復習が必要
- X-Ray
- Code Deploy