본문 바로가기
카테고리 없음

Python으로 Terraform 인프라 코드 테스트하는 방법

by 부동산절대원칙 2022. 6. 20.
반응형

Python으로 Terraform 인프라 코드 테스트하는 방법

 

 

Terraform HCL 및 Python으로 API 사용 사례를 살펴보겠습니다.

 

저자의 이미지

오늘날 대부분의 인프라 코드는 Terraform을 통해 수행됩니다. 꽤 오랫동안 존재했고 강력한 커뮤니티를 갖고 있으며 멀티클라우드입니다. 그러나 Terraform 코드를 테스트할 때 상황이 까다로워지기 시작합니다. Terraform은 자체 언어(HCL)를 사용하지만 백엔드는 Golang으로 작성됩니다.

Terraform 모듈 테스트를 위한 좋은 패턴은 terratest이지만 짐작할 수 있듯이 Golang으로 이를 작성해야 합니다. 여기에서는 기존 Terraform HCL 코드에서 강력하지만 간단한 라이브러리 tftest와 함께 일반 Python을 사용하는 방법을 보여줄 것입니다.

Tftest는 Google의 작은 Python 라이브러리입니다. 이를 통해 프로그래밍 방식으로 Terraform 작업(계획|배포|파괴)을 수행하고 실행 계획, 출력 변수 등을 검색할 수 있습니다.

tftest의 힘은 다음과의 잠재적인 콤보에 있습니다. pytest. 게다가 Python은 다양한 클라우드 제공업체에 대해 정말 좋은 SDK 지원을 제공하므로 클라우드 인프라를 테스트하는 데 적합합니다.

설정에는 간단한 Cloud Run API(서버리스 컨테이너 런타임)가 포함되지만 배포하는 모든 인프라에 위의 방법을 적용할 수 있습니다!

간단한 인프라 테스트

첫 번째 예에서는 간단한 테스트를 수행하여 주변을 둘러볼 것입니다. tftest. 다음을 시도해보자

  • 만들기 plan고정물
  • 컨테이너 이미지의 출력 이름이 예상한 것과 일치하는지 확인
  • 출력 변수가 예상되는지 확인하십시오.

계획 픽스처는 단순히 조회해야 하는 terraform 모듈/디렉토리를 살펴보고 수행해야 합니다. apply 명령) 출력 변수를 개체로 사용할 수 있도록 합니다.

보시다시피 원하는 테스트를 수행하기 위해 모든 출력 및/또는 변수를 쉽게 검색할 수 있습니다!

고급 e2 인프라 테스트

이제 다음을 수행하는 e2 테스트를 수행할 것입니다.

  • Cloud Run에 API 배포
  • 배포된 서비스의 URL 가져오기
  • 요청할 준비가 된 인증 세션 생성
  • 요청을 수행하고 응답을 주장
  • API 파괴

테스트 기능을 최소로 유지하고 다른 요청에 이 기능을 재사용할 수 있도록 처음 세 지점을 다시 고정 장치에 넣을 수 있습니다.

이번에는 우리의 고정 장치가 할 것입니다 apply 그리고 destroy 테스트가 끝나면.

또한 요청을 수행할 수 있도록 배포된 URL을 기반으로 인증 세션을 생성합니다. 우리는 다음을 통해 이 인증 세션을 마무리할 것입니다. request_wrapper 기능.

이 비품을 넣어보자 conftest.py:

다음은 요청을 수행하고 응답을 주장하는 테스트 파일입니다.

이 파일은 최소한으로 유지되며 고정 장치는 다른 끝점 테스트에 쉽게 재사용할 수 있습니다.

이 설정은 콜드 스타트가 길지 않은 모든 서버리스 구성요소(예: Cloud Run)에 적합합니다. 일부 클라우드 서비스는 준비하는 데 최대 15~20분이 소요될 수 있으므로 CI 파이프라인의 일부로 포함하는 것이 지루합니다.

여기에 제시된 설정은 기존 Terraform 코드베이스에서 잘 작동합니다. 그러나 새 프로젝트를 시작하는 경우 더 적절한 솔루션이 있습니다.

Terraform은 이미 Python(또는 지원되는 다른 프로그래밍 언어)을 직접 사용하여 인프라를 선언할 수 있는 베타 Terraform CDK를 보유하고 있으므로 테스트가 훨씬 쉬워집니다.

Pulumi는 또한 훌륭한 후보이며 CDK 측면에서 더 성숙합니다.

AWS만 사용하려는 경우 AWS CDK도 사용할 수 있지만 공급업체에 종속되지 않은 IAC 프레임워크에 지식을 투자하는 이점을 잃게 됩니다.

어쨌든, 포함된 모든 테스트 도구를 직접 활용할 수 있으므로 마침내 표준 프로그래밍 언어를 사용하여 인프라를 관리할 수 있게 되어 기쁩니다!

즐거운 테스트.

전체 데모 GitHub 저장소 링크 여기.

Want to Connect?
Follow me on YouTube or LinkedIn
반응형