Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JAWS DAYS 2025 アーキテクチャ道場:個人的に振り返り・アウトプットしてみた

Avatar for Sashida Hideo Sashida Hideo
March 03, 2025
39

JAWS DAYS 2025 アーキテクチャ道場:個人的に振り返り・アウトプットしてみた

Avatar for Sashida Hideo

Sashida Hideo

March 03, 2025
Tweet

Transcript

  1. No. カテゴリ キーワード、想像してみた要件や方針 1 事前予約 • 特定期間(土日祝日や夏休み期間など)の事前予約が必要 …予約は日時指定、15分単位→15分ごとの予約枠をデータとして持っておく必要がありそう …1か月前から予約が必要 •

    特定期間ではなくても予約はできる …特定期間でなくても予約へ誘導するための施策が必要→特定期間外は入場料を割り引くとか →予約枠の情報の一部としてその時間帯での入場料金を持っておき、時期により入場料の高低を調整する • 決済はクレジット決済のみ …決済システムはブラックボックス→予約サイトへの大量アクセスがあったときの流量制限は必要なはず • 予約状況ページが必要 →混雑状況=空いている時間帯を表示する→予約枠ごとに予約可能数、予約済み数などのデータを持っておく必要がある • 会員登録しなくても予約できる …この場合、予約完了時にQRコード付きのメールをお客様に送信する→メール送信にはSESを使えばいいのではないか …会員の場合はスマホでマイページから当該予約のQRコードを表示してもらえばよい • 入場時にハンディターミナルでQRコードを読み取って予約を確認する …ハンディターミナルからAPIにより予約サイトの予約情報を確認できるようにする必要がある →顧客ごとの予約状況をもっておき、QRコードから読み取った予約番号みたいな情報と突合する 2 サメシャインファンクラブへの会員登録 • 会員認証が必要 …Cognitoを使えばいいのではないか • マイページがある …マイページから予約するとQRコードが表示される→このQRコードで入場時に予約確認ができるようにする必要がある • 来場回数に応じてプレゼントがある →会員情報として来場回数を記録できるとよい 3 スパイクアクセスによるサイト停止への対策 • 待合室のような仕掛けが必要が必要ではないか • 海外からのアクセスもある …CloudFrontで静的コンテンツをキャッシュする …海外から予約する人もそれなりにいる→マルチリージョンでシステム展開してもいいのだけれども開発・運用コストが高くなる ので、そこまで凝ったことはしなくていいや 4 UI • レスポンシブデザインでUIを開発して、デスクトップとモバイルで同一のフロントエンドを開発する ▪CIO説明からキーワードを拾って、要件や方針をいろいろと想像してみる
  2. No. カテゴリ キーワード、想像してみた要件や方針 5 分析機能 • 入場者の動向、前年同月比、前月比の比較を行う • 予約を誘導するための分析が必要そう →このため、予約せずに来た人、予約してから来た人(繁忙日、その他)、予約しても来なかった人の人数を15分刻み

    の予約枠のデータとして記録しておけばいいのではないか • 分析ツールとして、QuickSightによるダッシュボードを使う(DynamoDB→Zero ETLでRedshift Serverless→QuickSightのようにつなげる 6 経費削減が必要 • クラウド、従量課金によるコスト削減(あたりまえなんだけど) • さらにサーバーレスだとうまみが出てくるはず→EC2、VPC撲滅! →作業者の運用工数削減にも効いてくるはず →モダンなアーキテクチャという要件にもかなう 7 ネットワーク • 現状は、サメシャイン水族館の会社とは閉域網アクセスが必要 …入場予約システムへのアクセス(管理用途)→閉域網アクセスはやめてしまったほうがよい • お客様からのアクセスはファイアウォールを使って防御する必要がある→WAFを立てる • お土産業者、餌の仕入れ業者とのシステム連携 …お土産の販売管理システム、餌の在庫や発注を管理するシステムが登場してきそう …後者は「獣医」というアクターがいることを受けると、飼育管理システムというものにくくれそう →飼育管理システム=動物が食べた餌の量や、飼育状態(健康状態)を記録している 8 セキュリティ対策 • サプライチェーンリスクへの対策 …取引先が侵害されて、そこからVPN越しにアクセスされる→VPNを介したネットワーク接続がないようにする • ランサムウェア被害への対策 …S3の権限昇格とかを防止する→ん-、SSE-Cを禁止するようにバケットポリシーを設定するとか?
  3. お客様 (会員/非会員) サメシャイン水族館 会員サイト 予約サイト ・会員情報 ・入場回数 ・プレゼント情報 ・予約枠 ・予約情報

    予約確認メール 会員登録完了 などのコミュニケーション インフラ運用代行 入場受付係 ハンディ ターミナル 業務管理者 システム管理 (登録情報の保守) 分析 監視 メンテナンス お土産 販売管理システム 飼育管理 システム ・在庫情報 ・販売情報 プレゼント発送 お土産販売業者 販売システム 発注 (仕入、納入・発送) 餌販売業者 販売システム 販売係 発注(仕入、納入) ・動物の飼育状況 ・餌の在庫 飼育員 獣医 クレジットカード会社 決済システム 業務管理者 請求データ モバイル デスク トップ 予約確認 デスク トップ ダッシュ ボード
  4. No. 要件・制約 対策 1 • 運用のコスト削減(作業者の人件費、AWS費用) • モダンなアーキテクチャ • 従量課金制のクラウド上にシステムを構築し、固定費支払いによる無駄な支出を削減する

    • すべてをサーバーレスで構築する…サーバを意識することで発生する設計・運用(パッチ当てなど)の分量を減らす →EC2禁止! • クラウド(インフラ)の運用を専門業者に委託する…内製化しない。餅は餅屋に任せる。 • サメシャイン水族館社員による、システム管理などのすべてのアクセスをインターネット経由にする(閉域網の廃止→専用線 コストの削減) • Webサイト…CloudFront+S3でSPAを仕立てる(レスポンシブデザインによりデスクトップとモバイルのUIを統一する) • バックエンド処理…API Gateway+Lambda • データベース…DynamoDB • メールサーバ…SES • 分析…Redshift Severless+QuickSight 2 会員サイト、予約サイトへのスパイクアクセス発生による システムダウン防止 • CloudFrontにより静的コンテンツをキャッシュすることでサーバサイドへの負荷を軽減 • WAFのレートベースルールで、過剰なリクエストをスロットルする • バックエンド(Lambda)…十分な並列度を用意してスケールさせる • データベース(DynamoDB)…オンデマンドキャパシティによりある程度の負荷の変動に対処 • 上記の対策の範囲を超えるリクエストが押し寄せた場合に備えて、いったん「待合室」でリクエストを受け止めるようにする • 決済システム(クレジットカード会社)への決済データ送信…SQS+Lambdaで流量を制限し、決済システム側をダウンさ せないようにする 3 • 個人情報漏洩対策 • ランサムウェア被害への対策 • 転送時データの暗号化…HTTPS通信、TLS1.2以上にする、ACMによるサーバ認証(会員サイト、予約サイト) • 保管時データの暗号化…KMS(カスタマー管理キー)による暗号化、キーポリシーによる復号操作権限の絞り込み • その他 • AWSクラウドへのアクセス …IAM Identity Centerまたはスイッチロールにより一時的な資格情報を使ったアクセスを徹底する …IAMポリシー:送信元IPアドレス制限によるアクセス経路の絞り込み …S3バケットポリシー:SSE-Cによるクライアント暗号化の禁止→ランサムウェア被害への対策 • S3 • 出力されるログで個人情報をマスクする 4 サプライチェーンリスクへの対策 • VPN接続による外部業者とのシステム連携…VPN接続を行うものの、リクエストを隔離されたVPCで終端してネットワーク 的な侵入経路を断ち切る
  5. お客様 (会員/非会員) 入場受付係 業務管理者 AWS Cloud アクセス要求受付 アクセス可否確認 トークン発行 ・アクセス状況

    ・アクセス要求情報 アクセス要求登録 待合室機能 CloudFront distribution API Gateway Cognito ユーザープール AWS WAF S3 静的コンテンツ API Gateway お客様 向け機能 会員/予約サイト (お客様向け) CloudFront distribution Lambda オーソライザー 会員情報 予約情報 SES クレジットカード会社 決済システム S3 静的コンテンツ API Gateway 業務管理 機能 AWS WAF CloudFront distribution Cognito ユーザープール API Gateway Cognito ユーザープール ハンディ ターミナル Redshift Serverless QuickSight IAM Identity Center 来場者数など 分析 SQSキュー DynamoDB SQSキュー DynamoDB DynamoDB 請求データ 送信 会員/予約サイト (業務運用) S3 静的コンテンツ ・在庫情報 ・販売情報 販売員 DynamoDB 業務機能 AWS WAF API Gateway Cognito ユーザープール VPC インターネット お土産 販売業者 販売 システム Site-to-Site VPN 入庫(インバウンド) 発注・発送依頼 (アウトバウンド) お土産販売 管理システム S3 静的コンテンツ ・動物の飼育状況 ・餌の在庫 飼育員 DynamoDB 業務機能 AWS WAF API Gateway Cognito ユーザープール VPC インターネット 餌販売業者 販売 システム Site-to-Site VPN 入庫(インバウンド) 発注 (アウトバウンド) 獣医 飼育管理システム CloudFront distribution CloudFront distribution プレゼント発送 請求データ送信
  6. ▪会員/予約サイトに対するスパイクアクセス対策 お客様 (会員/非会員) CloudFront ディストリビューション (待合室機能) SQSキュー アクセス要求をバッファリング アクセス要求 データ

    アクセス状況 CloudFront ディストリビューション (予約サイト) 会員/予約サイトへ のアクセスへ API Gateway アクセス要求受付 アクセス要求登録 アクセス要求情報 業務機能 アクセス可否確認 トークン発行 ①待合室機能にアクセスし、会員サイト・ 予約サイトへのアクセス要求を送信 ②いったんアクセス要求を記録しておく ・アクセス要求の待機数 ・実行中のアクセス要求数 ・新規にアクセス可能な要求数 1件ごとのアクセス要求情報 ・待ち行列中の位置、 ・ステータスなど ③クライアントがポーリングでアクセス可否 を確認する(自分のアクセス要求に順番 が回ってくるまで) ④自分のアクセス要求に順番が回ってき たらトークンの発行を要求 ステータスを更新(トークン発行済み) ⑤トークンを渡して、会員サイトや予約サ イトへアクセスする オーソライザー (トークンを確認してアクセスを許可) ⑥実際にトークンを検証して不正アクセス でないことを確認する ⑦業務機能の処理開始・終了の都度、 アクセス状況などを更新してそれを記録
  7. お客様 (会員/非会員) 入場受付係 業務管理者 AWS Cloud Cognito ユーザープール AWS WAF

    S3 静的コンテンツ API Gateway お客様 向け機能 会員/予約サイト (お客様向け) CloudFront distribution Lambda オーソライザー 会員情報 予約情報 SES クレジットカード会社 決済システム S3 静的コンテンツ API Gateway 業務管理 機能 AWS WAF CloudFront distribution Cognito ユーザープール API Gateway Cognito ユーザープール ハンディ ターミナル Redshift Serverless QuickSight IAM Identity Center 来場者数など 分析 SQSキュー DynamoDB DynamoDB 請求データ 送信 会員/予約サイト (業務運用) 業務機能 プレゼント発送 請求データ送信 お土産販売 管理システム メール送信には SESを使う CloudFront+ S3によるSPAで UIを構築する SQSを挟んでクレジット決 済の流量を制限する→イ ベントソースマッピングの最 大同時実行数で制御 来場回数に応じた会員 へのプレゼント送付とし て、お土産販売管理シ ステムと連動して、グッ ズの発送を処理する DynamoDBの予約情報 を使って、来場者数などの 分析を実施する お客様、ハンディターミナル、業務管理者のそれぞ れで別々のアクセス経路を仕立てる →ハンディターミナル、業務管理者経由のアクセス はスパイクアクセス対策は必要ないはず サイトアクセス許可トークンとCognitoが 発行するIDトークンの検証して、アクセス 許可と会員の認証を実行 ハンディターミナル → Client Credentails Grantを使って認証
  8. AWS Cloud S3 静的コンテンツ ・在庫情報 ・販売情報 販売員 DynamoDB 業務機能 AWS

    WAF API Gateway Cognito ユーザープール VPC インターネット お土産 販売業者 販売 システム Site-to-Site VPN 入庫(インバウンド) 発注・発送依頼 (アウトバウンド) お土産販売 管理システム S3 静的コンテンツ ・動物の飼育状況 ・餌の在庫 飼育員 DynamoDB 業務機能 AWS WAF API Gateway Cognito ユーザープール VPC インターネット 餌販売業者 販売 システム Site-to-Site VPN 入庫(インバウンド) 発注 (アウトバウンド) 獣医 飼育管理システム CloudFront distribution CloudFront distribution CloudFront+ S3によるSPAで UIを構築する お土産販売業者とはS2S VPNで接続 する関係上VPCを構築する (インバウンド)お土産販売業者からの アクセスはVPC Lambdaで終端し、 DynamoDB等それ以降の構成要素 には直接アクセスさせない (アウトバウンド)インバウンドと同様に、 VPC Lambdaからお土産販売業者へ 発注・発送依頼のリクエストを送信する ※飼育管理システムもほぼ同じ構成
  9. ▪来場者数などの分析 予約情報 Redshift Serverless QuickSight 業務管理者 ダッシュ ボード Zero ETL

    ダッシュボードアクセス ユーザ認証 IAM Identity Center DynamoDBのZero ETL機能を使って 簡便に分析機能を実現する