건물을 지을때 설계도를 만들고 짓는것은 아주 중요해요. 설계도 없이 건물을 안지으면 건물을 짓는 사람들 사이에 통일된 형식이 없어서 소통에 어려움을 겪습니다. 또 다 지었는데 철근이 빠져서 다시 건물을 지워야 하는 경우도 있고요, 반대로 철근을 너무 많이 넣어서 공간의 비효율과 재료비의 과다지출을 유발할 수도 있습니다.
인프라도 마찬가지입니다. 인프라 설계도 없이 인프라를 적용하게 되면, 보안 문제가 발생할 수 있고 필요 없는 인프라가 만들어질 수도 있습니다. 인프라가 만들어진 이후에 다시 수정작업을 하는 것은 비용과 시간이 많이 드는 작업이기에, 회사와 개발자에게 피로도를 주게 됩니다.
예상하셨겠지만, 인프라에도 설계도가 존재합니다. 바로 IaC(Infrastructure as Code)인데요, 코드를 통해서 인프라를 설정하고 관리하는 도구입니다. 콘솔로 인프라를 관리하면서 발생하는 여러 문제점들을 해결합니다.
IaC의 많은 장점들 덕에 요즘 IaC 쓰는 회사들이 빠르게 늘어나고 있는 상황입니다.
IaC를 여러 기업에서 만들어 배포하고 있는데 가장 많이 사용되는 IaC는 Terraform, Ansible, Cloudformation이 있습니다. 해당 도구들은 클라우드 인프라 환경에서 사용이 가능하여 많은 기업들이 활용하고 있습니다. 제가 한국 기업의 Terraform 사용 기업을 조사해봤는데, 200개에 가까운 기업들이 Terraform을 사용하고 있더라고요!(더 많겠지만요) 빅테크 기업들을 위주로 늘어나고 있는걸 보니, 앞으로 클라우드 인프라 쓰는 기업들의 IaC 사용량은 늘 것으로 예상됩니다.
Terraform 코드를 좀더 자세히 살펴봅시다.
챗지피티한테 테라폼 코드 작성해달라고 하면 해줍니다ㅎㅎ 이 코드를 통해 알 수 있는 여러가지 테라폼의 특징이 있습니다.
provider "aws" {
region = "us-west-2" # 원하는 리전으로 변경
}
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "example" {
count = 2
vpc_id = aws_vpc.example.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-west-2a" # 각각의 서브넷을 다른 가용 영역으로 배치
}
resource "aws_security_group" "example" {
name_prefix = "example-"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0" # 원하는 AMI ID로 변경
instance_type = "t2.micro"
count = 2
subnet_id = aws_subnet.example[count.index].id
security_groups = [aws_security_group.example.id]
key_name = "your-key-pair-name" # EC2 인스턴스에 액세스할 키 페어 이름
}
output "instance_ips" {
value = aws_instance.example[*].public_ip
}
hcl로 작성되어 있는 terraform의 가장 큰 특징은 선언적 언어
라는 것입니다. 코드가 여러 resource 블록으로 이루어져 있는거 보이시나요? 각 리소스의 원하는 설정들을 해주고, 실제 클라우드에 적용할 수 있는 것입니다.
terraform은 모듈화
와 자동화
가 가능합니다.
모듈로 구성이 가능하여 필요한 구성을 계속해서 가져다 쓸 수 있어, 코드의 재사용성을 향상시킵니다. 그러면 인프라를 더 쉽게 확장하고 유지보수가 가능하게 됩니다.
또한 terraform은 많은 기업에서 도입하고 있는 DevOps를 구현할 수 있는 최적의 도구입니다. CI/CD 파이프라인에 통합하여 인프라를 지속적으로, 자동으로 관리하는데 도움을 줍니다.
terraform이 가진 또다른 특징은 멀티 클라우드를 지원한다는 것입니다. 요즘 회사에서는 리소스 사용을 최적화하기 위해서 여러 클라우드 벤더사를 혼용해서 사용하는 경우가 많습니다. Terraform은 여러 클라우드 벤더사(AWS, Azure, GCP, Openstack, Ncloud 등)를 지원하고 있기 때문에 멀티 클라우드 환경에 친화적이에요
클라우드 사용량이 늘어남에 따라 클라우드 인프라를 대상으로 해킹하여 정보를 수집하는 움직임이 늘어나고 있습니다. 이에 따라 클라우드 및 테라폼 보안이 절실한데요,