こんにちは。インフラの深淵を覗き込み、自動化の果てを目指すエンジニアの皆さん。
今日は、多くの企業が直面する「理想と現実の狭間」を埋めるための、極めて実践的な技術について話をしましょう。
Terraform Cloud(TFC)は非常に強力なマネージドサービスですが、多くの現場では「クラウドにあるTFCから、どうやって閉域網(オンプレミスやVPC内部)のサーバーを操作するか?」というセキュリティの壁に突き当たります。
ここで登場するのが「Terraform Cloud Agent」です。これをKubernetes上に構築することで、セキュリティを担保したまま、ハイブリッドクラウドなIaC環境を構築できます。早速、その神髄に触れていきましょう。
—
なぜ「Terraform Cloud Agent」が必要なのか?
通常、TFCの実行基盤はパブリッククラウド上にあります。しかし、社内のデータベースやプライベートなAPIを操作する場合、ファイアウォールを全開放するのは悪夢です。
TFC Agentを社内のK8sクラスター内にデプロイすれば、「アウトバウンド通信のみ(TFCへの接続)」で閉域網内のリソースを操作できるようになります。つまり、外からの侵入経路を一切作ることなく、セキュアにインフラ構築の自動化が可能になるのです。
—
手順1:TFCでのAgentプール作成
まずは司令塔となるTFC側で、Agentが受け取る「指示待ちの列」を作ります。
1. TFCの画面から `Organization Settings` > `Agents` へ移動。
2. `Create agent pool` をクリック。
3. 生成された Agent Token を厳重に保管してください。これがパスポートになります。
—
手順2:Kubernetesへのデプロイ(Helm)
私たちは「宣言的」に生きるエンジニアです。Helmチャートを使って、KubernetesにAgentをインストールします。
`values.yaml` を以下のように定義してください。
最小構成かつセキュアな設計
replicaCount: 2 # 高可用性のために最低2つは並べるのが定石です
agent:
# TFCから発行されたトークンを環境変数に注入
# 本番環境では必ずSecret経由で管理すること!
token: “tfc-agent-token-here”
# Agentの実行環境設定
# CPU/Memory制限は必須です。これがないと隣のPodを巻き込む恐れがあります
resources:
limits:
cpu: “500m”
memory: “512Mi”
requests:
cpu: “250m”
memory: “256Mi”
ネットワーク制限がある環境用のプロキシ設定が必要な場合はここで定義
proxy:
httpProxy: “http://proxy.internal:8080”
この設定を適用するコマンドはこれだけです:
helm repo add hashicorp https://helm.releases.hashicorp.com
helm install tfc-agent hashicorp/tfc-agent -f values.yaml -n infra-tooling
—
手順3:動作確認「Hello, Infrastructure!」
構築できたか確認する最も確実な方法は、実際に閉域網内のリソース(例えばダミーのローカルファイル作成や、社内APIへの疎通確認)を叩くことです。
Terraformのコード (`main.tf`) で、Agentを指定します。
terraform {
cloud {
organization = “your-org”
workspaces {
name = “hybrid-cloud-demo”
}
}
}
重要: ここでどのAgentプールを使うかを指定します
TFCのWorkspace設定 > Settings > General > Execution Mode を
“Agent” に変更し、先ほど作成したプールを選択してください。
resource “null_resource” “check_connectivity” {
provisioner “local-exec” {
# 閉域内のリソースにアクセスできているか確認
command = “echo ‘Success: Accessing from internal K8s cluster!'”
}
}
TFC上で `Plan` → `Apply` を実行してみてください。TFCのログに「Agentがタスクを拾い、閉域内で実行したこと」が刻まれていれば成功です。
—
現場で「震えるほど」役立つセキュリティの極意
最後に、伝説のSREとしてこれだけは伝えておきます。
1. 権限の最小化: K8s上で動くAgentのPodには、必要最小限の `ServiceAccount` を割り当ててください。もしAWSのリソースを触るなら、`IRSA (IAM Roles for Service Accounts)` を使い、Agentに直接IAMロールを渡しましょう。絶対に認証情報を環境変数に直書きしてはいけません。
2. オートスケーリング: `replicaCount` を固定にするのではなく、HPA (Horizontal Pod Autoscaler) を活用し、キューの数に応じてAgentを増減させる設計にしてください。
3. 冪等性の担保: Agentが実行中に死んでも、Terraformのステートは一貫性を保ちます。インフラは常に「何度叩いても同じ結果になる(冪等性)」状態を保つよう、Terraformコード自体を磨き上げてください。
—
この基盤さえあれば、ネットワークの制約に縛られず、自由自在にハイブリッドクラウドを構築できます。「難しい」と敬遠されていた領域が、「自動化可能なタスク」に変わる瞬間です。
さあ、あなたのインフラを、誰よりもセキュアで、誰よりも速く。素晴らしい自動化ライフを!