Terraform Cloud Agent をK8sに飼いならせ:ハイブリッドクラウドIaCの深淵
多くのエンジニアが「Terraform Cloud (TFC) は便利だが、オンプレミス環境のネットワークに穴を開けたくない」というジレンマに陥る。IP制限やVPNの管理に疲弊し、結局ローカル実行に戻る。それは進化を止める行為だ。
真のSREは、Terraform Cloud AgentをKubernetes(K8s)という最強のオーケストレーターの上に配置し、境界防御を維持したまま、プライベートリソースをクラウドのコントロールプレーンから安全に操作する。今回は、この「ハイブリッドIaCの極致」を構築するための、現場で培った知見を共有する。
—
1. アーキテクチャの核心:なぜ Agent なのか
TFCのAgentは、単なるプロキシではない。「Terraform実行環境のコンテナ化」そのものだ。
- 完全な分離: 実行環境は使い捨て。`terraform plan/apply` のたびにクリーンなPodが起動し、終了すれば即座に破棄される。ステートの漏洩リスクはほぼゼロだ。
- ネットワークの透過性: Agentはアウトバウンド通信(HTTPS/443)のみをTFCへ送る。ファイアウォールにインバウンドの穴を開ける必要はない。
2. K8s へのデプロイ:Helm による冪等な構築
単なるPodデプロイでは不十分だ。リソース制限、セルフヒーリング、そしてシークレット管理を考慮し、堅牢なHelmチャートを構築する。
`values.yaml` の最適化ハック
TFC Agentは、メモリ使用量が実行するリソース量に直結する。特に大規模な `state` ファイルを扱う場合、`resources` のチューニングは必須だ。
資源制限の最適化(メモリは余裕を持つのが鉄則)
resources:
requests:
cpu: “500m”
memory: “512Mi”
limits:
cpu: “1000m”
memory: “2Gi” # 大規模なステートのロードに耐えるバッファ
TFC Agent特有のトークン管理
agent:
tokenSecretName: “tfc-agent-token” # K8s Secretで管理し、環境変数に展開
# 並列度を制御するためのレプリカ数
replicaCount: 2
3. セキュリティの深淵:シークレット管理と権限分離
Agentは「神」の権限を持つ可能性がある。ここを甘く見てはいけない。
IAMロールの制御 (IRSA)
EKSを利用しているなら、Agentに直接IAMロール(ServiceAccount)を割り当てろ。`AWS_ACCESS_KEY_ID` を環境変数で渡すなどという前時代的な手法は禁止だ。
serviceAccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tfc-agent-sa
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/tfc-agent-k8s-role
このロールには、対象のプライベートリソースを操作するための権限のみを最小単位で付与する。TFCの「Organization Token」と「AWS IAM」の二重の防壁を構築せよ。
4. パフォーマンスとスケーラビリティのハック
TFC Agentを運用する際、最もボトルネックになるのは「プロバイダーのキャッシュ」と「初期化時間」だ。
- プラグインキャッシュの永続化:
Agentのコンテナ内は `terraform init` のたびにプラグインをダウンロードする。これを `PersistentVolume` でマウントし、`/home/terraform/.terraform.d/plugin-cache` を共有させることで、実行速度を劇的に向上させられる。
- Pre-warmed Pods:
需要が急増する場合、Podの起動がボトルネックになる。K8sの `PriorityClass` を活用し、常に数個のAgentを待機させておき、高負荷時には HPA (Horizontal Pod Autoscaler) でスケールアウトさせる構成をとれ。
5. 実戦的運用コマンド:APIを使い倒せ
TFCのUIをポチポチするのは初心者だ。我々はCLIを叩く。Agentの状態監視には公式APIを組み合わせた自動化スクリプトが必須だ。
!/bin/bash
現在稼働中のAgentのステータスを監視するスニペット
TFC_TOKEN=$TF_API_TOKEN
AGENT_POOL_ID=”ap-xxxxxxxx”
curl -s –header “Authorization: Bearer $TFC_TOKEN” \
“https://app.terraform.io/api/v2/agent-pools/$AGENT_POOL_ID/agents” | jq ‘.’
伝説的エンジニアからの提言
TFC Agentの構築は、単なる「ツール導入」ではない。「信頼の境界をどこに置くか」という設計思想の具現化だ。
1. Immutable な実行環境: AgentのDockerイメージはカスタムビルドせよ。必要なバイナリ(`kubectl`, `helm`, `aws-cli`)を全て焼き込み、実行時に余計なダウンロードが発生しないようにする。
2. 可観測性(Observability): AgentのログをElasticsearchやDatadogに飛ばせ。どの `plan` が失敗したのか、ボトルネックはネットワークなのかメモリなのか、常に統計をとるのだ。
IaCは、単に構成をコード化するだけでなく、その「運用基盤自体」も自動化・コード化されて初めて真の完成を見る。この環境を構築し、セキュアで高速なハイブリッドクラウドの世界へ足を踏み入れろ。
これが、我々が目指す「インフラ自動化の深淵」だ。