初めてのTerraform

記事タイトルとURLをコピーする

こんにちは。技術4課を福島です。

先日、同じ課のメンバーからTerraformに関するお話をしてもらったので、
その内容をブログにまとめたいと思います。

IaCとは

まず、Terraformのお話をする前にInfrastructure as Code(以下、IaC)についてです。

IaCとは、簡単に言うと
 インフラをコードで扱い、プログラムと同じようにコードで管理・更新を行うこと
です。

IaCのメリット

Iacを利用するメリットを手作業と比較して、以下に記載しました。

 ・作成/変更履歴
  手作業:作業ログを見れば分かる...?
  IaC:Gitを併用することでそのコミットログを見れば分かります。
 
 ・再現性
  手作業:作業ログや手順書を使ってできる...?
  IaC:同じコードを再利用できるので、再現性があります。
 
 ・構成管理
  手作業:資料は、ちゃんと更新されている...?
  IaC:コードを基に構築しているため、しっかり構成管理もできます。
  

IaCを運用する心構え

 ここまで、同じ課のメンバーの話を聞いていて、
 やっぱり、IaCって、便利だなーと思ってました。
 
 が、
 
 IaCを本気で運用する場合、「覚悟」が必要なるみたいです。
 
 というのも、IaCを利用する場合、以下の点を考慮する必要があります。
 
 ①IaCで構築したインフラを絶対に直接、構成変更しない。
  →直接、構成変更してしまうと、IaCのコードと差分がでてしまい、
   コードと実機で不整合が起きてしまうためです。
   そのため、構成変更をする場合、IaCを使って行う必要があります。
  
 ②ステートファイルを保持し続ける。
  →ステートファイルがなくなるとインフラを管理することができなくなります。

※ステートファイルとは、Terraformが管理しているリソースの状態を把握するためのファイルです。

Terraformとは

 前置きが長くなりましたが、ここからTerraformについてのお話になります。
 
 まず、Terraformは、IaCを実現するツールで、以下の特徴があります。
 
 ◆特徴
  ・HashiCorp(はしこーぷ)社がオープンソースで開発しているプロビジョニングツール
  ・AWS以外に、GCP、Azure、OpenStack、Vmware、他、に対応
  ・書式はDSL(domain-specific language/ドメイン固有言語)で記載
  ・複数のプロバイダに同時にプロビジョニングも可能

Terraformを使ってみた

 Terraformの使い方についても、お話してもらったので、実際にやってみました。
 私は、WSLにTerraformを導入して、使ってみました。 

Terraformのインストール

以下の流れでインストールをしました。

# apt-get install unzip
# wget https://releases.hashicorp.com/terraform/0.12.19/terraform_0.12.19_linux_amd64.zip
# unzip terraform_0.12.19_linux_amd64.zip
# mv terraform /usr/local/bin

無事にインストール完了!

Terraform v0.12.19

Your version of Terraform is out of date! The latest version
is 0.12.20. You can update by downloading from https://www.terraform.io/downloads.html
#

 

Terraformの初期設定

メインファイルを作成します。

# mkdir sample-prj
# cd sample-prj/
# vi main.tf
provider "aws" {
    profile = "kensho"
    region = "ap-northeast-1"
}

 →クレデンシャル情報は、セキュリティ的に直接、コードに記載しない方が良いため、
  profile変数を使って、AWSCLIのプロファイル情報を参照させています。

プロジェクトの初期化

# terraform init

Initializing the backend...

 :省略

Terraform has been successfully initialized!
 :省略

#

 

Terraformを使って、VPCの作成

次にTerraformを使って、VPCを作成したいと思います。
まずは、VPCを作成するためのコードを書きます。

# vi myVPC.tf
resource "aws_vpc" "myVPC" {
    cidr_block = "10.1.0.0/16"
    instance_tenancy = "default"
    enable_dns_support = "true"
    enable_dns_hostnames = "false"
    tags = {
        Name = "myVPC"
    }
}
#

コードの内容が問題ないことを確認します。

# terraform plan

コードの内容が問題なければ、実行します。

# terraform apply

 :省略
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

Enter a value: yes ★これらのアクションを実行しますか?と聞かれるので、問題なければ「yes」を入力

 :省略

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
#

作成できたことを確認します。

# terraform show

作成できたら、今度は、削除もしてみます。

# terraform destroy
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.

Enter a value: yes ★すべてのリソースを本当に破壊しますか?と聞かれるので、問題なければ「yes」を入力

Destroy complete! Resources: 0 destroyed.

 

他のリソースを参照してみよう

次は、他のリソースを参照してみようと言うことで、
今回は、IGWをアタッチするVPCのIDを参照してみたいと思います。

# vi myVPC.tf
resource "aws_vpc" "myVPC" {
    cidr_block = "10.1.0.0/16"
    instance_tenancy = "default"
    enable_dns_support = "true"
    enable_dns_hostnames = "false"
    tags = {
        Name = "myVPC"
    }
}

resource "aws_internet_gateway" "myGW" {
    vpc_id = aws_vpc.myVPC.id # myVPCのid属性を参照
    tags = {
        Name = "myGW"
    }
}

VPCの作成と同じようにplan→apply→showの順に実行し、
showでIGWが作成できたことを確認できればOKです。

# terraform plan
# terraform apply
# terraform show

確認できたら、削除します。

# terraform destroy

 

まとめ

今回初めて、Terraformを使ってみましたが、Terraformコマンドは、
CloudFormationのCLIコマンドより、分かりやすく使いやすいなーと感じました。

以上です。

福島 和弥 (記事一覧)

SRE2課

2019/10 入社