使用Infracost进行terraform成本估计

举报
kaliarch 发表于 2023/07/16 10:44:47 2023/07/16
【摘要】 随着云计算的引入,基础设施的配置变得更加容易。云计算使组织能够比本地数据中心更快地启动应用程序基础设施。云计算提供了独特的优势,例如:弹性自动化快速供应在过去的几年里,组织和创业公司迅速采用了云计算。但是,虽然云计算使获取资源变得更加容易,但也使管理和维护这些资源变得更加困难。基础设施即代码(IaC)是有效管理云资源的答案。IaC允许对云资源进行编码,并支持可重用性。与手动或强制部署相比,这...

随着云计算的引入,基础设施的配置变得更加容易。云计算使组织能够比本地数据中心更快地启动应用程序基础设施。云计算提供了独特的优势,例如:

  • 弹性
  • 自动化
  • 快速供应

在过去的几年里,组织和创业公司迅速采用了云计算。但是,虽然云计算使获取资源变得更加容易,但也使管理和维护这些资源变得更加困难。
基础设施即代码(IaC)是有效管理云资源的答案。IaC允许对云资源进行编码,并支持可重用性。与手动或强制部署相比,这是一个巨大的优势。
例如,如果您的组织需要提供具有类似配置的开发、登台和生产环境。我们可以用IaC来实现这一点。我们可以使用相同的代码库部署到登台和生产环境中,并且只更改需要更改的参数。
再次我们讨论计算基础设施配置所产生的成本。该工具设计用于与一种名为Terraform的流行IaC工具一起工作。

Infracost简介

基础设施成本是一个用来计算云资源成本的工具。这有助于DevOps和SRE工程师在实施变更之前确定变更的成本影响。
我们可以通过CLI或基于代码库中的Pull Request来触发Infracost。

Infracost初探

安装基础设施成本很简单。根据所使用的操作系统,我们可以使用相关的包管理器进行安装,详细信息请参阅本文档。

Infracost安装

brew install infracost

命令行参数

$ infracost -h
Infracost - cloud cost estimates for Terraform

DOCS
  Quick start: https://infracost.io/docs
  Add cost estimates to your pull requests: https://infracost.io/cicd

USAGE
  infracost [flags]
  infracost [command]

EXAMPLES
  Show cost diff from Terraform directory:

      infracost breakdown --path /code --format json --out-file infracost-base.json
      # Make Terraform code changes
      infracost diff --path /code --compare-to infracost-base.json

  Show cost breakdown from Terraform directory:

      infracost breakdown --path /code --terraform-var-file my.tfvars

AVAILABLE COMMANDS
  auth             Get a free API key, or log in to your existing account
  breakdown        Show breakdown of costs
  comment          Post an Infracost comment to GitHub, GitLab, Azure Repos or Bitbucket
  completion       Generate shell completion script
  configure        Display or change global configuration
  diff             Show diff of monthly costs between current and planned state
  help             Help about any command
  output           Combine and output Infracost JSON files in different formats
  upload           Upload an Infracost JSON file to Infracost Cloud

FLAGS
      --debug-report       Generate a debug report file which can be sent to Infracost team
  -h, --help               help for infracost
      --log-level string   Log level (trace, debug, info, warn, error, fatal)
      --no-color           Turn off colored output
  -v, --version            version for infracost

Use "infracost [command] --help" for more information about a command.

免费注册并获得API密钥。

下一步是从云中获取API密钥,以便使用infracast进行身份验证。在使用CLI或CI/CD管道集成时,需要这个API密钥。

在Infracost中创建帐户是免费的。创建帐户后,我们可以使用命令行用infracast验证CLI,如下所示。

infracost auth login

Terraform配置文件

如果您想尝试Terraform文件,我创建了一个简单的TF文件,它提供了一个Linux虚拟机和存储帐户。

provider "azurerm" {
  skip_provider_registration = true
  features {}
}

provider "random" {}

resource "random_string" "sa-name" {
  length = 5
  lower = true
  upper = false
  numeric = false
  special = false
}

resource "azurerm_resource_group" "rg" {
  name     = "rg-infracost"
  location = "westeurope"
}

resource "azurerm_storage_account" "sa" {
  name                     = "${"sa"}${random_string.sa-name.result}"
  resource_group_name      = azurerm_resource_group.rg.name
  location                 = azurerm_resource_group.rg.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_network_interface" "vm_nic" {
  location            = azurerm_resource_group.rg.location
  name                = "linux-nic-primary"
  resource_group_name = azurerm_resource_group.rg.name
  ip_configuration {
    name                          = "primary"
    private_ip_address_allocation = "Dynamic"
  }
}

resource "azurerm_linux_virtual_machine" "my_vm" {
  name                = "basic_a2"
  resource_group_name = azurerm_resource_group.rg.name
  location            = "eastus"

  size           = "Basic_A2" # <<<<< Try changing this to Basic_A4 to compare the costs
  admin_username = "fakeuser"
  admin_password = "fakepass"

  network_interface_ids = [
    azurerm_network_interface.vm_nic.id
  ]

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

  source_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "16.04-LTS"
    version   = "latest"
  }
}provider "azurerm" {
  skip_provider_registration = true
  features {}
}

查看Terraform的基础设施成本分解

通过CLI登录到Infracost后,进入存放TF文件的Terraform文件夹。然后,我们可以运行以下命令来计算所声明的基础设施的成本。

infracost breakdown --path .


您将得到如下输出,显示每个资源的成本细目。

查看成本估算差异

接下来,我们看一下如何识别从基线更改资源时的成本差异。
首先,我们需要创建一个基准JSON文件,如下所示。

infracost breakdown --path . --format json --out-file infracost-base.json

接下来,我们将更改Terraform文件。在本例中,我们将VM大小更改为Basic_A2的Standard_B2s。
接下来,我们将把更改与之前生成的基线进行比较。

infracost diff --path . --compare-to infracost-base.json

通过上面的输出,您可以看到Standard_B2s比Basic_A2便宜,并显示了价格差异和百分比。

结论

基础设施成本是申请配置IaC的宝贵工具。这允许DevOps/SRE团队在从Terraform中添加和删除资源时识别成本分解。infraccost提供了一个仪表板,它与CI/CD工具(如GitHub, Azure DevOps)集成,以及更多自动化成本计算。
在下一篇文章中,我们将研究如何通过CI/CD管道自动化基础设施成本以确定成本。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。