테라폼(Terraform)이란?
테라폼(Terraform)은 하시코프(Hashicorp)에서 오픈소스로 개발중인 클라우드 인프라스트럭처 자동화를 지향하는 코드로서의 인프라스트럭처(Infrastructure as Code, IaC) 도구입니다.
IaC(Infrastructure as Code) 도구를 사용하면 그래픽 사용자 인터페이스가 아닌 구성 파일을 사용하여 인프라를 관리할 수 있습니다.
IaC를 사용하면 버전 지정, 재사용 및 공유할 수 있는 리소스 구성을 정의하여 안전하고 일관되며 반복 가능한 방식으로 인프라를 구축, 변경 및 관리할 수 있습니다.
- Terraform은 여러 클라우드 플랫폼에서 인프라를 관리할 수 있습니다.
- 사람이 읽을 수 있는 구성 언어를 사용하면 인프라 코드를 빠르게 작성할 수 있습니다.
- Terraform의 상태를 사용하면 배포 전반에 걸쳐 리소스 변경 사항을 추적할 수 있습니다.
- 인프라에서 안전하게 협업하기 위해 구성을 버전 제어에 커밋할 수 있습니다.
테라폼 프로바이더(Provider)
테라폼 프로바이더는 테라폼과 외부 서비스를 연결해주는 기능을 하는 모듈입니다.
AWS같은 클라우드 서비스에 코드로 인프라를 구축할 때 사용합니다. 예를 들어 테라폼으로 AWS 서비스의 컴퓨팅 자원을 생성하기 위해서는 aws 프로바이더를 먼저 셋업해야합니다.
테라폼에서 사용 가능한 프로바이더의 종류는 테라폼 레지스트리에서 확인할 수 있습니다.
- 아마존 웹 서비스Amazon Web Service
- 마이크로소프트 애저Microsoft Azure
- 구글 클라우드 플랫폼Google Cloud Platform
- VPS 서비스(디지털 오션Digital Ocean, 린노드Linode, 벌처Vultr)
- 모니터링(데이터독Datadog, 뉴 렐릭New Relic, 그라파나Grafana)
- 데이터베이스 서버(MySQL, PostgreSQL)
Deployment Workflow
- Scope - 프로젝트의 인프라를 식별합니다.
- Author - 인프라에 대한 구성을 작성합니다.
- init - Terraform이 인프라를 관리하는 데 필요한 플러그인을 설치합니다.
- Plan - 구성과 일치하도록 Terraform이 수행할 변경 사항을 미리 봅니다.
- Apply - 계획된 변경을 수행합니다.
AWS에 EC2 인스턴스를 프로비저닝
사전 작업
- Terraform CLI 설치
- AWS CLI 설치
환경변수로 AWS 프로바이더 설정
민감함 정보가 저장되지 않도록 테라폼을 실행하는 환경에 직접 환경변수로 정의합니다.
$ export AWS_ACCESS_KEY_ID="<AWS_ACCESS_KEY_ID>"
$ export AWS_SECRET_ACCESS_KEY="<AWS_SECRET_ACCESS_KEY>"
EC2 인스턴스 생성 코드 작성
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "app_server" {
ami = "ami-08d70e59c07c61a3a"
instance_type = "t2.micro"
tags = {
Name = "ExampleAppServerInstance"
}
}
- provider : 프로바이더의 이름입니다. 프로바이더는 이미 reqired_providers 블록에 포함되어 있어야 합니다. Terraform Registry에서 프로바이더를 구성하는 인수를 확인할 수 있습니다.
- resource : 리소스 블록은 특정 프로바이더가 제공해주는 조작 가능한 대상의 최소 단위입니다.
- aws_instance : 리소스 타입의 이름입니다.
- app_server : 리소스에 임의로 붙이는 이름입니다. 다른 곳에서 이 리소스를 참조하기 위해서 사용합니다. aws_instance.app_server 과 같은 형식으로 참조할 수 있습니다.
- 리소스 자체에 대한 구성 인수는 리소스 유형에 따라 달라집니다.
- EC2 인스턴스, 시큐리티 그룹, 키페어 모두 aws 프로바이더가 제공해주는 리소스 타입입니다. 리소스 타입을 사용해 EC2의 가상 머신 리소스를 선언하고 조작할 수 있습니다.
테라폼 프로젝트 초기화
테라폼이 현재 디렉터리 아래에 선언된 프로바이더 플러그인을 설치해줍니다.
$ terraform init
테라폼 프로젝트 계획
HCL의 내용과 같이 같이 인스턴스를 생성할 예정이라는 계획을 보여줍니다.
$ terraform plan
현재 디렉터리 아래에 terraform.tfstate 파일이 생성됩니다.
테라폼 프로젝트 적용
계획(Plan)을 통해 확인한 내용을 실제로 프로바이더에 적용합니다.
$ terraform apply
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
테라폼 프로젝트 리소스 삭제
$ terraform destroy
'DevOps' 카테고리의 다른 글
[Terraform] 기존 리소스 가져오기 terraforming 설치 및 사용 (0) | 2022.10.31 |
---|---|
[AWS/Terraform] 테라폼 백엔드(Backend) 구축하기(S3, DynamoDB) (0) | 2022.10.30 |
[AWS] CloudWatch Logs 이용하여 로그 수집 (0) | 2022.10.28 |
[EC2/Python] Jenkins로 Flask 프로젝트 배포하기 (0) | 2022.09.30 |
[Jenkins/CodeCommit] Jenkins와 AWS CodeCommit 연동하기 (0) | 2022.09.29 |