一 前言
随着云计算的引入,基础设施的配置变得更加容易。云计算使组织能够比本地数据中心更快地启动应用程序基础设施。云计算提供了独特的优势,例如:
- 弹性
- 自动化
- 快速供应
在过去的几年里,组织和创业公司迅速采用了云计算。但是,虽然云计算使获取资源变得更加容易,但也使管理和维护这些资源变得更加困难。 基础设施即代码(IaC)是有效管理云资源的答案。IaC允许对云资源进行编码,并支持可重用性。与手动或强制部署相比,这是一个巨大的优势。 例如,如果您的组织需要提供具有类似配置的开发、登台和生产环境。我们可以用IaC来实现这一点。我们可以使用相同的代码库部署到登台和生产环境中,并且只更改需要更改的参数。 再次我们讨论计算基础设施配置所产生的成本。该工具设计用于与一种名为Terraform的流行IaC工具一起工作。
二 Infracost简介
基础设施成本是一个用来计算云资源成本的工具。这有助于DevOps和SRE工程师在实施变更之前确定变更的成本影响。 我们可以通过CLI或基于代码库中的Pull Request来触发Infracost。
三 Infracost初探
安装基础设施成本很简单。根据所使用的操作系统,我们可以使用相关的包管理器进行安装,详细信息请参阅本文档。
3.1 Infracost安装
brew install infracost
3.2 命令行参数
$ 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管道自动化基础设施成本以确定成本。
参考链接
- www.infracost.io/docs/#1-ins…