Terraform の道に入門しました。
事前の想定以上にとっつきずらくて戸惑ってますが、楽しいです。
前提条件
$ terraform -v
Terraform v0.11.13
+ provider.aws v2.6.0
Terraform のインストール (CentOS 7)
Terraform のインストール方法は OS ごとに異なります。以下は CentOS 7 にインストールした際のコマンドです。
// 必要なソフトのインストール
$ sudo yum install wget unzip
// Package の取得
$ wget https://releases.hashicorp.com/terraform/0.11.13/terraform_0.11.13_linux_amd64.zip
// unzip してコマンドとして配置
$ sudo unzip ./terraform_0.11.13_linux_amd64.zip -d /usr/local/bin/
// バージョンの確認
$ terraform -v
Windows や Mac へのインストール方法は以下のサイトが参考になります。
- Terraformインストール(Windows版) - Qiita
- Installation / インストール - Terraform for さくらのクラウド
- Download Terraform - Terraform by HashiCorp
初期設定
まずは Terraform を記載していくフォルダを作成します。
// Terraform の設定情報を配置するフォルダを作成・移動
$ mkdir terraform-dir && cd $_
私の場合は AWS の環境を構築したかったので、以下の設定を行いました。
# 変数の設定
variable "aws_access_key" {}
variable "aws_secret_key" {}
# 変数を利用した provider の設定
provider "aws" {
access_key = "${var.aws_access_key}"
secret_key = "${var.aws_secret_key}"
region = "ap-northeast-1"
}
上記の provider
設定のうち、 変数化した aws_access_key
と aws_secret_key
に IAM の認証情報を設定する必要があります。
1) Terraformコマンドのオプションで値を渡す
次のように、コマンドのオプションとして値を渡すことができます。
$ terraform apply \
-var 'aws_access_key=AKIAXXXXXXXXXXXXXXXXXX' \
-var 'aws_secret_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
2) 環境変数で値を渡す
次のように、 TF_VAR_
に続いて 変数名
を付け加えた環境変数を設定することで、 terraform
コマンドの実行時に、自動的に環境変数が読み込まれます。
$ export TF_VAR_aws_access_key="AKIAXXXXXXXXXXXXXXXXXX"
$ export TF_VAR_aws_secret_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
3) ファイルで値を渡す
次のように、 terraform.tfvars
というファイルの中に設定をしておくと、コマンド実行時に変数が読み込まれます。ただし、この方法は非推奨となっているようです。
aws_access_key = "AKIAXXXXXXXXXXXXXXXXXX"
aws_secret_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
基本コマンド
認証情報と provider
の設定が終わったら、 terraform init
で初期化します。
// 初期化
$ terraform init
// ドライ・ラン
$ terraform plan
// 適用
$ terraform apply
// 削除確認
$ terraform plan -destroy
// 削除
$ terraform destroy
workspace の選択
workspace
という概念で、本番/検証/開発といった環境の概念を取り扱うことができるようになります。
// terraform workspace
// Usage: terraform workspace <subcommand> [options] [args]
// workspace の一覧を表示する
$ terraform workspace list
// workspace を選択する
$ terraform workspace select [NAME]
// workspace を作成する
$ terraform workspace new [NAME]
// workspace を削除する
$ terraform workspace delete [NAME]
// workspace を表示する
$ terraform workspace show
今回は develop
環境を作成しました。
// develop 環境を作成し、選択
$ terraform workspace new develop
$ terraform workspace select develop
設定ファイルの作成
ここから細かい設定を記載していきます。
Resources
構築対象のリソースを指定
# Usage
resource "<resource type>" "<local name>" {
# configuration arguments
<argument> = "<value>"
}
# Example
resource "aws_instance" "web" {
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
}
Input Variables
variable "image_id" {
type = string
}
variable "availability_zone_names" {
type = list(string)
default = ["us-west-1a"]
}
# var.<NAME>
resource "aws_instance" "example" {
instance_type = "t2.micro"
ami = var.image_id
}
Output Values
output "instance_ip_addr" {
value = aws_instance.server.private_ip
}
Data Sources
読み取り専用
data "aws_ami" "example" {
most_recent = true
owners = ["self"]
tags = {
Name = "app-server"
Tested = "true"
}
}
Modules
module "servers" {
source = "./app-cluster"
servers = 5
}
Terraform Settings
terraform {
backend "s3" {
# (backend-specific settings...)
}
}
参考
- How to Install Terraform on CentOS 7/Ubuntu 18.04 - LinOxide
- terraformでEC2+RDS+ElastiCacheを構築してみる(その1 EC2構築まで) - Qiita
- 既存のAWS環境を後からTerraformでコード化する - Developers.IO
- Terraform職人入門: 日々の運用で学んだ知見を淡々とまとめる - Qiita
- 俺が結論づけたterraformベスト・プラクティスとworkspaceとmodule考え方(AWS Provider編) - Qiita
- miso4ru/aws-terraform-template - GitHub
- Windowsホスト上のVagrantのシンボリックリンクフォルダでyarn installできない問題の解決 - Qiita