+ 作るログイン
1 / 24
AWS でサービスを作る ― 知識ゼロから、構成を自分で考えられるまで / 全32章

AWS 30:設計演習:要件から構成へ

発行
アニメモ公式
版
第2版
改訂
コマ
全24

要件だけが書かれた紙から構成図を描くための6つの手順(要件を読む・数字にする・困りごとを並べる・部品を選ぶ・図にする・見直す)を、小さなブログ、予約サービス、動画の変換の3つの演習で段階的にたどります。見積もりの掛け算、候補を比べて捨てる理由の書き方、二重予約の防ぎ方、重い処理を非同期にする流れ、そして構成図が要件に合わせて育っていく様子を見せます。

部品は知っている。でも、白紙からは描けない

ここまでで、AWS の部品を一通り学び、第28章では構成を比べるものさし(6本の柱)、第29章では止まらなさを数字で扱う方法を学びました。

それでも、いざ「予約サービスを作りたいんだけど、どんな構成がいい?」と聞かれると、手が止まる人は多いはずです。部品の名前はたくさん浮かぶのに、どれを、どの順に、どうつなげばいいのかが決まらない。

これは知識が足りないのではありません。考える順番を持っていないからです。順番が無いと、次のようなことが起きます。

順番が無いと起きること
知っている部品から考え始める前に使った構成を、要件に関係なくそのまま描いてしまう
新しい部品を使いたくなる小さなサービスに、大げさな部品が並ぶ
数字を聞かない毎秒2回のサービスと、毎秒2万回のサービスに同じ構成を描く
理由を残さない後から「なぜこれを選んだのか」を誰も説明できない

この章では、要件から構成までを6つの手順で進める方法を学びます。そして、その手順を3つの演習で3回くり返します。

演習題材主な難所
1小さなブログ読む人は多いが、中身はほとんど変わらない
2予約サービス書き込みが大事。予約が重なってはいけない
3動画の変換重くて長い処理と、大きなファイル

3つとも、架空のヘアサロンチェーン「カミノ」の仕事として出てきます。演習が進むにつれ、構成図が少しずつ育っていく様子にも注目してください。

※2026年9月時点の情報です。画面・料金・細部は変わることがあります。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 1 / 24
  • 部品は知っている。でも、白紙からは描けない
  • 書類
  • ネットワーク
  • 要件だけの紙
  • ?
  • 構成図
  • 「予約サービスを作りたい」
  • どの部品を、どうつなぐ?
  • 第0〜29章で部品・原則・数字の扱い方はそろった。でも「何から考えるか」を知らないと手が止まる
  • この章では6つの手順を、3つの演習で3回くり返す。3回目には、手順が自分のものになる
  • ひらめき
  • 足りないのは部品の知識ではなく「順番」。要件から構成までを、決まった手順で進めれば描ける。

6つの手順:読む → 数字 → 困りごと → 部品 → 図 → 見直す

構成を考える手順は、次の6つです。

手順やること出てくるもの
1 要件を読む誰が、何を、どんなときに使うのか。何ができればよく、何は要らないのか機能の一覧と、「要らないもの」の一覧
2 数字にする利用者数、リクエストの回数(平均とピーク)、データの量、止まってよい時間、失ってよいデータ5つ前後の数字
3 困りごとを並べる数字と要件から、「普通にやると困る所」を見つける難所の一覧(ふつう3〜6個)
4 部品を選ぶ難所ごとに候補を2〜3出し、比べて選ぶ。捨てた理由も書く部品の一覧と、選んだ理由
5 図にする部品を線でつなぎ、リクエストとデータの流れを描く構成図
6 見直す第28章の6本の柱と判断の問い、第29章の単一障害点で確かめる直す所の一覧と、受け入れるリスク

大事なのは、AWS の部品の名前が出てくるのは4番目からだということです。1〜3は紙とペンだけでできますし、AWS 以外のクラウドでも同じです。そして、構成の良し悪しは、この1〜3でほとんど決まります。

もう1つ大事なのは、1回で完成させようとしないことです。6で見直して足りない所があれば、1〜5のどこかへ戻ります。要件を読み違えていたら1へ、数字が足りなければ2へ戻ります。

次から、手順2と手順4のコツを先に見てから、演習に入ります。演習の中では、上の帯で「いまどの手順か」を示します。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 2 / 24
  • 6つの手順:読む → 数字 → 困りごと → 部品 → 図 → 見直す
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • 誰が・何を・どんなときに
  • 人数・量・止まってよい時間
  • 数字から出てくる難所
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 候補を比べ、理由を書く
  • 流れを線でつなぐ
  • 6本の柱と判断の問い
  • 1〜3は紙とペンでできる。ここで8割が決まる。4〜6で初めて AWS の部品の名前が出てくる
  • 見直して足りなければ、1〜5のどこかへ戻る。1回で完成させようとしない
  • ひらめき
  • 部品を選ぶのは4番目。その前の3つを飛ばすと、「知っている部品を並べただけ」の構成になる。

手順2のコツ:わからない数字は、掛け算で見積もる

「数字にする」と言われても、最初から正確な数字を知っていることはまずありません。そこで、わかっている数字を掛け算して見積もります。

図の見積もりを、1行ずつ読んでみます。

行考え方
会員5万人 × 20%会員全員が毎日使うわけではない。1日に使う割合を仮に決める
1万人 × 20リクエスト1人が画面を何回開き、ボタンを何回押すか
20万 ÷ 86,400秒1日は86,400秒。平均すると毎秒何回か
ピークは5〜10倍利用は時間帯に偏る。混む時間は平均の何倍にもなる

結果は「平均で毎秒2〜3回、ピークで毎秒20回くらい」です。

この見積もりは、正確さより桁(けた)が大事です。毎秒20回か30回かは、構成をほとんど変えません。でも、毎秒20回か2万回かは、選ぶ部品がまったく変わります。

手順2で集める数字は、図の右の5つが基本です。

数字決まること
利用者(1日・同時)部品の大きさ、ログインの仕組み
リクエスト(平均・ピーク)台数、自動で増やすか、キャッシュが要るか
データ量(1年でどれだけ増えるか)DB やストレージの種類と料金
止まってよい時間冗長化の程度(第29章の可用性)
失ってよいデータバックアップと複製の方法(第29章の RPO)

わからない数字は、依頼した人に聞きます。「わからない」と言われたら、「多めに見て何人くらい?」と桁だけでも聞きます。それでも決まらなければ、仮の数字を置き、「この数字を前提にした」と書いておきます。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 3 / 24
  • 手順2のコツ:わからない数字は、掛け算で見積もる
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • # 1秒あたりのリクエスト数を見積もる
  • 利用者
  • 1日に何人・同時に何人
  • 会員 5万人 × 1日に使う割合 20% = 1万人/日
  • 1万人 × 1人あたり 20リクエスト = 20万/日
  • リクエスト
  • 平均とピーク(毎秒)
  • 20万 ÷ 86,400秒 ≒ 平均 2.3回/秒
  • ピークは平均の 5〜10倍 → 約20回/秒
  • データ量
  • 1年でどれだけ増えるか
  • # データ量を見積もる
  • 止まってよい
  • 月に何分(第29章)
  • 1件 2KB × 1日 2,000件 × 365日 ≒ 1.5GB/年
  • 失ってよい
  • 何分・何時間分(RPO)
  • ひらめき
  • 正確さより桁が大事。「1秒に数回」か「1秒に数千回」かで、選ぶ部品がまったく変わる。

手順4のコツ:候補を2〜3出し、捨てた理由も書く

部品を選ぶときは、いきなり1つに決めず、候補を2〜3個並べて比べます。そして、選んだ理由だけでなく、捨てた理由も書きます。

例として、処理を動かす部品(第9・21・22章)の比べ方を図に並べました。

見方EC2ECS / FargateLambda
サーバーの世話OS の更新まで自分コンテナの中身だけほぼいらない
15分を超える処理向く向くできない(1回の実行は最長15分)
ずっと続くリクエスト向く向く回数と時間の料金なので、割高になることがある
ほとんど来ない時間台数×時間で課金され続ける台数を減らせる呼ばれなければほぼ0円

この表は目安で、答えではありません。要件の数字を当てはめると、どの行が効くかが決まります。

要件の数字効く行向く候補
処理が1回20分かかる15分を超える処理EC2・Fargate、または専用のサービス
1日に数回しか呼ばれないほとんど来ない時間Lambda
毎秒数百回が一日中続くずっと続くリクエストFargate・EC2

捨てた理由を書く意味は2つあります。1つは、自分の考えの穴に気づけること。捨てた理由がうまく書けないなら、その候補のほうが良いのかもしれません。もう1つは、後で見直すときに、「前提の数字が変わったから、捨てた候補を拾い直そう」と判断できることです。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 4 / 24
  • 手順4のコツ:候補を2〜3出し、捨てた理由も書く
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 比べる観点
  • サーバー
  • EC2
  • 荷物
  • ECS / Fargate
  • 電気
  • Lambda
  • サーバーの世話
  • OS まで自分
  • コンテナだけ
  • いらない
  • 15分を超える処理
  • 向く
  • 向く
  • できない
  • ずっと続くリクエスト
  • 向く
  • 向く
  • 割高になりがち
  • ほとんど来ない時間
  • 料金は台数×時間
  • 台数を減らせる
  • ほぼ0円
  • 表は目安。要件の数字(処理時間・リクエストの波)を当てはめて、どの行が効くかを見る
  • ひらめき
  • 「これを選んだ」だけでは弱い。「あれを捨てたのは、要件のこの数字のせい」まで言えて初めて設計。

演習1 小さなブログ:要件を読んで、数字にする

1つ目の演習です。ヘアサロンチェーン「カミノ」から、次のような依頼が来ました(図の左のメモ)。

要件読み取れること
スタッフが週に2本、記事を書く書き込みはとても少ない
お客さんはスマホで読む。コメント欄はいらない読むだけ。利用者が何かを書き込む機能は無い
独自ドメインで HTTPSドメインと証明書が要る
止まっても半日なら困らない。予算は月数百円〜冗長化より安さ
記事のファイルを置けば公開される形でよい管理画面を作らなくてよい

手順1で大事なのは、「要らないもの」を読み取ることです。コメント欄が要らない、管理画面も要らない。これだけで、利用者のデータを保存する DB も、ログインの仕組みも要らなくなります。

手順2で数字にすると、図の右のようになります。

数字値見積もり方
読む月1万回50店舗の常連さんが月に数回読む程度
書く週2本要件そのまま
データ数百MB記事は文字なので小さい。画像が大半
止まってよい半日要件そのまま。可用性にすると 99% 程度でも許される

月1万回を秒に直すと、平均で毎秒0.004回。ピークでも毎秒数回です。読むのは書くより数千倍多く、しかも読むたびに中身は同じ。これがこの演習の鍵になります。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 5 / 24
  • 演習1 小さなブログ:要件を読んで、数字にする
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 書類
  • ヘアサロン「カミノ」のお知らせブログ
  • 数字にすると
  • スタッフが週に2本、お知らせや髪の手入れの記事を書く
  • 読む
  • 月1万回・毎秒数回
  • お客さんはスマホで読む。コメント欄はいらない
  • 書く
  • 週2本(ほぼ0)
  • 独自ドメイン(kamino.example)で HTTPS
  • 止まっても半日なら困らない。予算は月数百円〜
  • データ
  • 記事と画像で数百MB
  • 更新は、記事のファイルを置けば公開される形でよい
  • 止まってよい
  • 半日(99% でも可)
  • ひらめき
  • 読む人は多くても、中身はほとんど変わらない。「書く」と「読む」の回数の差が、設計の鍵になる。

演習1 困りごとを並べ、部品を選ぶ

手順3で困りごとを並べます。この要件では、難所はあまりありません。

困りごとなぜ困るか
記事を配る読む人の近くから速く配りたい。でもサーバーの世話はしたくない
独自ドメインと HTTPS証明書の期限切れで、ある日突然サイトが見られなくなるのは避けたい
記事を公開する手作業のアップロードは間違える
安く・世話なく予算は月数百円。週2本の更新のために、サーバーを24時間動かしたくない

手順4で部品を選びます。図の表で、緑が選んだもの、赤が捨てた候補です。

いちばん大きな判断は、「動くサーバー」を置かないことです。ブログ用のソフト(WordPress など)を EC2 と RDS で動かす方法もよく使われます。でも、読むたびに同じ記事を返すだけなら、記事を前もってファイル(HTML)にしておき、S3 に置いて CloudFront で配るだけで足ります(第15章)。このように、作っておいたファイルを配るだけのサイトを静的サイトと呼びます。

捨てた候補捨てた理由(要件のどの数字か)
EC2+RDS「書くのは週2本」「予算は月数百円」。24時間動かす料金と OS の更新が見合わない
証明書を自分で買う更新忘れの危険。ACM なら CloudFront で使え、自動で更新される
手でアップロード「ファイルを置けば公開」。GitHub Actions(第19章)で自動にできる
Lightsail手軽な小さいサーバーだが、OS の世話が残る。配るだけなら不要
  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 6 / 24
  • 演習1 困りごとを並べ、部品を選ぶ
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 記事を配る
  • OK
  • S3+CloudFront
  • NG
  • EC2+RDS(WordPress など)
  • 中身は毎回同じ。サーバーを動かし続ける料金と、OS の更新の手間が見合わない
  • 独自ドメインと HTTPS
  • OK
  • Route 53+ACM
  • NG
  • 証明書を自分で買って更新
  • ACM の証明書は CloudFront で使え、自動で更新される(第14章)
  • 記事を公開する
  • OK
  • GitHub Actions で S3 へ
  • NG
  • 手でコンソールからアップロード
  • 手作業は間違える。記事を置けば公開される形に(第19章)
  • 安く・世話なく
  • OK
  • サーバーを持たない
  • NG
  • Lightsail(小さな VPS)
  • Lightsail も手軽だが、OS の世話が残る。配るだけならいらない
  • ひらめき
  • 中身が変わらないなら「動くサーバー」は要らない。作っておいたファイルを配るだけで足りる。

演習1 図にする:静的サイトの構成

手順5で、選んだ部品をつないで図にします。

流れ通る部品章
読者が kamino.example を開くRoute 53 が CloudFront の場所を答える第14章
CloudFront が記事を返す近くの拠点にあればそこから。無ければ S3 から取ってきて覚える第15章
S3 は非公開のままCloudFront からだけ読めるようにする(OAC)第15章
通信は HTTPSACM の証明書を CloudFront に付ける。CloudFront で使う証明書はバージニア北部(us-east-1)で作る第14章
書き手が記事を置くGitHub に記事を置くと、GitHub Actions が HTML を作って S3 に置く第19章

図を見ると、サーバー(黄色の部品)が1つもありません。これがこの構成のいちばんの特徴です。

良いところ理由
世話がほぼいらないOS の更新も、台数の管理も無い
急に読まれても平気記事が話題になっても、CloudFront がさばく
安い料金は保存した量と配った量に応じて。使われなければほとんどかからない

図の描き方にも1つコツがあります。左に利用者、右に向かって奥へという向きをそろえることです。リクエストの流れが左から右へ読めると、図を見た人が迷いません。また、色で役割を表しているので(青がつなぐ、緑がしまう、赤が守る)、黄色が無いことが一目でわかります。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 7 / 24
  • 演習1 図にする:静的サイトの構成
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 人々
  • 読者
  • スマホで読む
  • 場所
  • Route 53
  • kamino.example
  • インターネット
  • CloudFront
  • 近くから配る
  • フォルダ
  • S3
  • 記事(非公開)
  • 錠
  • ACM
  • HTTPS の証明書
  • 記事を置く
  • 人
  • 書き手
  • 記事を書いて置く
  • コード
  • GitHub Actions
  • 自動で公開
  • ひらめき
  • サーバーは1台も無い。S3 に置いた記事を、CloudFront が利用者の近くから配る。

演習1 見直す:6つの問いで確かめる

手順6で、第28章の判断の問いを使って見直します。

問い答え判定
何のため?お店のお知らせを、スマホで気軽に読んでもらう満たす
どれくらい?ピークでも毎秒数回。CloudFront には余裕がありすぎるほど満たす
何が壊れたら?部品はすべて AWS のマネージドサービス。止まっても半日は許容満たす
いくら?保存と配信の量に応じた料金。時間で課金され続ける部品が無い満たす
誰が面倒を見る?予算アラートが無い。万一、大量に読まれて料金が増えても気づけない直す
どう変える?コメント欄が欲しくなったら、そこだけ API を足せばよい満たす

見つかったのは、予算アラート(第4章)が無いことでした。数分でできるので、すぐ足します。

見直しでは、足りないものだけでなく、やりすぎも探します。たとえば「念のため別のリージョンにも複製しよう」は、この要件(半日止まってよい)には過剰です。見直しの結果、何も足さないという判断も立派な設計です。

演習1で覚えておきたいのは、要件が小さければ、構成も小さくてよいということです。第16章の3層構成(ALB+EC2+RDS)は、よくある形ですが、いつも正解ではありません。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 8 / 24
  • 演習1 見直す:6つの問いで確かめる
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • OK
  • 何のため:お店のお知らせを、スマホで気軽に読める
  • OK
  • どれくらい:毎秒数回。CloudFront には余裕がありすぎるほど
  • OK
  • 何が壊れたら:部品はすべてマネージド。止まっても半日で許容
  • OK
  • いくら:保存と配信の量に応じた料金。サーバーの時間課金が無い
  • NG
  • 誰が面倒を見る:予算アラート(第4章)がまだ無い → 足す
  • ひらめき
  • 小さな要件には、小さな構成が正解。見直しは「足りないもの」と同時に「やりすぎ」も探す。

演習2 予約サービス:要件を読んで、数字にする

2つ目の演習です。ブログが好評だったカミノから、次の依頼が来ました。50店舗のネット予約です。

要件読み取れること
店・スタッフ・日時を選んで予約する利用者が書き込む。空いている枠を探す検索が要る
同じスタッフの同じ時間に、2人が入ってはいけない二重予約の防止。この演習の最大の難所
会員登録してログイン。前日にリマインドのメールログインの仕組みと、決まった時刻の処理
予約できない時間が長いと、電話が鳴り止まない止まるとお店の仕事に響く
毎月1日の朝9時に翌月分を開けると混む決まった時刻にピークが来る

ブログとの一番の違いは、書き込みが大事なことです。ブログの記事は消えても書き直せますが、予約が消えたり重なったりすると、お客さんが来店して困ります。

手順2の数字は、図の右のとおりです。

数字値見積もり方
会員5万人、1日に1万人50店舗 × 常連1,000人
リクエスト平均 毎秒2〜3回、ピーク 約20回手順2のコツの計算そのもの
止まってよい月に約43分(99.9%)店長と相談し「営業中に1時間止まるのは困る」
失ってよい5分まで「予約が消えるのは困る。数分なら電話で確かめられる」

毎秒20回は、AWS にとっては小さな数字です。つまりこの演習の難しさは、量ではなく、正しさと止まらなさにあります。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 9 / 24
  • 演習2 予約サービス:要件を読んで、数字にする
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 書類
  • カミノ 50店舗のネット予約
  • 数字にすると
  • お客さんが店・スタッフ・日時を選んで予約する
  • 会員
  • 5万人(1日1万人が使う)
  • 同じスタッフの同じ時間に、2人が入ってはいけない
  • リクエスト
  • ピーク 毎秒約20回
  • 会員登録してログイン。前日にリマインドのメール
  • 予約できない時間が長いと、電話が鳴り止まない
  • 止まってよい
  • 月に約43分まで(99.9%)
  • 毎月1日の朝9時に翌月分の予約を開けると混む
  • 失ってよい
  • 5分まで(RPO 5分)
  • ひらめき
  • ブログとの違いは「書き込みが大事」なこと。予約は1件でも消えたり、重なったりしてはいけない。

演習2 困りごとを並べる:数字から「難所」を見つける

手順3です。要件と数字から、「普通にやると困る所」を並べます。

困りごとどう困るかどの要件・数字から
1 二重予約同じ枠に、ほぼ同時に2人が「予約する」を押す「2人が入ってはいけない」
2 朝9時の混雑普段の10倍の人が、数分だけ集中する「毎月1日の朝9時」
3 止まれない月43分まで。1台・1つの AZ に頼ると超える99.9%
4 個人情報名前・電話番号・メールを預かる会員登録
5 前日のメール毎日決まった時刻に、翌日の予約者にまとめて送るリマインド
6 消えない予約故障でも誤操作でも、5分より前の予約は失わないRPO 5分

困りごとを並べるコツは、要件や数字を1つずつ指さして、「これを普通に作ったら、何が起きる?」と聞くことです。第29章で単一障害点を探したのと同じやり方です。

並べてみると、この演習の難所は大きく4つ(二重予約・混雑・止まれない・個人情報)で、残りの2つは決まった部品で解ける「定番の困りごと」だとわかります。

時間をかけるべきなのは難所のほうです。特に1の二重予約は、部品を選んだ後で、改めて詳しく見ます。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 10 / 24
  • 演習2 困りごとを並べる:数字から「難所」を見つける
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 日付
  • 上昇
  • 更新
  • 二重予約
  • 朝9時の混雑
  • 止まれない
  • 同じ枠に同時に2人が押す
  • 普段の10倍が数分だけ来る
  • 月43分まで。1台・1AZに頼れない
  • 錠
  • メール
  • データベース
  • 個人情報
  • 前日のメール
  • 消えない予約
  • 名前・電話番号・メール
  • 決まった時刻に、まとめて送る
  • RPO 5分。誤操作にも備える
  • ひらめき
  • 難所は4つ。二重予約・朝9時の混雑・止まれない・個人情報。部品はこの4つを解くために選ぶ。

演習2 部品を選ぶ:選んだ理由と、捨てた理由

手順4です。難所ごとに候補を比べて選びます。

予約の保存には、Aurora(PostgreSQL 互換)の Multi-AZ を選びました(第13章)。

Aurora(RDB)DynamoDB(第23章)
空き枠を探す「この店の、この日の、空いているスタッフ」を自由に検索できる検索の形を先に決めて、キーを設計する必要がある
店ごとの集計集計の SQL で書ける集計は別の仕組みが要ることが多い
二重予約の防止一意制約・トランザクションで確実に条件付き書き込みでできる
判断選ぶ。検索と集計の形がこれから増えそう捨てる。ただし、アクセスの形が決まっていれば十分選べる

アプリを動かす部品には、ECS on Fargate(第21章)を選び、2つの AZ に置きます。EC2 は OS の世話が残ります。Lambda でも作れますが、リクエストごとに DB へ接続すると接続数が増えすぎやすい点(第13章)と、チームが慣れている Web アプリの形をそのまま使える点で、コンテナにしました。Lambda が間違いなのではなく、この要件ではこちらを選んだ、という書き方をします。

ログインは Cognito(第26章)。パスワードの保存や再設定、多要素認証を自分で作るのは危険です。

前日のメールは、EventBridge Scheduler で毎日決まった時刻に Lambda を呼び、Lambda が明日の予約を読んで、Amazon SES(メールを送るためのサービス)で送ります。1日1回の短い処理なので、Lambda が向いています(第22章)。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 11 / 24
  • 演習2 部品を選ぶ:選んだ理由と、捨てた理由
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 予約を保存
  • OK
  • Aurora(PostgreSQL)Multi-AZ
  • NG
  • DynamoDB
  • 店・スタッフ・日付での検索や集計が多い。一意制約とトランザクションで二重予約を防げる
  • アプリを動かす
  • OK
  • ECS on Fargate を2つの AZ に
  • NG
  • EC2 / Lambda
  • EC2 は OS の世話が残る。Lambda でもできるが、DB への接続が増えすぎやすい(第13章)
  • ログイン
  • OK
  • Cognito
  • NG
  • 自前でパスワードを保存
  • パスワードの保存・再設定・多要素認証を自作しない(第26章)
  • 前日のメール
  • OK
  • Scheduler+Lambda+SES
  • NG
  • アプリの中で時刻を待つ
  • 決まった時刻に短い処理を1回。サーバーの中で待たせない(第22・24章)
  • ひらめき
  • 予約は「空き枠を探す」「重ならないよう確かめる」が中心。表と表を結ぶ検索と、確実な書き込みが要る。

演習2 図にする:ブログの構成に、動く部分を足す

手順5です。図を見てください。演習1の部品(Route 53・CloudFront・S3)が、そのまま上の段に残っています。S3 には、ブログの記事に加えて、予約画面のファイル(HTML や JavaScript)も置きます。

足した部品役目章
WAF(CloudFront に付ける)入口で攻撃やボットを止める第27章
Cognitoログイン。発行したトークンをアプリが確かめる第26章
ALBCloudFront から来た予約の API を、コンテナに振り分ける第11章
Fargate(2つの AZ)予約のアプリ。混む時間は数を増やす第12・21章
Aurora(主と待機系)予約を保存。主が止まれば待機系に切り替わる第13章
Scheduler・Lambda・SES前日のリマインドメール第22・24章

リクエストの流れは次のとおりです。

順番流れ
1利用者が画面を開くと、CloudFront が S3 から画面のファイルを返す(演習1と同じ)
2ログインすると、Cognito がトークン(第26章)を渡す
3予約ボタンを押すと、画面が CloudFront 経由で API を呼び、ALB が Fargate に届ける
4Fargate がトークンを確かめ、Aurora に予約を書く

図の育ち方に注目してください。演習1の構成を捨てて描き直したのではなく、困りごとが増えたぶんだけ、部品を足しました。これが第28章の一般的な設計原則「育つ前提で作る」です。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 12 / 24
  • 演習2 図にする:ブログの構成に、動く部分を足す
  • 人々
  • 利用者
  • スマホで予約
  • 場所
  • Route 53
  • インターネット
  • CloudFront
  • WAF 付き
  • フォルダ
  • S3
  • 画面とブログ
  • VPC(2つの AZ)
  • 鍵
  • Cognito
  • Fargate
  • ログイン
  • ネットワーク
  • ALB
  • 荷物
  • AZ a
  • データベース
  • Aurora
  • 主
  • 荷物
  • Fargate
  • AZ c
  • データベース
  • Aurora
  • 待機系
  • 日付
  • Scheduler
  • Lambda
  • SES
  • 毎日18時に起動
  • 電気
  • 明日の予約を読む
  • メール
  • メールを送る
  • ひらめき
  • ブログの部品(Route 53・CloudFront・S3)はそのまま。その後ろに、ALB・コンテナ・DB を足した。

演習2 いちばんの難所:二重予約を DB で止める

最大の難所、二重予約をどう防ぐかを詳しく見ます。

よくある失敗は、アプリの中で次のように書くことです。

順番Aさんの処理Bさんの処理
1田中さんの15時は空いている? → 空いている
2田中さんの15時は空いている? → 空いている
3予約を書く
4予約を書く → 二重予約

2人がほぼ同時に来ると、2人とも「空いている」を読んでから、2人とも書いてしまいます。Fargate が2つあれば、別々のコンテナで同時に起きるので、アプリの中の工夫では防げません。

そこで、DB に止めさせます。予約の表に、「同じスタッフの同じ開始時刻は1行だけ」という一意制約を付けます。

sql
CREATE TABLE reservations (
  id        bigserial PRIMARY KEY,
  staff_id  bigint      NOT NULL,
  start_at  timestamptz NOT NULL,
  member_id bigint      NOT NULL,
  UNIQUE (staff_id, start_at)
);

こうすると、図のように、先に書いた A さんだけが成功し、B さんの書き込みは DB が断ります。アプリは断られたら「その枠は埋まりました」と表示するだけです。確かめることと書くことを、DB が1回で同時にやってくれるのがポイントです。

施術の長さが人によって違い、時間帯が重なる場合は、PostgreSQL の排他制約など、より進んだ方法もあります。考え方は同じで、「重なりの判定を DB の中で、書き込みと同時に行う」ことです。

DynamoDB を選んだ場合は、条件付き書き込み(そのキーの項目がまだ無いときだけ書く)で同じことができます。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 13 / 24
  • 演習2 いちばんの難所:二重予約を DB で止める
  • 人
  • Aさん 10:00:00.01
  • 田中さん 15時を予約
  • Aさん:予約できました
  • データベース
  • 人
  • Bさん 10:00:00.02
  • Aurora
  • 田中さん 15時を予約
  • 一意制約で判定
  • Bさん:その枠は埋まりました
  • UNIQUE (staff_id, start_at) -- 同じスタッフ・同じ開始時刻は1行だけ。2人目の INSERT は DB が断る
  • DynamoDB を選んだなら、条件付き書き込み(その枠のキーがまだ無いときだけ書く)で同じことができる
  • ひらめき
  • アプリで「空いているか確かめてから書く」と、同時に来た2人が両方通る。DB の一意制約に止めさせる。

演習2 見直す:単一障害点と、お金と、混雑

手順6です。図を指さしながら、第28章の問いと第29章の単一障害点で見直します。

確かめたこと結果対応
AZ が1つ止まったら?Fargate と Aurora は残りの AZ で続くそのまま
NAT ゲートウェイは?1つの AZ にしか置いていなかった。外の API を呼べなくなるAZ ごとに置く(第7・29章)
朝9時の混雑は?自動で増えるまでの数分、遅くなるおそれ8時50分に数を増やす予定を入れる(第12章のスケジュールによる増減)
RPO 5分は?Aurora の自動バックアップで、時点を指定して戻せるそのまま。戻す練習の日を決める
個人情報は?Aurora と S3 は暗号化。アクセスは IAM ロールだけCloudTrail・GuardDuty を有効に(第27章)
SES は?新しいアカウントの SES は、送れる相手が限られた状態から始まる本番利用の申請と、送信元ドメインの認証をする
いくら?ALB・Fargate・Aurora・NAT が時間で課金されるPricing Calculator で月額を出し、店長と合意する

見直しで見つかった3つ(NAT、朝の混雑、SES)は、どれも図を描いたからこそ気づけたものです。特に朝9時の混雑は、手順2で数字にしていなければ見落としていた難所です。

演習2で覚えておきたいのは、正しさが大事な所は DB に任せること、そして混雑の時刻がわかっているなら、待たずに前もって備えることです。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 14 / 24
  • 演習2 見直す:単一障害点と、お金と、混雑
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • OK
  • AZ が1つ止まっても:Fargate と Aurora が残りの AZ で続ける
  • NG
  • NAT ゲートウェイが1つだけ → AZ ごとに置く(第7・29章)
  • NG
  • 朝9時の混雑:タスクの数を前もって増やす予定を入れる(第12章)
  • OK
  • RPO 5分:Aurora のバックアップで時点を指定して戻せる
  • NG
  • SES:送信を始める前に、本番利用の申請と送信元ドメインの認証が要る
  • ひらめき
  • 図を指さして「これが止まったら?」を聞く。見つけた穴を埋め、埋めない穴は理由を書いて残す。

演習3 動画の変換:要件を読んで、数字にする

3つ目の演習です。予約サービスが軌道に乗り、カミノから新しい依頼が来ました。

要件読み取れること
スタッフがスマホで撮った動画を上げる大きなファイルのアップロード
スマホ向け・PC 向けの画質に変換してから配る重い変換の処理がある
上げてから30分以内に見られればよい待たせてよい。すぐでなくてよい
変換が終わったか、画面で確かめられる処理の状態を記録して見せる
失敗したら自動でやり直し、だめなら知らせる再試行と、失敗の行き先

3つ目の要件、「30分以内に見られればよい」がとても大事です。これは、アップロードした瞬間に変換を終わらせる必要はない、つまり、処理を後回しにできる(非同期にできる、第24章)という意味だからです。

手順2の数字です。

数字値読み取れること
本数1日 最大300本、夕方に集中波がある。昼はほぼ0本
大きさ平均500MB、最大5GBサーバーを通すと重い
変換時間1本 数分〜20分長い。15分を超えることがある
見る回数1日1万回配信の通信量が多い

演習2は「正しさ」が主役でしたが、演習3の主役は重くて長い処理です。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 15 / 24
  • 演習3 動画の変換:要件を読んで、数字にする
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 書類
  • 施術の説明動画を、予約画面に載せたい
  • 数字にすると
  • 店のスタッフが、スマホで撮った動画を上げる
  • 本数
  • 1日 最大300本(夕方に集中)
  • スマホ向け・PC 向けの画質に変換してから配る
  • 大きさ
  • 平均 500MB・最大 5GB
  • 変換は、上げてから30分以内に見られればよい
  • 変換が終わったか、画面で確かめられる
  • 変換時間
  • 1本 数分〜20分
  • 失敗したら自動でやり直し、それでもだめなら知らせる
  • 見る回数
  • 1日 1万回(通信が多い)
  • ひらめき
  • 今度の主役は「重くて長い処理」。1本の変換に数分〜数十分かかり、ファイルは GB 単位になる。

演習3 困りごとを並べる:サーバーの中で全部やると、どこで詰まる?

手順3です。今回は、「演習2の Fargate の中で、全部やってしまったら?」と考えると、困りごとが見つけやすくなります。

困りごとFargate の中で全部やると
1 大きなアップロード5GB のファイルがアプリのコンテナを通る。受け取っている間、コンテナの手が塞がり、予約の処理まで遅くなる
2 長い変換20分かかる処理を、予約と同じコンテナで動かすと、予約の応答が遅れる。Lambda なら15分の上限を超える
3 夕方の波夕方だけ数十本が一度に来る。そのために常に大きな台数を用意すると、昼は無駄
4 失敗とやり直し変換の途中でコンテナが入れ替わる(第12章)と、どこまで終わったかわからなくなる
5 今どうなった?変換中・完了・失敗を記録しないと、スタッフは待つしかない
6 配信の量1日1万回、動画をコンテナから返すと、通信も台数も重い

ここで見えてくるのは、予約の処理(速く・正しく)と、動画の処理(重く・長く)は、性質がまったく違うということです。性質の違うものを同じ場所で動かすと、重いほうが軽いほうを邪魔します。

だから、動画の処理は、予約のアプリから切り離します。受け付けるところ(アップロード)と、処理するところ(変換)も分けます。これが第24章の「待たせない」の考え方です。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 16 / 24
  • 演習3 困りごとを並べる:サーバーの中で全部やると、どこで詰まる?
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • アップロード
  • 砂時計
  • 上昇
  • 大きなアップロード
  • 長い変換
  • 夕方の波
  • 5GB がアプリのサーバーを通ると詰まる
  • 20分かかる。Lambda の上限(15分)を超える
  • 昼は0本、夕方に数十本が一度に来る
  • 更新
  • 見る
  • インターネット
  • 失敗とやり直し
  • 今どうなった?
  • 配信の量
  • 途中で落ちたら、どこから再開する?
  • 変換中・完了・失敗を画面に出す
  • 1日1万回。サーバーから配ると重い
  • ひらめき
  • 5GB をサーバー経由で受けると詰まる。20分の変換を画面で待たせると、利用者が離れる。

演習3 部品を選ぶ:待たせず、流れ作業にする

手順4です。

受け取る:署名付き URL(第15章)を使い、スタッフのスマホから S3 に直接アップロードさせます。予約のアプリは「この URL に置いてね」と短い時間だけ使える URL を渡すだけで、5GB のファイルそのものには触りません。大きなファイルは、S3 のマルチパートアップロード(分割して送る仕組み)で送ります。

変換する:AWS Elemental MediaConvert を選びました。動画の変換(トランスコード)専用のマネージドサービスで、何本来ても受け付けて順に変換します。

捨てた候補捨てた理由
EC2 で変換ソフトを動かす昼はほぼ0本なのに台数×時間で払う。台数の管理とソフトの更新も自分
Lambda で変換1回の実行は最長15分。20分の変換が収まらない。メモリや一時領域の制約もある

以前は Amazon Elastic Transcoder というサービスもありましたが、2025年11月に提供を終えており、今は MediaConvert が後継です。

手順と再試行:S3 に原本が届いたことを EventBridge が受け取り、Step Functions(第24章)が「変換を頼む → 終わりを待つ → 状態を記録する」の手順を進めます。失敗したら決めた回数だけやり直し、それでもだめなら「失敗」として記録し、通知します。

状態を記録:新しく DynamoDB を足す案もありましたが、今ある Aurora に列を足すことにしました。予約画面は既に Aurora を読んでいるので、部品を増やさずに済みます。新しい部品を足す前に、今ある部品で済むかを考えるのも大事な判断です。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 17 / 24
  • 演習3 部品を選ぶ:待たせず、流れ作業にする
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 受け取る
  • OK
  • 署名付き URL で S3 へ直接
  • NG
  • アプリのサーバーで受ける
  • サーバーを通さず、ブラウザから S3 へ。大きなファイルは分割して送れる(第15章)
  • 変換する
  • OK
  • AWS Elemental MediaConvert
  • NG
  • EC2 で変換ソフト / Lambda
  • 動画の変換専用のマネージドサービス。EC2 は暇な時間も払う。Lambda は15分の上限
  • 手順と再試行
  • OK
  • EventBridge+Step Functions
  • NG
  • アプリの中で順に呼ぶ
  • S3 への到着をきっかけに動き、失敗したら決めた回数だけやり直す(第24章)
  • 状態を記録
  • OK
  • 今ある Aurora に列を足す
  • NG
  • DynamoDB を新しく足す
  • 予約画面が既に Aurora を読んでいる。部品を増やさずに済む
  • ひらめき
  • アップロードは S3 へ直接。変換は専用のサービスに任せ、手順と再試行は Step Functions が見張る。

演習3 図にする:予約の部分は1つにまとめ、動画の流れを前に出す

手順5です。図では、演習2の予約の部分(ALB・Fargate・Cognito など)を1つの箱にまとめ、新しく足した動画の流れを大きく描きました。構成図は、何を伝えたいかに合わせて描き分けてよいのです。全部の部品を毎回描くと、伝えたいことが埋もれます。

番号の順に、流れを追います。

番号部品すること
(前)予約サービススタッフに、S3 への署名付き URL を渡す。Aurora に「受付」と記録
1S3(原本)スタッフのスマホから、直接動画が届く
2EventBridge「S3 に新しい動画が届いた」という出来事を受け取り、Step Functions を起動する
3Step Functions手順を進める係。変換を頼み、終わりを待ち、Aurora の状態を「変換中」「完了」「失敗」と書き換える
4MediaConvertスマホ向け・PC 向けの画質に変換する。終わると完了の出来事を EventBridge に送る
5S3(変換後)変換された動画を置く。非公開のまま
6CloudFront利用者の近くから動画を配る(演習1と同じ部品)

2つのことに注目してください。

1つは、予約のアプリは動画の重い仕事を一切していないことです。URL を渡し、状態を読むだけです。夕方に動画が大量に届いても、予約の応答は遅くなりません。

もう1つは、CloudFront と Aurora が、3つの演習をまたいで使い回されていることです。ブログのために置いた CloudFront が、動画の配信にもそのまま効いています。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 18 / 24
  • 演習3 図にする:予約の部分は1つにまとめ、動画の流れを前に出す
  • スマホ
  • 店のスタッフ
  • 動画を上げる
  • 荷物
  • 予約サービス
  • 演習2の部分
  • データベース
  • Aurora
  • 変換の状態
  • フォルダ
  • S3(原本)
  • 電気
  • EventBridge
  • 設定
  • Step Functions
  • 再生
  • MediaConvert
  • 人々
  • 利用者
  • 予約画面で見る
  • インターネット
  • CloudFront
  • フォルダ
  • S3(変換後)
  • 予約サービスは「S3 に置く URL」を渡し、状態を読むだけ。重い仕事は 1〜6 の流れが受け持つ
  • CloudFront と Aurora は、演習1・2で置いた部品をそのまま使い回している
  • ひらめき
  • 図は目的に合わせて描き分ける。既にある部分は1つの箱にまとめ、新しく足した流れを番号で追う。

演習3 見直す:失敗・お金・待ち時間

手順6です。非同期の構成は、利用者を待たせない代わりに、失敗が見えにくくなるという弱点があります。そこを重点的に見直します。

確かめたこと結果対応
夕方の波は?MediaConvert がまとめて受け、順に変換する。台数の管理はいらないそのまま
何度やっても失敗する動画は?再試行を使い切った後の行き先が無かった状態を「失敗」にし、SNS でスタッフに通知する手順を足す
30分以内に見られる?20分の変換+待ち。夕方に集中すると超えるおそれCloudWatch で「受付から完了まで」の時間を測り、アラームを付ける(第17章)
原本は?変換後も、原本を高いストレージクラスに置きっぱなしライフサイクルで安いクラスへ移す(第15章)
いくら?変換は出力した動画の長さ(分)に応じて、配信は通信量に応じて課金予算アラートで見張る。単価は料金ページで確認
持続可能性は?スマホに PC 用の大きな画質を配ると、通信も電気も無駄画面の大きさに合った画質を配る

見直しで見つかった「失敗の行き先」は、非同期の構成では必ず確かめる項目です。第24章のデッドレターキューと同じ考え方で、「うまくいかなかったものが、どこかに溜まり、誰かが気づける」ようにしておきます。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 19 / 24
  • 演習3 見直す:失敗・お金・待ち時間
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • OK
  • 夕方の波:MediaConvert がまとめて受け、順に変換する。台数の管理はいらない
  • NG
  • 何度やっても失敗した動画 → 状態を「失敗」にし、スタッフに通知する手順を足す
  • NG
  • 原本を上げっぱなし → 変換後はライフサイクルで安いクラスへ移す(第15章)
  • OK
  • 料金:変換は出力した動画の分数、配信は通信量に比例。上限を予算アラートで見張る
  • OK
  • 持続可能性:スマホには小さな画質を配る。通信量も電気も減る
  • ひらめき
  • 非同期にしたことで、失敗が「見えにくく」なる。失敗の行き先と、料金の増え方を必ず確かめる。

3つの演習に共通した「型」

3つの演習をふり返ると、困りごとの形ごとに、よく効く部品の組み合わせが見えてきます。

困りごとの形よく効く組み合わせ出てきた演習
中身が変わらず、読む人が多いS3+CloudFront。サーバーを持たない1・2・3
書き込みが大事・重なってはいけないRDB の一意制約とトランザクション、Multi-AZ2
重くて長い処理受け付けと処理を分け、キューや Step Functions でつなぐ3
大きなファイルサーバーを通さず、署名付き URL で S3 へ直接3
決まった時刻の処理EventBridge Scheduler+Lambda2

そして、3つの演習すべてに共通していたのは、部品の名前から考え始めなかったことです。

共通していたこと例
要件から「要らないもの」を読んだブログにはコメント欄も管理画面も要らない
数字が部品を選んだ「週2本」でサーバーを捨て、「20分」で Lambda を捨てた
困りごとの分だけ部品を足したブログ → 予約 → 動画と、構成が育った
今ある部品を先に使った状態の記録に、今ある Aurora を使った
見直しで、足りない所とやりすぎを探したNAT を AZ ごとに、失敗の行き先を足した

この型は、次の第31章で、本全体の「困りごと → 部品」の対応表としてまとめ直します。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 20 / 24
  • 3つの演習に共通した「型」
  • 困りごとの形
  • よく効く部品の組み合わせ
  • インターネット
  • 中身が変わらず、読む人が多い
  • S3+CloudFront(サーバーを持たない)
  • データベース
  • 書き込みが大事・重なってはいけない
  • RDB の制約とトランザクション、Multi-AZ
  • 砂時計
  • 重くて長い処理
  • 受け付けと処理を分け、キュー・Step Functions でつなぐ
  • アップロード
  • 大きなファイル
  • サーバーを通さず、署名付き URL で S3 へ直接
  • 時計
  • 決まった時刻の処理
  • EventBridge Scheduler+Lambda
  • ひらめき
  • 数字が部品を選び、困りごとが図を育てる。部品の名前から考え始めなかったのが、3つとも共通点。

自分でやってみよう:演習4

最後に、自分で考える演習を出します。図のメモの要件を、6つの手順で構成にしてみてください。

要件
社員3,000人が、月末に研修の小テストを受ける
受けられるのは月末の3日間だけ。締め切り前夜に集中する
答えの送信が消えるのは絶対にだめ。成績は5年保存する
受けた人の一覧を、人事がダウンロードする
問題には画像や動画もある

考えるときのヒントです(図の右)。

手順ヒント
2 数字にする3,000人が3日間に受ける。締め切り前夜の数時間に半分が集中したら、毎秒何回?
3 困りごと「送信が消えない」「前夜の集中」「3日以外はほぼ使われない」「5年の保存」
4 部品を選ぶ答えの受け付けと採点を分けるか? 3日以外の日にお金がかからない部品は?
6 見直す3日以外の日の料金は? 5年保存するデータの料金は? ログインは社内の仕組みと合わせる?

答えは1つではありません。サーバーレス(API Gateway+Lambda+DynamoDB)で組む人もいれば、演習2と同じくコンテナと Aurora で組む人もいるでしょう。どちらでも、要件の数字を根拠に選び、捨てた候補と理由を書けていれば、それはあなたの設計です。

できあがった図は、第28章の Well-Architected Tool の問いにも当ててみてください。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 21 / 24
  • 自分でやってみよう:演習4
  • 書類
  • オンラインの小テスト(社内研修用)
  • 考えるときのヒント
  • 社員 3,000人が、月末に研修の小テストを受ける
  • 手順2
  • 締め切り前夜のピークは?
  • 受けられるのは月末の3日間だけ。締め切り前夜に集中
  • 手順3
  • 困りごとを3つ以上
  • 答えの送信が消えるのは絶対にだめ。成績は5年保存
  • 受けた人の一覧を、人事がダウンロードする
  • 手順4
  • 受け付けと採点は分ける?
  • 問題の画像や動画もある
  • 手順6
  • 3日以外の日のお金は?
  • ひらめき
  • 答えは1つではない。6つの手順で進め、捨てた候補と理由まで書ければ、それがあなたの設計。

よくある落とし穴

設計の演習で、よくある失敗です。

落とし穴何が起きるかどうするか
要件を数字にする前に、部品を並べ始める要件に合わない「いつもの構成」ができる手順1・2を飛ばさない
最初から全部入り(マルチリージョン、Kubernetes など)作るのも動かすのも、お金も大変になる今の数字に合う大きさから始め、育てる
新しい部品を足したくなる部品が増えるほど、覚えること・壊れる所・料金が増える(第29章の直列)今ある部品で済むかを先に考える
図だけ描いて、理由を残さない後で「なぜこの部品?」に誰も答えられない選んだ理由と、捨てた理由を書く
うまくいく流れしか考えない同時に来たとき、失敗したときに壊れる「2人同時なら?」「途中で落ちたら?」と聞く

特に最後の項目は、演習2の二重予約、演習3の失敗の行き先で見たとおりです。構成図は、うまくいく流れを描くのは簡単で、うまくいかないときの流れで差が出ます。

迷ったら、手順1に戻りましょう。「誰の、どんな困りごとを解くのだったか」を読み直すと、たいていの迷いは消えます。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 22 / 24
  • よくある落とし穴
  • NG
  • 要件を数字にする前に、知っている部品を並べ始める
  • NG
  • 最初から全部入り(マルチリージョン・Kubernetes)にする
  • NG
  • 新しい部品を足したくなる。今ある部品で済むかを先に考えない
  • NG
  • 図だけ描いて、捨てた候補と理由を残さない
  • NG
  • 書き込みの重なり・失敗したときの流れを考えない
  • 迷ったら、手順1に戻る。「誰の、どんな困りごとだったか」から読み直す
  • ひらめき
  • いちばん多いのは、要件を読む前に「いつもの構成」を描き始めること。

試作するなら:お金と片付け

設計は紙の上でもできますが、本当にその数字をさばけるかは、小さく作って確かめるのが早くて確実です。この章の演習は紙の上なので片付けるものはありませんが、試作するときの注意をまとめます。

手順やること
見積もる構成図の部品を、そのまま Pricing Calculator(第4章)に並べる。演習2なら ALB・Fargate・Aurora・NAT・CloudFront など
見張る試作用のアカウントを分け(第27章の Organizations)、予算アラートを付ける
作るCDK などの IaC で作る(第18章)。手作業で作ると、消し忘れが出る
測る手順2のピークの数字を、負荷をかける道具で実際に流して確かめる
消すスタックを消し、S3 の中身・ログ・スナップショットなど残りやすいものを確認する

特に、NAT ゲートウェイ・Aurora・ALB は、リクエストが1つも来なくても時間で課金されます。試作が終わったら、必ずその日のうちに消します。Aurora やバックアップは、削除の前にスナップショットを取るか聞かれるので、試作なら取らずに消します。

また、演習2の SES のように、本番で使うには申請が要る部品もあります。試作の段階で気づけるのも、作ってみる利点です。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 23 / 24
  • 試作するなら:お金と片付け
  • 見積もる
  • Pricing Calculator で、構成図の部品をそのまま並べる(第4章)
  • 見張る
  • 試作用のアカウントに予算アラートを付けておく
  • 作る
  • CDK などで作る。手作業は消し忘れの元(第18章)
  • 測る
  • ピークの数字を、負荷をかけて実際に確かめる
  • 消す
  • スタックを消し、S3・ログ・スナップショットの残りを確認
  • 特に NAT ゲートウェイ・Aurora・ALB は、使わなくても時間で課金される。試作の後に残さない
  • ひらめき
  • 設計が正しいかは、小さく作って確かめるのが早い。試作は IaC で作り、終わったらスタックごと消す。

まとめ:6つの手順を回せば、白紙から構成が描ける

この章で見たことをまとめます。

手順やること演習で出てきた例
1 要件を読む要るものと、要らないものを読むブログにコメント欄は要らない
2 数字にする掛け算で桁を見積もるピーク毎秒20回、変換20分、最大5GB
3 困りごとを並べる要件と数字を指さし「普通に作ると?」と聞く二重予約、朝9時の混雑、長い変換
4 部品を選ぶ候補を2〜3出し、捨てた理由も書くEC2 を捨てて S3+CloudFront、Lambda を捨てて MediaConvert
5 図にする左から右へ流れを描く。目的に合わせて描き分ける予約の部分を1つの箱にまとめた
6 見直す6本の柱・判断の問い・単一障害点NAT を AZ ごとに、失敗の行き先を足した

構成図は、演習1のサーバーの無いブログから始まり、演習2で予約の部分が足され、演習3で動画の流れが足されました。困りごとが増えたぶんだけ部品を足して育てる。これが、要件から構成を考えるときの基本の動きです。

次の第31章は、この本のおわりです。本全体で出てきた「困りごと → 部品」の対応表と、部品を選ぶ前に自分に聞く判断の問いのチェックリストをまとめ、次に何を学べばよいかを案内します。

  • AWS でサービスを作る 30 ― 設計演習:要件から構成へ
  • 24 / 24
  • まとめ:6つの手順を回せば、白紙から構成が描ける
  • 書類
  • 要件を読む
  • 棒グラフ
  • 数字にする
  • 注意
  • 困りごとを並べる
  • 誰が・何を・どんなときに
  • 人数・量・止まってよい時間
  • 数字から出てくる難所
  • パズル
  • 部品を選ぶ
  • ネットワーク
  • 図にする
  • 検索
  • 見直す
  • 候補を比べ、理由を書く
  • 流れを線でつなぐ
  • 6本の柱と判断の問い
  • 演習1(ブログ)→ 演習2(予約)→ 演習3(動画)。どれも「数字 → 困りごと → 部品」の順で考えた
  • 部品を選んだ理由と、捨てた理由を書き残す。それが次に見直すときの出発点になる
  • ひらめき
  • 次の第31章は、本全体の「困りごと → 部品」の対応表と、判断の問いのチェックリストで締めくくる。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]