본문 바로가기

코딩(Coding)

Terraform 코드를 깨끗하게 유지하는 방법 — 지속 가능한 방법

반응형

Terraform 코드를 깨끗하게 유지하는 방법 — 지속 가능한 방법

 

Unsplash에 대한 수정 사항 없음의 사진

DevOps 팀에서 일하는 것은 많은 Terraform 리포지토리에 기여한다는 것을 의미합니다. 때때로 우리는 Terraform 코드를 작성하는 동일한 방법을 가지고 있지 않습니다. 코드 검토도 시간이 많이 걸리고 코드를 유지 관리하기가 어렵습니다.

진행하면서 점점 더 많은 Terraform 코드를 소유하게 되며 하루는 항상 24시간이 됩니다. 최소한의 노력으로 좋은 품질 수준을 유지하는 방법은 무엇입니까? 이 시간은 소중하니 낭비하면 안 됩니다.

여기에서 자동화는 Terraform 코드를 깨끗하게 유지하기 위한 구원입니다. 적은 노력으로 더 많은 코드를 처리할 수 있습니다. 그런 다음 더 영향력 있는 작업에 여유 시간을 투자하십시오.

이 문서에서는 이러한 지속적인 개선을 시작하기 위한 첫 번째 단계를 보여줍니다. 이는 모범 사례 및 도구와 관련이 있습니다. Terraform에는 기본 제공 도구가 있으며 다른 도구는 구성에 추가해야 합니다.

테라폼 fmt

비표준 코드를 읽을 때 눈은 항상 적응해야 합니다. 이를 따라잡기 위해서는 더 많은 집중이 필요합니다. 가독성을 높이려면 코드 형식을 표준화해야 합니다.

Terraform은 다음과 같은 기본 제공 하위 명령을 제공합니다. fmt. Terraform 언어 스타일 규칙의 하위 집합을 따르도록 코드를 다시 작성합니다.

$ terraform fmt

💡 형식 지정 규칙은 Terraform 버전 간에 변경될 수 있습니다. 실행하는 것을 잊지 마세요 terraform fmt 버전 업그레이드 후 명령.

명명 규칙

컴퓨터 과학의 주요 어려움 중 하나는 이름을 잘 지정하는 것입니다. 변수, 출력, 리소스 및 데이터 소스에 대한 Terraform에도 동일하게 적용됩니다. 여기에서 좋은 명명 규칙이 적용됩니다.

이렇게 하면 명확한 코드를 가질 수 있습니다. 그것은 스스로를 영어로 읽을 것입니다.

이 기사에서는 전체 명명 규칙에 대해 다루지 않을 것입니다. 그러나 영감을 주는 링크를 제공하는 다음 링크를 참조하시기 바랍니다.

Terraform 유효성 검사

이전에 당신이 본 fmt Terraform의 명령. Terraform validate는 또 다른 기본 제공 하위 명령입니다. 구문 오류 및 오타를 확인하고 추적할 수 있습니다.

다음 예를 들어보겠습니다.

스니펫의 리소스 이름에 오류가 있습니다. validate 하위 명령을 실행하면 강조 표시됩니다.

$ terraform validate
╷
│ Error: Invalid resource type
│
│ on main.tf line 5, in resource "aws_instanc" "foo":
│ 5: resource "aws_instanc" "foo" {
│
│ The provider hashicorp/aws does not support resource type 
| "aws_instanc". Did you mean "aws_instance"?
╵

Terraform 코드는 Terraform의 눈에는 유효해 보이지만 실제로는 작동하지 않을 수 있습니다. 이 예에서 코드는 존재하지 않는 AWS 공급자 지역과 잘못된 인스턴스 유형을 선언합니다.

Terraform은 실행할 때 모두 정확함을 나타냅니다. validate:

$ terraform validate
Success! The configuration is valid.

Terraform은 코드 구문과 구조만 확인하기 때문입니다. AWS 공급자 및 리소스에 사용된 값은 확인하지 않습니다. 이것은 Terraform 범위 밖에 있으며 공급자와 관련이 있습니다.

💡 빠른 검증을 위한 첫 번째 단계로 Terraform 검증을 고려하십시오. 이전에 모든 오류를 감지하지는 않습니다. terraform apply.

TFLint

TFLint는 잠재적인 Terraform 오류를 확인하고 모범 사례를 시행하는 린터입니다. 고급 오류 감지를 위해 주요 클라우드 제공업체(AWS, Azure, GCP)와 호환되는 플러그인을 추가할 수 있습니다. 모범 사례는 규칙 시스템을 통해 구성할 수 있습니다.

TFLint는 항상 추가 .tflint.hcl 파일이 실행되는 현재 디렉토리에 있습니다. 이 구성 파일에서 특정 규칙과 플러그인을 추가합니다.

다음은 TFLint 구성의 예입니다.

  1. 특정 오류를 감지하기 위해 플러그인 AWS가 추가되었습니다.
  2. 잘못된 AWS 인스턴스 유형을 감지하는 규칙이 시행됩니다.

이제 이전 Terraform AWS 코드 스니펫을 사용하겠습니다.

Terraform 디렉토리에서 TFLint를 초기화해야 합니다.

$ tflint --init

그런 다음 디렉터리 위치로 TFLint를 실행합니다.

$ tflint .
1 issue(s) found:

Error: "wrong" is an invalid value as instance_type (aws_instance_invalid_type)

on main.tf line 7:
7: instance_type = "wrong"

Terraform은 인프라를 코드로 관리하기 위한 도구 그 이상도 이하도 아닙니다. 좋은 보안 설계를 보장하는 것은 귀하에게 달려 있습니다. 이는 취약점으로 이어질 수 있는 잘못된 구성을 확인하는 데 중요합니다.

체코프란?

Checkov는 인프라를 코드 파일로 스캔하기 위한 정적 코드 분석 도구입니다. Terraform을 지원하며 750개 이상의 사전 정의된 정책을 포함합니다. 사용자 지정 정책을 제공하고 생성할 수도 있습니다.

체크코프 설치

$ brew install checkov

Terraform 계획 평가

Terraform 계획에서 JSON 파일을 만듭니다.

$ terraform init
$ terraform plan --out tfplan.binary
$ terraform show -json tfplan.binary | jq '.' > tfplan.json

Checkov는 이 파일을 읽고 권장 사항과 함께 출력을 반환합니다.

Terraform 계획의 Checkov 출력
Terraform 계획의 Checkov 출력

사전 커밋이란 무엇입니까?

사전 커밋은 git hook 스크립트를 관리하기 위한 프레임워크입니다. 코드 검토에 제출하기 전에 간단한 문제를 식별하는 데 유용합니다. 커밋 메시지를 입력하기도 전에 커밋 전 후크가 실행됩니다.

사전 커밋은 코드를 확인하기 위해 입력하는 많은 명령을 대체합니다.

사전 커밋 설치

$ brew install pre-commit

pip로 설치할 수도 있습니다.

$ pip install pre-commit

사전 커밋을 사용하는 방법?

Terraform 코드는 초기화된 git 저장소에 있어야 합니다. 사전 커밋에는 다음과 같은 구성이 필요합니다. .pre-commit-config.yaml. 이 파일에서 Terraform에 대한 사전 커밋 후크를 정의합니다.

git 저장소를 초기화합니다.

$ git init

다음은 사전 커밋 구성입니다.

사전 커밋 구성은 2개의 다른 리포지토리에서 가져온 후크를 사용합니다. 첫 번째는 Terraform 전용이고 두 번째는 더 일반적입니다. 그것은 작동한다 terraform fmt, terraform validate, tflint 당신은 전에 본 적이 있습니다. 후크 정의의 순서는 실행 순서입니다.

구성이 준비되면 git에 Terraform 파일을 추가해야 합니다.

$ git add main.tf

다음 명령을 사용하여 사전 커밋을 수동으로 실행할 수 있습니다.

$ pre-commit run -a

사전 커밋은 모든 후크 스크립트를 실행하고 Terraform 파일을 업데이트했습니다. 업데이트를 고려하려면 git에 파일을 다시 추가해야 합니다. 코드를 커밋할 때 사전 커밋이 자동으로 실행됩니다.

이 가이드를 통해 Terraform 코드를 시작하고 깨끗하게 유지하는 주요 사항을 확인했습니다. 이는 모범 사례의 구현과 린터 및 스캐너와 같은 도구의 사용에 의존합니다.

사전 커밋을 사용하면 단일 명령으로 로컬에서 잠재적 오류 검사를 자동화할 수 있습니다. 원격 git 저장소에 코드를 커밋하기 전에 검사가 자동으로 수행됩니다. 이렇게 하면 코드 검토가 더 효율적입니다.

사전 커밋을 통해 CI/CD 파이프라인을 간소화할 수 있습니다. 많은 Terraform 린터 및 스캐너를 구동하기 위한 많은 후크 스크립트가 있습니다.

감사합니다. 이 기사가 Terraform에 도움이 되었기를 바랍니다! DevOps에 대해 더 알고 싶으십니까? 아래에 있습니다.

반응형