GitHub Actions를 이용한 간단한 Terraform용 CI를 추가해보자
Terraform은 자체 CLI를 이용하여 CI를 구성할 수 있다.
formatting이 권장하지 않는 방법으로 되어 있을 때 에러를 발생시켜 주거나,
파일을 실행시켜보기 전에 문법 등을 확인하여 문제가 있을 시 에러를 발생시켜 준다거나 하는 간단한 것들은 지원해준다.
그 외에도 Terraform이 점점 많이 사용됨에 따라서 TFLint처럼 lint를 확인할 수 있거나
유용한 Terraform wrapper인 Terragrunt를 만든 곳에서 만든 Terratest도 있다.
그 중에서 간단하게 파일 foramtting과 문법 확인 정도를 하는 수준의 간단한 CI를 GitHub Actions를 이용하여 작성하는 방법을 소개한다.
GitHub Actions에 대해서 잘 모른다면 GitHub 공식문서에서 확인하고 공부할 수 있다.
Lint
우선 앞에서 소개했던 TFLint와 Terraform CLI를 이용하여 간단하게 lint와 formatting 확인을 하는 GitHub Actions를 만들어보자.
파일 내용은 다음과 같다.
name: Lint
on: [push, pull_request]
jobs:
tflint:
name: TFLint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: TFLint
uses: docker://wata727/tflint
fmt:
name: Code Format
runs-on: ubuntu-latest
container:
image: hashicorp/terraform:latest
steps:
- uses: actions/checkout@master
- run: terraform fmt --recursive -check
Validate
다음은 Terraform CLI를 이용하여 작성한 파일의 문법 등을 확인할 수 있게 만들어보자.
파일 내용은 다음과 같다.
name: Continuous Integration
on: [push, pull_request]
jobs:
terraform:
name: 'Terraform'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: {원하는 테라폼 버전}
- name: Terraform Validate
run: |
# 테라폼 파일을 가지고 있는 디렉토리만 골라서 실행하기 위함
for DIR in $(find . -type f -name '*.tf' | sed -r 's|/[^/]+$||' |sort |uniq)
do
terraform init $DIR
terraform validate $DIR
done
env:
AWS_DEFAULT_REGION: {원하는 AWS 리전} # AWS provider를 사용하지 않는다면 추가하지 않아도 된다
위 파일들은 Repository에서 그 예제를 볼 수 있다.
포스트에 대한 피드백이 있으시다면 여기로 메일 부탁드립니다. 읽어주셔서 감사합니다.