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

国内東⻄リージョンでウォームスタンバイのDR設計をした話

GoeShin
March 13, 2024

 国内東⻄リージョンでウォームスタンバイのDR設計をした話

JAWS DAYS 2024 の『【B-4】国内東西リージョンでウォームスタンバイのDR設計をした話』のスライドです。
東京リージョンから大阪リージョンへのフェイルオーバーを可能にする設計を行った際に工夫した点を記載しています。

GoeShin

March 13, 2024
Tweet

Other Decks in Technology

Transcript

  1. JAWS DAYS 2024 ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b JAWS DAYS 2024 松本

    祐樹 佐々⽊ 慎也 B-4 国内東⻄リージョンでウォームスタンバイの DR設計をした話
  2. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b ⾃⼰紹介 名前 3 松本 祐樹 所属 デロイト

    トーマツ コンサルティング合同会社 AWS歴 6年 • IPA 情報処理技術者試験委員 • AWS認定 全冠(12資格) • Google Cloud認定 全冠 (11資格) • Solutions Architect Expert 資格 主な業務 アプリやインフラのアーキテクチャ設計
  3. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b ⾃⼰紹介 名前 4 佐々⽊ 慎也 所属 デロイト

    トーマツ ノード合同会社 AWS歴 6年 • IPA 情報処理技術者試験委員 • AWS認定 全冠(12資格) • Azure Administrator Associate • Certified ScrumMaster など 資格 主な業務 クラウド(主にAWS)を⽤いたシステム構築
  4. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR要件 その1 • ⼤規模な基幹系システムであり、⾸都直下型地震など⼤規模災害が発⽣した場 合に、業務を継続できるようにする。 • 東京リージョンから⼤阪リージョンにフェイルオーバーする。

    • DR後⼤阪リージョンをメインリージョンとする。 7 ü 「API Gatewayが停⽌した」などサービスレベルの障害ではDRを⾏わない。 ü 開発や運⽤保守を⼤阪リージョンで⾏うことになる。
  5. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR要件 その2 • RTO/RPOは2時間とする。 • 多数の外部システムからアクセスされる。 8

    ü RTO/RPOを優先するが、過度にコストはかけたくない。 ü 切り替え後に、外部システムには再デプロイや設定変更を⾏わせたくない。
  6. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR戦略の選択 • DR要件からDR戦略としてウォームスタンバイを選択した。 9 DR戦略 RTO RPO

    コスト バックアップ & リストア 最⻑ 最⻑ ⼩ パイロットライト ⻑い ⻑い 中 ウォームスタンバイ 短い 短い ⼤ マルチサイト アクティブ/アクティブ 最短 最短 特⼤ ü 利⽤するAWSリソースが多く、バックアップ & リストアやパイロットライ トでは、RTOを満たせない懸念があった。 ü RTOを満たし、コストを抑えるにはウォームスタンバイが最善と判断した。
  7. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b アーキテクチャ図の抜粋(東京リージョン) 11 AWS Cloud 東京リージョン Amazon S3

    Amazon DynamoDB AWS Lambda Amazon API Gateway Internet Corporate data center Amazon SQS AWS Lambda Internet Amazon DynamoDB AWS CodePipeline AWS CodeCommit AWS CodeBuild Amazon Cognito ACM Amazon Route 53 AWS Backup SaaS IAM Corporate data center Server Corporate data center Server Corporate data center Server
  8. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b アーキテクチャ図の抜粋(東京リージョン) 12 AWS Cloud 東京リージョン Amazon S3

    Amazon DynamoDB AWS Lambda Amazon API Gateway Internet Corporate data center Amazon SQS AWS Lambda Internet Amazon DynamoDB AWS CodePipeline AWS CodeCommit AWS CodeBuild Amazon Cognito ACM Amazon Route 53 AWS Backup SaaS IAM Corporate data center Server Corporate data center Server Corporate data center Server 外部システムごとに ClientCredentialsGrantで認証 Route53の エイリアスレコードを ⼤阪リージョンの API Gatewayに切り替える Cloudformationテンプレートを CodeCommitに保管し、CodeBuild とCodePipelineでデプロイする
  9. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 1. APIクライアントの認証機能 16 実現したいこと • 外部システム向けにClient Credentials

    Grant による認証を⾏いたい • AWS環境内に構築する必要がある (外部のIDaaSは使えない) • DR発動後に外部システム側の設定変更(切り替え作業)を不要としたい • Amazon Cognitoを利⽤したいが、⼤阪リージョンは未提供 • 3rd Party製品等で構築を⾏う場合、Amazon Cognitoに⽐べて管理の⼿間 が増える 課題
  10. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 1. APIクライアントの認証機能 17 https://aws.amazon.com/jp/about-aws/whats-new/2023/09/amazon-cognito-new-regions/ 出典 Amazon Cognitoが⼤阪リージョンで利⽤可能になった!(2023/9)

    Amazon Cognitoを利⽤することに決定! …と⾔ったことを考えていたら AWS:Amazon Cognito がアジアパシフィック (⼤阪) リージョンとイスラエル (テルアビブ) リージョンでご利⽤いただけるようになりました サイトへのアクセス⽇:2024/2/14
  11. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 1. APIクライアントの認証機能 18 AWS Cloud 東京リージョン Amazon

    API Gateway Internet Amazon Cognito Corporate data center Server Amazon Route 53 ⼤阪リージョン Amazon API Gateway Amazon Cognito バックエンド バックエンド ①Amazon Cognito間で同じクライアン トID、クライアントシークレットを利⽤ できない。 =リージョン間で認証情報が異なる Corporate data center Server Corporate data center Server ②DR発動に合わせて、外部システム側 で認証情報の変更が必要 Amazon Cognito利⽤における新たな課題 アプリクライアント ( 外部システム) Amazon Cognito間で同じ認証情報を利⽤できない DR発動に合わせて認証情報の変更が必要
  12. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 課題への対応 1. APIクライアントの認証機能 19 AWS Cloud 東京リージョン

    Amazon API Gateway Internet Amazon Cognito Corporate data center Server Amazon Route 53 ⼤阪リージョン Amazon API Gateway Amazon Cognito バックエンド バックエンド Corporate data center Server Corporate data center Server AWS Lambda Amazon API Gateway AWS Secrets Manager ①Amazon Cognitoの前段にAPIGatewayとLambda を配置 リクエスト内の認証情報が東京リージョン⽤のものなら、 ⼤阪リージョン⽤の認証情報に差し替え (AWS Secrets Managerで認証情報を保持) アプリクライアント ( 外部システム) ③DRが発動しても認証情報の変更は不要! (常に東京リージョンの認証情報を利⽤) ②Amazon Cognitoへリクエストを送信 Amazon Cognitoの前段に処理を追加し、リージョン間の認証情報の差異を吸収
  13. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 21 実現したいこと • 東⻄リージョンの構成は8〜9割が同じ CFnテンプレートを効率的に管理したい •

    東⻄リージョンの更新をCI/CDパイプラインで⾃動化したい ウォームスタンバイ戦略では、⽇頃から最新構成を維持しておく必要がある (DR発動時に⾊々やっていては切り替えが間に合わない) 運⽤負荷を抑えつつ、更新漏れを無くしたい
  14. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 22 リポジトリ templates template1.yaml ・・・ root.yaml

    Resources: Resource1: Type: AWS::CloudFormation::Stack Properties: TemplateUrl: ./templates/template1.yaml Resource2: Type: AWS::CloudFormation::Stack Properties: TemplateUrl: ./templates/template2.yaml Resource3: Type: AWS::CloudFormation::Stack Properties: TemplateUrl: ./templates/template3.yaml ① ② DR設計前のリポジトリ構成 root.yaml(イメージ) template2.yaml template3.yaml ③ ① ② ③ • 東京リージョン⽤のCFnテンプレートを1つのリポジトリで管理 • root.yamlから⼦テンプレートを参照(ネストスタック構成)
  15. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 23 Resources: Resource1: Type: AWS::CloudFormation::Stack Properties:

    TemplateUrl: ../common/templates/template1.yaml Resource2: Type: AWS::CloudFormation::Stack Properties: TemplateUrl: ./templates/template3.yaml リポジトリ common primary secondary templates templates templates template1.yaml ・・・ template2.yaml ・・・ root.yaml root.yaml template3.yaml ・・・ 東⻄共通 CFnテンプレート 東京リージョン専⽤ CFnテンプレート ⼤阪リージョン専⽤ CFnテンプレート Resources: Resource1: Type: AWS::CloudFormation::Stack Properties: TemplateUrl: ../common/templates/template1.yaml Resource2: Type: AWS::CloudFormation::Stack Properties: TemplateUrl: ./templates/template2.yaml ① ① ② ② ③ ③ ① 東京リージョン⽤root.yaml(イメージ) ⼤阪リージョン⽤root.yaml(イメージ) リポジトリ構成⾒直し後 ①東⻄リージョンのCFnテンプレートを同⼀ リポジトリで階層化して管理 (共通、東京専⽤、⼤阪専⽤) ②スタックに含める⼦テンプレートをリージョン毎のroot.yamlで選択 テンプレートを共通利⽤しつつ、リージョン毎の個別定義も可能
  16. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 24 AWS Cloud 東京リージョン AWS CodeCommit

    AWS CodeBuild AWS CloudFormation Engineer Amazon EventBridge (変更検知) AWS CodePipeline git push ①東京リージョンの CodeCommitを更新 ③上位者が承認フェーズで変更 内容を承認後、環境を更新 DR設計前のCI/CDパイプライン ②ブランチの変更を検知して CodePipelieを起動
  17. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 25 AWS Cloud 東京リージョン AWS CodeCommit

    AWS CodeBuild Amazon EventBridge (変更検知) AWS CloudFormation Engineer Amazon EventBridge (変更検知) AWS CodeBuild (CodeCommit同期) AWS CodePipeline AWS Lambda (同期対象判定) git push git push AWS Lambda (実⾏要否判定) git clone ⼤阪リージョン AWS Lambda (実⾏要否判定) AWS CodeCommit Amazon EventBridge (変更検知) AWS CodeBuild 東京リージョンの更新対象ファイルに変更があ ったらCodePipelineを起動 (⼤阪向けの修正で実⾏されないように制御) 更新内容を⼤阪リージョンの CodeCommitへ同期 CI/CDパイプライン⾒直し後 ⼤阪リージョン更新対象ファイルに変更があっ たらCodeBuildを起動 (東京向けの修正で実⾏されないように制御) CodePipelineが提供されていないため、 CodeBuildだけでパイプラインを構築 東⻄リージョンを跨いだパイプラインを構築し、更新適⽤の⼿間を削減(⼀部課題あり)
  18. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 26 ⼤阪リージョンではAWS CodePipelineが提供されていない 課題 そのため、AWS CodePipelineの以下のような機能が利⽤できない

    • 承認アクション • 複数実⾏時のステージ移⾏待機 など 最低限、承認アクションは必要(承認なしの本番リリースはできない) • CFnの「変更セットの実⾏」操作を承認の代替とする? • 複数サービス使って承認アクションを作り込む?
  19. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 28 AWS Cloud 東京リージョン AWS CodeCommit

    AWS CodeBuild Amazon EventBridge (変更検知) AWS CloudFormation Engineer Amazon EventBridge (変更検知) AWS CodeBuild (CodeCommit同期) AWS CodePipeline AWS Lambda (同期対象判定) git push git push AWS Lambda (実⾏要否判定) git clone ⼤阪リージョン AWS Lambda (実⾏要否判定) AWS CodeCommit Amazon EventBridge (変更検知) AWS CodeBuild AWS CloudFormation AWS CodePipeline 東京リージョンと同じ構成でCI/CD パイプラインを構築 CI/CDパイプライン再⾒直し後 ⼤阪リージョンも東京リージョンと同じ構成でCI/CDパイプラインを構築 作り込みが不要となり、東⻄リージョンで操作も統⼀できた
  20. ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b まとめ|得られた知⾒ • DR発動時は外部システムへの影響にも配慮する 29 • ⼤阪リージョンのサービスラインナップは⽇々充実してきている バックアップ&リストア以外のDR戦略も実現可能になってきた!

    • ウォームスタンバイ戦略では、⽇頃から最新構成を維持しておく必要がある (DR発動時に⾊々やっていては間に合わない) ü リージョン間のIaCテンプレートを共通化する ü DRリージョン環境の更新⾃動化も考える 運⽤負荷を抑えつつ、更新漏れを無くすために… 影響を抑えて、スムーズに切り替えるために… ”リージョン”に対して疎結合になるように意識する ü 外部システムが持つリージョン固有の情報を意識する ü リージョン間の差異を吸収する⽅法を検討してみる