Terraform Cloud を早速使ってみました
Terraform Cloud
関連URL
- HashiConf'19 にて発表されたSaas型サービス Terraform Cloud
とりあえずのお試し
Classmethod さんの記事をそのまま試してみました。 * 5人まで無料! Terraform Cloudを使ってみた
Terraform アカウントの作成
- 以下の手順でTerraform Cloud アカウントを作成します
- 二段階認証は設定しておきましょう
VCS との連携
- Workspace は、GitHubやGitLab などと連携させる必要があります
- GitHubとの連携方法
- https://www.terraform.io/docs/cloud/vcs/github.html
- Terraform Cloud と GitHub の設定を何度か行き来するのですが、手順通りに進めれば連携ができます
- 以降は、GitHubを使うことを前提に記載します
HCL をGitHub へPUSHする
Workspace という処理単位ごとにリポジトリを割り当てていくことになります
main.tf
という名前で以下のファイルを作成し、リポジトリへPUSHしてください
以下の例は、AWS 上に新しいVPCを一つ作成する定義となります
variable "aws_access_key" {} variable "aws_secret_key" {} provider "aws" { access_key = var.aws_access_key secret_key = var.aws_secret_key region = "ap-northeast-1" } resource "aws_vpc" "test-vpc" { cidr_block = "10.0.0.0/16" tags = { Name = "test-vpc" } }
Terraform 環境変数にAWS のアクセス情報を登録する
GitHubに登録したHCLの変数で空欄となっているアクセスキーとシークレットキーをTerraform の環境変数(terraform.tfvars) へ登録します
これで、HCLに直接AWSのキー情報を書くことなく、処理ができます
実行する(Plan:DRY RUN)
左上のQueue planからまず、plan
実行します
実行結果(AWSへのアクセスは行われません)
実行する(Apply:クラウド基盤へプロビジョニング)
Confirm & Apply
でAWS上にリソース作成を行います
エラーとなると以下のような通知が出ます
AWS上でのリソース作成が成功すると次のような表示となります
tfstate の確認
メニューバーの States
で確認します
実行した処理を選択すると、tfstate の情報が参照できます
ID等は、マスクしてあります
{ "version": 4, "terraform_version": "0.12.8", "serial": 1, "lineage": "99999999999-8f7b-0b55-bb96-xxxxxxxxxx, "outputs": {}, "resources": [ { "mode": "managed", "type": "aws_vpc", "name": "test-vpc", "provider": "provider.aws", "instances": [ { "schema_version": 1, "attributes": { "arn": "arn:aws:ec2:ap-northeast-1:99999999999:vpc/vpc-09999999999efeb96", "assign_generated_ipv6_cidr_block": false, "cidr_block": "10.0.0.0/16", "default_network_acl_id": "acl-09999999999999999", "default_route_table_id": "rtb-0999999999999999", "default_security_group_id": "sg-999999999999", "dhcp_options_id": "dopt-99999999999", "enable_classiclink": false, "enable_classiclink_dns_support": false, "enable_dns_hostnames": false, "enable_dns_support": true, "id": "vpc-0899999999999999", "instance_tenancy": "default", "ipv6_association_id": "", "ipv6_cidr_block": "", "main_route_table_id": "rtb-09999999999", "owner_id": "99999999999999", "tags": { "Name": "test-vpc" } }, "private": "9999999999999999999" } ] } ] }