フューチャー技術ブログ

tftarget:Terraformターゲットを選択的に実行するためのGo製CLIツール

1 はじめに

こんにちは。フューチャーアーキテクト株式会社のTIG/EXユニット所属、宮永です。

Terraform連載2023の3リソース目の記事です

本記事では、Terraformのtargetオプションを簡単に実行するためのCLIツールを紹介します。
また、このCLIツールを開発するきっかけとなった経緯もご紹介します。

Terraformのtarget指定に関する課題

チームで開発を行っている際、Terraformのtargetオプションを使ってリソースを適用するケースはしばしばあるかと思います。

私のチームでは、環境を本番環境、検証環境、開発環境の3つに分けています。本番環境と検証環境では、差分が出ないようにtargetオプションを使用せず、常にクラウド環境とTerraformの記述が同期された状態に保っています。

一方で、開発環境ではtargetオプションを頻繁に利用します。機能開発時に開発者それぞれがTerraformのmainブランチからブランチを切って開発を進めるため、クラウドの開発環境にはそれぞれの.tfファイルに定義されていないリソースが生成されるからです。

この状況下で、各開発者が無条件でterraform applyを実行すると、リソースが突然消えることがあります。

▼開発環境における各人の開発の様子

そこで、新しい機能を作成する際は、まずterraform planを実行し、自分の変更点以外の差分が出た場合はterraform apply -target=コマンドを用意するようにしていました。

特定のリソースにのみapplyをしたいだけなのに、自分の差分だけをgrepしてterraform apply -target=コマンドを準備するのは大変です。terraformのtargetオプションを簡単に実行したいとSlackで呟いたところ、共感を得たため、今回CLIツールとして開発することにしました。

tftargetの紹介

作成したツールはtftargetと命名し、こちらで公開しています。

https://github.com/future-architect/tftarget/releases

このCLIツールはTerraformコマンドのラッパーであり、内部でTerraformコマンドを呼び出しています。そのため、TerraformのCLIコマンドのインストールが必須です。

2 tftargetの概要

Terraformターゲットを選択的に実行する機能

動作を直接見る方がわかりやすいと思いますので、tftargetを利用してterraform applyを実行するデモ画像を添付します。

tftarget-apply.gif

terraform applyの代わりにtftarget applyを実行します。
実行後、しばらく待つとterraform planによって出力された差分がリソース名とアクション(createdestroyなど)ともに表示されます。ユーザーは、terraform applyを適用したいリソースにチェックを入れてEnterを押すことで、選択的にterraform applyを実行できます。

applyだけではなく、plandestroyにも対応しています。

どのようなシチュエーションで役立つか

冒頭で述べたように、複数人で開発を行い、各人が個別に定義したリソースに影響を与えずに開発を進める際に役立ちます。terraform targetを簡単に実行したい場面全般で利用価値があるおもいます。

動作検証はAWS環境でしか行っていないため、GCPやAzure環境で利用する際は事前に動作確認をお願いします。

3 tftargetのインストール方法

Go

Go製のCLIツールであるtftargetは、go installコマンドを使ってインストールできます。次のコマンドを実行してください。

go install github.com/future-architect/tftarget@latest

Homebrew

Homebrewを利用している場合も、tftargetをインストールできます。以下のコマンドでインストールできます。

brew install future-architect/tap/tftarget

マニュアルインストール

各OS向けのバイナリファイルも提供されています。以下のリンクから、適切なシステムに対応するバイナリをダウンロードし、パスを設定して利用できます。

https://github.com/future-architect/tftarget/releases

4 tftargetの使い方

基本的なコマンドの紹介

tftargetには、planapplydestroyの3つのコマンドが用意されています。基本的な使い方は、これらのコマンドに共通しています。まず、planコマンドの使い方を紹介します。

tftarget plan

通常のplanと同様に、以下のコマンドを実行します。

tftarget plan

しばらく待つと、チェックボックスが表示されます。これは、terraform planを実行した結果をリソース名とアクションとして表示したものです。

simple-usage-1.png

Spaceキーを押すことでチェックを付けることができます。右方向キーで全選択、左方向キーで選択解除ができます。上下方向キーとスペースキーで、planを実行したいリソースを選択してください。

赤字で示しているexitのチェックを選択すると、何も実行せずに処理が終了します。

simple-usage-2.png

リソースの選択が完了したら、Enterキーを押して処理を進めます。

simple-usage-3.png

planの場合は、terraform planの実行だけが行われます。そのため、処理はここで終了します。通常のterraform planを実行した際の出力結果と共に、最後に選択したリソースのサマリが表示されます。

このサマリは、後述する--summaryオプションをfalseに設定することで非表示にすることもできます。

tftarget planの説明は以上です。次に、tftarget applyについて説明します。

tftarget apply

tftarget planとリソース選択する部分までは同じです。

リソースを選択してEnterキーを押すと、通常のterraform applyのように実行確認のプロンプトが表示されます。内容に問題がなければ、yesを選択してください。
simple-usage-4.png

applyが成功すると、planの時と同様に、通常のterraform applyの出力結果に加えて、以下のようなサマリが出力されます。

simple-usage-5.png

tftarget destroy

tftarget applyと利用方法は全く同じですので、ここでは説明を省略します。

オプション

それぞれのコマンドには、以下のオプションが用意されています。

Flags:
-f, --filter string filter by action. You can select create, destroy, update, or replace
-i, --items int check box item size (default 25)
-p, --parallel int limit the number of concurrent operations (default 10)
-s, --summary summary of selected items (default true)

–filter, -f

--filterオプションでは、最初の選択肢表示画面でアクション別にフィルタリングを追加できます。例えば、新規作成のリソースの場合、createと指定することで選択肢にcreateのリソースのみを表示できます。利用可能なアクションは、createdestroyupdatereplaceの4つです。

tftarget apply -f create

このオプションは、複数のアクションを指定することはできません。そのため、以下のようなコマンドはエラーとなります。

tftarget apply -f create destroy

–items, -i

--itemsオプションでは、チェックボックスの表示数を指定できます。デフォルトでは25個のリソースが表示されますが、このオプションを使用して表示数を増減させることができます。

tftarget apply -i 50

このコマンドは、最初の選択肢表示画面で最大50個のリソースが表示されるように設定します。

–parallel, -p

--parallelオプションはTerraform CLIで実装されている-parallelismに並列数を渡すためのオプションです。デフォルトでは10が設定されています。

tftarget apply -p 30

–summary, -s

--summaryオプションでは、選択したリソースのサマリ表示を有効または無効にできます。デフォルトでは、planapplyの結果にサマリが表示されますが、このオプションを使用してサマリ表示をオフにできます。

simple-usage-5.png
tftarget apply -s false

このコマンドは、applyの結果にサマリが表示されないように設定します。

以上で、tftargetの使い方についての説明を終了します。

5 バグ報告や機能提案の受付方法

開発してまだ日が浅いのでバグや機能提案がある際はこちらに起票のほどよろしくお願いします。

https://github.com/future-architect/tftarget/issues

6 まとめ

tftargetが解決する問題点

tftargetを使用することで、簡単にterraform targetを実行できます。特に、複数のメンバーが開発を行う際、各メンバーが定義したリソースを破壊することなく、安全に運用できるようになります。

今後の展望やアップデート予定

現在、tftargetはAWS環境でのみ動作検証が行われています。今後は、GCPやAzureでの動作確認や改善を行っていく予定です。