# terraform을 초기화 해주고 상태 파일 생성 등 현재 상태관리를 폴더 단위로 해준다.
terraform init
# 테라폼이 클라우드 환경에 배포되기 전 미리 한번 작동시켜서 정상적으로 배포가 가능한지 체크한다.
terraform plan
# 실제 배포를 수행한다.
terraform apply
Provider
테라폼과 외부 서비스를 연결해주는 기능을 하는 모듈
리소스들이 배포될 환경을 정의한 것
Backends
상태 정보를 tfstate 파일을 통해 관리를 하는데 배포하고 실행된 상태를 저장하는 곳
local backends가 default임
AWS S3 등 외부 저장공간에서 버전관리와 상태정보를 관리하기를 권장
Resources
프로바이더가 제공해주는 조작 가능한 대상의 최소 단위
ex) aws_security_group, aws_lb, aws_instance
module
공통적으로 활용할 수 있는 인프라 코드를 한 곳으로 모아서 정의하는 부분
Module을 사용하면 변수만 바꿔서 동일한 리소스를 손쉽게 사용할 수 있다는 장점이 있다.
Input Variables
변수들을 설정해서 담을 수 있다. 해당 변수들을 사전에 정의해 둘수도 있고, apply를 하면서 파일 단위로 참조할 수도 있다.
Data Sources
Data 파일들을 정의하여 Terraform 설정에서 참조할 수 있다. Block을 비워두면 해당 데이터 내의 모든 값들을 참조할 수 있다.
Output Values
Output Values를 선언하면 apply 후 output으로 알려준다.
// provider을 정의한다.
provider "aws" {
access_key = MY_ACCESS_KEY
secret_key = MY_SECRET_KEY
region = "ap-northeast-2"
}
// S3를 backend로 정의한다.
terraform {
backend "s3" {
bucket = MY_S3_BUCKET_NAME
dynamodb_table = MY_DYNAMODB_TABLE
region = "ap-northeast-2"
key = "test-terraform/terraform.tfstate"
encrypt = true
}
}
// Resource
resource "aws_vpc" "demo" {
cidr_block = "10.0.0.0/16"
tags = map(
"Name", "terraform-eks-demo-node"
"kubernetes.io/cluster/$(var.cluster-name)", "shared"
)
}
// Variables를 설정해서 담을 수 있다.
variable "cluster-name" {
default = "terraform-eks-demo"
type = string
}
// Using these data sources allows the configutation to be
// generic for any region
data "aws_region" "current" {}
// Output Values : apply 후 output으로 알려준다.
output "instance_ip_addr" {
value = aws_instance.server.private_ip
description = "The private IP address of the main server instance."
}