✔️ Terraform 구성 파일
.tf
: HCL.tf.json
: Json 형식
인코딩
Unicode 를 사용해야 한다.
디렉토리
현재 작업 디렉토리 위치에 따라 해당 디렉토리의 .tf
, .tf.json
를 모두 읽어서 실행한다.
따라서 특정 작업을 하기 위해서는 디렉토리를 따로 만들고 .tf 파일을 만들어야 한다.
사전 준비
To follow this tutorial you will need:
- The Terraform CLI (0.14.9+) installed.
- The AWS CLI installed.
- AWS account and associated credentials that allow you to create resources.
- 현재 기준 0.13 ~ 1.x 까지는 호환이 된다.
- AWS를 이용하려면 AWS CLI 명령줄을 사용하는 것이 매우 편리하다.
- AWS 계정 및 관련 자격 증명이 필요하다.
✔️ 구성 파일
여러 Block이 중첩되어 있는 구조를 가진다.
중괄호로 시작해서 중괄호로 끝나는 구성을 Block 이라고 한다.
terraform { # 1
required_providers { # 2
aws = { # 3
source = "hashicorp/aws"
version = "~> 3.27"
}
}
required_version = ">= 0.14.9"
}
provider "aws" { # 여기서의 이름은 2번의 이름과 매칭되어야 한다.
profile = "default"
region = "us-west-2" # 비워도 상관없다. aws config에 이미 지정되어 있기 때문에
}
# app_server - 구분을 위한 별칭이므로 사용자 임의로 설정 가능하다.
resource "aws_instance" "app_server" {
ami = "ami-830c94e3" # 인스턴스를 만들기위한 이미지의 아이디
instance_type = "t2.micro" # AWS AMI 탭에 가서 카탈로그에서 확인 가능
# 주의 !! 같은 이름의 이미지라고 하더라도 리전이 다르면 아이디가 다르다.
tags = { # 공통 속성 # 이 리소스의 고유한 argument가 아니다.
Name = "ExampleAppServerInstance"
}
}
리소스는 블록의 타입에 따라서 달라지며 하나 또는 다수의 블록 레이블을 작성한다.
블록의 내부에는 여러가지 argument가 들어간다.
<BLOCK TYPE> <BLOCK LABEL> ... {
ARGUMENT
KEY = VALUE # 원칙적으로 이렇게 띄어쓰기를 해줘야 한다.
}
{ } : Block
✔️ Terraform Block
Provider 세팅 방법
terraform { # 1
required_providers { # required_providers
aws = { # 프로바이더의 이름 (내가 명명할 이름이므로 반드시 실제 회사명이 아니어도 됨)
source = "hashicorp/aws"
version = "~> 3.27" # aws 프로바이더 버전에서 3.27보다 커야한다.
# 별도 지정이 없으면 항상 최신 버전을 사용한다.
}
}
required_version = ">= 0.14.9" # 테라폼의 버전이 얼마 이상이어야 한다. (적지 않아도 된다.)
}
source - 실제 공급자를 나타내는 부분 (정해져 있는 부분)
version - 현재 버전
provider sw도 버전이 있다.
AWS에 새로운 기능이 변경되거나 없어지거나 할 때마다
새로운 API가 만들어지거나 기존의 API가 변경되거나 하는데
이에 따라 최신의 API와 정확하게 통신할 수 있는 공급자가 다시 만들어져야 한다.
따라서 프로바이더마다 모두 버전이 존재한다.
- aws : 프로바이더의 이름
- source : 프로바이더의 종류
- version : 프로바이더의 버전
- 4.10 : 특정 버전
~>
3.12 : 특정 버전 이상->
3.12 : 최소 버전
버전에 관한 지정이 필요없다면 테라폼 블록은 필수가 아니다.
✔️ 프로바이더 블록
프로바이더 블록은 테라폼 블록과 다르게 필수 요소이다.
provider "aws" { # 여기서의 이름은 2번의 이름과 매칭되어야 한다.
profile = "default"
region = "us-west-2"
}
- provider "aws" : terraform 블록 이름 매칭
- profile : aws 자격증명 파일의 프로필
- region
~/.aws/config
[vagrant@controller ~]$ cat ~/.aws/config
[default]
region = ap-northeast-2
~/.aws/credentials
[vagrant@controller ~]$ cat ~/.aws/credentials
[default]
aws_access_key_id =
aws_secret_access_key =
해당 프로필로 인증 받기 위함
만약 default가 싫다면 직접 지정해서 사용할 수 있다.
다만 credentials 파일에서도 같이 바꿔줘야 한다.
✔️ 리소스 블록
resource "aws_instance" "app_server" {
ami = "ami-830c94e3"
instance_type = "t2.micro"
tags = {
Name = "ExampleAppServerInstance"
}
}
Provider의 documention
참고
테라폼 리소스 == 앤서블 모듈
테라폼 모듈 == 앤서블 역할
ec2 인스턴스 및 AWS 리소스와 관련된 여러 예제 코드를 볼 수 있다.
resource "aws_instance" "web" {
ami = data.aws_ami.ubuntu.id # 공백이 이렇게나 많다. 원칙이다.
instance_type = "t3.micro" # 제일 긴 key를 기준으로 들여쓰기를 맞춘다.(필수 X)
# 가독성 측면에서 신경쓰는 것이다.
tags = {
Name = "HelloWorld"
}
우리가 봐야할 키는 Argument Reference에 있다.
- RESOURCE_TYPE : 리소스 종료
- NAME : 리소스 이름(테라폼에서 구분 하기 위한 이름)
- ARGUMENT : 인자/속성
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] 입력 변수 (Input Variable) (0) | 2022.04.21 |
---|---|
[Terraform] 리소스 생성 순서와 의존성 (0) | 2022.04.21 |
[Terraform] Terraform 상태 확인 (0) | 2022.04.21 |
[Terraform] Terraform Workflow (실행 순서) (0) | 2022.04.21 |
[Terraform] Terraform 소개 및 설치방법 (0) | 2022.04.21 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!