Terraform을 공부하기 위해 CI/CD 환경을 정돈했습니다.

6297 단어 CircleCITerraform
AWS 인프라 환경을 구축하기 위해 Terraform을 공부하려고 했습니다.
프로젝트에서 사용하는 것도 상정해, 절각이므로 CI/CD도 정돈한 메모입니다.

이번에는 Github에서 Pull-Request를 발행했을 때 밸리데이션 체크를하고 master 브랜치에 병합했을 때
AWS에 배포하려고 합니다.

환경 구축에 사용한 것



Github



브랜치 전략은 Github Flow를 사용하여 master 브랜치를 보호해 둡니다.
(Settings -> Branches)



S3



Terraform의 상태를 관리하는 terraform.tfstate 를 영속화할 필요가 있다.
배포에는 CircleCI를 사용하므로 S3에 저장하는 것이 좋습니다.

다행히 Terraform에는 terraform.tfstate를 S3로 관리하는 설정이 있으므로 그것을 사용합니다.

main.tf
terraform {
  backend "s3" {
    bucket = "studyed-terraform-state1" # 作ったバケット名
    region = "ap-northeast-1"
    key = "terraform.tfstate"
    encrypt = true
  }
}

tflint



tflint 은 구문 검사를 위한 도구입니다.
0.12에도 대응하고 있습니다.
기본적으로 로컬 환경에서 사용하고 싶지만 CI에서도 확인합니다.

이번에는 tflint의 Docker 이미지을 사용했습니다.

Circle CI



환경 변수



AWS에 연결하려면 다음 환경 변수로 설정합니다.
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

  • config.yml



    tflint로 유효성 검사를 하고 master 브랜치에 병합할 때terraform apply 명령으로 배포하도록 합니다.
    version: 2.1
    executors:
      validater:
        docker:
          - image: wata727/tflint
      deployer:
        docker:
          - image: hashicorp/terraform:light
    jobs:
      validate:
        executor:
          name: validater
        steps:
          - checkout
          - run:
              name: Validation check by tflint
              command : tflint
      deploy:
        executor:
          name: deployer
        steps:
          - checkout
          - run:
              name: Inittialize
              command: terraform init
          - run:
              name: Deploy
              command: terraform apply -auto-approve # デプロイ確認不要になる
    
    workflows:
      test:
        jobs:
          - validate
          - deploy:
              requires:
                - validate
              filters:
                branches:
                  only: master
    

    무슨 일이야?



    유효성 검사



    예를 들어 modluemodue

    Pull Request를 만들면 Circle CI에 화가났습니다.


    배포



    병합 후 워크플로에서 배포할 수 있습니다.




    끝에



    이번에는 Terraform의 CI/CD 환경을 정리해 보았습니다.
    좀 더 포장할 곳도 있을 것 같습니다만
    최소한 공부용으로 좋을까.

    참고



    Terraform에서 tfstate 파일을 S3로 관리

    좋은 웹페이지 즐겨찾기