terraform의 구성 요소
provider : 테라폼으로 생성할 인프라의 종류. AWS, GCP...
resource : 인프라의 자원을 의미. EC2든 S3든 인프라 내부 서비스를 통해 생성하는 자원들.
state : 테라폼을 통해 생성한 자원의 상태. 파일 형태로 남게 됨. 테라폼 명령어를 실행한 결과물
output : 테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것을 의미함
module : 공통적으로 활용할 수 있는 코드를 모듈 형태로 정의할 수 있음. 흔히 아는 그 모듈 맞다.
remote : 다른 경로의 state를 참조하는 것. 원격 참조. output 변수를 불러올 때 주로 사용됨.
위 요소들은 직접 tf 파일 내의 코드를 보면 쉽게 이해할 수 있다. 우선은 개념적으로만 이해하고 넘어가자
테라폼 기본 명령어
init : 테라폼 명령어 사용을 위한 설정 진행. 최초에 입력하는 명령어.
plan : 테라폼으로 작성한 코드 실행시 만들어질 결과 예측. 가장 많이 사용됨.
apply : 인프라를 실제로 생성하는 코드임.
import : 이미 만들어진 자원을 state 파일로 옮기기. 이미 세팅된 AWS를 코드로 관리하고 싶어서 가져올 때 사용.
state : state를 다루는 명령어로 하위 명령어로 mv, push 등. 자주는 아니지만 꼭 사용하게 됨.
destory : 생성된 자원을 state 파일 기준으로 모두 삭제.
기본 명령어를 보면 짐작할 수 있겠지만 테라폼을 통한 인프라 생성의 프로세스는 다음과 같이 관리된다.
1. Init
작성한 코드에서 init 명령어를 입력합니다.
2. plan
실제로 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어임. plan에 문제가 없어야 apply에 문제가 없을 확률이 높음. 물론 plan이 정상적이어도 apply에서 문제가 일어날 때도 있음.
3. apply
실제로 작성한 대로 인프라 리소스를 생성함. 따라서 주의깊게 실행해야 함.
이제 AWS CLI와 Terraform을 설치해보자
우선 aws cli를 설치하자. 당연히 2버전을 사용할 것이다. amazon-linux에는 aws cli가 기본 설치되어있기는 하나 1버전이기 때문에 결국 2버전으로 다시 다운로드 받아야 한다.
curl을 이용해 다운로드 받고, unzip한 다음에 install을 실행하면 된다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
// 설치 후 버전 확인
aws --version
// 설치 되었으면 zip은 지워주자. 용량이 여유롭지 못하다
rm -f awscliv2.zip
이제 테라폼을 설치해보자
공식 홈페이지 기준으로는 0.14.3이 최신 버전이다.
문서에 따르면 binary 파일로 배포된다고 하니, 단순히 zip으로 받고, unzip해서 푼 다음 바이너리 파일을 PATH에 옮겨주어서 명령어로 쉽게 사용하게 만들면된다.
Terraform is distributed as a single binary. Install Terraform by unzipping it and moving it to a directory included in your system's PATH .
releases.hashicorp.com/terraform/
위 링크에 들어가서 운영체제 맞는 것으로 설치해주면 된다. 필자는 linux-amd64.zip을 받기로 하였다.
링크 주소를 복사하여 zip을 받아주고, unzip으로 풀어준 후 terraform 바이너리 파일을 환경 변수 경로로 이동시켜 주면 된다.
wget https://releases.hashicorp.com/terraform/0.14.3/terraform_0.14.3_linux_amd64.zip
unzip terraform_0.14.3_linux_amd64.zip // terraform 바이너리 파일을 받음
echo $PATH // 환경 변수 경로 확인
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
sudo mv terraform /usr/local/bin // terraform 바이너리 파일을 환경 변수 경로로 이동
terraform // 테라폼 명령어 실행 확인.
* 참고로 terraform은 Go로 작성이 되었다. Go를 해본 사람은 알겠지만 컴파일하면 바이너리 파일 하나가 나온다. terraform이 바이너리 형태의 단일 파일인 것도 Go의 특성 때문임.
AWS Configuring
Terraform으로 AWS 인프라 구축을 하려고 하니 당연히 AWS 계정과 연동해야 한다.
AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY를 등록하자. 너무 많은 권한을 주는 것이 싫다면 IAM에서 권한을 제한하면 되지만 여기서는 편의를 위해 root 계정에서 이용하도록하자. [보안 자격 증명]에 가서 키를 받도록하자.
aws configure 명령어를 통해 등록할 수 있다. format은 익숙한 json을 사용하자.
aws configure
저장된 내용은 아래 경로에서 확인할 수 있다.
// 현재 key들 확인
cat ~/.aws/credentials
// 나의 권한
aws sts get-caller-identity
이제 cli로 aws를 컨트롤할 수 있게 되었다!
aws s3 ls // 해당 계정에 생성된 s3 버킷의 리스트
'Ops, Infra, etc > 🧙 Terraform' 카테고리의 다른 글
terraform의 작동 원리와 기본 실습 (0) | 2020.12.20 |
---|---|
DevSecOps란 무엇인가, CI, CD는 무엇이고 IaC는 왜 필요한가 (0) | 2020.12.20 |