nakayumcの技術ブログ

エンジニア3年目のブログです。

HCP Terraform の Terraform Agent を使ってみた

この記事は Terraform Advent Calendar 2024 の 25日目の記事です。

Terraform Agent とは

Terraform Agent は、HCP Terraform で提供されるサービスの一つです。
HCP Terraform や、Terraform Enterprise において、Terraform の実行をオンプレ環境で行うためのツールです。

HCP Terraform の 機能である「リモート」という機能では、個別の使い捨て仮想マシンで Terraform を実行することができます。

ただし、この使い捨て仮想マシンIPアドレスが公開されていないため、送信元IPアドレスが制限されている環境では HCP Terraform を使用するのが難しくなります。
(VCSなどを取得するIPアドレスは公開されており、専用のAPIが用意されています。)

また、この Terraform Agent を構築することで、HCP Terraform から実行したものが Agent 経由で Terraform が実行されます。 送信元IPアドレスが制限された環境下でも、構築した Agent のIPアドレスを指定することで、リソース操作が可能となります。

そのため、オンプレ環境でのTerraform 実行するツールでもありますが、制限された環境においてもTerraformを実行するツールでもあり、大変便利な機能です。

必要な要件

Terraform Agent を利用するためには、以下の要件が必要です。
HCP Terraform Agents Requirements - HashiCorp Developer

  • ハードウェア
    • OS: Linux のみ対応
    • Disk: 4GB 以上
    • Memory: 2GB 以上
  • ソフトウェア
  • ネットワーク
    • 基本的には tcp/443 ですが、agent.terraform.io へは tcp/7146 が必要です。
Hostname Port/Protocol Directionally
app.terraform.io tcp/443, HTTPS Outbound
registry.terraform.io tcp/443, HTTPS Outbound
releases.hashicorp.com tcp/443, HTTPS Outbound
archivist.terraform.io tcp/443, HTTPS Outbound
agents.terraform.io tcp/7146 Outbound

手順

HCP Terraform での手順

Terraform Agent Pool の作成

HCP Terraform のコンソールにログインし、Terraform Agent Pool を作成します。

Organization -> Settings -> Agents に移動し、Create Agent Pool をクリックします。

Agent Pool の名前を入力し、Continue をクリックします。

すると、Token management の画面に遷移して、Agent のトークンを発行できるようになります。

Description を入力し、Create Token をクリックします。

Token が発行されるので、コピーしておきます。

これで、Agent Pool の作成は完了し、HCP Terraform での設定は完了です。

AWS での手順

EC2インスタンスを作成

まず、Terraform Agent をインストールする EC2 インスタンスを作成します。

今回は、上記要件から t2.small で作成します。

作成ができたら、インスタンスSSH でログインします。

Terraform Agent のインストール

次に、Terraform Agent をインストールします。

以下のHashicorp社のサイトからダウンロードができます。
TFC-Agent Versions | HashiCorp Releases

今回は最新版の 1.17.5 をインストールします。
tfc-agent_1.17.5_linux_amd64.zip を右クリックして、リンクアドレスをコピーします。

以下のコマンドを実行して、ダウンロードしたファイルを解凍します。

$ wget https://releases.hashicorp.com/tfc-agent/1.17.5/tfc-agent_1.17.5_linux_amd64.zip
$ unzip tfc-agent_1.17.5_linux_amd64.zip

解凍が完了したら、先ほどコピーした Token を使って、変数を設定します。

$ export TFC_AGENT_TOKEN=<TOKEN>
$ export TFC_AGENT_NAME=agent

設定が完了したら、以下のコマンドを実行して、Terraform Agent を起動します。

$ ./tfc-agent

起動が完了すると、以下のようなメッセージが表示されます。

[INFO] core: Waiting for next job と表示されていれば、Terraform Agent の起動は完了です。

これで、Terraform Agent の設定は完了です。

実行してみる

Terraform Agent を使って、実際に Terraform の実行をしてみます。

適当に Workspace を作成します。
今回は、事前にTerraformコードが入っているリポジトリを使うため、「Version Control Workflow」を選択します。

Workspace の作成ができたら、右ペインの Execution mode: Remote をクリックします。

すると、Execution mode を選択できる画面が表示されるので、Agent を選択し、先ほど作成した Agent Pool を選択します。

最後に、一番下の「Save Settings」をクリックしてください。

これで、Terraform Agent を使っての実行が可能になります。

では、実際に Terraform の実行をしてみます。
Workspace の画面に戻り、右上のNew Run をクリックします。

Run Type は Plan and Apply(standard) を選択し、Start をクリックします。

HCP Terraform の画面が遷移し、Plan まで完了しました。
普段の画面と特段、変化はないです。

ここで、Agent を確認すると、以下のようなログが表示されており、 Agent が実行されていることが確認できます。

これで、Terraform Agent を使っての実行が完了しました。

まとめ

今回、HCP Terraform の Terraform Agent を使って、Terraform の実行を行いました。
Terraform Agent を使うことで、オンプレ環境、送信元IPアドレスが制限された環境下でも実行が可能になります。

ぜひ、Terraform Agent を使って、Terraform の実行を行ってみてください。

参考