Terraform Cloud × GitHubを試した
Terraform meetup tokyo #2へ行ったときにTerraform CloudをおすすめされていたのでGitHubと連携させて試した。
Terraform Cloudを試す
事前準備
アカウント登録
まず、Terraform Cloudのアカウントを作成する。
アカウント作成の詳細は割愛する。
Organizationの作成
続いてOrganizationを作成する。 OrganizationはTerraform Cloudをチーム内で扱うための共有スペースみたいなもの。 名前は何でも良いけど、全ユーザでユニークである必要がある。 特に難しいことはないので作り方の詳細は割愛する。
WorkSpaceの作成
WorkSpaceはTrraform Clouod内で1つのTerraformコード群(ex GitHubのリポジトリ単位)を実行する場所、という認識。
連携はGitHub、GitLab、BitBucket、Azure DevOpsを選択可能。 GitHubとの接続しか試していないが、GitHubの場合は特定のリポジトリを選択して、そこにあるTerraformコードを実行させる形になる。
空のリポジトリは選択するとWorkSpaceの作成でエラーになるため、あらかじめコードを設置しておく必要がある。
ここでは以下のようなコードでVPC、サブネット、インターネットゲートウェイ、ルートテーブルを作成するコードを実行させる
main.tf
provider "aws" { access_key = var.aws_access_key_id secret_key = var.aws_secret_access_key region = "ap-northeast-1" } // Create VPC resource "aws_vpc" "main" { cidr_block = local.vpc_cidr.dev instance_tenancy = "default" tags = { Name = local.project_name } } // Create Public Subnet resource "aws_subnet" "public" { for_each = local.subnet_numbers vpc_id = aws_vpc.main.id availability_zone = each.key cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, each.value) } // Create Internet Gateway resource "aws_internet_gateway" "main" { vpc_id = aws_vpc.main.id } // Attach IGW on Route Table for Public Subnet resource "aws_route_table" "public" { vpc_id = aws_vpc.main.id route { cidr_block = local.vpc_cidr.prod gateway_id = aws_internet_gateway.main.id } } // Create Route Table resource "aws_route_table_association" "puclic-1a" { for_each = local.subnet_numbers subnet_id = aws_subnet.public[each.key].id route_table_id = aws_route_table.public.id }
variable.tf
variable "aws_access_key_id" {} variable "aws_secret_access_key" {} locals { project_name = "tf-example" vpc_cidr = { dev = "10.2.0.0/16" stg = "10.1.0.0/16" prod = "10.0.0.0/16" } subnet_numbers = { "ap-northeast-1a" = 1 "ap-northeast-1c" = 2 "ap-northeast-1d" = 3 } }
Terraform Cluod側への環境変数設定
Terraformの実行にはAWSのAccess key, Secret keyが必要だが、variables.tfとかに直接書くとセキュリティ的にも良くないので、Terraform CloudからTerraformを実行する際に利用するAccess key, Secret keyをTerraform Cloudの環境変数にセットする。
WorkSpaceを選択し、画面上のメニューのVariablesから設定する。
真ん中の「Terraform Variables」で「Add Variables」ボタンを押下して、AWSのAccess key, Secret keyの変数と値をセットする。
変数名はtfファイルの変数名(ここではaws_access_key_id
, aws_secret_access_key
)と合わせる必要がある。セットするときに右側のSensitiveの項目にチェックを入れると画面上は値が表示されなくなる。
Planの実行
この状態で、画面右上の「Queue Plan」ボタンを押下すると、Terraform Planを実行できる。
マージしたら自動でApplyさせるとかも設定によっては可能なようである。
まとめ
Terraform Cloudの基本的な設定の仕方、GitHubのリポジトリと連携させることでPullReqを出したときに自動でPlanさせることができる旨を書いた。