みなさん、こんばんは。サニービュー事業部の小寺です。
Infrastracture as Code(IaC)ってご存じですか?

すごく使っている!という方もいれば、初めて聞く方と分かれる言葉かな、と思います。先日システムテンプレート作成のためのIaC活用についてのウェビナーに出席したので、改めてどのようなサービスかまとめてみたいと思います。

Infrastructure as Codeとは

IaCについて、まず定義したいと思います。
Infrastructure as Code は、OS、ミドルウェアといったITインフラ構築・運用をコード化することを示します。
インフラの構成をJSONやYAMLで記述したり、プログラムコードとして記述し、これらコードから実際のインフラを構築する機能とその機能を使ってインフラを構成管理すします。
わざわざコードを書くの?と思われる方もいるかもしれません。でも、様々なメリットがあるので、現在AWSにおいても、IaCを利用した構築が進んでいます。

IaCの5つのメリット

IaCのコードはいったん作成すればそれを何回でも別の環境でも流用可能です。典型的なインフラ構成をコード記述し、それをマスターテンプレートとして使い回すことができます。

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

AWS環境でのコード管理はどうする?

AWS環境はみなさんどのように管理されていますか?リソースのライフサイクルの管理方法も複数あります。
・AWS CloudFormation で行う管理
・AWS CDK
・AWSマネジメントコンソール
・AWS CLI

アプリケーションのコード管理は自動化されているけど、インフラ面は手動で運用されている方もいらっしゃるかもしれません。
まずはAWS環境でコード化をしていこうと思われる方に向けて、どのように考えれば良いかをお伝えします。

・最初から100%を目指さない。コード化できないもの、しないものがあって良い
全てを CloudFormation、CDKだけで管理しようとしない
構成ではなく、環境操作の手続きを定義する場合は、CLIやシェルスクリプトを使う
・巨大にしない。適切なサイズ・範囲に分割する
大きすぎるものは把握しづらい
修正するときの影響範囲も大きくなりがち
・大事なことは、利用される各自の状況・立場に合わせて、コード化の要否を判断すること
コード管理する目的はなんですか?どんな課題を解決したいですか?に立ち帰って考えることが大切です。

AWSから提供されるIaCのサービス

AWS CloudFormation(CF)とAWS Cloud Development Kit(CDK)の2つです。ただ、AWS Cloud Development KitはバックエンドではCFで動いています。どのような違いが実際にはあるのか見てみましょう。

CFはテキスト形式で宣言的 に記述されたテンプレートからAWSのリソースを作成します。
一方でCDKはAWSの環境を一般のプログラミング言語で記述できるツールキットです。CFと比較すると少ないコードで記述することができ、CFで実際にデプロイする内容の確認を行うこともできます。CDKは主には3つのコンポーネントに分かれます。
(1)CoreFramework:CDKを構成する基本要素
(2)AWS Construct Library:AWS Construct Library
(3)AWS CDK CLI:CDKアプリケーションを操作するツールでCloudFormationテンプレートを生成・デプロイします。

CDKを学んでみよう

お勧めのCDKの学習方法について、お伝えします。まずは環境のセットアップが重要です。

セットアップする学習ツールの紹介です。→こちら
AWS CDK CLI のインストールと設定、最初の CDK プロジェクトの作成、最初のインフラストラクチャのデプロイについて知ることができます。

なぜ、CDKが良いのか?AWS CDKを使うことのメリットは、一般ののプログラミング言語の知識でコーディングができます。AWS CDKは、TypescriptやPythonといった、ITシステム構築で数多く利用されているプログラミング言語が使えます。既に使い慣れた人であれば、新しくCFに慣れるよりもCDKの方が学習コストが不要という意味では適しているかもしれないです。

まとめ

今後も典型的なインフラ構成を実現するコードが増えていくと思われます。
IaCを活用することで、AWS構築期間は大幅に短縮かつ安価に自動化が進んでいくと想定されます。
IaCの考え方はこれまでの特にオンプレミスでのインフラ構築運用とは異なるものですが、コスト削減、人的ミスを減らし、セキュリティを向上させるメリットもあります。
IaCのコードを流用できる仕組みと再現性がある使いまわしができるAWS環境のインフラ構築を早く取り入れることが、本当の意味でのクラウド活用と呼べるのかもしれないですね。