AWS DVA / 第1章

CHAPTER 01 / 基礎 / D1

全体像と開発の基礎

サービスの役割、SDK、リトライ、冪等性をつなげる。

一読の目安 20分図・具体例・確認問題

01 / まず、アプリの流れをつかむ

DVAは、AWS上のアプリをコードで開発し、安全に動かし、更新し、調査するための試験です。サービス名だけでなく「誰が呼ぶか」「どの権限を使うか」「失敗したら誰が再試行するか」を説明できる状態を目指します。

ここでは小さな注文アプリを共通の例にします。APIで注文を受け付け、DynamoDBへ保存し、時間のかかる通知をキューに分離します。

注文アプリの全体像利用者はCognitoで認証し、API GatewayからLambdaを呼びます。LambdaはDynamoDBへ保存し、必要な後続処理をSQSへ渡します。利用者Web / モバイルCognitoログイン・トークンAPI GatewayHTTPの入口Lambda業務処理DynamoDB注文データSQS後続処理を待機通知ワーカー別のLambdaなど
注文アプリの全体像 — 利用者はCognitoで認証し、API GatewayからLambdaを呼びます。LambdaはDynamoDBへ保存し、必要な後続処理をSQSへ渡します。
役割サービスの例考えること
処理を実行するLambda / ECS / EC2実行時間、依存関係、状態の置き場所
データを保存するDynamoDB / S3 / RDS検索方法、整合性、トランザクション
処理をつなぐAPI Gateway / SQS / SNS / EventBridge同期か非同期か、再試行、順序
安全に呼ぶIAM / STS / Cognito / KMS認証、認可、暗号化
変更して調べるSAM / Code系 / CloudWatch / X-Rayテスト、切り戻し、原因の特定

02 / リージョン・ARN・状態の置き場所

リージョンはAWSの地理的なサービス提供単位、AZはリージョン内の障害分離の単位です。SDKでは接続先リージョンを意識します。東京のテーブルを別リージョンで検索すると、同名のテーブルが存在せず失敗することがあります。

ARNはAWSリソースを識別する名前です。IAMポリシーのResourceで「どのテーブル・どのバケットか」を指定するときに使います。

ARN の読み方(例)
arn:aws:dynamodb:ap-northeast-1:123456789012:table/Orders
#   partition / service / region / account-id / resource

Lambdaの実行環境は再利用されることがありますが、いつ破棄されるかは保証されません。注文やログイン状態など、失いたくない状態はDynamoDBなどへ保存します。/tmpやグローバル変数は、キャッシュには使えても永続的な正本にはできません。

03 / SDKは何をしているか

SDKは、APIリクエストの組み立て、認証情報の取得、署名、レスポンスのデコード、一定のエラーの再試行を支援します。アプリはSDKに認証情報を渡す代わりに、通常はデフォルトの認証情報プロバイダーチェーンを使います。

Lambdaは実行ロール、ECSはタスクロール、EC2はインスタンスプロファイルで一時認証情報を取得します。ローカル開発では設定済みのプロファイルやIAM Identity Centerを使います。長期アクセスキーをコードへ埋め込む必要はありません。

Python / boto3 の例(読み取り処理の抜粋)
import os
import boto3

# 実行環境が持つ一時認証情報とリージョン設定を利用
table = boto3.resource("dynamodb").Table(os.environ["TABLE_NAME"])

def load_order(order_id):
    result = table.get_item(Key={"orderId": order_id}, ConsistentRead=True)
    return result.get("Item")

多くのAWS APIではSignature Version 4(SigV4)でリクエストに署名します。一時認証情報はアクセスキーID・シークレットアクセスキー・セッショントークンの組です。SDKが署名できても、そのロールに操作権限がなければAccessDeniedになります。

公式資料:SDK の認証情報プロバイダーチェーン

04 / 再試行と冪等性はセット

タイムアウトしたとき、サーバー側では書き込みが成功している場合があります。「失敗と表示されたから、処理は実行されていない」と決めつけて再送すると、注文や決済が二重になります。

冪等性(べきとうせい)は、同じ要求を繰り返しても、業務上の結果が重複しない性質です。注文IDや冪等キーを保存し、DynamoDBの条件付き書き込みなどで重複を検出します。業務更新と処理済み記録を原子的に行うには、同じトランザクションに含めるなどの工夫が必要です。

エラー・状況対応の方向
一時的なスロットリング、短い通信障害上限回数・総時間を決め、指数バックオフとジッターで再試行
入力形式の不正、権限不足入力や権限を修正。待つだけの再試行では解決しない
非同期イベントの重複冪等キー・条件付き更新・トランザクションを検討
依存サービスの障害が継続サーキットブレーカーや縮退動作で負荷と障害の連鎖を抑える

指数バックオフは待ち時間を段階的に増やす方法です。ジッターは待ち時間に乱数を加え、一斉に再試行が集中することを避けます。SDKの再試行と自作ループを重ねすぎると、呼び出し回数が掛け算で増える点にも注意します。

考えてみよう:タイムアウトした注文

注文APIの応答が途切れた。利用者が「注文する」をもう一度押しても、注文を一件にしたい。何をキーに、どこで重複を防ぐ?

考え方・解答例

クライアントで一つの注文意図に同じ冪等キーを付け、サーバーでそのキーの記録を条件付きで作成します。保存済みなら既存の注文結果を返します。外部決済がある場合は決済先の冪等性機能も使い、記録と決済の途中失敗を考えます。

05 / 確認問題

QUESTION 1-1 · 単一選択LambdaからDynamoDBへアクセスする認証情報の渡し方として適切なのは?
解答・解説を読む

正解:B
実行ロールの一時認証情報をSDKが取得します。テーブル名は認証情報ではなく、IDトークンもAWSアクセスキーではありません。

QUESTION 1-2 · 単一選択一時的なスロットリングが発生したときの方針は?
解答・解説を読む

正解:C
再試行の集中を避け、呼び出しの総時間にも上限を設けます。権限の追加はスロットリング対策にならず、タイムアウト後の処理成功もあり得ます。

06 / この章の到達点

上のチェックは、このページでの振り返り用です。章単位の進捗は下のボタンで記録できます。

公式資料

内容確認日:2026年11月8日。仕様の詳細や更新情報は、各公式資料で確認できます。

おつかれさまでした。

理解を確認できたら、章の進捗を記録できます。