HCP TerraformのInfracost Cloud統合を試してみた
Infracost CloudはHCP Terraformと統合が可能です。
HCP TerraformのRun TasksにInfracostを組み込むことで、HCP Terraform上でコスト見積もりの確認やポリシーの適用等が可能です。
やってみた
以下の手順を参考に統合を試してみます。
Infracost: InfracostエンドポイントURLの発行
HCP Terraformとの連携はHCP TerraformのRun Tasksを利用します。
Run Tasks設定に、Infracost Endpoint URLとHMAC Keyが必要です。
これをInfracost側で発行します。
Infracost Cloudにログインして、Settings -> Org settings -> Integrations -> Terraform Run Task: Add Integrationの順に選択します。

エンドポイントURLとHMACキーが作成される旨が表示されます。
Enableを選択します。

Endpoint URLとHMAC keyを控えておきます。

HCP Terraform: Infracost用Run Task作成
HCP Terraformにログインします。
Settings -> Run tasks -> Create Run taskの順に選択します。

以下を設定して、Createを選択します。
- Name: 任意の名前
- Endpoint URL: Infracost Cloudで発行したEndpoint URL
- Description: 任意
- HMAC Key: Infracost Cloudで発行したHMAC key

WorkspaceにRun Tasksを設定
Run TasksはOrgまたはWorkspace単位で設定可能です。
今回はテスト用のWorkspaceにInfracost Run Taskを設定します。
HCP Terraformで任意のWorkspaceを選択し、Settings -> Run tasksを選択します。
どのタイミングでRun Tasksを実行するか選択できます。
今回はPlan時にInfracostでコストを見積もりたいため、Post-plan: Add run taskを選択します。

ちなみに、Post-Plan以外はInfracost側が対応していないようです。ご注意ください。
Enable the Run Task as a post-plan stage in your workspaces (only this "stage" option is supported by Infracost).
Infracost用のRun Taskを選択して、Saveを選択します。
これで設定完了です。
Run Taskの実行確認
以下のコードを格納したGitHubリポジトリと連携したWorkspaceでRunをやってみます。
Nat Gatewayもfalseにしているため、見積もりコストは0になるはずです。
# VPC Module
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 6.0.1"
name = "${var.environment}-vpc"
cidr = "10.0.0.0/16"
azs = ["ap-northeast-1a", "ap-northeast-1c"]
private_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
public_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
enable_nat_gateway = false
enable_vpn_gateway = false
enable_dns_hostnames = true
enable_dns_support = true
}
無事Infracostが実行されて、見積もり0USDになっていることが確認できました。

View more detailsを選択すると、Infracost Cloudの画面に遷移して詳細を確認できます。

VPC内にEC2を追加するPull Requestを作ってみました。

自動的にHCP Terraform上でRunが開始されます。
Run Taskから変更によって、$11の月額コストが追加されることが確認できました。

Infracost Cloudからコストの内訳も確認できます。

Infracost Cloudのポリシーを使ってTerraform実行のガバナンスを効かせる
Infracost Cloudのポリシーで、Gravitonを利用していないことに対してInfracost Cloud側のポリシー失敗を確認できました。
このポリシーはデフォルトでは、解決の強制設定は入っていません。
そのため、Run Taskの結果はpassになり、HCP TerraformでApplyが可能です。
Infracost Cloud側でRequire engineers to resolve or dismiss issuesを有効化することで、問題の解決を強制できます。

再度Runをすると、Run TaskがFailedになりApplyができないことを確認できました。

この機能を使うことでガバナンスを効かせたパイプライン構築に役立ちます。(今回の例では、Gravitonを使っていないEC2のデプロイを拒否)
おわりに
HCP TerraformとInfracost Cloudの統合についてでした。
統合設定はかなりシンプルです。
統合を行うことでコストの見積もりだけではなく、Infracost Cloudのもつポリシーを使ってリソース作成のガバナンスを効かせることができます。






