IaaS/IaC(InfraAsCode)

TerraTest 란?

armyost 2022. 7. 20. 10:48
728x90

관련링크 : https://www.cncf.io/blog/2022/07/18/testing-your-infrastructure-as-code-using-terratest/

 

Testing your Infrastructure as Code using Terratest | Cloud Native Computing Foundation

Guest post originally published on InfraCloud's blog by Akash Warkhade Setting Up infrastructure manually can be a time-consuming and hectic process. That is when we can make use of Infrastructure as…

www.cncf.io

 

TerraTest 란?

 

테라테스트는 당신의 Terraform, Packer으로 작성된 IaC를 IaaS Provider에서 자동으로 테스트를 진행하게 하는 go 라이브러리이다.

  • Docker Image, Helm Charts, Packer template를 테스팅 한다.
  • 다양한 클라우드 Provider에 작동한다.

테라테스트는 IaC코드에 단위테스트, 완전성 테스트를 진행한다. 테라테스트로 당신은 일찌감치 이슈를 찾고 문제를 해결할 수 있다. 그리고 Infrastructure에 컴플라이언스를 매핑하여 통제할 수 있다. 

 

 

테스트 예시

 

컨테이너가 Root가 아닌 유저로 실행되고 있는지 확인

package main

deny[msg] {
  input.kind == "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot

  msg := "Containers must not run as root"
}

 

Nginx와 같은 인프라를 Deploy하고 나서 포트가 정상적으로 Listening 중인지 확인

describe port(80) do
  it { should be_listening }
end

 

근데 이거 원래 파이프라인으로 구성하면 다 할수 있는거 아니야?

자유도가 높은 파이프라인(Jenkins)은 다양한 툴을 사용해서 비슷한 테스트를 진행할수 있다. 그래도 Terratest를 사용하게 되면 Terraform실행으로 발생하는 Output을 객체에 담아서 엔티티처럼 사용할 수도 있기도해서 완전한 자동화같은 고차원적인 요구사항을 만족할 수 있다. 그리고 이걸 테스트가 아닌 배포만 사용해도 Terraform의 부족한 조건/반복문 제약사항을 극복할 수 있는 방법이 될수도 있겠다.

 

 

Go를 별도로 배우긴 그런데, Python에는 없나?

Terratest는 Terraform모듈을 그대로 사용할 수 있게 고민된 라이브러리 이다. 즉 Terraform 언어가 주는 간결성, 검증된 기능의 장점을 이용하고 부족한 고급로직은 프로그래밍 언어로 보완하겠다는 취지인데, 아쉽게는 Python에는 없는듯하다.(내가 제대로 못찾은걸수도 있음)