TIL | Terraform 기본구성

unihit·2021년 5월 17일
0

TIL

목록 보기
20/25
post-thumbnail

Terraform

Terraform 기본 구성 요소

테라폼 구성요소

  • provider: 테라폼으로 생성할 인프라의 종류를 의미
  • resource: 테라폼으로 실제로 생성할 인프라 자원을 의미
  • state: 테라폼을 통해 생성한 자원의 상태를 의미
  • output: 테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것을 의미
  • module: 공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것을 의미
  • remote: 다른 경로의 state를 참조하는 것을 의미, output 변수를 불러올때 주로 사용

Terraform provider

# 보통 provider.tf로 파일을 생성
# AWS Provider
provider "aws" {
	region = "ap-northeast-2"
	version = "~> 3.0"
}

Provider 안에서 다양한 Arguments를 가진다.

AWS resource를 다루기 위한 파일들을 다운로드 하는 역할을 한다.

Terraform resource

# main.tf, vpc.tf 등 원하는 형태로 파일이름을 사용
# Create a VPC
resource "aws_vpc" "example" {
	cidr_block = "10.0.0.0/16"
	# cidr_block 이외에도 수많은 인자가 존재
}

테라폼으로 VPC를 생성하는 코드(AWS VPC를 만드는 코드)

VPC 역시 다양한 Argument와 다른 구성요소가 존재하지만, 여기서는 간단히 형태만 보고 넘어간다.

Terraform state

# terraform.tfstate라는 파일명을 가진다.
{
	"version": 4,
	"terraform_version": "0.12.24",
	"serial": 3,
	"lineage": "3c77XXXX-2de4-7736-1447-038974a3c187",
	"outputs": {},
	"resources": [
		{...},
		{...}
	]
}

테라폼 state이다.

현재 인프라의 상태를 의미하는 것은 아니다.

state는 원격 저장소인 'backend'에도 저장될 수 있다.

스테이트 파일과 현재 인프라의 상태를 똑같이 유지하는 것이 keypoint!

Terraform output

resource "aws_vpc" "default" {
	cidr_block = "10.0.0.0/16"
	# cidr_block 이외에도 수많은 인자가 존재
}

output "vpc_id" {
	value = aws_vpc.default.id
}

output "cidr_block" {
	value = aws_vpc.default.cidr_block
}

테라폼 output이다.

VPC 역시 다양한 Arguement와 다른 구성요소가 존재하지만, 여기서는 간단하게 형태만 보고 넘어간다.

aws vpc 코드를 만들면, vpc ID나 cidr 값들이 생기는데 그런것들을 참조해서 vpc_id란 형태의 변수를 스테이트 파일로 저장한다.

리모트를 사용해서 재사용 할 수 있다.

Terraform module

module "vpc" {
	source = "../_modules/vpc"
	cidr_block = "10.0.0.0/16"
}

테라폼 module이다.

module은 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼때 주로 사용된다.

Terraform remote

# remote는 원격 참조 개념으로 이해
data "terraform_remote_state" "vpc" {
	backend = "remote"

	config = {
		bucket = "terraform-s3-bucket"
		region = "ap-northeast-2"
		key = "terraform/vpc/terraform.tfstate"
	}
}

테라폼 module이다.

remote state는 key 값에 명시한 state에서 변수를 가져온다.

Terraform 기본 명령어

테라폼 명령어

  • init: 테라폼 명령어 사용을 위해 각종 설정을 진행
  • plan: 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여준다. (가장 많이 쓰는 명령어)
  • apply: 테라폼 코드로 실제 인프라를 생성하는 명령어
  • import: 이미 만들어진 자원을 테라폼 state 파일로 옮겨주는 명령어
  • state: 테라폼 state를 다루는 명령어, 하위 명령어로 mv, push와 같은 명령어가 있다.
  • destroy: 생성된 자원들을 state 파일기준으로 모두 삭제하는 명령어

AWS EC2

  • Amazon Elastic Compute Cloud(EC2)는 안전하고 크기 조정이 가능한 컴퓨팅 용량을 클라우드에서 제공하는 웹 서비스입니다. 사용자는 간단한 웹 서비스 인터페이스를 통해 간편하게 필요한 용량으로 서버를 구성할 수 있습니다. 컴퓨팅 리소스에 대한 포괄적인 제어권을 제공하며, Amazon의 검증된 컴퓨팅 인프라에서 실행할 수 있습니다.
  • 보통 Password 인증과 RSA 공개키 암호화 방식으로 연결한다.

시큐리티 그룹 확인

AWS는 기본 방화벽 솔루션으로 시큐리티 그룹으로 확인
내 클라이언트 IP가 시큐리티 그룹으로 포함 되어 있어야 접속 가능
private subnet이 아닌 public subnet인지 확인을 한 뒤에 접속 시도
public subnet인지 확인은 해당 서브넷이 연결된 라우팅 테이블 확인

0개의 댓글