【Terraform】そろそろIaCデビューしたいのだ!

10月 11, 2023

どもです。在宅勤務で下半身は基本スウェットのsaisaiです。


みなさま、"IaC"はご存知でしょうか。"Infrastructure as a code"の略でインフラ構成をコードで管理してしまおうというものです。IaaSの登場とともに爆速的に普及しているようですが、うーむ、文字ではなかなか理解できませんね…。


というわけで本日は、IaCツールの一種であるTerraformを使ってみたので、セットアップ方法などを備忘録として残しておこうと思います。


いやぁ、Terraformほんとすごい。もっと早く触れておくんだった。

Terraformのセットアップ

まずはbrewを使ってTerraformをインストールしましょう。

s.tanaka ~ % brew install terraform

インストール確認がてらバージョン確認しておきましょう。

s.tanaka ~ % terraform --version
Terraform v0.14.6

このあと"tfenv"という超便利バージョン管理ツールをダウンロードするので競合を避けるためシンボリックリンクを解除しておきましょう。

s.tanaka ~ % brew unlink terraform

それでは超便利バージョン管理ツールをインストールします。

s.tanaka ~ % blew install tfenv
s.tanaka ~ % tfenv --version
tfenv 2.2.0

なんと以下のコマンドで現在インストール可能なTerraformを確認し

s.tanaka ~ % tfenv list-remote

お好みのバージョンをインストールできちゃいます。とりあえず2種類インストール。

s.tanaka ~ % tfenv install 0.12.25
s.tanaka ~ % tfenv install 0.14.6

インストールしたバージョンは以下のように確認可能です。まだ使用するバージョンは設定されていない模様。

s.tanaka ~ % tfenv list
  0.14.6
  0.12.25
No default set. Set with 'tfenv use <version>'

なんとなくver.0.12.25を選択します。

s.tanaka ~ % tfenv use 0.12.25
Switching default version to v0.12.25
Switching completed
s.tanaka ~ % tfenv list
  0.14.6
* 0.12.25 (set by /usr/local/Cellar/tfenv/2.2.0/version)

ちなみに.terraform-versionをリポジトリに含めることでtfenvでインストールするバージョンを統一できます。チーム開発がますます捗ります。

s.tanaka ~ % echo バージョン > .terraform-versioん

Terraformの下ごしらえは以上です!

git-secretを設定しておく。

今回はTerraformでAWSサービスを操作しようと思っているのですが、その際必要になるのがAWSのアクセスキーとシークレットアクセスキーです。これら二つのキーは非常に協力な力を持っているので、この先git-hubなどに誤って晒してしまわないように先手を打っておきましょう。


git-secretをインストールしてセットアップすることでキー情報などを含んだ変更をCommitする際警告を出してくれるようになります。

s.tanaka ~ % brew install git-secrets
s.tanaka ~ % git secrets --register-aws --global
OK
s.tanaka ~ % git secrets --install ~/.git-templates/git-secrets
✓ Installed commit-msg hook to /Users/tanakasaiki/.git-templates/git-secrets/hooks/commit-msg
✓ Installed pre-commit hook to /Users/tanakasaiki/.git-templates/git-secrets/hooks/pre-commit
✓ Installed prepare-commit-msg hook to /Users/tanakasaiki/.git-templates/git-secrets/hooks/prepare-commit-msg
s.tanaka ~ % git config --global init.templatedir '~/.git-templates/git-secrets'

これでgit-hubへのpushも怖くありません!

EC2を立ててみる

準備も整ったところで早速Terraformを使用してみましょう。適当な名前のディレクトリを作成してtfファイルを作成します。今回はtest.tfとしました。

s.tanaka ~ % mkdir test-terraform
s.tanaka ~ % touch test.tf

では、テキストエディタでファイルに設定を書き込んでいきます。今回はEC2を立ち上げるように書いてみました。クレデンシャル情報は"aws configure"コマンドなどで予め設定しておいてください!

provider "aws" { 
  profile = "default" #defaultプロファイルのクレデンシャル情報を参照
  region = "ap-northeast-1" #リージョンを指定しましょう。
}

resource "aws_instance" "example" {
  ami           = "ami-0c3fd0f5d33134a76" #AWS公式AMIのID(Amazon-Linux2)
  instance_type = "t2.micro" #インスタンスタイプ
  vpc_security_group_ids = ["sg-0e940864378501bcc"] #セキュリティグループ、事前に作成してください
  key_name = "test-key" #キーペアの名前、こちらも予め作成してください
  availability_zone = "ap-northeast-1a" #AZを指定します

  tags = {
    Name = "test-Terraform" #Nameタグです
  }
}

tfファイルの準備ができたらリソースの作成に必要なバイナリファイルを揃えます。といってもコマンド一つで完結します。

s.tanaka terraform-test % terraform init
Terraform has been successfully initialized!

terraform planを使用すれば、リソースを操作する前に何が起こるかを事前に確認することができます。

s.tanaka terraform-test % terraform plan

問題なさそうなら、早速Terraformを発動してみましょう!わくわく…。

s.tanaka terraform-test % terraform apply
Enter a value: yes
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

“1 add"ということでなんか追加されたっぽいです!AWSコンソール画面で確認してみると…

無事インスタンスが立ち上がっている!やりましたね!

リソースの設定を変更してみる

リソースの作成は無事完了しました。次は作成したリソースの設定を少し変更してみます。tfファイルの内容を以下のように変更。

-instance_type = "t2.micro"
+instance_type = "t3.micro"

それではもう一度Terraformを発動してみます。すると、"1 changed"ということで無事変更が行われた模様です。変更内容も表記されていますね!

s.tanaka terraform-test % terraform apply
~ instance_type                = "t2.micro" -> "t3.micro"
Enter a value: yes
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

再びコンソール画面を覗いてみます。

インスタンスタイプが変更されてる!やりました!

最後に作成したリソースを削除しましょう。Terraform、削除もとても簡単で

s.tanaka terraform-test % terraform destroy
Enter a value: yes
Destroy complete! Resources: 1 destroyed.

デストロイしてやるだけです。コンソール画面を見てみると…

無事デストロイ(終了)してますね!

ひとこと

というわけで本日はTerraformを使用した初IaCに挑戦してみました!


非常に便利なのでこれからもどんどん使用していきたいですね。ちなみにTerraform自体はGo言語で作成されているのだとか。


Go言語の学習にも力を入れているので、相乗効果を発揮して機能拡張などできればいいな〜と淡い期待を抱いています。


他にもCloudFormationやche、AnsibleなどIaCを実現するツールがありますので興味がある方は調べてみることをお勧めいたします!


ここまで読んでいただきありがとうございました!


-saisai-


↓本日のオススメ教材

Terraform

Posted by CY