CHAPTER 09 / 全ドメイン
総復習・演習・ミニ実習
比較表と20問のオリジナル問題で、判断力を確かめる。
01 / 要件から思い出す比較表
| 設問の要件・症状 | 思い出す機能・考え方 |
|---|---|
| Lambdaで下流を保護したい | Reserved concurrency、SQSによる平準化 |
| 対話処理の初期化待ちを減らしたい | Provisioned concurrency |
| 主キー以外で効率よく検索したい | DynamoDB GSIなど。Query可能なアクセスパターンへ |
| 書き込み直後の最新値が必要 | テーブル / LSIの強い整合性。GSIは不可 |
| 二重作成や同時更新を防ぎたい | 条件付き書き込み、version、トランザクション、冪等キー |
| 全担当へ同じイベントを配りたい | SNS+専用SQS等のファンアウト |
| 一部メッセージの失敗だけを再試行したい | SQS部分バッチ応答+ReportBatchItemFailures |
| ログインと一時AWS認証情報を分けたい | Cognito user pool / identity pool |
| 秘密の定期更新を組み込みたい | Secrets Manager、アプリ側の再取得・キャッシュ期限 |
| 少数の利用者で新版を観測したい | Canary+アラーム+切り戻し |
| 要求のどの区間が遅いか知りたい | 分散トレースと関連ログ |
| AWSリソースを誰が変更したか知りたい | CloudTrail |
| AIに業務ツールを使わせたい | 利用者の認可、最小権限、セッション分離、必要な承認 |
02 / シナリオ問題の読み方
- 達成したい要件を一文にする
「最新値を読む」「全購読先へ配る」「一部だけで検証する」など、動作を言葉にします。
- 制約を拾う
運用負荷、既存構成、同期応答、順序、暗号化、費用など。必要条件を満たさない選択肢を外します。
- 誰の責任かを分ける
再試行は呼び出し元かLambdaかSQSか。認証はCognitoか、AWS権限はIAMか。
- 成功時と失敗時を一回ずつ追う
途中で止まったら何が残るか、もう一度実行したら何が重複するかを考えます。
03 / オリジナル総復習20問
単一選択は一つ、複数選択は指定された二つを選びます。複数選択は完全一致で採点します。回答はページを閉じるとリセットされます。
20問の回答をまとめて確認できます。
結果は問題一覧の先頭に表示します。
04 / ローカル実習:冪等キーの意味を確かめる
下のコードをorder_lab.pyとして保存し、python3 order_lab.pyで実行できます。Pythonの標準ライブラリだけを使い、AWSリソースは作成しません。3つのテストが成功することを確認し、重複チェックを外すなどして結果の違いを考えてください。
import unittest
def create_order(store, request_id, quantity):
if not isinstance(quantity, int) or isinstance(quantity, bool) or quantity <= 0:
raise ValueError("quantity must be a positive integer")
if request_id in store:
if store[request_id]["quantity"] != quantity:
raise ValueError("same request ID with different input")
return store[request_id]
order = {"orderId": request_id, "quantity": quantity}
store[request_id] = order
return order
class OrderTests(unittest.TestCase):
def test_duplicate(self):
store = {}
first = create_order(store, "req-1", 2)
second = create_order(store, "req-1", 2)
self.assertEqual(first, second)
self.assertEqual(len(store), 1)
def test_changed_input(self):
store = {}
create_order(store, "req-1", 2)
with self.assertRaises(ValueError):
create_order(store, "req-1", 3)
def test_invalid_quantity(self):
for value in [0, -1, "2", True]:
with self.assertRaises(ValueError):
create_order({}, "req-1", value)
if __name__ == "__main__":
unittest.main()次の実習へ進むなら
- SAMでLambdaとAPIを作る
まず固定JSONを返し、イベントとプロキシレスポンスの形式を確認します。
- DynamoDBを追加する
主キーを決め、実行ロールの権限を限定し、条件付き作成と取得を実装します。
- SQSで通知を分離する
重複・部分失敗・DLQ・再試行を試し、キューの滞留を観察します。
- 監視と段階リリースを追加する
構造化ログ、アラーム、バージョンとエイリアス、Canaryを確認します。AWSで行う場合は費用と、作成後の削除までを実習計画に含めます。
05 / つまずきやすい用語
- スロットリング
- 許容される呼び出し量や同時実行数を超えたときの制限。権限拒否とは原因が異なります。
- 冪等性
- 同じ要求を繰り返しても、業務上の結果が重複しない性質。
- 結果整合性
- 更新の反映に時間差があり、読み取りで以前の状態が返ることがあるモデル。
- ファンアウト
- 一つのイベントを複数の購読先へ配信するパターン。
- 疎結合
- 相手の実装や稼働状況への依存を減らした関係。イベント形式などの契約は引き続き必要です。
- アーティファクト
- ビルド・デプロイで受け渡す成果物。ZIPやコンテナイメージなど。
- ロールバック
- 異常時に以前のリビジョンや状態へ戻すこと。DBスキーマ変更等があると単純に戻せないため、変更の互換性も考えます。
- RTO / RPO
- それぞれ復旧までの目標時間 / 許容するデータ損失の時間の目標。DVAではアプリの復旧やデータ保護の文脈で整理します。
06 / 仕上げのチェック
上のチェックは、このページでの振り返り用です。章単位の進捗は下のボタンで記録できます。
一周した後は、弱い章を読み直し、AWS公式の練習問題や実習で補強しましょう。正答だけでなく、設問の要件を一文で説明できるかを振り返ると理解の穴を見つけやすくなります。
次に読む公式資料
内容確認日:2026年11月8日。仕様の詳細や更新情報は、各公式資料で確認できます。
理解を確認できたら、章の進捗を記録できます。