테라폼을 사용하는 이유
AWS GUI 환경에서 인프라를 직접 구축한다면, 상당히 많은 클릭과 시간이 필요하다. 테라폼을 할용한다면 이 번거로운 과정을 모두 코드로 구현할 수 있다.
사람에 따라 GUI 환경이 익숙하다면 테라폼 같은 IaC(Infrastructure as Code) 작성을 오히려 불편해 할 수도 있다...
Code로 인프라를 관리하는 것은 확장 가능성, 버전 관리, 일관성, 배포 속도 향상 등의 수 많은 장점들이 있다.
테라폼 설치 - Linux 기준
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
$ sudo yum -y install terraform
# 명령어 자동 완성 기능
$ terraform -install-autocomplete
테라폼 버전 확인
$ terraform version
AWS 프로바이더 정의하기
provider.tf 파일을 작성한다. 여기서 <AWS_ACCESS_KEY>와 <AWS_SECRET_KEY>는 AWS IAM에서 생성한 사용자의 Key이다.
# provider.tf
provider "aws" {
access_key = "<AWS_ACCESS_KEY>"
secret_key = "<AWS_SECRET_KEY>"
region = "ap-northeast-2"
}
환경 변수로 AWS 프로바이더 설정하기
테라폼은 Git과 같은 버전 관리 도구에서 자주 관리되는데, 민감한 정보를 저장소에 기록하지 않도록 주의해야 한다.
인증 정보를 프로바이더 속성값으로 사용하여 저장소에 올리지 않고, 테라폼을 실행하는 환경에 직접 환경 변수로 정의하면 노출을 피할 수 있다.
이때 사용하는 환경 변수는 AWS 커맨드라인 인터페이스 AWSCLI에서 사용하는 환경 변수와 같다.
등록한 환경 변수는 env 명령어로 확인할 수 있다. 환경 변수에 등록된 인증키는 파일로 설정한 인증키보다 우선적으로 사용된다.
$ export AWS_ACCESS_KEY_ID="<AWS_ACCESS_KEY_ID>" # access_key
$ export AWS_SECRET_ACCESS_KEY="<AWS_SECRET_ACCESS_KEY>" # secret_key
$ export AWS_DEFAULT_REGION="ap-northeast-2" # region
$ env | grep AWS
AWS_SECRET_ACCESS_KEY="<AWS_SECRET_ACCESS_KEY>" # 위에서 지정한 키
AWS_ACCESS_KEY_ID="<AWS_ACCESS_KEY_ID>" # 위에서 지정한 키 ID
테라폼 프로젝트 초기화 하기
$ terraform init
EC2용 키 페어 생성하기
1. HCL 언어로 필요한 리소스 정의하기
생성할 EC2 인스턴스에 접근하기 위한 키 페어를 생성한다.
web_infra.tf 파일을 생성하고, 아래의 내용을 추가해준다.
resource "aws_key_pair" "web_admin" {
key_name = "web_admin"
public_key = "<PUBLIC_KEY>"
}
여기서 public_key는 로컬에서 생성한 SSH 공개키이다. 없다면 아래의 명령으로 생성해준다.
$ ssh-keygen -t rsa -b 4096 -f "$HOME/.ssh/web_admin" -N ""
최종적인 web_infra.tf 파일의 내용은 아래와 같다.
resource "aws_key_pair" "web_admin" {
key_name = "web_admin"
public_key = file("~/.ssh/web_admin.pub")
}
2. 선언한 리소스가 생성 가능한지 Plan 확인하기
위에서 작성한 aws_key_pair 리소스를 AWS에서 생성 가능한 지 확인한다. plan 명령어는 현재 정의되어 있는 리소스들을 실제로 프로바이더에 적용했을 때 테라폼이 어떤 작업을 수행할 지 알려준다.
$ terraform plan
3. 선언한 리소스를 AWS에 Apply 하기
$ terraform apply
apply를 하고 나면 AWS 콘솔의 EC2 키 페어 메뉴에서 web_admin 키 페어가 생성된 것을 확인할 수 있다.
참고로, apply 명령어를 실행해도 plan 결과를 보여주기 때문에 plan 명령어를 사용할 필요가 없다고 느낄 수 있지만, plan 명령어로 변경사항을 확인해 나가는 것이 좋다. apply 작업이 많아지면 습관적으로 yes를 눌러버리는 경우가 종종 있기 때문이다.
참고 자료
https://www.44bits.io/ko/post/terraform_introduction_infrastrucute_as_code