Terraform이란
재사용 및 공유가 가능한 사람이 읽을 수 있는 구성 파일로 클라우드 및 온프레미스 리소스를 모두 정의할 수 있는 코드 도구로서의 인프라입니다.
일관된 워크플로우를 사용하여 수명주기 전반에 걸쳐 모든 인프라를 프로비저닝하고 관리할 수 있습니다
프로비저닝은 서버 자체를 생성해서 제공하는 것을 말합니다. 코드를 이용해서 웹 서버를 배포할 수 있습니다.
Terraform을 사용하는 이유
Terraform을 사용해서 인프라를 구축하면 개발을 하던 환경을 그대로 배포 환경을 만들어 내서 재사용성이 높아집니다.
배포 프로세스가 안정화 되면 일관되게 반복이 가능하고 사람이 하지 않기 때문에 안정성이 높아지고 빠릅니다.
제가 사용하면서 느낀점은 코드로 작성하면서 기능을 좀 더 자세하게 알 수 있게 된 것 같습니다.
MAC 환경에서 진행했습니다.
Terraform 설치하기
AWS 자격 증명은 IAM에서 사용자 만들어서 정책 추가 후 AccessKey 만들어서 사용했습니다.
환경변수로 등록한 Accesskey를 이용해서 AWS에 인프라를 구축하게 됩니다.
//테라폼 설치
$ brew tap hashicorp/tap
$ brew install hashicorp/tap/terraform
//Terraform이 AWS 접근 가능하도록 자격증명 등록
$ export AWS_ACCESS_KEY_ID=[액세스 키 ID]
$ export AWS_SECRET_ACCESS_KEY=[비밀 액세스 키]
EC2 생성해보기
main.tf에 코드를 작성합니다.
인프라를 배포할 region 설정하는 코드
//main.tf
provider "aws" {
region = "ap-northeast-2"
}
생성할 리소스 정보를 입력하는 코드
//리소스 생성하는 구문
// provider는 aws, type은 생성할 리소스, config는 리소스 관련 인수
resource "<PROVIDER>_<TYPE>" "<NAME>" {
[ CONFIG ...]
}
//ec2.tf
resource "aws_instance" "terraform" {
ami = "ami-0f3a440bbcff3d043"
instance_type = "t2.micro"
tags = {
Name = "terraform"
}
}
main.tf가 있는 경로에서 terraform init을 해줍니다.
terraform plan 명령을 사용하면 수행하게 될 작업을 확인할 수 있습니다.
//terraform 실행해서 인스턴스 배포하기
$ terraform apply
Enter a value : yes
저는 Error: creating EC2 Instance: operation error EC2: RunInstances 이런식으로 에러가 나서 IAM 사용자에 권한 추가해서 해결했습니다.
이렇게 성공했다고 뜨고 AWS 콘솔에 접속해서 EC2를 확인해보면 잘 생성된 것을 확인할 수 있습니다.
생성한 리소스를 삭제하고 싶을 땐 terraform destroy 명령어로 삭제하면 됩니다.
보안 그룹 추가하기
8080 포트 트래픽을 수신하는 보안그룹을 만들었습니다.
resource "aws_security_group" "instance" {
name = "terraform-instance"
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = [ "0.0.0.0/0" ]
}
}
보안 그룹을 사용하려면 보안 그룹의 ID를 aws_instance 리소스의 vpc_security _group_ids 인수에 전달해야 합니다.
전달하는 방법은 Terraform 표현식을 이용해서 전달할 수 있습니다.
<PROVIDER>_<TYPE> . <NAME> . <ATTRIBUTE>
공급자(aws)_리소스 유형(security_group).name(security 그룹 이름: instance).속성(id)
test를 위해 user_data를 추가하고 시큐리티 그룹 연결을 위해 vpc_security_group_ids를 표현식으로 전달했습니다.
resource "aws_instance" "terraform" {
ami = "ami-0f3a440bbcff3d043"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.instance.id]
user_data = <<-EOF
#!/bin/bash
echo "Hello, World" > index.html
nohup busybox httpd -f -p 8080 &
EOF
user_data_replace_on_change = true
tags = {
Name = "terraform"
}
}
output을 사용하면 생성되는 ec2의 public_ip를 cmd에서 바로 볼 수 있습니다.
output "public_ip" {
value = aws_instance.terraform.public_ip
description = "The public IP address of the web server"
}
서버 ip와 인바운드 설정한 포트로 접속을 해보면 정상적으로 보안그룹이 적용된 것을 확인할 수 있습니다.
'Infra' 카테고리의 다른 글
terraform으로 aws 인프라 구축하기 (3) (상태 관리) (0) | 2024.12.04 |
---|---|
terraform으로 aws 인프라 구축하기 (2) (Auto Scaling) (0) | 2024.12.04 |
EKS 클러스터 구축 (0) | 2024.12.04 |
UTM 이용해서 쿠버네티스 환경 구성하기 (0) | 2024.12.04 |
AWS IAM 계정 공유 와 AWS 서비스에 IAM 역할 적용 (0) | 2024.12.04 |