見出し画像

ガバメントクラウドでのSSG/SGアーキテクチャ - デジタル庁のサービス紹介サイトを公開

ガバメントクラウドでは、以前のnote記事( https://digital-gov.note.jp/n/nadb09f0987e9 )に記載したとおり「迅速、柔軟、セキュア、コスト効率」を最重要視してアーキテクチャの設計を行っています。

以前のnote記事「ガバメントクラウドで考える静的Webサイト向けアーキテクチャ」(https://digital-gov.note.jp/n/na0ed0e70bd6e)では、”SG (Static Generation)”のアーキテクチャを紹介しました。最近は同じアーキテクチャをSSG (Static Site Generator)と呼ぶことも多いですが、引用元で"SG"としているので以降もSGと呼びます。

そこでは、従来のサーバを立ててユーザからのリクエストのたびに画面を構成して返すSSR (Server Side Rendering)と比較して、最近の”SG”の手法ではスケーラブルでコスト効率のよいWebサイトを運用できると紹介しています。

Next.js等を使ったSGアーキテクチャとすることで、スケーラビリティの高いCloudFrontやS3を使ってコンテンツを配信でき、大規模なユーザ数やアクセス数の急増にも耐えうるスケーラブルな静的Webサイトを実現できます。サーバインスタンスを大量に並べてスケーラビリティを実現するよりも、このアーキテクチャではコスト削減を実現しながらスケーラビリティも確保できることが利点と考えられます。

「ガバメントクラウドで考える静的Webサイト向けアーキテクチャ」

今回、2023年12月に、デジタル庁Webサイトの一部であるサービス紹介サイト( https://services.digital.go.jp/ )を、ガバメントクラウド上に”SG”アーキテクチャを使ってリリースしましたのでご紹介します

サービス紹介サイトのアーキテクチャについて

前述の設計思想を元に、以下のようなアーキテクチャを採用しています。

CMS部分はDecap CMSを採用しています。いろいろなオープンソースCMSがありますが、後述するGitHub Actionsを用いたCI/CD部分との統合性を中心に検討した結果、Decap CMSを採用することにしました。

コンテンツ編集者は、Decap CMSでの編集により、編集結果がGitHub上でのPull Requestとして生成されます。それがマージされることにより、GitHub ActionsによってFirebaseへ静的ページとしてデプロイされる仕組みです。
サイト閲覧者は、Firebase上で生成済みの静的ページをCDN経由でアクセスします。

フロントエンドフレームワークはGatsby、ビルドシステムはTurborepoを採用しています。静的コンテンツのビルドは、Turborepoのリモートキャッシュ機能とGitHub ActionsのCachesを利用しており約1分17秒のビルド時間がかかっていたところを約2秒までの短縮を実現しています。

SGアーキテクチャの効果

今回採用したアーキテクチャが、われわれの目指す「迅速、柔軟、セキュア、コスト効率」にどう貢献するのかを説明します。

迅速
IaC(Infrastructure as Code)でインフラを構成しており、コンテンツもインフラもGitHubによるCI/CDを使って迅速な修正とデプロイ・リリースが行える構成になっています。修正したものはすぐにテスト環境にデプロイすることができ、テストに通ったものは人手によるリリースフローを実行することなくすぐに本番環境にリリースすることができます。

柔軟
静的ページをクラウドストレージとCDN(Content Delivery Network)に配置しているだけの構成のため、非常に大規模なアクセス負荷増大にも運用対応不要で柔軟かつ迅速にスケールします。計算処理等のリソースのキャパシティがボトルネックになることもありません。Headless CMSと呼ばれる今回採用したアーキテクチャの最大の特徴です。

Decap CMSでは、記事執筆とデザインが分離でき、柔軟にページのデザインを変更することもできます。

セキュア
すべてマネージドサービスで構成されており、静的ページがクラウドストレージとCDNに配置されているだけのため、いわゆる”サーバが落ちる”という事象が発生することもなく高い可用性を実現できます。上述したとおり、大規模な負荷増大時にもこの可用性は維持されます。そして、CMS部分が配信と完全に分離されているため、コンテンツの改ざんに対する攻撃に対しても有効です。

また、Webサイトの本番環境はすべてGitHub経由で運用されており、メンテナンス等のために人がログインすることはなくコンテンツ閲覧とGitHub以外はすべて閉じられています。GitHubからのアクセスは、Workload Identityを利用して認証しており、サービスアカウントキーなどの漏洩した場合に脆弱性につながるクレデンシャルを一切利用することなくセキュアな認証を実現しています。

コスト効率
CMSもコンテンツ配信部分も静的ページとして構成しているため、コストのかかる計算処理はコンテンツ生成時のみとなり、コスト効率が高いアーキテクチャになっています。

上述のとおり、負荷増大時にも人的な対応不要で安定して稼働するためインフラ運用コストもほとんどかかりません。CMS部分にもサーバやデータベース等使っていないため、インフラコストもそれを管理する運用コストもかかりません。運用担当者の心理的負荷も低く安心して運用できるアーキテクチャとなっています。

このように、ガバメントクラウドでは既存の取り組みやシステム構成に捕らわれることなく、ユーザーの利便性につながるようなアーキテクチャやテクノロジーを積極的に採用して行きます。これからもガバメントクラウドの活用例をポストしていきますのでご期待ください。

関連するデジタル庁の採用情報はこちら


デジタル庁Techブログの記事一覧はこちら

デジタル庁の採用に関する情報はこちら

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!