🈁

インフラエンジニアは、IaCに挑むべきなのか?

2023/03/31に公開

テーマ:インフラエンジニアとIaC

この記事について

本記事はクラウドの利用が進むにつれて話が出てくるinfrastructure as a cordに関して、インフラエンジニア(インフラSE)ができるようにするべきか?次の学習ステップとしてすべきか?その必要性をいつも通り例えを交えて分かりやすく考察します。

CI/CDとIaCの違いとは?

IaCと共にCI/CDという言葉をお聞きしたことがあるという方が多いのではないでしょうか?

ちなみにIaCとCI/CDは関係はありますが、別物です。

  • CI/CDは、Continuous Integration/Continuous Deliveryの略です。
  • IaCは、Infrastructure as Codeの略です。

私のように内容が入ってこない方へイメージでお伝えします。

"ざっくり、日替わり定食が CI/CDで、その中の お盆や食器がIaC の関係です。"

お好み焼き定食

いろんなおかずが、アプリケーションで、その器がインフラです。
毎日定食のおかずが変わります。
日によっては、本日は中華料理なので中華っぽい器に変更します。

中華丼

これがCI/CDイメージです。
献立を変更したらその内容で、味付けと提供が行われる日替わり定食です。
(ソフトウェアの変更、テスト、本番リリースを自動でできるようにする開発手法です。)

では、器(IaC)はなんなのか?
”サーバーなどのシステムインフラの構築を、コードを用いて行うこと”ですので、CI/CDとIaCは共に手法ということがお判りいただいたでしょうか。

次はCI/CDとIaCの関係について考察します。

CI/CDでIaCが必要か?

"日替わり定食が CI/CDで、その中の お盆や食器がIaCの関係"

ここでポイントになるのが、献立が変わると器を変える必要があるか?です。
(アプリが更新するのにインフラの変更が必要か?がポイントということです。)

結論からですが、決まり切ったセットがあるのであれば、パターンとして準備すれば問題ない。
(何度も同じ環境で作り変えをしなくても複数環境を準備すれば事足りる。)

これはオンプレではできませんが、AWSのようなクラウドであればできる方法ですね。
このような点から環境の準備ができるなら変更も少ないのでインフラをCI/CDに含めなくてもいいように思います。

No. App 環境
1 Aアプリ A環境
2 Bアプリ B環境
3 Cアプリ C環境

ただ、開発する場合、環境を3環境と共に開発・ステージング・本番など最低限3環境が必要など多くの数必要となります。費用も含めて環境管理が大変です。
もちろんオンプレだと費用が合わないですね。

このインフラ環境に対する”複数パターンの環境 × 必要環境分の構築”をしないといけないというのが、ポイントになります。

だからIaCをします。

この何度も同じ環境を作るというのがポイントになります。

何度も作ると人的ミスも出ます。
何度も作ると人件費がかかります。
何度も作ると環境によって求める基準に達してない可能性があります。

つまりはIaCが得意としている。

”誰がやっても、高度な環境を同じように作れること”

この構築の平準化の考え方はLinuxをやっている人は馴染み深いかもしれません。
コマンドを用意して実行すれば同じ環境を作れる。
sedなどでconfigを変更するように構成する。
WindowsでもPowershellによる機能のインストールなどできる部分が多くなっています。

ただこれらOSレベルの構築平準化は、IaCとは残念ながら違います。
実際はNetworkやマネジメントサービスなど含めたインフラを構築することがIaCですので、IaCはクラウドでできる最大のポイントと言えます。

※OSレベルの自動構築などもありますが、こちらは別途記事にて記載したいと思います。

IaCを実現できる製品は複数ありますが、筆者はAWSの利用が多いためCloudFormationを利用します。

https://aws.amazon.com/jp/cloudformation/

以下は別途記事で記載試合と思います。

  • 細かなCloudFormationの使い方
  • CloudFormationでのCI/CD

インフラエンジニアがクラウドをするには?

終始、CI/CDとIaCについてご説明しましたが、主題として挙げていた点について記載します。

インフラ畑のエンジニアがクラウドエンジニアになる上でIaCをやるべきか?

こちらの回答としては、オンプレのインフラエンジニアでやっていくということであれば、必要はありません。OSレベルの自動構築などの分野はやっておくべき。

クラウドインフラエンジニアとして実施していくならば、ほぼ必須ですので学習をお勧めします。

ソースを忘れてしまいましたが、AWSでインフラエンジニアの範囲はどこですか?
この質問の回答ですが、アプリエンジニアがアプリケーションだけに集中できるようにアプリを置いたらできますが、インフラエンジニアの範囲です。

この考え方から、インフラの範囲の広さがクラウドではかなり大きくなった。
その代わりアプリはアプリケーションに集中できるようになる。

その上で更にはAWSとDevOpsを読んでいただきたいですが、インフラエンジニアがする範囲はかなり大きいです。正直手作業では間に合わなくなってきた。だからことIaCの技術は必須ということです。

DevOpsについては以下の資料を読んで頂けたらと思います。
https://aws.amazon.com/jp/devops/

さいごに

インフラエンジニアがIaCを学ぶべきか?を回答するために以下を考察しました。
まずIaCの内容をご説明させて頂き、IaCの必要性を確認させていただきました。
次にインフラエンジニアがIaCを学ぶ不要必要を確認させて頂きました。

実際に技術的な観点から、以下を確認が必要と考えますので今後の記事で以下を記載して最後リンクを記載致します。

  • OSレベルの自動構築
  • IaCをCI/CDに組み込む

提案やお客様へ何を訴求するのかを考えるうえでお役に立てばと考えます。

不定期ではありますが、また記載したいと思います。

以上

Discussion