Terraformバージョンを0.12系から1.0系へ最新化した

AWSTech

Kyash では、インフラリソースの管理に Terraform を用いています。
しかし使用しているバージョンが古く、0.11系もしくは0.12系のまま長らく運用されてきました。

さすがに古すぎて運用に支障が出そうな状況となってきたため、気合を入れて最新バージョンの1.0系までアップデートを行いました。

Terraform 1.0系のリリース

Terraform は長らく0.x系のバージョンが続いていましたが、2021年6月に記念すべき 1.0.0がリリース されました。中身は0.15系とほぼ同じですが、ついに1.0になったのは感慨深いところです。

これを機に最新版にしたい、という思いもバージョンアップへの後押しになりました。

最低でも18ヶ月間のメンテナンス期間が設けられているため、1年から1年半ごとにバージョンアップをすることでサポート切れを回避することができます。

Kyashの10%ルール

バージョンアップ作業は、エンジニアが自由に使える10%ルールを活用して行いました。
10%ルールとは、業務時間の10%を生産性向上や技術的負債の解消などに使える制度です。

1週間を40時間と仮定すると、週あたり4時間ほど確保できます。

SRE チームで相談した結果、今回は全員の予定を揃えて「Terraform リファクタ夏祭り」としてお祭り的にワイワイしながら対応することにしました。

Terraform リファクタ夏祭り

当日は Meet で音声を繋ぎながら作業を行い、手順やノウハウをリアルタイムに共有しつつ楽しく進められたので、良い取り組みだったなと思います。

バージョンアップのメリット

主に使っていた 0.12.29 は、2020年7月にリリースされており1年以上が経過しています。
aws provider も 3.37 までしか対応しておらず、最新版の機能を使うことができません。

Terraform 本体を最新化することで、aws provider の最新版も利用可能になりました。
バージョンアップにより次のようなメリットが得られています。

default_tags が使える

aws provider 3.38 から導入された default_tags は強力な機能です。
provider レベルでタグを設定することで、全リソースに共通のタグを付与できます。

Kyash では、環境やマイクロサービスの識別タグを一律でセットしているため、default_tags が使えるだけでコードの記述量を削減できました。

新しい resource を定義できる

古いバージョンでは定義できなかったリソースも、Terraform で管理可能になりました。
個人的に aws provider 3.57 から対応した aws_service_discovery_instance は嬉しい機能追加です。

これまでサービスディスカバリのインスタンスは Terraform で管理できませんでしたが、上記 resource が追加されたことで tfstate にて管理可能になりました。

他にも、Lambda@Edge で行っていた処理を CloudFront Functions に置き換え始めているため、これらのリソースを Terraform で管理できるのは大きなメリットです。

大量の tfstate をどうにかしたい

余談ですが、Kyash では歴史的にマイクロサービス別・環境別に tfstate を細かく分けて管理しており、140個以上にもおよぶ tfstate が鎮座している状態です。

tfstate 多すぎ問題も対処したいところではありますが、複数の改修を同時に行うと作業が煩雑になるため、今回はバージョンアップだけに専念することにしました。

(tfstate の良い分割単位をご存じの方はぜひ教えてください!)

まとめ

  • Terraform のバージョンを1.0系に更新した
  • aws provider 最新版が使えるメリットは大きい
  • Terraform は定期的にバージョンアップしよう

なお、Kyash ではエンジニアやデザイナーなどさまざまな職種の方を募集しています。
もし興味がある方は、カジュアル面談などお気軽にお申し込みください!


AWSTech