弊社では、AWS、GCPなどのクラウドインフラ構築、さくらVPS、オンプレミス等のサーバ上など様々なインフラ環境へ開発したアプリケーションをデプロイ、運用するケースがあります。色々な環境への環境構築がありますが、弊社では、誰がやっても環境を再現できる環境構築、素早く環境構築をできるをモットーにしています。ふと環境構築って昔は大変だったイメージがあるので、環境構築周りがどのように変わったのかまとめてみようかと思います。

ローカル環境構築

むかしの環境構築(〜10年前)

昔のプロジェクトでは、環境構築手順書なるものがあって、手順書通りに構築を行っても大抵失敗して、プロジェクトに長年いる人に確認をするってのが、10年前のプロジェクトのよくある姿でした。確認する人によって手順が異なったりして、2〜3日ぐらいかけてやっと環境ができるというのが平均であったと思います。

仮想化によってちょっと変わった環境構築(〜5年前)

Virtual Box等の仮想技術の出現によって、環境構築手順も専用のイメージを共有してもらうなどして少し手順は簡素化されましたが、細かいセットアップや場合によっては、ベースにしている仮想イメージが古いなど、そこから独自にOSを育てるなどをして初めて、環境ができるというのは、よくあった気がします。

コンテナ技術が出現してから、イミュータブルという言葉がよく聞かれるようになったと思いますが、5年前ぐらいまでは、開発時に動かしているアプリケーションがメンバーごとに異なることはざらにあったと思います。

コンテナを利用した開発環境(〜1年前)

最近では、リポジトリ内のレイアウトを見て、docker-compose.yaml等があるとそれだけで起動方法がわかります。dockerコマンドに精通している前提ですが。。。

クラウド環境

むかしの環境構築(〜10年前)

AWSが誕生した当初は、画面上でEC2のインスタンスを作成したりするのが当たり前でした。作成方法などを画面キャプチャして、一生懸命、手順としてまとめていた記憶があります。

cliを利用した環境構築(〜5年前)

徐々にクラウド側の機能でコマンドラインで使えるものが増えてくると、AWS CLI等のコマンドラインツールをベースに環境を構築するようになりました。手順書もコマンドの羅列になり、画面キャプチャをすることがなくなり、記載する内容も減った印象を受けました。

IaC(Infrastructure as Code)

インフラもコード化することが当たり前になった現在では、

AWSであれば、AWS Cloud Formation、AWS CDK

GCPであれば、Google Cloud Deployment Manager

などクラウドごとに専用のIaCの仕組みを提供していたり、Terraform等のクラウドによらないOSSのツール、あとは、サーバレスに特化したフレームワークであるServerless Frameworkなどが出現し、それぞれの技術に精通していると手順書などはなくてもコマンドを2,3叩くだけで環境の構築が簡単にできるのが現在です。IaC化の強みは、よく使うものはコードがされているので、そのあたりを組み合わせることで環境構築ができるということがあります。

最近あった環境構築では

弊社では、内部にIaCのテンプレートを持っているので、そのテンプレートをいくつか組み合わせて構築する、もしくはOSS技術に寄せるなど、アプリケーションの開発に集中しやすいインフラを構築することにしています。

AWSの場合

このケースでは、AWSインフラServerless Framework + Cloud Formationを使って過去に作成したテンプレートを組み合わせたり、必要な部分だけを使うことで、当初の予定を大幅に減らすことができます。

さくらVPSの場合

Linuxサーバ上にk8sを導入、アプリケーションのデプロイなどは、Helmで統一的に扱う。

弊社側で技術選択の余地がある場合は、基本的には、コンテナ化による仮想化技術、サーバレスアーキテクチャなどを中心にアプリケーション開発に負荷のかからないインフラアーキテクチャを選択することが多いです。

まとめ

最近は、環境環境周りも標準化され共通言語のように使われている傾向があります。エンジニアの皆さんは、裏にあるDocker、Cloud Formation, Google Cloud Deployment Managerなどこのあたりの技術は常にアップデートかけていく必要があると思います。