これだけは覚えておこう
- plan: 設定ファイルが正しいかチェックしてくれる
- apply: チェックの通った設定ファイルを本番のAWS環境に適用する
plan / apply
aws.tfを作成する
provider "aws" {
  access_key = "ACCESS_KEY"
  secret_key = "SECRET_KEY"
  region = "REGION"
}
resource "aws_instance" "example" {
  ami = "ami-cbf90ecb"
  instance_type = "t2.micro"
}
providerには
- heroku
- cloudFlare
- aws
などなどが入る。
terraform plan
これで先ほど作成したaws.tfが正しいかどうかをチェックしれくれます。
このチェックが通ればterraform.tfstateが生成され、
terraform apply
でAWS上に指定したインスタンスが生成される。
設定ファイルにおける変数について
tfファイル内にvariableで指定する場合
先ほどのaws.tf内でaccess_keyやsecret_keyやinstance_typeを変数に持ちたいときは以下のようにします。
aws.tf
variable "access_key" {
  default     = "ACCESSKEY"
}
variable "secret_key" {
  default     = "SECRET_KEY"
}
variable "region" {
  default     = "ap-northeast-1"
}
variable "instance_type" {
  default = "t2.micro"
}
variable "ami" {
  default = "ami-cbf90ecb"
}
provider "aws" {
  access_key = ${var.aws_access_key}
  secret_key = ${var.secret_key}
  region = ${var.region}
}
resource "aws_instance" "example" {
  ami = ${var.ami}
  instance_type = ${var.instance_type}
}
こんな感じになります。
例えば、amiをregionに応じて指定したい場合は以下のようにします。
variable "amis" {
    default = {
        us-east-1 = "ami-aa7ab6c2"
        us-west-2 = "ami-23f78e13"
        ap-northeast-1 = "ami-cbf90ecb"
    }
}
そして、amiの指定の際はこのように書きます。
resource "aws_instance" "example" {
  ami = "${var.amis.ap-northeast-1}"
  instance_type = "${var.instance_type}"
}
ap-north-eastって記載しなくても立ち上げる際のregionを読んでくれよ!って時があると思います。
すなわち、variable "region"の値を読んでくれよ!って時はこのようにします。
resource "aws_instance" "example" {
  ami = "${lookup(var.amis, var.region)}"
  instance_type = "${var.instance_type}"
}
全体のファイルはこのようになります。
variable "access_key" {
  description = "AWS access key"
  default     = "ACCESSKEY"
}
variable "secret_key" {
  description = "AWS secret access key"
  default     = "SECRETKEY"
}
variable "region" {
  description = "AWS region to host your network"
  default     = "ap-northeast-1"
}
variable "instance_type" {
  default = "t2.micro"
}
variable "amis" {
  default = {
    "us-east-1" = "ami-aa7ab6c2"
    "us-west-2" = "ami-23f78e13"
    "ap-northeast-1" = "ami-cbf90ecb"
  }
}
provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region = "${var.region}"
}
resource "aws_instance" "example" {
  ami = "${lookup(var.amis, var.region)}"
  instance_type = "${var.instance_type}"
}
これで
terraform plan
↓
terraform apply
で反映されます。
設定ファイルの変数を外部に持つ場合
これでうまくいきます。
http://qiita.com/kohey18/items/38400d8c498baa0a0ed8#comment-6ac1fc69503bd4bc9151
--------- 以下、面倒なやり方です ---------
tfvarsファイルを生成します。
config.tfvars
access_key="ACCESS_KEY"
secret_key="SECRET_KEY"
region="ap-northeast-1"
これでaws.tfをこのようにします。
variable "access_key" {
  description = "AWS access key"
}
variable "secret_key" {
  description = "AWS secret access key"
}
variable "region" {
  description = "AWS region to host your network"
}
variable "instance_type" {
  default = "t2.micro"
}
variable "amis" {
  default = {
    "us-east-1" = "ami-aa7ab6c2"
    "us-west-2" = "ami-23f78e13"
    "ap-northeast-1" = "ami-cbf90ecb"
  }
}
provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region = "${var.region}"
}
resource "aws_instance" "example" {
  ami = "${lookup(var.amis, var.region)}"
  instance_type = "${var.instance_type}"
}
そして、設定ファイルが正しいかどうかを通すplanに作成した変数定義ファイルを指定する場合はこうします。
terraform plan --var-file=./config.tfvars
でおっけいです。
ちなみにconfig.tfvarsで指定できるのは、variableブロックに指定したものだけです。
variable "region" {}とaws.tfで指定せずに、config.tfvarsでregion="ap-northeast-1"と指定しても
'region'. define it with 'variable' blocks
というエラーを吐きます。
以上で超基礎編を終えます。
次はVPCの構築をterraformで行ってみようと思います。
