AWSにおけるインフラのコード化(IaC)とは
目次
Infrastructure as Code=インフラのコード化とは?
Infrastructure as Code は、OS・ミドルウェアといったITインフラ構築・運用をコード化することを言います。現在AWS(Amazon Web Services)などにおいて、Infrastructure as Codeを利用した構築が進んでいます。また、GCPやMicrosoft Azureなどといった他のクラウドにおいても横断的に利用可能なInfrastructure as Codeツールも増えてきています。
本記事では、Infrastructure as Codeの利点や、AWSにおけるInfrastructure as Codeの活用方法について記載していきます。
Infrastructure as Codeの概要
Infrastructure as Codeとは、直訳では「コードとしてのインフラ」という意味です。ITシステムにおいては、ミドルウェアやOS、ネットワークなどのレイヤを「インフラ」と呼びます。従来このようなインフラ構築はGUIによるクリックや入力、コマンドの実行など、人の手で行っていました。このような手動で行っていたインフラの設定を、プログラミング言語のように決められたフォーマットに落とし込んでコード化し、コードに従って構築・保存を行うことをInfrastructure as Codeといいます。
なぜ、インフラのコード化が必要なのか?
ITインフラの構築をアプリケーションのようにコード化することは一見不便に感じるかもしれません。なぜ、インフラのコード化が必要なのか、メリットについて記載していきます。
インフラのコード化によるメリットとは?
インフラのコード化によるメリットは下記の2点が挙げられます。
- 再利用が可能で、高速に構築が行える
- ミスなく構築や変更が行える
具体的にどのようなメリットがあるのか見ていきましょう。
再利用が可能で、高速に構築が行える
プログラミングで他のコードから再利用してコーディングを実施するように、Infrastructure as Codeにおいても他の環境のコードを再利用する、といったことを頻繁に行うことができます。また、環境を複製する場合は既存のコードを使いまわすこともできます。このように、一度インフラをコードとして管理していれば、その後の環境構築を非常に高速に行えるようになります。
ミスなく構築や変更・管理が行える
従来のインフラ構築作業は、人の手で行う作業であるため、どうしても設定ミス等の人為的なミスが起ってしまったり、大量にサーバーなどの設定対象がある場合は多大な工数がかかったり、という問題点がありました。ITのインフラ部分はネットワークやOSの設定など、ミスをした場合は多大な手戻りが発生する可能性があり、ミスなく構築することが非常に重要な部分です。
また、インフラの変更が必要になった場合にも、設定ミスやドキュメンテーションの不備により既存の設計書と実際の環境が異なっている、ということがどうしても発生してしまいます。インフラの設計がコード化して管理されていれば、変更履歴や更新時の差分等が確認可能な状態で管理できるため、このような状態は起こりにくく、運用の確実性と効率性が向上します。
AWSのシステム開発や構築を高速化する、スタイルズのAWS DevOps(CI/CD)導入支援サービスはこちら→
インフラのコード化によるデメリット
Infrastructure as Codeにもデメリットが存在します。それは、学習コストがかかるということです。Infrastructure as CodeはYamlやJSONファイル形式で実装されることが多いですが、このようなファイルに不慣れな現場である場合は、慣れるために時間がかかってしまいます。
また、コードをGithubなどで管理していない組織の場合は、コードの管理方法から検討を行う必要があります。組織のコードに対する慣れや習熟度を見極めて導入を検討しましょう。簡単な分野から試験的に導入を行い、有識者を育成していくことも重要です。
AWSにおけるInfrastructure as Codeの概要
AWSにおいてもInfrastructure as Codeのツールが用意されています。AWSで利用可能なツールは現状下記の3点です。
- AWS CDK(Cloud Development Kit)
- AWS CloudFormation
- Terraform
上記のうち、Terraformはサードパーティの製品であるため、本記事ではAWS CloudFormationとAWS CDKについて説明します。
AWS CloudFormationとは
CloudFormationは主に、ネットワーク、IAMなどのセキュリティ、EC2などのサーバといった、インフラ部分を構築することができます。AWS上のほとんどすべてのインフラリソース構築を行えます。(一部、Global Acceleratorの細かい設定値など、対応していない内容もあります)。逆に、アプリケーションのコードを自動でサーバに展開する、といった目的には向いておらず、別のサービスを利用する必要があります。
AWS CloudFormationを使うメリット
一般的なInfrastructure as Codeに加えて、AWS CloudFormationを使うメリットとしては下記の3点が挙げられます。
コード(テンプレート)内の変数をインポート・エクスポートできる
CloudFormationで利用する、構築すべき環境を定義したファイルを「テンプレートファイル」といいます。 このテンプレート間において、変数などの受け渡しが可能になっています。例えば『Outputs』という要素を定義しておくと、テンプレートAで構築したVPCのIDを、テンプレートBでも利用することが可能です。
これにより、テンプレートファイルを細分化することができ、ファイルの容量が巨大化せず可読性を確保することができます。
StackSetsによるインフラの高速デプロイ
AWSでは、リージョンごとにインフラの構築が必要になります。StackSetsという機能を使えば単一のテンプレートでマルチリージョンにインフラ構築を行うことができ、構築にかかる工数を大幅削減することができます。
手動での変更を取り込める
せっかく作成した環境を手動で変えられてしまうと、インフラをコードとして管理できなくなってしまいます。このようなことを防止する為に、ドリフト(差異)を検出する機能が備わっており、手作業で行った変更をテンプレートに反映させることができます。
AWS CDK で行うコード管理
AWS CDKは、AWS環境を一般のプログラミング言語で記述できるツールキットです。CDKで記載したプログラムをもとに、AWS側でCloudformationのテンプレートとして解釈して実行し、インフラ構築がすすめられます。
AWS CDKを使うメリット
AWS CDKを使うことによる最大のメリットとしては、既存のプログラミング言語の知識でコーディングが可能である点です。システム開発の現場において、新しいプログラミング言語やツールが必要になると、時間と労力がかかります。AWS CDKは、TypescriptやPythonといった、ITシステム構築の現場で数多く利用されているプログラミング言語が使用でき、既に使用しているIDEやテストツール、ワークフローパターンを使用することができます。
AWSのシステム開発や構築を高速化する、スタイルズのAWS DevOps(CI/CD)導入支援サービスはこちら→
AWS CDK と CloudFormation の関係
AWS CDK と CloudFormationはあくまでも相補的な関係として活用場面を検討するといいでしょう。PythonやTypeScriptなどの言語を利用している現場であれば、AWS CDKを検討してみる、TerraformなどJsonファイルベースのツールを他に使用している場合はCloudFormaitonを使ってみる、などです。また、先述の通り、一部対応していないサービスも存在するため、適宜手動管理も考慮に入れることを前提として運用方法を考慮してみると、スムーズな活用が可能になります。