Terraform migrate (Public Beta) 使ってみた【HashiConf 2024】

HashiConf 2024 にて発表されたTerraform migrate について解説します。

Terraform migrate (Public Beta)とは

HashiConf 2024にて発表されたTerraform実行環境のMigrationツールです。

ローカル環境 から HCP Terraform や Terraform Enterprise への移設を数回のコマンドで実現できます。

※なお、本稿はローカル環境からHCP TerraformへのMigrationを前提としています。

 


▼Terraform migrateを使うには

必要なもの

  • 必須
    • Terraform migrate本体
      • 公式のバイナリをダウンロードとして設置
      • macであればbrewコマンドでインストールが可能
    • Migration先のHCP Terraform ユーザー(ユーザートークンの発行権限必須)
  • そのほか
    • GitHubアカウント(※Migration時に修正コードをPull Requestに投げる場合必要)

▼migrate 実行前準備

tf-migrate コマンド (Terraform migrate本体)のセットアップ

公式ドキュメントの手順に従いセットアップします。

バイナリを設置するパターンと、Homebrewを利用してインストールするパターンがありますので利用環境に応じていずれかを実行してください。

——————————————————————————————–

HCP Terraform ユーザートークンの発行

  1. Terraform login コマンドの実行
    移行対象のTerraform環境で下記コマンドを実施

    $ terraform login

    コマンドを実行するとブラウザが起動しHCP Terraformへのログインを促されます。

    あらかじめ作成したユーザーでログインするとユーザーのトークン作成画面が開きます。

  2. ユーザートークン発行
    トークンの有効期限と説明を入力し、発行を完了してください。
    発行したトークンをコピーし、入力待ちになっているターミナルへ貼り付けてください
  3. ユーザートークンでのログイン
    下記のような表示がターミナルに出力されたらログイン成功です

——————————————————————————————–

Github トークンの発行(オプション)

Terraform migrate実行時に修正したコードをPull Requestに投げる場合は下記の手順を行ってください。

  1. Githubログイン後、アカウントの設定ページから
    Developer Settings -> Personal access tokens -> Tokens(classic) と遷移してください。
  2. 有効期限とトークン名を入力し、repo権限にチェックを入れた後、発行してください。
  3. 出力されたトークンをコマンドを実行する環境の環境変数へ登録

    $ export GITHUB_TOKEN=<発行したトークン>

 

作業ログの出力設定(オプション)

Terraform migrate のログ出力を有効にするには環境変数を設定する必要があります。
下記コマンドを実行し、実行環境のターミナルに環境変数を設定してください。

$ export TF_MIGRATE_ENABLE_LOG=true

・出力先​

OS 出力先
macOS/Linux /Users/<username>/.tf-migrate/logs/<commandName>/<date>.log
Windows C:\Users\<username>\.tf-migrate\logs\<commandName>\<date>.log

 

 

 


▼migrateの実施

migrateの手順は大きく分けて2段階です

  1. migrate用設定を作成する
  2. migrateを実行する

——————————————————————————————–

migrate用設定を作成する

  • 実行コマンド

    $ tf-migrate prepare

  • 概要
    • localにあるコードをHCP Terraform環境想定に一部を置き換えます(backendブロック)
      • この時置き換えたコードを別ブランチとして取り扱うことが可能(オプション動作)
      • この時置き換えたコードをPull Requestとして投げることが可能(オプション動作)
    • 次手順(tf-migrate execute)で利用する設定を_hcp-migrate-configsディレクトリを作成し出力
  • 動作条件
    • 対象コード内でbackendブロックの宣言がされていること

 

migrateを実行する

  • 実行コマンド

    tf-migrate execute

  • 概要
    • tf-migrate prepare で生成したファイルを用いてHCP Terraformに設定を作成します
      • 実行ごとにProject/Workspaceが作成され、statefileもアップロードされます
    • tf-migrate prepare 時、オプションを選択していればPull Request作成​実施
  • 動作条件
    • tf-migrate prepare が実行され、設定ファイルの出力が完了していること

▼migrate後の残件(現状の未対応部分含む)

VCS連携​

  • 作成直後のWorkspaceにはVCS連携が設定されていないため手動で設定する必要があります

変数対応(Variables)

  • コード上で利用していた変数の登録は現状未対応です
  • HCP Terraform上にVariable Setを作成し、関連付ける必要があります

Workspaceの移動・整理

  • 現状、migrate毎にProject/Workspaceが作成されるため、既存のProject配下へ直接migrateすることはできません
  • migrate後にWorkspaceを適当なProject配下へ移動させる必要があります

▼まとめ

新しく発表されたTerraformのmigrate機能を試してみました。

Public betaのため変数の対応など、これからの開発に期待する部分もありますがHCP Terraformへの移行はとても簡単に行えるようになることに期待が持てます。migrateがより簡単になれば組織内での実行環境も集約しやすくなり、その先では共通のポリシーを適用したり、利用状況の把握などが行いやすくなるなど、よりIaCの恩恵を受けやすいインフラ運用が行える未来が近づくのではないでしょうか

ここまでお読みいただきありがとうございました。


参考情報

公式ドキュメント(Terraform migrate)※英語