이전에 AWS Meet-up 에 참가하게 되었을 때 그곳에서 처음 Infracost 에 대해서 알게 되었다.
Infracost 는 테라폼으로 배포되는 리소스의 비용을 대략적으로 파악할 수 있도록 해주는 오픈소스 도구이다.
굉장히 유용하게 사용할 수 있을 것이라 생각했는데, 실제로 이미 많은 곳에서 이 Infracost 를 활용하고 있었다.
그래서 이번 기회에 Infracost 에 대해서 테스트를 해보고 기록을 남겨보고자 한다.
Infracost를 통해 다음과 같은 테스트를 진행해보고자 한다.
1) Local 환경에서 직접 Infracost 를 실행해보기 !
2) Terraform 협업 툴인 Atlantis 와 융합하여 Infracost 를 PR 에 적용하기 !
3) AWS Code Series 에 Infracost 적용해보기 !
그럼 로컬 환경에서 Infracost 를 실행하기 전 Infracost 에 대해서 알아보도록 하자
1. Infracost 란??
Infracost 는 Terraform 에 대한 클라우드 인프라 비용 추정치를 보여주는 오픈소스 도구
Infracost 홈페이지
Terraform 으로 클라우드를 운영하거나 구축할 때 쉽게 간과할 수 있는 부분이 바로 비용 최적화이다.
Infracost 를 사용하면 Terraform 리소스를 배포하기 전에 로컬 컴퓨터 혹은 PR 에서 클라우드 리소스에 대한 비용을 파악할 수 있다.
오픈소스 도구이니 테라폼으로 운영을 하고 있는 조직에서는 비용 최적화를 위해 도입을 적극 고려하는 것이 좋을 듯 싶다.
Infracost는 로컬에서 직접 명령어를 쳐서 실행시킬 수 있지만,
Infracost 가 현재 많이 쓰이고 있는 이유 중 하나는 다양한 CI 파이프라인에 접목시킬 수 있다는 점이 아닐까 싶다.
Infracost 가 지원해주는 대표적인 CI 파이프라인
- GitHub
- GitLab
- Atlantis
- AWS Code Series
- Azure Pipeline
- Jenkins 등
이외에도 더 많은 CI 파이프라인과 접목시킬 수 있으니 필요하다면 한 번 찾아보자
1.1. Infracost 작동 방식
Infracost Workflow 를 간단하게 알아보자
- Infracost 는 하루에 한 번 Cloud Provider 의 Billing API 를 호출하여 최신 리소스 비용을 가져온다.
해당 작업은 비용이 들지 않음
- 업데이트된 리소스 비용을 보관하고 있다가,
사용자가 Infracost 를 호출하는 순간 Terraform 코드를 스캔하고 배포될 리소스의 비용을 측정한다.
실제로 Infracost 를 실행시켜 확인해보자 !!
2. Local PC 에서 Infracost 실행
2.1. Infracost 설치
Infracost 는 homebrew 를 지원하기 때문에 설치는 매우 간단하다.
brew install infracost
infracost --version
혹시 로컬 환경이 Mac 이 아니라면 아래의 공식 문서에서 설치방법을 찾아 진행해보자
리눅스 서버를 실행시켜 테스트하는 것도 좋은 방법일 것이다.
2.2. Infracost 로그인
앞서 설명했던 하루마다 업데이트되는 리소스 비용을 사용할 수 있는 Infracost API 를 사용하려면 Infracost 아이디가 필요하다.
아래 홈페이지를 통해 Infracost ID 를 생성하고 로그인하자.
Infracost 홈페이지에 로그인을 했다면 아래와 같은 대시보드를 볼 수 있을 것이다.
Infracost Cloud 를 사용하라는 알림창인데 가볍게 무시하고 중앙 상단 쪽 'Org Settings' 를 클릭하자
참고로 Infracost Cloud 를 사용하면,
- PR에서 리소스 변화
- Project / Repo 별 비용 분석
- 유저별 비용 분석
등이 가능한데 아래 그림처럼 UI가 이쁘게 나오긴 한다.
하지만, 이번 게시글에서 다룰 내용은 아닐뿐더러 Free Trial 기간이 있는 걸 보면 유료 서비스인 듯 싶다.
그리고 해당 기능 중 몇가지는 다른 CI 파이프라인과 융합하면 구현할 수 있는 기능이기도 하니, 그냥 넘어가자
2.3. Infracost API 인증
'Org Settings' 버튼을 눌러 들어왔다면 'Copy' 를 눌러 API Key 를 복사하자.
유저 마다 별개의 API Key 를 가지고 있다.
앞에서 봤던 Infracost Cloud 가 API Key 를 가지고 유저별 비용 분석을 하는 듯 싶다.
자동 인증이 안되었을 경우에 해당 API Key 값이 필요하다.
- 이후 로컬에서 아래의 명령어를 사용하여 인증을 진행하자
infracost auth login
아래와 같은 화면이 떴다면 인증에 성공한 것이다.
인증 실패 시, 수동 인증 방법
Infracost 는 아래의 경로에 credential YAML 파일을 생성하여 인증을 진행한다.
/Users/{사용자명}/.config/infracost/credentials.yml
수동 인증을 위해 해당 경로에 credentials.yml 을 생성하고 다음과 같은 내용을 넣어주자
version: "0.1"
api_key: {Infracost API Key 값}
pricing_api_endpoint: https://pricing.api.infracost.io
인증까지 성공했다면 Infracost 를 사용할 모든 준비가 완료되었다 !!
3. Infracost 실행
3.1. Terraform 파일 준비
Infracost 를 실행할 테라폼 파일을 준비하자
본인이 가지고 있는 테라폼 파일을 사용하거나, 없다면 아래 main.tf 파일을 생성하자
resource "aws_instance" "infracost" {
ami = "ami-0e9bfdb247cc8de84"
instance_type = "t2.micro"
tags = {
name = "infracost-test"
}
3.2. Infracost 실행
테라폼 파일까지 모든 준비가 되었다면,
테라폼 파일이 있는 위치에서 아래의 명령어를 입력하여 Infracost 를 실행해보자
infracost breakdown --path .
- Infracost 를 실행하면 아래 그림처럼 비용을 분석해준다 !
3.3. Infracost 를 실행하는 다양한 방법
1) 특정 경로에 있는 테라폼 코드를 스캔하여 비용 분석
# 기본 실행법
infracost breakdown --path {terraform 파일 경로}
2) 기존 코드와 변경 코드의 비용 비교
infracost breakdown --path . --format json --outfile infracost-base.json
infracost diff --path . --compare-to infracost-base.json
아래처럼 어떤 리소스가 어떻게 변경되었는 지 확인 가능
이번에는 Infracost 의 작동 방식을 이해하기 위해 로컬 환경에서 Infracost 를 실행하는 법을 알아보았다.
이제 본격적으로 팀단위의 협업 환경에서 Infracost 를 적용시키는 법을 알아보자 !
다음 게시글에서는 Terraform PR 협업 툴인 Atlantis 와 Infracost 를 함께 사용하는 법에 대해서 포스팅해보겠다.
글에서 틀린 정보나 기술적인 피드백은 언제나 환영하고 있습니다! :)