테라폼은 infrastructure를 코드로 관리할 수 있게 해주는 툴입니다. 보통 aws, azure, gcp 등 클라우드와 연계해서 사용하게 되는데, 자동화나 GIT처럼 버전 관리에도 사용할 수 있습니다.
정의만 보고서는 정확하게 개념이 와닿지 않을 수 있습니다. 간단한 aws ec2 인스턴스를 생성,삭제하는 과정을 따라 하며 익혀볼까요?
실습 환경
macOS(Big Sur, M1)
Terraform v1.0.0 on darwin_arm64
먼저 테라폼 설치가 필요합니다. 테라폼은 홈페이지에서 다운로드 가능하며. 저의 실습 환경은 위와 같습니다.
홈페이지의 Download CLI를 클릭하고, 실습 환경의 OS에 맞는 버전을 다운로드합니다. 파일이 zip버전이니 다음과 같이 터미널에서 폴더를 만들고 환경변수를 설정해줍시다.
% mkdir terraform
% cd terraform
% unzip ../Downloads/terraform_1.0.0_darwin_amd64.zip
% export PATH=/Users/[User 이름]/terraform/:$PATH
% terraform -version
여기서 압축해제할 zip 파일의 이름은 테라폼의 버전에 따라 달라지니 다운로드 폴더에 있는 테라폼의 버전을 꼭 확인하고 그에 맞게 바꿔 주셔야 합니다! 그리고 환경변수를 설정할 때도 중괄호[]는 지우시고 user의 이름을 넣어야 합니다. (예를 들어, seocheong-un)
정상적으로 설치가 되었으면 테라폼의 버전이 출력됩니다.
이제 본격적으로 AWS EC2 인스턴스를 생성해 봅시다. 시작하기 전에 AWS계정이 필요합니다.
1. AWS 계정 들어가기
2. IAM admin 사용자 생성
3. t2.micro 인스턴스를 생성하는 테라폼 파일(.tf)을 생성
4. 테라폼 실행시키기
테라폼으로 AWS와 연동하려면, 계정의 권한을 위임받은 IAM user의 액세스 키가 필요합니다.
AWS 계정에 접속한 뒤, IAM 서비스에 들어가서 사용자 탭으로 가면, 다음과 같은 화면에서 사용자를 생성할 수 있습니다.
사용자 추가 화면에서는 적당한 사용자 이름을 정해주고, 프로그래밍 방식 액세스 유형을 선택해줍시다.
그다음 화면에서는 보안 그룹을 설정해 주어야 하는데, 만들어 둔 보안 그룹이 없는 분들은 새로 연습용 그룹을 생성해 줍시다. 모든 권한을 위임한 보안 그룹을 생성하는 과정입니다. 물론 연습 과정이니 모든 권한을 가지게 하지만 실전에서는 권한을 세부적으로 나눠주어야 합니다.
그룹을 생성, 선택하고 다음 3번째 과정인 태그 추가는 생략해도 무방합니다. 그렇게 5번째 과정에서 사용자의 액세스 키와 비밀 액세스 키가 표시됩니다. csv파일은 지금 이 화면에서만 다운로드 가능하니 지금 화면을 계속 켜 두던지, 파일을 다운로드하여야 합니다. 그렇지 않으면 방금 과정을 다시 반복해서 새로 user를 만들어야 하니까 조금 귀찮아집니다.
IAM을 설정했으니, EC2의 default 보안 그룹의 인바운드 규칙을 지정해 주어야 합니다. defualt 보안 그룹은 수신, 발신 트래픽을 제어하는 가상 방화벽 역할을 하는데, 보안 그룹을 지정하지 않으면 default 보안 그룹으로 지정이 됩니다. 그 접근 권한을 모든 IP에게 주도록 인바운드 규칙을 설정해야 합니다.
검색 칸에 default라 검색하고, 인바운드 규칙 편집으로 들어가서, 규칙 추가를 누른 다음, 모든 트래픽에 대해 모든 접근을 허용해줍시다.
자, 이제 모든 설정은 끝이 났습니다! 이제 테라폼 파일을 생성해 봅시다.
테라폼 생성 기본 예제 파일이 있는 git저장소에 클론 하여 형식을 고쳐 사용할 겁니다. 다음과 같이 터미널을 실행합시다.
% git clone https://github.com/wardviaene/terraform-course
% cd terraform-course
% cd first-steps
우리는 이 디렉터리에 있는 instance.tf의 내용을 바꿔 실행시킬 겁니다. 현재의 instance.tf의 파일 내용은 다음과 같습니다.
provider "aws" {
access_key = "ACCESS_KEY_HERE"
secret_key = "SECRET_KEY_HERE"
region = "us-east-1"
}
resource "aws_instance" "example" {
ami = "ami-0d729a60"
instance_type = "t2.micro"
}
우선 다음과 같이 변경해줍시다. (파일 편집은 vim을 쓰거나 vsCode나 atom을 사용하여 진행하시면 됩니다.)
provider "aws" {
access_key = " " //IAM 생성했던 사용자의 액세스 키 ID
secret_key = " " //IAM 생성했던 사용자의 비밀 액세스 키
region = "ap-northeast-2" //아시아 태평양(서울) 리전
}
resource "aws_instance" "example" {
ami = "ami-0d729a60"
instance_type = "t2.micro"
}
region의 값은 적어 놓은 대로 쓰시면 되고, access_key, secret_key만 아까 진행했던 IAM 키 값으로 변경해 주시면 됩니다.
이대로 끝이 아닙니다. ami는 새 서버를 인스턴스화 할 수 있는 머신 템플릿인데, EC2 클라우드에서 인스턴스를 시작하려면 먼저 해당 ami의 ID를 찾아야 합니다. 밑의 사이트에서 ami ID를 빠르게 찾을 수 있습니다.
https://cloud-images.ubuntu.com/locator/ec2/
검색란에 ap-northeast-2라 검색하고, hvm:ebs-ssd의 인스턴스 타입을 가진 id를 아무것이나 복사합시다. 저는 검색 결과 맨 위에 있는 ami-08508144e576d5b64 를 사용하겠습니다. 그리고 미완이었던 instance.tf 파일을 완성시켜줍시다.
provider "aws" {
access_key = " " //IAM 생성했던 사용자의 액세스 키 ID
secret_key = " " //IAM 생성했던 사용자의 비밀 액세스 키
region = "ap-northeast-2" //아시아 태평양(서울) 리전
}
resource "aws_instance" "example" {
ami = "ami-08508144e576d5b64" //방금 검색했던 amiID를 복사해 붙여넣기
instance_type = "t2.micro"
}
자, 이제 테라폼을 실행해주기만 하면 됩니다.
% terraform init
% terraform apply
그다음 수행을 허락하시겠습니까? 문구가 나오고, yes를 입력해 줍니다.
인스턴스가 생성되었습니다! 정말 생성되었는지 확인하기 위해 aws ec2 페이지에 접속해봅시다.
터미널에 표시된 id와 방금 생성된 인스턴스 id가 동일합니다. ap-northeast-2 리전에 t2.micro 유형으로 인스턴스가 잘 생성되었네요.
인스턴스를 생성했으니, 이번엔 삭제까지 해봅시다. 삭제는 매우 간단합니다.
% terraform destroy
정말 삭제하시겠습니까? 문구가 나오고, yes로 답을 줍니다. 터미널에서 완료했다는 문구가 뜨고, 다시 aws ec2 페이지에 가면,
인스턴스가 종료된 것을 확인할 수 있습니다.
테라폼의 아주 일부 기능만을 실행해 봤는데, aws페이지에 들어가지 않고도 터미널에서 작업이 수행될 수 있다는 건 매우 신기하고 활용도가 높아 보입니다. 테라폼 개념이 많이 알려지진 않다 보니 한글 자료가 조금 부족했습니다. 앞으로도 공부한 개념을 업로드하며 정리하면 저도 도움이 될 것 같고, 혹시 새로 배우시려는 분들에게도 조금이나마 도움이 되셨으면 좋겠습니다.
'🐳AWS' 카테고리의 다른 글
[AWS] Lambda위에 자체 환경(Ubuntu)의 docker 컨테이너 올리기 (0) | 2021.11.23 |
---|---|
[AWS] Step Function으로 Lambda 워크플로 자동화하기 (0) | 2021.09.08 |
[AWS] lambda에서 chrome-selenium 크롤링 환경 설정하기 (2) | 2021.08.26 |
[AWS] 나의 클라우드 아키텍처 입문기 (0) | 2021.06.16 |
[AWS] AWS에 63만원 요금폭탄 맞은 후기 (4) | 2021.06.07 |