新しいLambdaコードをプッシュしながら、安定した呼び出しターゲットを維持します。
番号付きの不変のバージョンを公開し、バージョンを指すエイリアスを公開します。呼び出し元はエイリアスARNを呼び出します。
理由: バージョンはコードと設定の凍結されたスナップショットであり、エイリアスは間接参照を提供するため、呼び出し元は`$LATEST`を直接呼び出すことはありません。
AWS Certified Developer Associate
最終確認:2026年5月
DVA-C02 試験で問われるアーキテクチャパターンのスキャン可能なリファレンス。上から順に読むか、セクションへジャンプ。
新しいLambdaコードをプッシュしながら、安定した呼び出しターゲットを維持します。
番号付きの不変のバージョンを公開し、バージョンを指すエイリアスを公開します。呼び出し元はエイリアスARNを呼び出します。
理由: バージョンはコードと設定の凍結されたスナップショットであり、エイリアスは間接参照を提供するため、呼び出し元は`$LATEST`を直接呼び出すことはありません。
エラー時に自動ロールバックする新しいLambdaバージョンの段階的なロールアウト。
重み付けされたバージョンルーティング(例:90/10)を持つエイリアス。CodeDeploy `LambdaCanary10Percent5Minutes` または `LambdaLinear*` がトラフィックをシフトし、CloudWatchアラームを監視します。
理由: 組み込みのトラフィックシフトとアラーム駆動のロールバックにより、手書きのカナリアロジックが不要になります。
再デプロイなしで設定(DB URL、機能フラグ)を注入します。
Lambda環境変数。保存時にKMSで暗号化され、取得時には追加の転送中の暗号化のためにカスタムCMKを参照します。
多くのLambda間でNumPy / pandas / 共通ランタイムを共有します。
Lambdaレイヤーとしてパッケージ化します。関数ごとに最大5つのレイヤー、合計250 MB(解凍済み)。レイヤーごとにバージョン付きARNを使用します。
レイテンシに敏感な同期Lambda — コールドスタートは許可されません。
エイリアス上でProvisioned Concurrencyを有効にします。N個の実行環境を事前に初期化し、GB秒単位で課金されます。
理由: 予測可能なコストでコールドスタートを排除します。エイリアスでアプリケーションのオートスケーリングを設定し、負荷に合わせて柔軟に対応します。
初期化コードが重いJavaまたはPython Lambda。Provisioned Concurrencyの料金を支払うことなく高速なコールドスタートが必要です。
公開されたバージョンでSnapStartを有効にします。AWSは初期化されたランタイムのスナップショットを作成し、そこから再開します。
理由: Javaの場合は無料です。Python/.NETの場合はリストアごとに課金されます。アイドルコストなしでコールドスタートを数秒から1秒未満に短縮します。
LambdaがKinesisストリーム / DynamoDBストリーム / SQSキュー / MSKトピックを消費する必要があります。
イベントソースマッピング(プルベース)。Lambdaがポーリングします。バッチサイズと最大バッチウィンドウでスループットとレイテンシを調整します。失敗時はOn-Failure宛先を介してDLQに送られます。
理由: プルソースの場合、サービスはLambdaを直接呼び出すことができません。マッピングはLambdaのポーリングアダプタとして機能します。
Lambda DLQなしでの非同期Lambdaの成功/失敗ルーティング。
関数のOnSuccess / OnFailure宛先。ターゲットはSNS、SQS、EventBridge、別のLambdaです。呼び出しコンテキストが含まれます。
理由: 宛先はイベントと応答全体をキャプチャしますが、レガシーなDLQはイベントペイロードのみをキャプチャします。
新しいREST APIのAPI Gatewayタイプを選択します。
HTTP API:より安価、高速、JWT認証が組み込み、よりシンプル。REST API:フル機能(マッピングテンプレート、リクエストバリデーター、WAF、プライベートエンドポイント、X-Ray、APIキャッシング)。
理由: REST専用機能が必要ない限り、デフォルトでHTTP APIを使用します。WebSocket APIはステートフルなリアルタイム通信のための別の製品です。
個別のAPIを再デプロイすることなく、dev → test → prodへとAPI変更を昇格させます。
単一のAPI上のステージ。ステージをデプロイして公開します。ステージ変数にはLambdaエイリアス名のような環境固有の値が保持されます。
バックエンドLambdaがクライアントから送信されるものとは異なる形式を期待しています。
リクエスト/レスポンスマッピングテンプレート(REST APIのみ)。VTLを`$input`、`$context`、`$util`と共に使用してJSONを変換します。
理由: マッピングテンプレートはAPI Gateway内で実行されます。追加のLambdaホップがなく、余分なレイテンシやコストもかかりません。
リクエストをルーティングする前にカスタムトークン(CognitoやIAMではない)を検証します。
Lambdaオーソライザー。TOKENタイプはヘッダーを読み取り、REQUESTタイプは完全なリクエストコンテキストを読み取ります。IAMポリシーとprincipalIdを返します。TTLのためにIDごとにキャッシュされます。
すべてのリクエストでCognito User Pool JWTを検証します。
Cognito User Poolオーソライザー(REST)またはJWTオーソライザー(HTTP)。API Gatewayがトークンを検証するため、Lambdaは必要ありません。
理由: 一般的なJWTの場合、ネイティブ検証はLambdaオーソライザーよりも安価で高速です。
パートナーAPIコンシューマーにスロットリング/クォータを設定します。
使用量プラン + APIキー。プランは、レート制限(リクエスト/秒)+バースト+クォータ(リクエスト/日または月)を使用してキーをステージに紐付けます。
繰り返されるGETリクエストのバックエンド負荷を軽減します。
ステージレベルのキャッシュ(REST API)。TTLは設定可能で、キャッシュキーはメソッド + パス + 選択されたクエリ/ヘッダーパラメータから導出されます。
特定の事前条件(例:status == "PENDING")が満たされている場合にのみアイテムを更新します。
`ConditionExpression` を使用したPutItem/UpdateItem。失敗すると`ConditionalCheckFailedException`が発生します。
理由: サーバーサイドチェックにより、ロックなしで読み取り-変更-書き込みの競合を回避します。
複数のDynamoDBアイテムに対するオール・オア・ナッシングの操作。
`TransactWriteItems` / `TransactGetItems`。最大100アイテム / 4 MB。通常の書き込み/読み取りのWCU/RCUコストの2倍です。
読み取り-変更-書き込みなしでカウンターをインクリメントします。
UpdateExpression `ADD count :inc` を使用します。サーバーが差分をアトミックに適用します。
大規模なクエリ/スキャン結果セットを反復処理します。
応答からの`LastEvaluatedKey`を次の呼び出しの`ExclusiveStartKey`として使用し、なくなるまで繰り返します。`Limit`パラメータで制限を設定します。
プライマリキー以外の追加のアクセスパターンが必要です。
GSI:代替パーティション + ソートキー、結果整合性、個別の容量、いつでも追加可能。LSI:同じパーティションキー、代替ソートキー、強力な整合性オプション、テーブル作成時に作成する必要があります。
特定の属性を持つアイテムのみをインデックス化します(例:ACTIVEな注文のみ)。
スパースインデックス:除外したいアイテムの属性を省略します。インデックス化された属性を持たないアイテムはGSI/LSIに表示されません。
多数のアイテムを一括で読み書きします。
`BatchGetItem`(最大100アイテム / 16 MB)と`BatchWriteItem`(最大25アイテム / 16 MB)。アトミックではありません。部分的な失敗は`UnprocessedItems`で返されます。
並行する書き込みによる更新の消失を防ぎます。
バージョン属性 + `ConditionExpression: version = :v`。失敗した書き込みは再読み込みして再試行します。
DynamoDBの変更ごとにダウンストリームアクションをトリガーします。
DynamoDB Streams + Lambdaイベントソースマッピング。ストリームビュー:NEW_IMAGE / OLD_IMAGE / NEW_AND_OLD_IMAGES / KEYS_ONLY。
ブラウザがサーバーを介さずにS3に直接アップロード/ダウンロードします。
GETまたはPUTのためのSDK `getSignedUrl`。IAMユーザー(sigv4)によって署名された場合、有効期限は最大7日です。ロールから派生したセッションの場合は短くなります。
理由: バックエンドからの帯域幅をオフロードします。URLは単一のオブジェクトとメソッドにスコープされた一時的な機能です。
SDKから大きなファイル(100MB以上)を確実にアップロードします。
`CreateMultipartUpload` → 並行`UploadPart` → `CompleteMultipartUpload`。SDKのハイレベル転送マネージャーがパートのサイズ設定を自動的に処理します。
理由: 5GBを超える場合に必須です。100MB以上の場合に推奨されます。失敗したパートは独立して再アップロードされます。未完了のマルチパートを中止するライフサイクルを設定してストレージを再利用します。
S3でオブジェクトが作成/削除されたときにコードを実行します。
S3イベント通知 → Lambda / SNS / SQS / EventBridge。プレフィックスとサフィックスでフィルタリングします。
ブラウザアプリがオリジンを超えてS3からフェッチする際(`fetch('https://bucket.s3...')`)、CORSプリフライトが失敗します。
バケットのCORSルールを設定します:許可されるオリジン、メソッド(GET/PUT)、ヘッダー、および公開されるヘッダー。
50GBのCSV/JSON/Parquetオブジェクトをダウンロードせずに、行をフィルタリングします。
SQLを使用したS3 Select。一致する行のみを返し、スキャンと返されたバイトに対して課金されます。
パスワードを送信せずに、公開モバイル/ウェブクライアントからユーザーをサインインさせます。
`USER_SRP_AUTH`フローを持つCognito User Pool。クライアントがSRPプルーフを計算し、バックエンドはパスワードを見ることはありません。ID + アクセス + リフレッシュトークンを返します。
フェデレーションユーザー(Google/Apple/Cognito UP)がモバイルアプリから直接AWS APIを呼び出すために一時的なAWS認証情報が必要です。
Cognito Identity Pool。IDプロバイダーのトークンをIAMロールに交換し、STSを介して一時的なAWS認証情報を取得します。
理由: User Poolsはユーザーを認証し、Identity PoolsはAWSリソースへのアクセスを許可します。
Step Functionsのワークフロータイプを選択します。
Standard:長期間実行(1年以内)、exactly-once、1,000トランジションあたり$0.025、完全な履歴。Express:5分以内、at-least-onceまたはat-most-once、リクエスト+期間ごとに課金されます。大容量のETL/ストリーミング向け。
ワークフローステップが失敗した場合、バックオフ付きで再試行し、リカバリスステートにルーティングしたい。
`Retry`配列(状態ごと、`BackoffRate` + `MaxAttempts`付き)と、最終的な失敗ルーティングのための`Catch`。`ErrorEquals`(例:`States.TaskFailed`、カスタムエラー名)で一致させます。
配列内の各アイテムに同じワークフローを並行処理制限付きで適用します。
`ItemsPath`と`MaxConcurrency`を持つMapステート。分散MapはS3をバックエンドとする入力で1万以上のアイテムを処理します。
Cronスケジュールまたは一致する受信イベントのいずれかでLambdaをトリガーします。
EventBridgeルール。スケジュール:`rate(...)`または`cron(...)`。パターン:JSONイベントフィルタ。ソース、detail-type、詳細フィールドで一致させます。
SQS / Kinesis / DynamoDB Streams / MSKからのイベントを、オプションのフィルタと変換を適用してターゲットにルーティングします。
EventBridge Pipes。ソース → フィルタ → エンリッチメント(Lambda/Step Functions) → ターゲット。シンプルなケースではLambdaは不要です。
お客様ごとにメッセージを厳密に順序立てて処理し、重複排除を行います。
SQS FIFOキュー。`MessageGroupId`は順序付けをパーティション化し(グループごとの並列処理)、`MessageDeduplicationId`(またはコンテンツベースの重複排除)は5分以内の重複を削除します。
コンシューマーがメッセージをプルするも、削除前にクラッシュします。
VisibilityTimeout秒間メッセージが非表示になり、その後再配信のために再表示されます。最長の予想処理時間+バッファに合わせて調整します。
理由: 短すぎると重複処理が発生します。長すぎるとクラッシュ時のリカバリが遅くなります。必要に応じて`ChangeMessageVisibility`で処理中の時間を延長します。
1つのイベントを複数のコンシューマー(Lambda / SQSキュー / HTTPエンドポイント)に届けたい。
複数のサブスクライバーを持つSNSトピック。サブスクリプションフィルタポリシーは、サブスクライバーごとに一致するメッセージのみをルーティングします。
書き込みスループットのためにKinesis Data Streamsの容量を調整します。
各シャードは入力1 MB/秒または1,000レコード/秒、出力2 MB/秒です。シャードを追加(分割)するか、オートスケーリングのためにオンデマンドモードを使用します。
EC2 / ECSタスク / Lambda上のコードがAWSアクセスを必要とする — 埋め込みキーなしで。
インスタンスプロファイル(EC2)またはタスク/実行ロール(ECS/Lambda)を介してIAMロールをアタッチします。SDKはメタデータサービスから一時的な認証情報を取得し、自動でローテーションします。
アプリケーションコードまたはCLIからのクロスアカウントアクセス。
呼び出し元プリンシパルからの`sts:AssumeRole`。ターゲットロールの信頼ポリシーには、呼び出し元が`Principal`としてリストされます。一時的な認証情報(最大12時間)を返します。
クロスアカウントのAssumeRoleが失敗する — 権限は正しく見えるのに。
両方が設定されている必要があります:ターゲットロールの信頼ポリシーが呼び出し元をPrincipalとしてリストし、呼び出し元のIDポリシーがターゲットロールARNに対する`sts:AssumeRole`を許可していること。
理由: 信頼ポリシー = 誰がロールを引き受けることができるか。権限ポリシー = ロールを引き受けた後に何ができるか。どちらか一方が欠けているとAccessDeniedになります。
ユーザーがS3の自分のフォルダにのみアクセスを許可するポリシー。
リソースARNで`${aws:username}`または`${aws:PrincipalTag/X}`を使用します:`arn:aws:s3:::bucket/${aws:username}/*`。
チームにIAMロールの自己管理を許可するが、付与できる権限を制限する。
チームの作成者ロールに権限境界ポリシーを設定します。境界を持つロールが作成された場合、そのロールの実効権限はIDポリシーと境界の交差になります。
送信元IP / VPC / リージョン / MFAによってアクションを制限します。
ポリシーの`Condition`:`aws:SourceIp`、`aws:SourceVpc`、`aws:SourceVpce`、`aws:RequestedRegion`、`aws:MultiFactorAuthPresent`。
SPA / モバイルクライアントとCognitoを呼び出すサーバーサイドサービス。
公開クライアント(SPA、モバイル) → シークレットなしのアプリクライアント。機密クライアント(サーバー) → シークレット付きのアプリクライアント。クライアントは`SECRET_HASH`(ユーザー名 + クライアントIDのHMAC)を含める必要があります。
Cognito IDトークンとアクセストークン、リフレッシュトークンを区別します。
ID = ユーザーIDクレーム(クライアントで消費)。Access = API用のスコープ付き認可。Refresh = 新しいID/アクセストークンを取得。Refresh以外はすべてJWTです。
フォームを作成せずに、すぐに使えるサインイン/サインアップUI。
Cognito Hosted UI。OAuth2認可コードフロー:`/oauth2/authorize`にリダイレクト → `code`を含むコールバックURL → `/oauth2/token`で交換。
小さなシークレット(4KB以下)をKMSで直接暗号化します。
`kms:Encrypt`はキーARNを含む暗号文blobを返します。呼び出し元に権限があり、指定されていれば`EncryptionContext`が一致する場合、`kms:Decrypt`は平文を復元します。
4KBの直接暗号化制限に達することなく、KMSで大規模データを暗号化します。
エンベロープ暗号化。`GenerateDataKey`は平文 + 暗号化されたDEKを返します。DEKでデータをローカルで暗号化し、暗号化されたDEKをデータと一緒に保存し、平文のDEKは破棄します。
理由: KMSは小さなDEKにアクセス制御を適用し、大量の暗号化はローカルで高速に実行されます。
キーポリシーを編集せずに、別のプリンシパルにCMKへの時間制限付きアクセスを付与します。
操作とグラント先をスコープする`kms:CreateGrant`グラントを作成します。`RetireGrant`で取り消します。
基盤となるCMKがコード変更なしでローテーションできるように、KMSキーを間接的に参照します。
`alias/my-key`(または`arn:aws:kms:region:acct:alias/my-key`)を使用します。エイリアスを新しいCMKを指すように更新すると、コンシューマーは引き続き機能します。
認証情報ストアを選択します。
Secrets Manager:組み込みのローテーション、ネイティブなRDS/Redshift/DocumentDB統合、1シークレットあたり月額$0.40。Parameter Store SecureString:無料枠(Standard)、組み込みのローテーションなし、階層化された`/app/env/key`パス。
RDS認証情報を自動的にローテーションします。
Aurora/RDS/DocumentDB/RedshiftのためのSecrets Managerネイティブローテーション(マネージドLambda)。マスター/ユーザーパターンは、ユーザーシークレットをローテーションするために別のマスターシークレットを使用します。
KMS暗号化を使用して、Parameter Storeに設定値をSecureStringとして保存します。
SecureStringパラメータタイプ。カスタムCMKには`--key-id`を指定します。指定しない場合は`aws/ssm`を使用します。復号化にはCMKに対する`kms:Decrypt`が必要です。
CloudFrontへのアクセスを認証されたユーザーに制限します。
署名付きURL(単一リソース)または署名付きCookie(複数リソース、SPA/ストリーミング)。CloudFrontキーグループに公開キーとして保存されたCloudFrontキーペアで署名します。
S3サーバーサイド暗号化を選択します。
SSE-S3(マネージドAES-256、デフォルト)、SSE-KMS(CMK、CloudTrail経由で監査、キーポリシー)、SSE-C(顧客提供キー、自己管理)、DSSE-KMS(高コンプライアンス向けの二重レイヤー)。
アカウント外へのアクセスを許可している、または過剰な権限を持つロール/ポリシーを見つけます。
IAM Access Analyzer。外部アクセスに関する検出結果。最小特権の適切なサイジングのためにCloudTrail履歴からポリシーを生成します。
Lambda環境変数に機密性の高い値が含まれています。
Lambdaは環境変数をデフォルトでKMSにより保存時に暗号化します。転送中/復号化時の制御のために、カスタムCMKを設定し、コンソールの暗号化ヘルパーを使用して事前に暗号化された暗号文を送信します。
`Authorization`ヘッダーを持つブラウザ → API Gatewayのリクエストがプリフライトによってブロックされます。
OPTIONSメソッド(モック統合)を追加します。`Access-Control-Allow-Headers`で`Authorization`を許可し、`Access-Control-Allow-Origin`で呼び出し元を許可します。
SDK以外のコードからAWSサービスへのカスタムHTTPリクエストに署名します。
Sigv4:シークレット + 日付 + リージョン + サービスから署名キーを導出し、リクエストを正規化し、署名し、`Authorization`、`X-Amz-Date`、`X-Amz-Security-Token`ヘッダーを追加します。
広範なロールを引き受けるが、特定のセッションのためにスコープを絞り込みます。
`Policy`(インラインセッションポリシー)付きの`AssumeRole`は、実効権限をさらに制限します:ロールとセッションポリシーの交差部分。
IAMポリシーで許可されているのに、S3へのアクセスが拒否されます。
バケットポリシーとアイデンティティポリシーの両方が評価されます。どこかに明示的な拒否があればそれが優先されます。パブリックアクセスブロック設定も許可を上書きする可能性があります。
CI/CDパイプラインを構築します:ソース → ビルド → テスト → 手動による本番承認付きのデプロイ。
CodePipelineステージ。各ステージには1つ以上のアクションがあります。テストとデプロイの間に手動承認アクションを設定します。ソースはCodeCommit / GitHub / S3 / ECRです。
CodeBuildのビルドステップを定義します。
リポジトリルートに`buildspec.yml`。フェーズ:`install`、`pre_build`、`build`、`post_build`。出力:`artifacts.files`、`cache.paths`。環境変数は`env.variables`またはParameter Store/Secrets Managerの参照を介して設定します。
Lambdaトラフィックを10%から100%にシフトし、アラームで自動ロールバックします。
CodeDeployで`LambdaCanary10Percent5Minutes` / `10Percent10Minutes` / `10Percent15Minutes` / `10Percent30Minutes`を使用します。デプロイグループでCloudWatchアラームを設定します。
Lambdaを均等な増分で段階的にロールアウトします。
`LambdaLinear10PercentEvery1Minute` / `2Minutes` / `3Minutes` / `10Minutes`。各増分で10%ずつシフトし、100%になるまで続けます。
ALBの背後にあるECSサービスのBlue/Greenデプロイ。
CodeDeploy Compute Platform = ECS。グリーンタスクセットを作成し、ALBはリスナーをグリーンターゲットグループにシフトします。トラフィック切り替え前とブルーターミネート前にオプションの手動承認を設定できます。
フリート全体のダウンタイムなしでEC2フリートを更新します。
`OneAtATime` / `HalfAtATime` / `AllAtOnce`設定を使用したインプレースデプロイ。Auto Scaling Groupフックはデプロイ中に新しいインスタンスの起動を一時停止します。
IAM制御アクセスでAWS内にGitリポジトリをホストします。
CodeCommit。認証:IAMユーザーごとのSSHキー、IAMユーザーごとのHTTPS Git認証情報、またはAWS CLI認証ヘルパー。プッシュ時にSNS / Lambdaを介してトリガーされます。
サーバーレスアプリのためのIaCツールを選択します。
CDK:プログラミング言語(TS/Python/Java/Go/.NET)、完全なアプリ構築、複数リソースパターン。SAM:CFNのYAML拡張、サーバーレスに特化、よりシンプル。どちらもCloudFormationにコンパイルされます。
最小限のYAMLでLambda + API Gateway + DynamoDBスタックを定義します。
`Transform: AWS::Serverless-2016-10-31`。リソース:`AWS::Serverless::Function`、`Api`、`SimpleTable`。`sam build` → `sam deploy --guided`。
CDKコード構造を作成します。
`App`は1つ以上の`Stack`を含みます。各Stackにはコンストラクト(L1/L2/L3)が含まれます。`cdk synth` → CFNテンプレート。`cdk deploy`はCFNを介してデプロイします。
CDKコンストラクトレベルを選択します。
L1 = 生のCFN(`CfnXxx`)。L2 = 安全なデフォルトを備えた厳選されたラッパー(最も一般的)。L3 = 完全なアーキテクチャのために複数のリソースを組み合わせたパターン(例:`LambdaRestApi`)。
CloudFormationスタックに適用する前に変更をプレビューします。
`create-change-set` → 追加/変更/置換のJSONを確認 → `execute-change-set`。置換アクションはリソースの再作成を引き起こします。
スタックの更新が途中で失敗します。
`DisableRollback`がtrueでない限り、CloudFormationは自動的にロールバックします。`UPDATE_ROLLBACK_FAILED`でスタックが動かなくなった場合は、`ResourcesToSkip`を指定して`ContinueUpdateRollback`を使用します。
スタック更新中に、重要なリソース(例:RDS DB)の意図しない更新を防ぎます。
スタックポリシー:リソースの論理IDに対する`Update:Replace`および`Update:Delete`を拒否するJSON。特定の更新で明示的なオーバーライドを使用してバイパスします。
複数のスタック間でインフラストラクチャを再利用します。
`TemplateURL`を持つネストされたスタック(`AWS::CloudFormation::Stack`)は、1つの親が所有する再利用用です。Outputs + `Fn::ImportValue`を介したクロススタックは、個別のスタック間のより密接な結合に使用されます。
Parameter Storeの値またはSecrets ManagerのシークレットをCFNテンプレートに注入します。
`{{resolve:ssm:/path/to/param}}`、`{{resolve:ssm-secure:/path}}`、`{{resolve:secretsmanager:secret-id:SecretString:json-key}}`。デプロイ時に解決されます。
Elastic Beanstalkのデプロイポリシーを選択します。
All-at-once(最速、ダウンタイムあり)、Rolling(追加インスタンスなし、部分的容量)、Rolling with additional batch(容量損失なし、追加コスト)、Immutable(新しいASG、最も安全)、Blue/Green(別環境、CNAMEをスワップ)。
Elastic Beanstalk環境(パッケージ、ファイル、コンテナコマンド)をカスタマイズします。
ソースバンドル内の`.ebextensions/*.config` YAML。新しいプラットフォーム:`.platform/hooks/...`シェルスクリプトでprebuild/predeploy/postdeployライフサイクルを実行します。
安定した、決して変更されないLambdaアーティファクトが必要です。
番号付きバージョンを公開します。コードとほとんどの設定(メモリ、タイムアウト、環境変数、レイヤー)は固定されます。`$LATEST`は変更可能ですが、番号付きバージョンは変更できません。
ECS / EKS / Lambda用にDockerイメージをECRにプッシュします。
`aws ecr get-login-password | docker login` → `docker tag` → `docker push`。Lambdaコンテナイメージ:デプロイ時に一度プルされます。タグ付けされたイメージは同じリージョンにある必要があります。
ECSで一度限りのバッチを実行するか、長期間実行するウェブサービスを実行するか。
RunTask = 単一タスク、完了して終了します。Service = N個の必要なタスクを維持し、失敗を再起動し、ALB/NLBと統合します。
フォールトトレラントなECSワークロードのコンピューティングコストを削減します。
Fargate Spot容量プロバイダー。重みとベースを介して通常のFargateと組み合わせます。タスクは2分間の警告で中断される可能性があります。
Lambda → DynamoDB → 外部HTTPに分散するリクエストをトレースします。
サービスホップごとにX-Rayセグメント、ダウンストリーム呼び出しにはサブセグメントを使用します。サービスマップはトポロジーとレイテンシを可視化します。サンプリングルールはボリュームを制限します。
検索可能なデータと参照データをX-Rayトレースにアタッチします。
アノテーション:コンソールでインデックス化され、フィルタリング可能(例:`customerId`、`tier`)。メタデータ:インデックス化されず、自由形式(デバッグ用のリクエストボディ、レスポンスボディ)。
本番環境でX-Rayのコストが高い。
カスタムサンプリングルール。デフォルト:最初の1リクエスト/秒 + 追加の5%。ルールはサービス / URLパス / メソッドで一致します。
過去1時間のLambdaログをエラーについてクエリし、5分間隔でグループ化します。
CloudWatch Logs Insights:`fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(5m)`。
ログパターン(例:`OutOfMemoryError`のカウント)からカスタムメトリックを生成します。
ロググループのメトリックフィルタ。パターンはログイベントに一致し、フィルタはアラームを設定できるカスタムCloudWatchメトリックを作成します。
別の`PutMetricData` API呼び出しなしでLambdaからカスタムメトリックを発行します。
Embedded Metric Format:構造化されたJSONを標準出力に書き込みます。CloudWatchはログを解析し、メトリックを作成します。より安価で非同期です。
理由: メトリックパスをリクエストパスから分離します。APIレイテンシや追加のIAM権限は不要です。
アプリが毎秒高解像度のカスタムメトリックを発行します。
`StorageResolution=1`を指定した`PutMetricData`で1秒間隔の粒度を実現します。標準解像度は60秒で、高解像度はコストが高くなります。
Lambdaのコールドスタートがp99のレイテンシターゲットに影響を与えます。
予測可能な負荷にはProvisioned Concurrency。Java/Pythonの初期化コードが重い場合はSnapStart。依存関係をスリム化し、ARM/Gravitonを使用し、重い初期化処理はハンドラーの外に出します。
最適なコスト/レイテンシのためにLambdaメモリを選択します。
メモリはCPUとネットワークもスケールします。AWS Lambda Power Tuningステートマシンを使用してメモリをスイープし、ワークロードに最適なスイートスポットを見つけます。
長いLambda呼び出しが15分間のハードリミットに達します。
Step Functionsに分解するか、Fargate(長時間実行)またはBatch(HPC)にオフロードします。Lambdaの最大は900秒であり、交渉の余地はありません。
Lambdaからの`TooManyRequestsException`。同時実行制限に達しました。
関数ごとに予約済み同時実行を設定(制限と予約)するか、アカウントレベルの制限の引き上げをリクエストします。非同期呼び出しはキューに入れられ再試行されます。同期呼び出しはエラーになります。
DynamoDBが`ProvisionedThroughputExceededException`を返します。
CloudWatch `WriteThrottleEvents` / `ReadThrottleEvents`。オンデマンドモードに切り替えるか、プロビジョニング済み容量を増やすか、またはより良いキー設計でホットパーティションを修正します。
1つのパーティションキーに不均衡なトラフィックが集中し、全体的な負荷が低いにもかかわらずスロットリングが発生します。
カーディナリティの高いパーティションキーで再設計します。書き込みの場合:ランダムなシャードでプレフィックスを付ける(例:`shard#user`)。読み込みの場合:シャード全体に分散して取得します。
アプリロジックを変更せずに、マイクロ秒単位のDynamoDB読み取りレイテンシが必要です。
DAXクラスター + DynamoDB SDKのドロップインとしてDAX SDK。読み取りはインメモリキャッシュから提供され、書き込みはテーブルにライトスルーされます。
ElastiCache / DAXのキャッシング戦略を選択します。
Lazy loading(キャッシュミス → DB → キャッシュを更新):リクエストされたデータのみをキャッシュしますが、古くなる可能性あり。Write-through(すべての書き込み時にキャッシュ + DBに書き込み):常に最新ですが、書き込みに追加コスト。どちらの方法でもTTLが古さを制限します。
API Gatewayが429 Too Many Requestsを返します。
デフォルトのアカウントレベル:10,000リクエスト/秒 + 5,000バースト。ステージごと、メソッドごとのオーバーライド。パートナーティア制御のために、使用量プランによるキーごとのスロットリング。
大量のトラフィック中に一時的なAWSサービスエラーが発生します。
AWS SDKは指数バックオフ + ジッターで自動的に再試行します。`RetryMode = adaptive`または`standard`を設定し、`maxAttempts`を調整します。
デプロイ後にCloudFrontが古いコンテンツを提供します。
パスを無効化(`/index.html`、`/*`) — 月間1000パスを超えると課金されます。より良い方法:バージョン管理されたファイル名(`app.abc123.js`)を使用すると、キャッシュが自然にバイパスされます。