🎅

チーム開発でTerraformを運用していく時の簡単なTips

2021/12/12に公開

こんにちは!最近猫を飼い始めて家がどんどん猫が住む環境に最適化されていっています。皆さんいかがお過ごしでしょうか。

マクアケという会社でSREしてます。Naganeです。
という事でこの記事はMakuake Advent Calendar 2021 12日目の記事になります。

マクアケでは弊社が運用するWebサービスであるMakuakeのITインフラリソースの運用管理をTerraformを利用して行なっています。今日はそのTerraformを利用する際のTipsを紹介したいと思います。

Terraformとは

HashiCorp社が提供するITインフラ管理を自動化するツールです。複数のクラウドベンダーに対応しているため、複数のクラウドを利用してサービスを展開しているような場合に採用するメリットが多く、利用している方も多いかと思います。

マクアケにおけるTerraform利用方針

マクアケでは大きく2つの方針でTerraformを日々運用しています

  • なるべく小さいtfstateファイルになるように分割していく
  • 各サービスに対応するTerraformは担当するそのサービスを担当するチームがオーナーシップを持つ

各サービス単位で独立性を保って運用していくため、大まかなガイドラインやお作法等のルールはあるものの、Terraformの実行環境は各チームによって異なるようになっていきます。

今日はこの課題に対して行なっている小ネタを紹介していきたいと思います。

Tips 1. Dockerを利用したTerraform実行環境

今のところ実行環境におけるTerraformのバージョンを固定するポリシーではないため、各チームで利用するTerraformのバージョンが異なり複数のバージョンを利用するようになっていきいます。その際Terraformの実行環境をDocker経由にしておくと、ローカルで動作させる際予め指定のDocker imageを利用するだけなので動作に関しては何も考える必要がなくなります。

terraformのdocker imageに関してはhashicorp社から提供されています。

https://hub.docker.com/r/hashicorp/terraform/

例えば今現在Terraformの最新のバージョンは1.1.0になりますが、利用しているバージョンが1.0.9の場合、該当のDocker imageを一度pullするだけで実行環境の用意が完了します。

docker pull hashicorp/terraform:1.0.9

例えばAWS環境へ作成したコードを確認するためplanする場合は下記のコマンドを実行します

docker run -it -e AWS_SECRET_ACCESS_KEY \
  -e AWS_ACCESS_KEY_ID -e AWS_SESSION_TOKEN \
  --rm -v /Terraform/path:/app/ -w /app/ hashicorp/terraform:1.0.9 plan

こうする事で周りとバージョンの足並みを揃える必要がなくなり、必要になったタイミングで最新のバージョンを利用できたり、新機能の導入や必要なバージョンアップ対応などある程度コントローラブルに開発を進めていくことが出来ます。

Discussion