Terraformを試してみよう

自動化をしよう!

今時のクラウドは自動化をやって当たり前な部分が割とあります。
今では自動デプロイ・自動テストは言うに及ばず、クラウドリソースの定義も自動化することもできるようになっています。
その中で現在よく使われているツールがTerraformです。
Alibaba Cloudも全てのリソースではないもののTerraformに対応しており、リソースの作成を自動化することができます。
こちらではAlibaba CloudにてTerraformを使用した自動化を簡単に説明します。

Terraformとは?

HashiCorpが作ったインフラストラクチャをコードで定義して作成するためのツールです。
“Write, Plan, and Create Infrastructure as Code” とうたわれています。
端的に言うとクラウドリソース(仮想マシンとかストレージとか)をコードで定義して自動で作れるようにするツールです。
Terraform公式:  https://www.terraform.io

Terraformのインストール

Windowsの場合は以下のダウンロードページからWindowsの32bit版 or 64bit版をダウンロードしてZIPファイルを解凍し、中にあるterraform.exeをPATHの通った場所に配置するだけです。
Linuxの場合は自身の環境にあったバイナリをダウンロードして必要な場所に配置します。
使用しているディストリビューションに合ったバイナリをダウンロードしてください。
Terraformダウンロードページ:  https://www.terraform.io/downloads.html

 

定義の作成

1から定義を作るのはさすがに大変なので、サンプルを参考に作る方がいいでしょう。
以前はAlibaba CloudのGitHubアカウント内にTerraform Providerと共にサンプルが置かれていたのですが、現在ではTerraform公式のGitHub内に存在しています。
また、Alibaba Cloud関係者の方が作られたサンプル集もありますので、そちらも参考になります。
ここは後者のサンプル内の標準的なサンプルを利用して仮想マシン環境を自動で作ってみます。

 

上記のGitHubから以下のファイルをダウンロードしてきます。
outputs.tf
provisioning.sh
terraform.tf
terraform.tfvars.sample
> terraform.tf
このファイルにリソースの定義がされています。
詳細な内容については今回は割愛しますが、Alibaba Cloud上でセキュリティグループを作成し、仮想マシンを作成してIPアドレスを紐づける等の定義を行っています。
> terraform.tfvars.sample
こちらは変数を定義するファイルです。リージョンの情報の他にAPIキーなどを定義します。
実際に使用するときにはファイル名を terraform.tfvars に変更して使用しましょう。
access_keyとsecret_keyにそれぞれ自身の環境のAccessKeyを記載しましょう。
terraform.tfファイル内に記載することもできますが、キー情報は重要な情報のため、外部ファイルに分離して間違えて公開されることが無いようにしている場合は多いです。
**キー情報などは漏洩すると勝手にリソースを作られ、気が付いた時にはとんでもない支払額になっていた、などという事になりかねないので注意して扱ってください。**
> outputs.tf
これはTerraformの実行後に出力する情報を定義します。
このサンプルの場合ですとグローバルIPアドレスの作成も行っていますので、リソース作成時に作成されたIPアドレスを確認するために出力を行う形となっています。
(後々ポータル上からも確認はできますが)
> provisioning.sh
terraform.tfの中で呼ばれます。user_dataの行を見るとわかります。
内容的にはファイルを見ればわかりますが、httpサーバーをインストールして開始するシェルスクリプトが書かれています。
resource “alicloud_instance” “web” {
instance_name=”terraform-ecs”
availability_zone=”${var.zone}”
image_id=”centos_7_3_64_40G_base_20170322.vhd”
instance_type=”ecs.n4.small”
system_disk_category=”cloud_efficiency”
security_groups=[“${alicloud_security_group.sg.id}”]
vswitch_id=”${alicloud_vswitch.vsw.id}”
user_data=”${file(“provisioning.sh”)}”
}

リソースの作成

まず、terraformを初めて使う人は以下のコマンドを実行してください。

terraform init

このコマンドを実行しないとTerraformがAlibaba Cloudの定義を理解できずエラーになってしまいます。
正常に完了したら続いてplanで定義ファイルが妥当であるかを確認します。

terraform plan -var-file=”terraform.tfvars”

-var-fileは先ほど編集した.tfvarファイルを指定します。
エラーが無ければplanがすべて正常終了した旨が表示されます。

最後に実際にリソースを作成します。

terraform apply -var-file=”terraform.tfvars”

これが正常終了するとクラウド側に仮想マシンその他が出来上がっているので、想定通りの物ができているかポータル上から確認してみましょう。

 

終わりに

駆け足でしたがいかがでしたでしょうか。
クラウドリソース作成の自動化は複数のクラウドリソースを一度に作成できますし、それを開発用などに何度も作ることになる場合などに重宝します。
Alibaba CloudでもGitHub上でTerraformへの対応を進めており、対応リソースが増えていくと思います。
皆様も自動化をより進めてみてはいかがでしょうか?