HCP Terraform AgentとTerraform EnterpriseがArmアーキテクチャをサポートしました

HCP Terraform AgentとTerraform EnterpriseがArmアーキテクチャをサポートしました

2025.08.17

HCP Terraform AgentとTerraform EnterpriseがArmアーキテクチャをサポートしました。

https://www.hashicorp.com/ja/blog/terraform-embraces-arm-more-choice-greater-flexibility

アップデート概要

HCP Terraform Agentは、HCP Terraformの機能です。

これを使うことで、ユーザー管理のオンプレやEC2等でTerraformの実行を行うことが可能です。

https://dev.classmethod.jp/articles/ec2-hcp-terraform-agent-setup/

SaaS製品であるHCP Terraformのセルフホスト版として、Terraform Enterpriseがあります。

HCP Terraform AgentやTerraform Enterpriseはその特性から、ユーザー自身がサーバーを用意してインストールする必要があります。

CPUアーキテクチャは以前はx86のみ対応していましたが、今回のアップデートでArmをサポートしました。

ArmベースのAWS Gravitonインスタンス等を利用できるようになり、インフラコストを最適化できます。(同等のx86ベースのAmazon EC2インスタンスよりも最大20%程度低コスト)

やってみた

ArmベースのAmazon EC2 T4gインスタンスにHCP Terraform Agentをインストールしてみます。

基本的には前述のブログの手順と同じです。

EC2インスタンス・HCP Terraform Agentプールの準備

コードの全体は以下をご確認ください。

terraform-sample/hcp-tf-agent-ec2-arm at main · msato0731/terraform-sample · GitHub

ブログ上では、EC2とHCP Terraform Agentプール部分を紹介します。

前述のブログと異なるのは、EC2インスタンスタイプがArmベースのt4gになっている点です。

それに伴い、AMIもArm対応のものに変更しています。

ec2.tf
locals {
  name   = "hcp-tf-agent"
  region = "ap-northeast-1"
}

module "vpc" {
  source             = "terraform-aws-modules/vpc/aws"
  name               = local.name
  cidr               = "10.0.0.0/16"
  azs                = ["ap-northeast-1a", "ap-northeast-1c"]
  public_subnets     = ["10.0.1.0/24", "10.0.2.0/24"]
  enable_nat_gateway = false
}

data "aws_ssm_parameter" "amazonlinux_2023" {
  name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64"
}

resource "aws_instance" "hcp_tf_agent" {
  ami                         = data.aws_ssm_parameter.amazonlinux_2023.value
  associate_public_ip_address = true
  vpc_security_group_ids      = [aws_security_group.hcp_tf_agent.id]
  instance_type               = "t4g.small"
  subnet_id                   = module.vpc.public_subnets[0]
  iam_instance_profile        = aws_iam_instance_profile.ssm_profile.name
  tags = {
    Name = local.name
  }
}

resource "aws_iam_role" "ssm_role" {
  name = "${local.name}-ssm-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Effect = "Allow"
      Principal = {
        Service = "ec2.amazonaws.com"
      }
      Action = "sts:AssumeRole"
    }]
  })
}

resource "aws_iam_role_policy_attachment" "ssm_managed" {
  role       = aws_iam_role.ssm_role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

resource "aws_iam_instance_profile" "ssm_profile" {
  name = "${local.name}-ssm-profile"
  role = aws_iam_role.ssm_role.name
}

resource "aws_security_group" "hcp_tf_agent" {
  name        = local.name
  description = local.name
  vpc_id      = module.vpc.vpc_id
}

resource "aws_vpc_security_group_egress_rule" "allow_all_outbound" {
  security_group_id = aws_security_group.hcp_tf_agent.id
  ip_protocol       = "-1"
  cidr_ipv4         = "0.0.0.0/0"
}
agen-pool.tf
resource "tfe_agent_pool" "this" {
  name                = "sato-blog-test-arm"
  organization        = var.hcp_tf_organization_name
  organization_scoped = true
}

resource "tfe_agent_token" "this" {
  agent_pool_id = tfe_agent_pool.this.id
  description   = "sato-blog-test-arm"
}

EC2インスタンスにHCP Terraform Agentをインストール・tfc-agentをSystemdに登録

前述のブログと異なるのは、バイナリインストールの部分です。

arm64のバイナリをインストールしてください。

確認したところ、1.22.4以降にはArmのバイナリも用意されていました。

Tfc-Agent Versions | HashiCorp Releases

Tfc_Agent_v1_23_2_Binaries___HashiCorp_Releases.png

wget https://releases.hashicorp.com/tfc-agent/1.23.2/tfc-agent_1.23.2_linux_arm64.zip
unzip tfc-agent_1.23.2_linux_arm64.zip

動作確認

WorkspaceのExecution ModeをAgentに変更します。

今回作成したAgent Poolを指定します。

General_Settings___classmethod-sandbox___HCP_Terraform.png

planやapplyをして、HCP Terraform上からRunが正常に完了することを確認できました。

run-FzkgRMLvayYKCVFi___Runs___classmethod-sandbox___HCP_Terraform.png

EC2上でログを見たい場合は、以下のコマンドで確認できます。

sudo journalctl -xu tfc-agent -f

おわりに

HCP Terraform Agentの利用時には、Agent用のEC2インスタンス等のランニングコストが課題になることがあると思います。(利用規模が拡大すると特に)

今回Armに対応したことで、コスト最適化の選択肢が増えたことは嬉しいですね。

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.