Docker環境でTerraformerからTerraformコードを生成する

はじめに

こんにちは!Product Unit SINIS for Instagram開発チームでテックリードをしています工藤(@metalic_kudo_h)です。

みなさんのインフラ環境は、IaC(Infrastructure as Code)となっていますでしょうか?

弊社では、インフラの構築をすべてTerraformを用いて行うようになりましたが、過去に構築された古いインフラは未だにTerraformで管理されておらず、手動での運用が続いているという状況がありました。

既存のインフラリソース(AWS)をTerraformで管理できるように移行することを検討しましたが、0から全てのTerraformコードを手書きで作成するのは非常に手間がかかります。

そこで効率的にTerraformコードを生成できるツールはないかと調査したところ、「Terraformer」という便利なツールを発見しました。

この記事では、このTerraformerを使ってAWSリソースからTerraformコードを生成する方法について解説します。

サンプルプロジェクト

DockerでTerraformerが動かせる最低限の構成をしたサンプルプロジェクトです

github.com

サンプルプロジェクト解説

Terraformerインストール

  1. TerraformerのインストールはDockerfileで実行しています
  2. 今回はAWSリソースをTerraformコードにしたいため terraformer-aws-linux-amd64 をインストールしていますが、PROVIDERの変数を書き換えることで他リソースにも対応することができます。対象リソースはGitHubのAssetsから確認できます
  3. この記事を書いている時のTerraformerは Terraform 0.13 がサポートされており、それ以降の新しいバージョンではエラーになるため、Terraformのバージョンは0.13.7で固定しています
  4. Terraformを併用したい場合、上述の通り古いバージョンで固定されてしまうため、弊社ではDockerサービスを分けることで対応しています

【イメージ】

version: "3"

services:
  terraform:
    image: hashicorp/terraform:1.7.1 # https://releases.hashicorp.com/terraform
    volumes:
      - ./terraform/:/infra
    working_dir: /infra
    env_file: .env

  terraformer:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - ./terraformer:/app/terraform
    env_file: .env

.envファイルの作成

  1. プロジェクト直下で make env を実行し .env ファイルを生成
  2. .envファイルの AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY に、AWSアクセスキーとシークレットキーを設定する

terraformer init

  1. make terraformer/init を実行し、terraformer initを実行する
  2. プロジェクト直下に .terraform ディレクトリが作られればOK

terraformer import

  1. docker/run のcommand引数に実行したいimportコマンドを渡す(下記はecsのリソースをimportする例)
  2. terraformer/generatedディレクトリ配下にterraformファイルが生成されていればOK
make docker/run command="import aws --resources ecs --regions ap-northeast-1 --profile ''"

感想

Terraformerを使うことで、手書きでコードを書くよりも効率的に作業を進められますが、生成されたコードには注意が必要です。 例えば、リソースの参照が行われずにハードコーディングされている箇所があり、そのまま運用するとリソースが変更された際に対応できなくなる可能性があります。 Terraformerでベースとなるコードを自動生成し、後は手動でリファクタリングや修正を加えることが理想的です。


テテマーチでは、一緒にサービスを作り上げてくれる仲間を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください! herp.careers

エンジニアチームガイドはこちら! tetemarche01.notion.site