情報畑でつかまえてロゴ
本サイトは NTTテクノクロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

Terraform連載 第1回:いまさら聞けない、IaCってなに?~Terraform、IaSQLの紹介~

「デジタルツイン」×「ネットワーク」事業部を跨いだコラボ企画!IaCについてご紹介します。

terraform_banner.pngのサムネイル画像

はじめに

みなさん、IaCとはなにかご存じでしょうか?IaCとはInfrastructure as Codeの略で、CPU、メモリといったサーバのインフラ構築を、コードを用いて自動的に行うことを意味します。

IaCは、近年ITインフラを効率的に保守運用するための欠かせないキーワードとなっており、弊社でもこれに着目しております。そんななか、今回は、弊社内の「IOWNデジタルツイン事業部」と「フューチャーネットワーク事業部」のコラボ企画!それぞれの事業部がいま注目しているIaC製品についてご紹介します。

関連記事:
「Terraform連載 第1回:いまさら聞けない、IaCってなに?~Terraform、IaSQLの紹介~」
Terraform連載 第2回:Terraform v1.5の紹介&活用方法について考えてみた
Terraform連載 第3回:Terraform v1.6のtestコマンドについてご紹介
Terraform連載 第4回:for_eachの使い方
Terraform連載 第5回:module(モジュール)の紹介
Terraform連載 第6回:Terraform v1.7 removedブロックの紹介
Terraform連載 第7回:importブロックはmoduleのリソースも取り込めるか?

コード化で様々な環境に適用できるTerraform

まず、IOWNデジタルツイン事業部の越谷がご紹介するIaCツールは、Terraformです。Terraformとは、HashiCorp社が提供している製品で、CPU、メモリ、ディスクといったインフラの構成やポリシーをコード化することで、クラウド・オンプレミス問わず、インフラ管理を自動化することが可能です。

① IaCを使うと何が嬉しいの?

そもそも、IaCのメリットはなんでしょうか。

インフラ構築のコード化により、自動で環境構築をしてくれるため、手作業による人為的なミスを削減することが可能です。同じ環境を何台も作成しなければならない場合にも、自動構築してくれるため作業時間を短縮できます。また、通常のソフトウェア開発と同じようにコードをバージョン管理することで、いつ修正したのかが明確となり、不具合の際などに第三者が検証しやすくなります。

現在、IaCツールには様々なものが存在しています。

 ・OSS:ChefAnsiblePuppetなど

 ・クラウド専用:AWS CloudFormationAzure Resource Managerなど

しかし、各パブリッククラウドやプロダクトに依存するものが多いため、例えば他のクラウドへ移行する際に汎用性が効かないことが難点です。

② Terraformで何ができるの?

そこで、Terraformの出番です。Terraformは、AWS, Azure, GCP, VMWareなど、様々な環境に対応しています。異なる環境に適用できるということは、

 ・異なる環境でも単一のコードで対応可能であり、使いまわしができる

 ・コードに基づいて検証し、デプロイするため、手順漏れや人為的ミスが防げる

 ⇒ つまり、安全に、かつ効率的にインフラ構築ができ、生産性が向上する

というメリットがあります。

Terraformには、各クラウドのプロバイダ(プロビジョニング対象製品のためのプラグイン)があり、これを介してリソースを作成します。

右の図は、その一連の流れを表しています。

「CODE」:
 インフラやポリシーをコード化して定義
HCL」:
 HCL(HashiCorp Configuration Language)という独自の言語を用いる
「PROVIDERS」:
 各サービスやプロダクトのAPIへ変換し、プロビジョニングを自動化
「OUTPUT」:
 リソースの状態や監査ログを出力

出典元:
https://www.networld.co.jp/product_file/file/Terraform.pdf

③ どうやってコードを作成するの?

Terraformを実行するための流れは、ざっくりと以下のようになります。

 1.Terraformをインストール
 2.定義ファイルの作成・配置
 3.Terraformプロバイダを設定(init)
 4.定義ファイルに基づいて、各製品のAPIに対応したコードを自動生成(plan)
 5.コード適用(apply)

 「2.定義ファイルの作成・配置」の、コード作成について少し紹介します。Terraformでは、拡張子.tfのファイル(テキストデータ)に、リソースの定義を記述します。なお、Terraformのコードは、HCLという独自の言語により記述されているため、構文には注意が必要です。

例えばVMware vSphereに構築したい場合、以下のように、providerにインフラ名”vsphere”を定義します。AWSの場合は、”aws”を定義し、それぞれ該当する変数を指定します。

実際に作成するリソースは、resourceに定義します。以下では、変数countに応じて仮想マシンの名前を001,002,…と順に付与していくような仕組みになっています。また、当然ながら、CPUやメモリ等のリソースの定義も可能です。

サンプルコード:main.tf


provider "vsphere" {
user = var.vsphere_user #vsphereのユーザー名
password = var.vsphere_password #vsphereのパスワード
vsphere_server = var.vcenter_server #vCenterのFQDN/IPアドレス
allow_unverified_ssl = true #SSL証明書の検証無効
}
[省略]
#Resource
resource "vsphere_virtual_machine" "vm" {
count = var.prov_vm_num #仮想マシンの数
name = "${var.prov_vmname_prefix}${format("%03d",count.index+1)}"
#仮想マシンの名前”接頭語”+”001”
[省略]
#Resource for VM Specs
num_cpus = var.prov_cpu_num #仮想マシンのCPUの数
memory = var.prov_mem_num #仮想マシンのメモリのMB
※変数の定義は別途必要


コード作成後は、terraform init/plan/applyの実行により、適用完了となります。

少し駆け足でしたが、Terraformの概要についてご紹介いたしました。ちなみに、TerraformにはOSSの無償版と有償版(Terraform Enterprise)があります。有償版にご興味をお持ちの方は、本記事末尾に情報を記載していますのでぜひそちらもご覧ください。

SQLでインフラを管理するIaSQL

ここまでTerraformの紹介をしてきましたが、ここからはフューチャーネットワーク事業部の山口が、IaCに関連した面白いツールを紹介致します。
事業部の名前の通り、普段はネットワーク(NW)・通信に関する業務を行っていますが、この領域においても、近年はハイブリッドクラウドを使用するケースも増えてきており、複雑化するインフラ管理の自動化や構成可視化という観点で、IaCはますます重要になってきていると感じています。

一方で、IaCを使用する際のデメリットとしてよく上げられるものの1つが「学習コスト」です。
具体的には、IaC製品ごとに異なる使い方(必要なファイル・コンポーネント構成やコマンド、実行方法等)やインフラ構築を実現するためのコードの書き方(ルール)の理解に時間を要する、という点があげられます。
例えば設定内容(処理内容)を記述したファイルの呼び方1つでいってもChefというツールは「レシピ(recipe)」と呼び、Ansibleというツールでは「プレイブック(playbook)」と呼びます。

これから紹介するツールは「IaSQL」と呼ばれるもので、名前の通りCodeではなくSQLでインフラを管理しようというものです。
DBを操作したことがある方やSQLを知っている人であればイメージが付きやすいかと思いますので、上記デメリットを抑制できる可能性があります。
例えば新規メンバが参画した際に、該当IaCツールの経験がないと何をやっているか理解したり操作するまでに時間を要する事が考えられます。
一方IaSQLであれば、ISOで標準化された、最も有名な言語の1つであるSQLをベースに操作ができる為、操作用のSQLを見せれば、行っている事のイメージが付きやすいのではないかと思います。

今回は最も基本的な例として、CRUDの概念に沿ってAWSEC2インスタンスの情報取得(R)、新規構築(C)・更新(U)・削除(D)について記載したいと思います。
とっつきやすさを感じていただければ、と思います。
環境は構築できている事前提となりますが、本ツールはdockerコンテナで簡単に試すことができます。
詳細はマニュアル(https://iasql.com/docs/)を参照ください。
なお、動作IaSQLバージョンは「Version 0.1.9」となります。

① EC2インスタンスの情報取得          


# select * from instance where region = 'ap-northeast-1';

ID 1
INSTANCE_ID i-0ef67691c99999999
AMI ami-0e0820ad173f20fb
INSTANCE_TYPE t2.micro
KEY_PAIR_NAME test_key
STATE running
USER_DATA null
TAGS {"Name":"testVM"}
HIBERNATION_ENABLED null
REGION ap-northeast-1
ROLE_NAME null
SUBNET_ID 10

元々AWS側でEC2インスタンス1つ立ち上げていた際に、情報を取得した際の結果例が上記となります。
EC2インスタンスの情報はIaSQLでは「instance」テーブルに格納されます。

また、whereでデプロイ先のリージョン(アジアパシフィック(東京))を指定しています。
この指定をしないと全リージョンの情報が出力されます。
EC2インスタンスはデプロイしない限り表示されませんが、他のリソースだと初期から設定があるものもあり(例:VPC)、全リージョンの情報が見える事で、目的の情報が見つけにくくなることがあります。
その為、目的に応じて条件を指定すると良いかと思います。

② EC2インスタンスの追加


# select * from iasql_begin();
# insert into instance ( ami, instance_type ,key_pair_name, tags, region) 
values ('ami-0e0820ad173f20fbb','t2.micro',' test_key ','{"Name":"IaSQL"}','ap-northeast-1' ) ;
# select * from iasql_commit();

上記insert文により、EC2インスタンス(インスタンス名: IaSQL)を新たに構築します。
なお、ここではNW設定(VPC関連やセキュリティグループ)やストレージ設定等は指定していませんが、その場合はデフォルトの設定で投入されます。

insert文だけだとinstanceテーブルにレコードが追加されるだけで、実際にAWS側にEC2インスタンスは構築されません。
構築するにはiasql_commit関数を使用します。
上記関数は単一では使用できない為、一番最初に対となるiasql_begin関数を使用します。
読んで字のごとくですが、DBMSでトランザクションをかける際の句であるbeginとcommitと同じような意味合いとなります。

③ EC2インスタンスの更新


# select * from iasql_begin();
# update instance set tags = '{"Name":"IaSQL2"}' where id = 2;
# select * from iasql_commit();

上記のようなupdate文により、インスタンスを更新可能です。
上の例では、インスタンス名を IaSQLからIaSQL2に変更しています。
(追加されたインスタンスIDが2と仮定。インスタンスIDはinstanceテーブルを参照する事で確認できます)

④ EC2インスタンスの削除


# select * from iasql_begin();
# delete from instance where id = 2;
# select * from iasql_commit();

上記delete文により、インスタンスを削除する事ができます。
上の例では、これまでの例で使ってきたIaSQL2インスタンスを削除しています。

⑤ IaSQLの注意点等

このようにSQLベースでAWSのリソースを操作可能です。
IaSQL独自の関数やテーブル等はあるものの、操作方法はSQLベースであり、初見の方もとっつきやすいのではないでしょうか。

なお、本ツールは現時点ではAWSにしか対応しておらず、またAWSの利用できるサービスも限りがある点は注意となります。

おわりに

本記事では、IaCという括りで、TerraformIaSQLについて紹介いたしました。みなさんも、インフラ構築の効率化によって生産性の向上が図れるIaCを、ぜひ積極的に活用してみてはいかがでしょうか。

IOWNデジタルツイン事業部では、Terraform EnterpriseおよびTerraform Cloud Plusに関する、日本語による保守サポートをご提供しております。Terraformの導入にあたってお悩みの方は、ぜひお気軽にご相談ください。

HashiCorp製品サポートサービス(弊社ホームページ)

連載シリーズ
著者プロフィール
「IOWNデジタルツイン事業部」×「フューチャーネットワーク事業部」
「IOWNデジタルツイン事業部」×「フューチャーネットワーク事業部」

[著者プロフィール]
ⅠOWNデジタルツイン事業部 第三ビジネスユニット
越谷 真帆(KOSHIYA MAHO)

フューチャーネットワーク事業部 第一ビジネスユニット
山口 佳輝(YAMAGUCHI YOSHIKI)