昨今のシステム開発において、IaC(Infrastructure as Code)を利用して効率よくシステム基盤の構築と管理を行うことは常識となってきています。
しかし、IaCのメリットを活かしたシステム基盤構築・運用管理が実現できていないケースも多くあります。
特に、大規模システムの開発においてIaC化を断念するプロジェクトが少なくないのではないでしょうか。
IaC化を成功に導くためには、大規模システム開発ならではの進め方を理解することが鍵となります。
自社で運用している大規模な基幹システムを更改する際に、IaCでの構築を採用する企業も多く、私たちもそのような開発プロジェクトに多く携わってきました。
今回は数ある事例の中から、大規模システム開発におけるIaC活用のポイントを紹介します。
大規模システムでのIaC活用における課題・問題
大規模システムでは膨大な数のサーバを作成するため、IaCコードの量も膨大な数となります。
決まった期間で大量のIaCコードを作成するだけであれば、人員を増員することでさばけることは容易に想像できるかと思います。
しかし、IaC構築の経験者だけを集めることは難しく、IaC未経験者を含めたメンバ構成でスキルアップさせながら進める工夫が求められます。
この場合、当然ながら担当者ごとにスキルレベルに差があるためIaCコードの品質にばらつきが発生します。
これらを未然に防ぐため、早期にコードの全体構成や規約類、構成管理方式を事前に整理することで、コード品質の底上げをすることが重要です。
また、大規模システムでは開発からサービス終了まで十数年かかるなど、システムのライフサイクルが長くなるケースがほとんどです。
そのため、十数年にわたって大量のIaCコードをメンテナンスする必要があります。
これはIaCでの構築経験がある人にとっては当たり前の話に見えるかもしれませんが、大規模システム開発においては開発担当者と運用担当者が異なる(開発会社から異なる場合も多い)ことがほとんどであり、運用担当者は既存のIaCコードの内容を一から理解する必要があります。
しかし、運用担当者側で大量のIaCコードをすべて目を通し、IaCコードの全体構成や各パラメータの設計根拠を理解してもらうことは非常に困難です。
IaC構築の経験者を運用担当者としてアサインできない可能性もあるため、IaCコードだけで引き継ぎを行うことは非常にリスクとなるでしょう。
そのため、IaCコードの設計内容を資料として残しておくことが肝要です。
具体的には、IaCコードの構成や試験の方針等をまとめた概要設計書や、各パラメータの設計根拠を示すパラメータ設計書の作成は必須となります。
このように、十数年にわたって大量のIaCコードのメンテナンスを継続できるように、設計根拠をドキュメント化することと構成管理の仕組みを準備することがポイントです。
筆者の事例における課題と解決策
ここで、筆者が実際に経験した大規模システムでのIaC活用における課題に対する解決策について事例を紹介します。
筆者は大規模システムをクラウド移行する案件に参画し、その中でも先に述べた課題に直面しました。具体的には、以下のような課題です。
- IaC未経験の担当者を含むメンバ構成での開発でIaCコードの品質にばらつきが発生する懸念
- 開発の中で生じた大量のIaCコードのパラメータ変更と実環境への反映に膨大な工数がかかりスケジュール遅延につながる懸念
これらの課題に対応するため、IaC推進チームを組成しコードの全体構成の整理(IaC化対象の選定、ディレクトリ構成やモジュール構成の検討等)や命名規約やコーディング規約の整理に加えて、ペアプログラミング会などを実施しプロジェクト全体のIaCスキルの底上げをしました。
これらのIaC推進チームの営みと並行し、IaCコードの自動生成ツールの整備・パラメータ設計書とIaCコードの執筆を以下のプロセスで進めました。
①手動構築用パラメータ設計書は多くのシステムで作成されており、IaC未経験の担当者でも作成が可能です。
しかし、①から③IaCコードをIaC未経験者が執筆するのは難易度が高くIaCで定義されるパラメータへの自動変換も難しいため、品質のばらつきが発生しやすくなります。
そのため、②IaC構築用パラメータ設計書を作成して③IaCコードへ自動変換するツールを作成することで、コードの品質のばらつきを無くすこととパラメータ変更と実環境への反映を効率的に行うことを実現し、IaCのメリットを活かした構築を実施することができました。
大規模システム開発におけるIaC活用の理想の進め方とは?
筆者の事例で紹介した解決策は、大規模システム開発でIaCを利用する上では必須で実施するべき内容になりますが、より理想的な進め方が考えられます。
筆者の事例の場合、パラメータ設計の直前のタイミングまでコードの全体構成・規約の整理が実施できておらず、それらをパラメータ設計と並行して行う必要があったため、①手動構築用パラメータ設計書の作成~③IaCコードの作成という進め方をせざるを得ませんでした。
ではどのような進め方が望ましいでしょうか。
第一に取り組むべきことは①’IaC全体構成の整理とIaCスキルの底上げです。
つまり、①’→②→③の進め方が理想的になります。
早期にIaC構築対象の整理やメンバのIaCスキルの底上げがされた状態とすることで、IaC対象のサービスについては②IaC構築用パラメータ設計書の作成から着手することが可能になり、効率的に進めることができるでしょう。
さらに、①’で整理したIaC全体構成は資料化までやり切るのが望ましいです。
これらの資料は運用担当者への引継ぎの際のインプットとなり、運用開始後も大量のIaCコードを継続的にメンテナンスしやすくなるでしょう。
ただ、プロジェクトの早期からこれらの検討を行うのは容易ではありません。
筆者の事例のように、推進チームを組成してプロジェクト全体のIaC活用を推進することも有効です。
プロジェクトの早期から検討を進めるためには、推進チームを組成するなどプロジェクト体制を工夫しIaC設計・開発をリードすることが、大規模システム開発におけるIaC活用を成功に導く鍵となるでしょう。
まとめ
今回は私たちが経験した事例から、大規模システムにおけるIaC化の課題と解決に導くポイントをお伝えしました。
IaC化によるメリットを享受するには、プロジェクトの早期からIaC構築対象の選定や規約の整理といった全体の構成を検討することが重要になります。
そのためには、推進チームを組成するなどプロジェクト体制面や構築の進め方を工夫する必要があることを認識していただけたかと思います。
既存システムのIaC化で悩まれる皆様の一助として、この記事が参考になると幸いです。
