Terraform Cloud を早速使ってみました

Terraform Cloud

関連URL

とりあえずのお試し

Classmethod さんの記事をそのまま試してみました。 * 5人まで無料! Terraform Cloudを使ってみた

Terraform アカウントの作成

VCS との連携

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) へ登録します f:id:san-tak:20201002212224p:plain f:id:san-tak:20201002212240p:plain

これで、HCLに直接AWSのキー情報を書くことなく、処理ができます

実行する(Plan:DRY RUN)

左上のQueue planからまず、plan 実行します 実行結果(AWSへのアクセスは行われません) f:id:san-tak:20201002212338p:plain

実行する(Apply:クラウド基盤へプロビジョニング)

Confirm & ApplyAWS上にリソース作成を行います エラーとなると以下のような通知が出ます f:id:san-tak:20201002212358p:plain

AWS上でのリソース作成が成功すると次のような表示となります f:id:san-tak:20201002212419p:plain

AWS上にVPCが作成されています f:id:san-tak:20201002212439p:plain

tfstate の確認

メニューバーの States で確認します f:id:san-tak:20201002212500p:plain

実行した処理を選択すると、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"
        }
      ]
    }
  ]
}