
이전 AWS를 대신하여 LocalStack을 컴퓨터에 설치하여 간단하게 사용해 보았었다.
이번에는 실제 프로젝트에서 사용하기 위해 실제 서버를 배포해 보려 한다.
LocalStack에서 사용했던 인프라의 구성을, 실제 배포하는 AWS에도 적용할 수 있어야 하므로 Terraform을 사용하여 인프라를 구성해 보려 한다.
먼저 terraform을 설치해준다
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
terraform -help
terraform을 설치해준 이후, terraform 코드를 관리할 폴더를 하나 만들어주었다.
terraform init
terraform fmt # 구성 파일을 표준 형식으로 자동 포맷팅
terraform validate # 구성 파일의 문법 검증
terraform plan # 실행 계획을 생성 및 보여줌
terraform apply # 계획을 실제 인프라에 적용
terraform destroy # Terraform으로 관리되는 인프라 삭제.
terraform show # 현재 상태를 보여줌
terraform state list # 상태에 있는 리소스 목록을 보여줌
terraform state show [resource] # 특정 리소스의 상태를 보여줌
403 권한 문제가 발생하여 LocalStack에서 IAM을 생성하고, Access Key와 Secret Key를 받아서 실행해주었다. 그래도 같은 문제가 계속 발생하여 작성하던 모든 Terraform 코드를 날리고 다시 작성하게 되었다.
이번엔 다른 사람이 작성한 LocalStack Terraform 코드를 받아서 실행해주었다.
참고한 코드 깃허브
다만 무슨 이유에서인지 네트워크 인프라 부분에서 문제가 계속 발생하는듯 하였다.
특정 리소스를 찾을 수 없다는 에러가 뜨고, 어떤 리소스인지 확인을 할 수 없어 다른 방법을 찾아보기로 하였다.
다시 처음부터 시작하여 정말 간단한 코드만 작성하였다. 이번에는 terraform apply 했을 때, 문제없이 실행되는 듯 했으나 긴 시간이 지나도 리소스가 생성될 기미가 보이지 않았다. (잠시 자리를 비웠다 돌아왔을 때 30분째 실행중이었다)
실행중이던 Terraform을 중단하고, 다시 실행하며 이번엔 LocalStack 로그를 확인해보았다.
AMI를 찾을 수 없다는 문제가 발생하고 있어 LocalStack 공식문서에서 사용하고 있는 AMI를 가져다 사용해보았다. 다행이 이번엔 성공이었다.
# main.tf
resource "aws_instance" "example" {
ami = "ami-df5de72bdb3b"
instance_type = "t2.micro"
}
# provider.tf
provider "aws" {
access_key = "test"
secret_key = "test"
region = "ap-northeast-2"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
endpoints {
ec2 = "http://localhost:4566"
}
}
LocalStack에서는 Ubuntu 22.04 버전으로 ami-df5de72bdb3b를 사용할 수 있다고 한다.
variables.tf 파일 생성 및 변수 선언오랜만에 만져보는 Terraform이라 우여곡절이 많았었다. 진행하면서 진행 경과를 블로그 글에 쓰는 편인데 이번에는 문제가 많이 발생하여 글로 정리하지 않고 진행한 부분들이 많아 기록이 누락된 부분들이 좀 있었다. 다음에는 많은 문제가 발생하더라도 간단하게나마 정리하고 진행하는 습관을 들여야겠다.
Terraform으로 LocalStack에 EC2 생성은 성공하였으나 이제 문제는 이렇게 생성한 EC2 서버를 외부에 노출할 방법이 있는지 확인해 봐야 한다. 외부 인터넷에 연결이 되어야 LocalStack으로 생성한 서버를 테스트 서버로 이용할 수 있고, CI/CD를 적용하여 개발하며 발생하는 변경 사항을 쉽게 적용할 수 있기 때문이다.
Terraform/Install Terraform
Terraform/Build infrastructure
LocalStack/EC2
How To Create An EC2 Instance On AWS Using Terraform