Terraformの導入(諸々事始め)

新しいプロジェクトが始まる際、GHEのリポジトリは用意したし、次はTerraformを入れる!となった時にやる事を羅列しました。
参考サイトは以下。

future-architect.github.io

それでは始めていきます。

0. 事前準備

・端末の状態確認

$ tfenv list
* 0.12.8 (set by /usr/local/Cellar/tfenv/1.0.1/version)
  0.12.7
  0.12.6
  0.11.14
  0.11.13

今回は、0.12.8を使用して作成していきます。

1. IAMユーザ作成

terraform で使用するIAMユーザを作成します。ユーザを作成した際はcsvをDLしておくこと。

アクセスの種類:プログラムによるアクセス、マネジメントコンソールによるアクセス
権限:Administorator Access

2. direnv設定

以下に1で作成されたアクセスキーとシークレットアクセスキーを設定する

$ direnv edit .
export AWS_ACCESS_KEY_ID=AKIXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_REGION=ap-northeast-1

すると、.envrcファイルが作成され、上記で設定した内容が記載される。
これを行うことでそのディレクトリで使用するクレデンシャルをセットすることができる。
くれぐれもgitの対象にしないように注意する。

$ ls -la
total 16
drwxr-xr-x   5 XXX  YYY\Domain Users  160  4 27 15:58 .
drwxr-xr-x  14 XXX YYY\Domain Users  448  4 27 12:01 ..
-rw-r--r--   1 XXX  YYY\Domain Users  149  4 27 15:58 .envrc
drwxr-xr-x  12 XXX  YYY\Domain Users  384  4 27 12:03 .git
-rw-r--r--   1 XXX  YYY\Domain Users   29  4 27 12:02 README.md
$

3. TFファイル環境設定

必要なtfファイル設定を入れるため、目的ごとに以下のtfファイルを作成する。

.terraform-versionファイル

以下の通り、バージョン指定するファイル

$ cat .terraform-version 
0.12.8

terraform.tfファイル

プロバイダーを指定したり、バックエンド処理を記載(これによってtfstateが指定したバケットに保存、更新されるようになる)

provider "aws" {
  region = "ap-northeast-1"
}

terraform {
  required_version  = "0.12.8"
  backend "s3" {
    bucket = "<バケット名>"
    key    = "ap-northeast-1/terraform.tfstate"
    region = "ap-northeast-1"
  }
}

4. Terraform 初期化

以下コマンドで初期化する。

$ terraform init

Initializing the backend...

Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "aws" (hashicorp/aws) 2.59.0...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.aws: version = "~> 2.59"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary

上記のように成功すると、以下のように.terraformファイルが出来上がる。これでディレクトリがterraform管理下になった。

$ ls -la
total 16
drwxr-xr-x   5 XXX  YYY\Domain Users  160  4 27 15:58 .
drwxr-xr-x  14 XXX YYY\Domain Users  448  4 27 12:01 ..
-rw-r--r--   1 XXX  YYY\Domain Users  149  4 27 15:58 .envrc
drwxr-xr-x  12 XXX  YYY\Domain Users  384  4 27 12:03 .git
drwxr-xr-x   3 XXX  YYY\Domain Users   96  4 27 16:32 .terraform
-rw-r--r--   1 XXX  YYY\Domain Users    7  4 27 16:21 .terraform-versi
-rw-r--r--   1 XXX  YYY\Domain Users   29  4 27 12:02 README.md
-rw-r--r--   1 XXX  YYY\Domain Users   47  4 27 16:32 terraform.tf
$

続いて、次はようやくAWSサービス作成用のtfファイルを書いていきます!

< 番外編 >

Read.meにこんな記載しておくと便利かも

pj_<Progect_Name>

Install Terraform

Use tfenv.

$ tfenv install

Set environment variables

Use dienv.

$ direnv edit . export AWS_ACCESS_KEY_ID=AKIXXXXXXXXXXXX export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXX export AWS_REGION=ap-northeast-1

Initialize Terraform

$ terraform init

Edit Terraform files

Happy Coding!!

plan

$ terraform plan

apply

$ terraform apply