Terraform

Terraform이란?
인프라를 코드로 관리할 수 있는(Iac) Opensource tool
- 클라우드 서비스를 비롯한 다양한 인프라를 코드로 정의하고, 배포 및 관리할 수 있는 Opensourcetool.
- 테라폼은 인프라를 코드로 관리함으로써 인프라 환경의 복잡성을 줄이고, 인프라 변경에 대한 대응력을 높여준다.
- 다양한 클라우드 서비스 제공업체(AWS, Azure, Google Cloud Platform 등)와 호환되며, 이러한 클라우드 서비스 제공업체를 통해 제공되는 다양한 서비스(가상 머신, 데이터베이스, 로드 밸런서 등)를 코드로 관리할 수 있다. 또한 테라폼은 인프라를 코드로 정의하고, 이를 버전 관리할 수 있으므로, 여러 사용자가 협업하여 인프라를 관리 가능한 tool 이다~~.
Terraform 설치
mac os에다가 terraform을 깔아보자~~
brew install terraform
$ export AWS_ACCESS_KEY_ID = "my-access-key-id"
$ export AWS_SECRET_ACCESS_KEY= "secret key"
- AWS access key id와 secret access key 생성
- Aws ec2를 다루기 위해..!
Terraform을 이용해 단일 server 배포
- 공급자(provider) 구성
vi main.tf
provider "aws" {
region = "ap-northeast-2"
}.
resource "aws_instance" "example" {
ami = "ami-0005a4a4a5239394b"
instance_type = "t2.micro"
- provider : aws를 공급자로 사용하여 ap-northeast-2(한국 region)에 만들겠따.
- resource:example: Type ami: 사용할 amazon machine image instance_type: instance 유형
- aws_instance: 공급자+ resource
terraform init
- main.tf의 code를 scan
- “멱등성”을 제공한다.
멱등성?
연산을 여러 번 실행시켜도(적용시켜도) 결과가 달라지지 않는 성질
- 기존 Script 같은 경우, 조건물을 이용하여 결과가 같아지도록 만들 수 있지만, 일반적으로는 사용하지 않음
- However! Terraform. anisble같은 IAC tool 들은(infra 관리임으로) 멱등성을 제공한다.
- 즉 메서드가 여러 번 실행되어도, 결과는 같으므로 안전하게 사용 할 수 있는 성질
terraform plan
- 실제 변경값 적용 전에 테라폼이 수행할 작업을 확인 가능하다
- unix, linux, git에서 사용하는 “diff” 명령어와 비슷한 기능
terraform apply
- 실제로 코드 명령어를 실행(이 경우에는 instance 생성이겠지?)

- “생성 완료”
생성된 EC2에 여러가지 설정을 추가하여 보자~
vi main.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-0e735aba742568824"
instance_type = "t2.micro"
tags = {
Name= "terraform-exmaple"
}
}
- tags: Name이라는 tag로 instance 이름 입력
terraform apply
- 다시 적용시키면
- instance에 이름이 생겨벌임
resource "aws_key_pair" "terraform-key-pair" {
key_name = "rsa-rapa-key.pub"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDLPP4Vf30a+p0DQs7K4SrZ9A3AWOyYiVAd+dUeYOzLbrzv6pVwv9bHWwSifMR6EvRMWA4Otnan/Gvoemnl9eODQNgDETR8qcS/2ZT2NIZxtmkMThytb55qr9g1oINl3xs/swOBJ9N5PcNc/Vc9CDPb55hLzez8zDTqsNrqHJaxAjIU9zqOTrLdS81SUQqR5ExF7z7I/eZ6LjIGl2w5ukn50nK4C00ESAdH89HjAokYJms8wWzw+hOrLWj/8/Zcm8Sjnn056519MWdWlTgYB2xPIsQ6mWI6rIdaYzI1Lysb7nHQj19iGPFNOIj0koZRY5LViZSQEKJgtGVe6bWqmO8RaV1t8obI+FFzTE5jiAfpPjeaaHmbw0nYUR6l4+Y3P81krNxIqswUeSDGQe9ND5Tz8xRWXbASVl1l4Mg47piVtqrm5KjbYZNF58ybNy8Hh/daQxsg4+ZI/+1levGC8ZEqxZ5e7j7LNn8kUW6zoZaGzyiI+JKFp0jlLrNOH1GdjK8= kyontoki@naver.com"
tags = {
description = "terraform key pair import"
}
}
- mac 터미널로 ec2에 접근하기 위해 ssh key 등록~