Infracostでのリージョンの指定
Infracostは最近一番お気に入りのツールです。
Terraformを書くだけで、クラウドのお値段を出してくれます(※未対応のリソースはある)。
terraform init
なしでコスト計算してくれるので、認証に関わりそうなところにはいっさい触れない様にしているのかなと思っています。思ってるだけです。
provider "aws" {
region = "us-east-1"
}
のようにTerraformのコードに明示的に書く必要がありましたが、環境変数で上書きできるようになりました。
基本的にはterraformファイル側でリージョンを指定するのがよさそうか?その上で上書きしたい場合は、環境変数を使って上書きできます。
マルチリージョンな時にどうするかはちょっとわからn
メンテナさん、わざわざメンションありがとうございました!!メールで通知が来て気づけた!!
ここからは先は過去の話
色々便利なのですが、現在、Infracostでは、Infracost側の仕組みでリージョンを指定する方法が現在ありません。環境変数なんかも見てくれていないです。
先に書いておくと、現在色々と議論中です。正座して待ちます。
で、本当に例えば環境変数なんかで指定できないか試してみました。結論から言うとできません。AWSしか試してないけど。
Infracostはクレデンシャルを一切見ないため、terraformファイル上でリージョンを指定する必要があります。
$ echo $AWS_DEFAULT_REGION
ap-northeast-1
$ cat ~/.aws/config
[default]
region=ap-northeast-1
環境変数、設定ファイルともに ap-northeast-1
を指定しています。いやこれでスペル間違ってたら笑う…3度見くらいして確認しています。
以下の terraformコードで現在のリージョンを確認します。
data "aws_region" "current" {}
output "region" {
value = data.aws_region.current
}
terraform init
とterraform plan
します。
$ terraform plan
data.aws_region.current: Reading...
data.aws_region.current: Read complete after 0s [id=ap-northeast-1]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_instance.foo will be created
+ resource "aws_instance" "foo" {
+ ami = "asdf"
(snip)
}
Plan: 1 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ region = {
+ description = "Asia Pacific (Tokyo)"
+ endpoint = "ec2.ap-northeast-1.amazonaws.com"
+ id = "ap-northeast-1"
+ name = "ap-northeast-1"
}
─────────────────────────────────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
$ infracost breakdown --path .
Evaluating Terraform directory at .
✔ Downloading Terraform modules
✔ Evaluating Terraform directory
✔ Retrieving cloud prices to calculate costs
Project: .
Name Monthly Qty Unit Monthly Cost
aws_instance.foo
├─ Instance usage (Linux/UNIX, on-demand, t2.micro) 730 hours $8.47
└─ root_block_device
└─ Storage (general purpose SSD, gp2) 8 GB $0.80
OVERALL TOTAL $9.27
──────────────────────────────────
1 cloud resource was detected:
∙ 1 was estimated, it includes usage-based costs, see https://infracost.io/usage-file
先ほどのterraformコードに以下の行を追加して、infracostコマンドを実行するとお値段は同じです。
provider "aws" {
region = "us-east-1"
}
では、リージョンを ap-northeast-1
にして実行してみます。
provider "aws" {
region = "ap-northeast-1"
}
いっけえ~
$ infracost breakdown --path .
Evaluating Terraform directory at .
✔ Downloading Terraform modules
✔ Evaluating Terraform directory
✔ Retrieving cloud prices to calculate costs
Project: .
Name Monthly Qty Unit Monthly Cost
aws_instance.foo
├─ Instance usage (Linux/UNIX, on-demand, t2.micro) 730 hours $11.10
└─ root_block_device
└─ Storage (general purpose SSD, gp2) 8 GB $0.96
OVERALL TOTAL $12.06
──────────────────────────────────
1 cloud resource was detected:
∙ 1 was estimated, it includes usage-based costs, see https://infracost.io/usage-file
というわけで、環境変数や設定ファイルを見てないという証明?でした。ここはご注意ください。
設定ファイルもあるのですが、そちらでも設定うまくいかないし、ドキュメントも眺めてみましたがないので、本当にデフォルトのリージョンを設定する方法はないのでしょう。
Discussion