LoginSignup
1
1

More than 3 years have passed since last update.

Terraformを勉強するために、CI/CD環境を整えた

Posted at

AWSのインフラ環境を構築するためにTerraformを勉強しようと思いました。
プロジェクトで使うことも想定し、折角なのでCI/CDも整えたメモです。

今回は、Github上でPull- Requestを出した際にバリデーションチェックをして、masterブランチにマージした時に
AWSへデプロイするようにしてみます。

環境構築に使ったもの

Github

ブランチ戦略は Github Flowを用いることにしてmasterブランチを保護しておきます。
(Settings -> Branches)

image.png

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と間違えて書いて、リポジトリにPush
image

Pull Request作ると、Circle CIに怒られていました
image

デプロイ

マージ後のワークフローでデプロイできています。
image.png

image.png

終わりに

今回は、TerraformのCI/CD環境を整えてみました。
もう少し詰めるところもありそうですが(デプロイ前に人がApploveするとか)
最低限、勉強用としてはいいのかなと。

参考

TerraformでtfstateファイルをS3で管理する

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1