はじめに

副業先で一からAWS環境を作成することになり、そろそろ準備を考えてたときに、ふとTerraformCloudのことを思い出しました。

https://www.hashicorp.com/products/terraform/pricing/

最低の有料プランのチームで使う場合の違いとして権限管理が異なり、個人ユーズなら無料でも十分使えます。
また、tfstateをS3等で管理したくないのもあり、思い切ってTerraformCloudに任せてみることにしました。

※なお、AWSアカウントがあり、Terraformに触れたことがある方だったら30分もかからずにセットアップができます。

まずはリポジトリ連携

GitHubでTerraformを管理するリポジトリを作成し、TerraformCloudでWorkspaceを作成します。

この時に、特定のディレクトリをTerraform専用ディレクトリとしている場合は、変更を検知するディレクトリを指定できます。
私の場合は、今回は同じリポジトリでインフラを全部管理する予定だったため、シンプルに「terraform」というディレクトリを作成して指定しました。

backend.tfで変数指定

backend.tfファイルを作成して、varでAWSのアクセスキーとシークレットキーを変数で指定します。

provider "aws" {
access_key = var.aws_access_key
secret_key = var.aws_secret_key
region = "ap-northeast-1"
}

variables.tfで下記のようにします。

variable "aws_access_key" {}
variable "aws_secret_key" {}

variable "aws_region" {
default = "ap-northeast-1"
}

そして、Pushする前にTerraformCloudでAWSのアクセスキーとシークレットアクセスキーを登録します。
秘匿情報の場合はSENSITIVEを選択すると、中を確認することが出来ないように設定できます。
この辺はCircleCIなんかと使い方は似ていますね。

早速VPC用のtfを作ります。

resource "aws_vpc" "test-vpc" {
cidr_block = "192.168.0.0/16"
instance_tenancy = "default"
enable_dns_support = true
enable_dns_hostnames = true

  tags = {
    Name = "test-vpc"
  }
}

ここまで来たらテストなのでmasterへPush。
Pushすると、デフォルトですぐにTerraformPlanが走ります。
※この例ではコピペした際のゴミが残っていたようです。

TerraformPlanが通ったらいきなりApplyされるわけでじゃなく、確認ボタンが表示されます。

コメントを入力してConfirmPlanを実行します。

そうするとすぐにApplyが実行されて、結果が確認できます。

たったこれだけでTerraformをPlanしてApplyまでをWebでできる環境が作れてしまいました。便利すぎる。。

通知設定

SlackのWebhookを設定できる画面があり、設定すると下記のように通知をSlackで受け取ることができます。

感想

触ってみよう、リポジトリ作ろう、からものの30分くらいでTerraformCloudを使ってVPCの簡単なセットアップ(サブネット、インターネットゲートウェイ、ルートテーブルの紐付けらへん)まで出来てしまいました。
tfstateを管理しなくて良い反面、何かあった時の不安は若干ありますが、Terraformにその辺をお任せできるのが大変便利です。
ブランチを切ればGitHub上で、Terraformの結果が確認できますし、実行時間も早いのでストレス無く使えそうです。
会社で使うにはもう少し検証が必要ですが、5人までは無料で使えますし、WorkSpaceの作成制限はないので人数が少ない会社であれば積極採用はありだと思います。

TerraformCloudが個人ユーズでも使えるようになってから少し経ってしまいましたが、思いつきで使ってみた割にはとても便利だったので是非まだ触っていない方にはオススメです。

カテゴリー: Terraform