새소식

IaC/Terraform

[Infracost] 테라폼 리소스 비용 한눈에 보기 - 1. Local 환경에서 실행

  • -

이전에 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 홈페이지
 

Infracost

Team lead visibility across changes When using Infracost in CI/CD, team leads, managers & FinOps can see pull requests that increase or decrease costs the most, by how much, and by whom. This helps you better understand when & where cost changes were intro

www.infracost.io

 

Terraform 으로 클라우드를 운영하거나 구축할 때 쉽게 간과할 수 있는 부분이 바로 비용 최적화이다.
Infracost 를 사용하면 Terraform 리소스를 배포하기 전에 로컬 컴퓨터 혹은 PR 에서 클라우드 리소스에 대한 비용을 파악할 수 있다.

 

오픈소스 도구이니 테라폼으로 운영을 하고 있는 조직에서는 비용 최적화를 위해 도입을 적극 고려하는 것이 좋을 듯 싶다.

 

Infracost는 로컬에서 직접 명령어를 쳐서 실행시킬 수 있지만,
Infracost 가 현재 많이 쓰이고 있는 이유 중 하나는 다양한 CI 파이프라인에 접목시킬 수 있다는 점이 아닐까 싶다.

 

 

Infracost 가 지원해주는 대표적인 CI 파이프라인
  1. GitHub
  2. GitLab
  3. Atlantis
  4. AWS Code Series
  5. Azure Pipeline
  6. Jenkins 등

 

이외에도 더 많은 CI 파이프라인과 접목시킬 수 있으니 필요하다면 한 번 찾아보자

 

Add to CI/CD | Infracost

Use one of our many integrations so DevOps, SRE and engineers see a cost estimate in pull requests before making changes. This provides your team with a safety net as people can understand cloud costs upfront, and discuss them as part of your workflow.

www.infracost.io

 

1.1. Infracost 작동 방식

Infracost Workflow 를 간단하게 알아보자

 

  1. Infracost 는 하루에 한 번 Cloud Provider 의 Billing API 를 호출하여 최신 리소스 비용을 가져온다.
    해당 작업은 비용이 들지 않음
  2. 업데이트된 리소스 비용을 보관하고 있다가,
    사용자가 Infracost 를 호출하는 순간 Terraform 코드를 스캔하고 배포될 리소스의 비용을 측정한다.

 

실제로 Infracost 를 실행시켜 확인해보자 !!

 

 

2. Local PC 에서 Infracost 실행


2.1. Infracost 설치

Infracost 는 homebrew 를 지원하기 때문에 설치는 매우 간단하다.

brew install infracost

 

infracost --version

 

혹시 로컬 환경이 Mac 이 아니라면 아래의 공식 문서에서 설치방법을 찾아 진행해보자
리눅스 서버를 실행시켜 테스트하는 것도 좋은 방법일 것이다.

 

Get started | Infracost

Get started with Infracost in your Terraform workflow, integrate it into your CI pipeline and view cost estimates for your AWS/Azure/Google infrastructure.

www.infracost.io



2.2. Infracost 로그인

앞서 설명했던 하루마다 업데이트되는 리소스 비용을 사용할 수 있는 Infracost API 를 사용하려면 Infracost 아이디가 필요하다.

 

아래 홈페이지를 통해 Infracost ID 를 생성하고 로그인하자.

 

Infracost

 

dashboard.infracost.io

 

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 을 생성하고 다음과 같은 내용을 넣어주자

 

  • 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) 기존 코드와 변경 코드의 비용 비교

 

  • 기존 코드 내용을 json 파일로 뽑아낸다.
infracost breakdown --path . --format json --outfile infracost-base.json

 

  • 테라폼 파일 수정 후 아래 명령어 입력
infracost diff --path . --compare-to infracost-base.json

 

아래처럼 어떤 리소스가 어떻게 변경되었는 지 확인 가능

 


 

이번에는 Infracost 의 작동 방식을 이해하기 위해 로컬 환경에서 Infracost 를 실행하는 법을 알아보았다.

 

이제 본격적으로 팀단위의 협업 환경에서 Infracost 를 적용시키는 법을 알아보자 !
다음 게시글에서는 Terraform PR 협업 툴인 Atlantis 와 Infracost 를 함께 사용하는 법에 대해서 포스팅해보겠다.

 

 

글에서 틀린 정보나 기술적인 피드백은 언제나 환영하고 있습니다! :)

Contents

포스팅 주소를 복사했습니다