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
2 tftargetの概要
Terraformターゲットを選択的に実行する機能
動作を直接見る方がわかりやすいと思いますので、tftargetを利用してterraform apply
を実行するデモ画像を添付します。
terraform apply
の代わりにtftarget apply
を実行します。
実行後、しばらく待つとterraform plan
によって出力された差分がリソース名とアクション(create
やdestroy
など)ともに表示されます。ユーザーは、terraform apply
を適用したいリソースにチェックを入れてEnterを押すことで、選択的にterraform apply
を実行できます。
apply
だけではなく、plan
とdestroy
にも対応しています。
どのようなシチュエーションで役立つか
冒頭で述べたように、複数人で開発を行い、各人が個別に定義したリソースに影響を与えずに開発を進める際に役立ちます。terraform target
を簡単に実行したい場面全般で利用価値があるおもいます。
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には、plan
、apply
、destroy
の3つのコマンドが用意されています。基本的な使い方は、これらのコマンドに共通しています。まず、plan
コマンドの使い方を紹介します。
tftarget plan
通常のplan
と同様に、以下のコマンドを実行します。
tftarget plan |
しばらく待つと、チェックボックスが表示されます。これは、terraform plan
を実行した結果をリソース名とアクションとして表示したものです。
Spaceキーを押すことでチェックを付けることができます。右方向キーで全選択、左方向キーで選択解除ができます。上下方向キーとスペースキーで、plan
を実行したいリソースを選択してください。
赤字で示しているexitのチェックを選択すると、何も実行せずに処理が終了します。
リソースの選択が完了したら、Enterキーを押して処理を進めます。
plan
の場合は、terraform plan
の実行だけが行われます。そのため、処理はここで終了します。通常のterraform plan
を実行した際の出力結果と共に、最後に選択したリソースのサマリが表示されます。
このサマリは、後述する--summary
オプションをfalse
に設定することで非表示にすることもできます。
tftarget plan
の説明は以上です。次に、tftarget apply
について説明します。
tftarget apply
tftarget plan
とリソース選択する部分までは同じです。
リソースを選択してEnterキーを押すと、通常のterraform apply
のように実行確認のプロンプトが表示されます。内容に問題がなければ、yes
を選択してください。
apply
が成功すると、plan
の時と同様に、通常のterraform apply
の出力結果に加えて、以下のようなサマリが出力されます。
tftarget destroy
tftarget apply
と利用方法は全く同じですので、ここでは説明を省略します。
オプション
それぞれのコマンドには、以下のオプションが用意されています。
Flags: |
–filter, -f
--filter
オプションでは、最初の選択肢表示画面でアクション別にフィルタリングを追加できます。例えば、新規作成のリソースの場合、create
と指定することで選択肢にcreate
のリソースのみを表示できます。利用可能なアクションは、create
、destroy
、update
、replace
の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
オプションでは、選択したリソースのサマリ表示を有効または無効にできます。デフォルトでは、plan
やapply
の結果にサマリが表示されますが、このオプションを使用してサマリ表示をオフにできます。
tftarget apply -s false |
このコマンドは、apply
の結果にサマリが表示されないように設定します。
以上で、tftargetの使い方についての説明を終了します。
5 バグ報告や機能提案の受付方法
開発してまだ日が浅いのでバグや機能提案がある際はこちらに起票のほどよろしくお願いします。
https://github.com/future-architect/tftarget/issues
6 まとめ
tftargetが解決する問題点
tftargetを使用することで、簡単にterraform target
を実行できます。特に、複数のメンバーが開発を行う際、各メンバーが定義したリソースを破壊することなく、安全に運用できるようになります。
今後の展望やアップデート予定
現在、tftargetはAWS環境でのみ動作検証が行われています。今後は、GCPやAzureでの動作確認や改善を行っていく予定です。