Managed Service Column <システム運用コラム>

Infrastructure as Code

Category: 入門編

2021.01.16

はじめに

Infrastructure as Code は、OS・ミドルウェアといったITインフラ構築・運用をコード化することを言います。
人の手によってインフラ構築・運用が行われると人為的ミス、工数が増えコストが上がるなどの問題がありますが、Infrastructure as Codeで自動化すれば、ミスやコストの削減につながります。

この記事では、Infrastructure as Codeの概要とともに、Infrastructure as Codeを活用する目的やメリット、利用するうえでの注意点などについてご紹介します。ぜひご一読ください。

Infrastructure as Codeとは何か

Infrastructure as Codeとは、直訳では「コードとしてのインフラ」という意味です。インフラとは、モノやサービスを提供するために整備された基盤の設備のことで、Infrastructure as Codeにおいての“Infrastructure”はOS・ミドルウェアなどを指します。

従来このようなインフラ構築は人の手で行っていましたが、最初に用意した設計書にしたがってコマンドを打っていく作業は、規模が大きくなると非常に手間がかかり、莫大なコストと工期が必要でした。また、人の手で行う作業であるため、どうしても人為的なミスが起こりやすいという問題点もありました。

Infrastructure as Codeは、この設計書をコードとして表したものです。
あらかじめ設定した「インフラ構成管理ツール」でOSやミドルウェアのインストール、その際のユーザー名・パスワードのコードを記述します。その後、コードを実行すれば記述どおりの処理がされます。
一度コードを記述してしまえば実行するだけでインフラ環境を構築できます。また、同じコードを実行するので、大量のサーバーを構築する際にも人為的ミスもなく、同じ環境を作ることができるのです。複数のサーバーで同じ環境を再現できることとで、インフラ設定の差異に起因した問題が起きづらくなります。

Infrastructure as Codeのためには、上述のツール「インフラ構成管理ツール」が必要です。代表的なものは「Chef」や「Ansible」で、ほかにも種類があり、それぞれ異なる言語が採用されています。

なぜインフラ構築の自動化が求められるのか?課題は何か?

デジタル化が急速に進む昨今、ITシステムにはより素早く、より効率的に構築・管理・運用することが求められています。

特に、処理するデータ量の増大により、多くのサーバーを構築・運用しなければならないという企業も少なくないでしょう。そのために必要な工数は膨大であっても、短期間での構築・リリースが要求されます。短期間で実現するには、当然多くのエンジニアが必要となり、コストがかさんでしまうという問題点も出てきます。

これは、インフラについても同様のことがいえます。そこで、Infrastructure as Codeによってインフラ構築・運用を自動化し、より素早く効率的にITインフラを整備することが重要視されているのです。

Infrastructure as Codeは、大きなプロフェクトなどでも人為的ミスのリスクを抑えながらインフラの構築・運用が可能な一方で、課題があるというのも事実です。

スキルに関する問題

技術的な課題は、Infrastructure as Code実装における最初の壁だといえるでしょう。 基盤運用スキルのみしかない場合や不慣れな開発言語を扱うことになる場合、Infrastructure as Codeの仕組みや開発言語を理解するための学習時間やコストが必要です。

実装難易度の高さ

複数の異なる基盤や厳しいセキュリティ要件がある場合には、Infrastructure as Codeの実装が困難になります。また、サーバー更改といった現行踏襲型のプロジェクトでは、設計や構築だけでなく、大幅に運用プロセスを変更しなくてはなりません。

組織の壁

Infrastructure as Codeによるインフラ構築は、組織の体制によって阻まれるケースもあります。例えば、ITインフラの運用グループと開発グループのコミュニケーションが円滑でない場合や、そもそも委託による構築では、Infrastructure as Codeの実装がより難しくなるでしょう。また、属人的な運用をしている企業も、コード化にはややハードルがあるかもしれません。

費用対効果

大量のサーバーの構成を一括変更する場合はよいのですが、少数のサーバー構成を変更するために、コードを書いて、実行して、となると、費用対効果が出ないケースがあります。

Infrastructure as Codeのメリット

上述した通り、Infrastructure as Codeは、インフラ構築時の人為的ミスの排除と、構築工数・コストの削減において非常に有用であるといえます。

その他にも以下のようなメリットが得られます。

<開発時>

  • 専用のUIを通すことなく、インフラの変更を自動化できる
  • コードを一度記述すれば、共有や再利用ができる
  • ソフトウェアの開発と同様の手法でバージョン管理できる
このことから、ビルド→テスト→デプロイを繰り返すアジャイル開発と同じ考え方でインフラを管理できます。

<リリース後>

  • インフラ構成をコード化することで、稼働中のサーバーを正確に把握することができる。(利用しなくなったインスタンスなどを放置することがなくなる)
  • デプロイした環境のセキュリティリスクを管理しやすくなる。(ACL 設定なども Infrastructure as Code で管理)
  • システム増強の際のインスタンス追加が簡単にできる。

Infrastructure as Codeの利用上の注意点

Infrastructure as Codeを利用する際には、インフラ構築・運用の際にどこまで自動化を行うか、明確に決めなければならないという点に注意が必要です。 自動化する範囲が明確に決められてない場合、サーバーが急増すると構築方法が混在することになり、サーバーの構成・設定がサーバー間でばらつき、結果どんな設定がされているか調査しないとわからないサーバー群ができあがる、構成自動化ツールを効果的に使えない、といった問題につながりかねません。( 出典:「Infrastructure as Code:クラウドにおけるサーバー管理の原則とプラクティス」)

このような問題を回避して、Infrastructure as Codeを進めていくためには、現在の状態と今後の展望を明確にし、何をどこまで自動化するのかを見極めることが重要です。

おわりに

今回はInfrastructure as Codeの目的やメリット、注意点などについてご紹介しました。インフラ構築の自動化が求められる理由はご理解いただけたでしょうか?

インフラ構築や運用は、従来は人の手で行われてきたため、コマンドの入力ミスなどの人為的ミスの可能性がありました。また、システム規模が大きくなると構築工数やコストが増えることもありました。

Infrastructure as Codeを採用すると、一度インフラ構成をコード化すれば再利用が可能であるため、人為的ミスを回避しながら効率良くインフラ構築・運用が可能です。ただし、自動化する部分、手作業で行う部分を明確にして、構築・運用するようにしましょう。

Tag: Infrastructure as Code

Contactお問い合わせ

お見積もり・ご相談など、お気軽にお問い合わせください。

single.php