見出し画像

ガバメントクラウドにおけるIaC(Infrastructure as Code)の考え方

デジタル庁クラウドチーム
Cloud Architect 山本教仁

ガバメントクラウドでは、コスト効率、迅速性、柔軟性、セキュリティを基本的指標にしています。第1回では、この指標を実現するための技術要素の1つであるInfrastructure as Code(以下、IaC)についてガバメントクラウドにおける考え方を説明します。

IaCについて

本文におけるIaCの定義
本文におけるIaCとは、インフラの構成をJSONやYAMLで記述したり、プログラムコードとして記述し、これらコードから実際のインフラを構築する機能とその機能を使ってインフラを構成管理することの総称とします。

また、最近は、イミュータブル(変更不可能)にインフラを運用することと合わせて使われることが多いため、ここでのIaCは、イミュータブルなインフラ運用とセットで考えます。

イミュータブルなインフラ運用とは、実際のシステム環境に直接ログインしての手動操作で構成変更せず、コードの管理プロセスを通じてインフラを変更管理することを意味します。イミュータブルなインフラ運用については、また改めてどう考えているのかをご紹介したいと思います。

IaCのメリット

IaCのコードはいったん作成すればそれを何回でも別の環境でも流用可能です。

典型的なインフラ構成をコード記述し、それをマスターテンプレートとして使い回すことで、

(1)インフラ構成を迅速に作れ、
(2)設計工数と期間を短縮することでインフラ構築コスト削減につながり、
(3)手元のコードに記述された内容がインフラ構成のすべてなのでブラックボックス化を防ぎ頻繁なプリケーションの改善リリースに対しても柔軟に対応でき、
(4)マスターテンプレートの一部を強制することでガバナンスを効かせてセキュリティレベルを保持でき、
(5)IaCを徹底すればインフラ(OS)へのログインがなくなるためセキュリティ機能や運用もシンプルになる

という5つのメリットがあります。

ガバメントクラウドでのIaC活用

IaC実現の枠組み
政府内ではこれまでもクラウド技術への取り組みが行われてきました。その中でも、ガバメントクラウドにおいてはより最新のクラウド技術を活用すべくIaCにどう取り組むべきかについても検討を進めていました。

デジタル庁でガバメントクラウドを構築することになり、真っ先に取り組んだことの一つがこのIaCの実現です。

ガバメントクラウドでは、マルチクラウドを前提としており、利用するクラウドサービスプロバイダー(以下、CSP)にIaC機能を必須要件としていて、それぞれのCSP標準機能を利用してガバメントクラウドにおけるIaCを実現しています。複数のクラウドプラットフォームでIaCを実現するために、枠組みの共通化を行い、枠組みの実現方法自体はそれぞれのCSPの機能で実装する方針としています。

具体的には、ガバメントクラウドは大きく、管理領域(管理プレーン)とユーザ領域(ユーザプレーン)に分かれており、個別システムはユーザ領域内に配置されていきます。管理領域はこのユーザ領域自体を管理したり、ユーザ領域内の各システムへ環境を払い出すための機能が配置されます。

IaCは大きく、利用の申請を受け付けて管理領域から各システムへ環境を払い出す部分(環境自動適用テンプレート)と、各システムで初回環境払い出し時に実施する部分(ガバナンスベースのテンプレート)と、各システム内でインフラ構成をデプロイする部分(サンプルテンプレート)の3つの部分でそれぞれテンプレート化して利用します(図1)。

サンプルテンプレートを使って各システム内でインフラ構成をデプロイする部分が、各システムインフラ担当者がインフラ構築構成を作業する箇所となります。

図1:ガバメントクラウドでのIaC利用

IaCテンプレートについて
環境自動適用テンプレートは、申請を受け付けて環境を払い出す際に自動的に実行されるものでユーザが意識する必要はありません。ガバナンスベースのテンプレートは、環境払い出し直後の初回だけガイドに従って各システムで実施いただくもので、通知先のメールアドレス等環境固有の情報をパラメータとして指定して必要な機能を有効化するために実施いただくテンプレートです。

サンプルテンプレートは、典型的なインフラ構成をテンプレート化したもので、ガバメントクラウドからは当初はWeb3層等の構成のサンプルテンプレートを配布します。

利用者は、このテンプレートを適宜カスタマイズしてガバメントクラウド内で利用いただけます。ガバメントクラウドから利用システムへ配布するIaCテンプレートは、2021年当初は、AWSはAWS CDK(AWS Cloud Development Kit)、GCPはConfig Controllerのリソース定義YAMLとなります。

利用システム側で、サンプルテンプレートをフル活用すれば、環境インフラへのログインなしでのインフラ運用が可能となり、運用のためのネットワーク経路や認証アクセス制御等本来実現したいアプリケーション機能以外の部分での検討を大幅に簡素化でき、インフラ構成変更は常にコードで管理できるのでセキュリティも強化できます。

ガバメントクラウドでのIaCの効果

環境払い出しのIaCの効果
ガバメントクラウドでは、環境払い出しはすべてIaCとそのテンプレートで自動化されており、迅速化、工数削減を実現するとともに、頻繁なリリースに対応できるインフラ柔軟性の向上、全環境に同一の保護機能を強制するガバナンスを実現しています。

多数の環境を払い出していくうえで、最小限の工数と、全環境に同じ保護機能を維持できる仕組みは必須と考え、IaCを全面活用しています。

利用システムでのIaCに期待できる効果
また、利用システム側でもIaCテンプレートでのインフラ構成を実施することで、インフラ構築の迅速化とインフラ構成管理のコードでの一元管理が実現でき、新機能向けの環境増築の際も同じ構成と品質で柔軟に環境を増やしていくことができます。

さらに、本番環境についてIaCによる構成変更のみで直接ログインを禁止することで、本番データの保護が実現しやすくなるとともに、考慮すべきセキュリティもシンプルになります。こうすることで2ヶ月の短納期でサービス開始し、その後の機能改修や追加も週次の開発とレビュー、デプロイで継続的に実現しているシステムもあり、インフラ構築の迅速化の効果を出しています。

また、このシステムでは本番環境へログインしないことにより、本番環境へのマニュアル操作での運用を考慮した追加のセキュリティ対策や運用の仕組み、作業の承認フローなどが不要か大幅に簡略化可能となり、構築期間の短縮やコスト削減に貢献しています。

この効果は長い運用期間を通じて効いてきますので構築時に想定しているよりずっとインパクトが大きく、モダンなインフラ運用では必須になると考えています。

また、こうした継続的に改善されていくシステムでは、都度手作業によるインフラ変更をしていては設定漏れやミスが生じやすく、設計書とのずれを生みシステムインフラのブラックボックス化につながりやすくなると考えています。

IaCのコードでインフラ構成を管理し、手作業を根絶することにより、コードを見れば現在のインフラ構成がわかるようにすることで、構成変更を手作業や現場の担当者だけが知る暗黙知に押し込むことなく、変化に強い運用を実現できていると考えています。

IaCの効果を得るにあたっての考慮点
もちろん、すべてのケースでIaCが効果を発揮するということもなければ、IaCを実践すればすべての問題が解決するというわけではなく、システム構成や開発体制によっては効果が薄いこともありえます。

IaC自体を目的にして本末転倒になっても効果を得られないでしょう。ガバメントクラウドの中でもとくに管理側の環境払い出し部分については、上に書いたとおり一定品質で多数に対応するためにIaCを必須にしますが、各システム内でのIaC実践については効果を見極めつつの取り組みになるとは考えています。

一方で、コスト効率や迅速性、柔軟性、セキュリティを目的として正しくIaCを使えばほとんどのシステムでは効果があると考えています。また、各CSPのIaCサービスも日々進化しており、以前あったIaCの課題もどんどん解決されていっています。

大きな動向として今後のインフラ構築管理はIaCで実現するという方向性は変わらないと考え、ガバメントクラウドとしてIaCを模索していきたいと考えています。

ガバメントクラウドでのIaC活用の方向性

デジタル庁クラウドチームでは、こうした流用できるIaCのコードをガバメントクラウド向けに開発、整備し、ガバメントクラウド利用者に使ってもらえるようにしていっています。

今後も典型的なインフラ構成を実現するコードを順次揃えていきます。こうしたコードの流用で構築期間は大幅に短縮できます。また、IaCコードの使い方解説やトレーニングも今後順次展開していく計画です。IaCの考え方はこれまでのインフラ構築運用とは大きく変わりますが、ITインフラ構築運用の効率化、労働生産性の向上には大きく貢献できると考えています。

逆に、IaCのコードを流用できる仕組みと汎化されたインフラサービスになっていないと本当の意味でのクラウドとは呼べないとも考えており、ガバメントクラウドではこうしたクラウド技術を活用していきたいと考えています。

ガバメントクラウドを利用いただくにあたっては、IaCを通じたインフラ構築運用の効率化にもぜひいっしょに取り組み、少しでも日本のIT業界の変革と成長に貢献できればと考えています。

関連するデジタル庁の採用情報は以下のリンクをご覧ください


デジタル庁Techブログの記事一覧は以下のリンクをご覧ください

デジタル庁の採用に関する情報は以下のリンクをご覧ください