Control Tower 학습 중 AFT를 진행하기 위해선 Terraform의 사전 지식이 필요했다.
Terraform은 Hashicorp사에서 개발한 IaC 도구.
서비스 실행을 위한 환경을 프로비저닝 해주는 Ansible과 유사.
Terraform은 클라우드 환경에 초점이 맞춰짐.
1. Terraform 설치
- 테라폼 사이트에서 운영체제에 맞는 바이너리를 다운로드 한다.
나는 윈도우10 64비트라서 amd64를 선택했다. (i386은 32비트)
- 압축 파일을 풀고 환경 변수를 세팅해준다.
세팅을 편하게 하기 위해 경로를 단순화 시켜서 설정 ㄱㄱ
- 조금 더 편하게 진행하기 위해 vsCode (visual studio) 설치, 그리고 Hashicorp Terraform Plugin을 설치
2. aws cli 설치
- windows용 설치 (다른 OS는 https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html 참고)
msiexec.exe /i https://awscli. amazonaws.com/AWSCLIV2.msi
|
- 자격증명 환경변수 구성.
setx를 붙이면 모든 cmd 세션에 대해서 환경변수가 유지됨.
set AWS_ACCESS_KEY_ID= abcdefghijklmnopqrstuvwxyz
set AWS_SECRET_ACCESS_KEY= abcdefghijklmnopqrstuvwxyz set AWS_DEFAULT_REGION= ap-northeast-2 |
3. 기본 command
- vagrant의 vagrantfile과 유사하게 main.tf가 필요하다.
main.tf에 provider를 지정해주자.
provider는 테라폼으로 생성할 인프라 타입을 지정하는 것이다.
예를들면 aws, gcp, azure 등등.
리눅스는 vi main.tf, 윈도우는 notedpad main.tf로 파일을 생성해준다.
AWS provider에 Seoul region을 지정해보겠다.
- terraform init
초기화 명령어다. provider plug-in과 연결하기 위함.(방금 aws plug-in을 지정했다.)
provider 구문이 완성된 후에 실행이 가능하다.
- terraform -v
terraform versipn과 provider 정보를 볼 수있다.
이젠 main.tf에서 resource를 작성해보자.
resource는 테라폼으로 생성할 리소스를 지정하는 것이다.
간단하게 vpc, subnet, sg, ec2를 생성해본다. vscode를 사용하는 경우 terraform plug-in을 설치했기에 편리하게 작성 가 능하다.
- terraform graph
프로비저닝 될 리소스에 대한 종속성을 나타낸다.
예를들어 인스턴스를 생성하기 위해서 SG이 먼저 생성되어야 한다.
테라폼이 종속성을 알고 있기에 소스코드 순서를 바꿔도 알아서 순서에 맞게 생성한다.
수동 생성할 때는 순서를 생각해야 했었는데 이건 정말 편한듯?!
이는 아래 사이트에서 도식화해서 볼 수도 있다.
- terraform plan
소스코드 가상 실행 결과를 보여준다.
위의 plan 결과를 보면 add, change, destroy 수치가 나온다. 이는 멱등성이라는 개념과 연관이 있다.
소스 코드를 여러번 실행 했을 때, 계속 인프라가 생성 된다면 자동화에 사용하기 어려울뿐더러 의미가 없다.
그래서 변경된 부분만 실행 된다.
- terraform apply
코드를 실제로 적용해준다. 인프라를 프로비저닝 한다.
중간에 yes를 쳐줘야하는 구간이 나오기 때문에 귀찮아서 --auto-approve 옵션을 붙여줬다.
- 생성이 완료됐다. 확인해보자.
vpc
subnet
security group
1) inbound
2) outbound
ec2
terraform apply를 하면 terraform.tfstate라는 파일이 생성되는데, Terraform으로 생성한 resource의 상태를 나타내준다.
- terraform destroy
커맨드로 프로비저닝한 인프라를 삭제할 수 있다.
이것도 중간에 진짜 삭제할건지 물어보기 때문에 --auto-approve를 붙이면 편리하다.
인스턴스가 모두 삭제 되었다.
'네트워크 & 클라우드 > 자동화' 카테고리의 다른 글
Terraform 기초 3 - Backend (1) | 2022.12.01 |
---|---|
Terraform 기초 2 - Terraform/Provider Block (0) | 2022.11.27 |
Ansible 기초 5 - 네트워크 디바이스 관리하기 (보류) (0) | 2022.11.20 |
Ansible 기초 4 - Vagrant를 이용하여 윈도우 관리 (0) | 2022.11.19 |
Ansible 기초 3 - Vagrant를 이용하여 우분투 관리 (0) | 2022.11.17 |