Slide 1

Slide 1 text

JAWS DAYS 2024 ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b JAWS DAYS 2024 松本 祐樹 佐々⽊ 慎也 B-4 国内東⻄リージョンでウォームスタンバイの DR設計をした話

Slide 2

Slide 2 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b はじめに • ⼤阪リージョンが2021年3⽉に正式に公開されてから、DR(Disaster Recovery) を検討する機会が増えてきました。 • このセッションでは、開発で利⽤するすべてのリソースをAWSサービスだけで 構築したシステムに対して、ウォームスタンバイのDR設計を⾏った際に得た知 ⾒をお話しいたします。 2

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b ⾃⼰紹介 名前 4 佐々⽊ 慎也 所属 デロイト トーマツ ノード合同会社 AWS歴 6年 • IPA 情報処理技術者試験委員 • AWS認定 全冠(12資格) • Azure Administrator Associate • Certified ScrumMaster など 資格 主な業務 クラウド(主にAWS)を⽤いたシステム構築

Slide 5

Slide 5 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b アジェンダ 1. DR要件 2. アーキテクチャ 3. DR設計時に検討したこと 5

Slide 6

Slide 6 text

DR要件 6

Slide 7

Slide 7 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR要件 その1 • ⼤規模な基幹系システムであり、⾸都直下型地震など⼤規模災害が発⽣した場 合に、業務を継続できるようにする。 • 東京リージョンから⼤阪リージョンにフェイルオーバーする。 • DR後⼤阪リージョンをメインリージョンとする。 7 ü 「API Gatewayが停⽌した」などサービスレベルの障害ではDRを⾏わない。 ü 開発や運⽤保守を⼤阪リージョンで⾏うことになる。

Slide 8

Slide 8 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR要件 その2 • RTO/RPOは2時間とする。 • 多数の外部システムからアクセスされる。 8 ü RTO/RPOを優先するが、過度にコストはかけたくない。 ü 切り替え後に、外部システムには再デプロイや設定変更を⾏わせたくない。

Slide 9

Slide 9 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR戦略の選択 • DR要件からDR戦略としてウォームスタンバイを選択した。 9 DR戦略 RTO RPO コスト バックアップ & リストア 最⻑ 最⻑ ⼩ パイロットライト ⻑い ⻑い 中 ウォームスタンバイ 短い 短い ⼤ マルチサイト アクティブ/アクティブ 最短 最短 特⼤ ü 利⽤するAWSリソースが多く、バックアップ & リストアやパイロットライ トでは、RTOを満たせない懸念があった。 ü RTOを満たし、コストを抑えるにはウォームスタンバイが最善と判断した。

Slide 10

Slide 10 text

アーキテクチャ図 10

Slide 11

Slide 11 text

ハッシュタグ:#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

Slide 12

Slide 12 text

ハッシュタグ:#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でデプロイする

Slide 13

Slide 13 text

DR設計時に検討したこと

Slide 14

Slide 14 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR設計時に検討したこと 1. APIクライアントの認証機能 2. 東⻄リージョンの構成管理 14

Slide 15

Slide 15 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR設計時に検討したこと 1. APIクライアントの認証機能 2. 東⻄リージョンの構成管理 15

Slide 16

Slide 16 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 1. APIクライアントの認証機能 16 実現したいこと • 外部システム向けにClient Credentials Grant による認証を⾏いたい • AWS環境内に構築する必要がある (外部のIDaaSは使えない) • DR発動後に外部システム側の設定変更(切り替え作業)を不要としたい • Amazon Cognitoを利⽤したいが、⼤阪リージョンは未提供 • 3rd Party製品等で構築を⾏う場合、Amazon Cognitoに⽐べて管理の⼿間 が増える 課題

Slide 17

Slide 17 text

ハッシュタグ:#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

Slide 18

Slide 18 text

ハッシュタグ:#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発動に合わせて認証情報の変更が必要

Slide 19

Slide 19 text

ハッシュタグ:#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の前段に処理を追加し、リージョン間の認証情報の差異を吸収

Slide 20

Slide 20 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b DR設計時に検討したこと 1. API認証機能の構成 2. 東⻄リージョンの構成管理 20

Slide 21

Slide 21 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 21 実現したいこと • 東⻄リージョンの構成は8〜9割が同じ CFnテンプレートを効率的に管理したい • 東⻄リージョンの更新をCI/CDパイプラインで⾃動化したい ウォームスタンバイ戦略では、⽇頃から最新構成を維持しておく必要がある (DR発動時に⾊々やっていては切り替えが間に合わない) 運⽤負荷を抑えつつ、更新漏れを無くしたい

Slide 22

Slide 22 text

ハッシュタグ:#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から⼦テンプレートを参照(ネストスタック構成)

Slide 23

Slide 23 text

ハッシュタグ:#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で選択 テンプレートを共通利⽤しつつ、リージョン毎の個別定義も可能

Slide 24

Slide 24 text

ハッシュタグ:#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を起動

Slide 25

Slide 25 text

ハッシュタグ:#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だけでパイプラインを構築 東⻄リージョンを跨いだパイプラインを構築し、更新適⽤の⼿間を削減(⼀部課題あり)

Slide 26

Slide 26 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 26 ⼤阪リージョンではAWS CodePipelineが提供されていない 課題 そのため、AWS CodePipelineの以下のような機能が利⽤できない • 承認アクション • 複数実⾏時のステージ移⾏待機 など 最低限、承認アクションは必要(承認なしの本番リリースはできない) • CFnの「変更セットの実⾏」操作を承認の代替とする? • 複数サービス使って承認アクションを作り込む?

Slide 27

Slide 27 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 2.東⻄リージョンの構成管理 27 https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-codepipeline-seven-regions/ 出典 AWS CodePipelineも⼤阪リージョンで利⽤可能になった!(2023/11) …と⾔ったことを考えていたら AWS:"84$PEF1JQFMJOF ͕͞Βʹ ͭͷϦʔδϣϯͰར༻Մೳʹ サイトへのアクセス⽇:2024/2/14

Slide 28

Slide 28 text

ハッシュタグ:#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パイプラインを構築 作り込みが不要となり、東⻄リージョンで操作も統⼀できた

Slide 29

Slide 29 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b まとめ|得られた知⾒ • DR発動時は外部システムへの影響にも配慮する 29 • ⼤阪リージョンのサービスラインナップは⽇々充実してきている バックアップ&リストア以外のDR戦略も実現可能になってきた! • ウォームスタンバイ戦略では、⽇頃から最新構成を維持しておく必要がある (DR発動時に⾊々やっていては間に合わない) ü リージョン間のIaCテンプレートを共通化する ü DRリージョン環境の更新⾃動化も考える 運⽤負荷を抑えつつ、更新漏れを無くすために… 影響を抑えて、スムーズに切り替えるために… ”リージョン”に対して疎結合になるように意識する ü 外部システムが持つリージョン固有の情報を意識する ü リージョン間の差異を吸収する⽅法を検討してみる

Slide 30

Slide 30 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_b 本⽇はご参加いただきありがとうございました。アンケートのご記⼊をお願いします。 アンケートご記⼊のお願い 30