Help us understand the problem. What is going on with this article?

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

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で管理する

okky_eng
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした