开始 Terraform

首先

在使用Terraform之前,整理了一些需要准备的事项。假设环境为Windows10。

提前安装VSCode

现在可能大家都认为这是理所当然的,但首先让我们安装 “Visual Studio Code”。
千万不要用像“さくらエディタ”这样的工具来编程。(虽然你可以用,但是用VSCode会大大提高效率和方便性)

安装方法非常简单,只需要运行安装程序即可,故在此省略。

安装 Terraform

我们赶紧安装Terraform吧。

 

从Windows上下载Terraform。
如果下载成功,解压zip文件,将exe文件放在一个合适的位置。
我们暂时将其放在以下位置。

C://terraform/

只需要将路径设置为环境变量即可。

terraform version

Terraform v1.2.9
on windows_amd64

只要以这样的方式显示就可以了。

安装tflint

运行tflint,可以检查语法和参数是否符合规则。很方便的工具。

 

让我们从这里找到Windows版本并下载。然后将其放在和Terraform.exe相同的目录中。在编写本文时,Windows版的最新版本是v0.40.0。

安装VSCode的扩展功能

我们安装一下HashiCorp提供的扩展插件,这样编写Terraform代码会更加简单。

 

image.png

创建一个合适的目录

使用Terraform时,关于目录结构人们的偏好各有不同,但一般来说,我认为以下的构建方式是合适的。

-- terraform
    -- env
        -- dev
            -- main.tf
            -- variables.tf
            …
        -- prod
            -- main.tf
            -- variables.tf
            …
    -- module
        -- service name(vnetなど)
            -- main.tf
            -- variables.tf
            -- output.tf
            …
        …

这样做的话,可以为每个环境添加相应的模块定义。
嗯,就先简单地按原样创建吧!

试用一下

我将使用Terraform随意创建一些资源。
由于我经常使用Azure,所以在这里我将使用Azure提供者来进行示例。
我将创建一个资源组,并生成一个虚拟网络。

这里可以参考。

 

我立即在dev/main.tf文件中编写以下示例代码。


terraform {
  #  tflintテストのためコメントアウト
  #  required_version = "1.2.9"
  backend "local" {}
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "3.23.0"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "resource_group" {
  name     = "rg_terraform-001"
  location = "japaneast"
}

resource "azurerm_virtual_network" "vnet" {
  name                = "vnet-terraform-dv-001"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.resource_group.location
  resource_group_name = azurerm_resource_group.resource_group.name

}

让我们从命令提示符下运行tflint。

tflint

1 issue(s) found:

Warning: terraform "required_version" attribute is required (terraform_required_version)

  on  line 0:
   (source code not available)

Reference: https://github.com/terraform-linters/tflint-ruleset-terraform/blob/v0.1.0/docs/rules/terraform_required_version.md

被告知要指定使用的Terraform版本,有点生气呢。既然确认验证通过了,我会将注释取消。

如果在Azure上进行测试,请先在此处进行az login。
这样一来,在Terraform中不需要输入认证信息等,它会使用az login时使用的帐户信息来执行Terraform。

首先

cd C://terraform/env/dev
terraform init

进行执行…

nitializing the backend...

Initializing provider plugins...
- Reusing previous version of hashicorp/azurerm from the dependency lock file
- Using previously-installed hashicorp/azurerm v3.7.0

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

回复已返回并成功初始化。

接下来,我们来执行Terraform plan。
这是一个用于模拟运行的命令。

terraform plan

执行结果

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:

  # azurerm_resource_group.resource_group will be created
  + resource "azurerm_resource_group" "resource_group" {
      + id       = (known after apply)
      + location = "japaneast"
      + name     = "rg_terraform-001"
    }

  # azurerm_virtual_network.vnet will be created
  + resource "azurerm_virtual_network" "vnet" {
      + address_space       = [
          + "10.0.0.0/16",
        ]
      + dns_servers         = (known after apply)
      + guid                = (known after apply)
      + id                  = (known after apply)
      + location            = "japaneast"
      + name                = "vnet-terraform-dv-001"
      + resource_group_name = "rg_terraform-001"
      + subnet              = (known after apply)
    }

Plan: 2 to add, 0 to change, 0 to destroy.

好的,由于计划顺利通过,接下来我们会进行申请。

terraform apply
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

azurerm_resource_group.resource_group: Creating...
azurerm_resource_group.resource_group: Creation complete after 0s [id=/subscriptions/                /resourceGroups/rg_terraform-001]
azurerm_virtual_network.vnet: Creating...
azurerm_virtual_network.vnet: Creation complete after 4s [id=/subscriptions/                /resourceGroups/rg_terraform-001/providers/Microsoft.Network/virtualNetworks/vnet-terraform-dv-001]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

是的,现在资源组和虚拟网络已经创建完成了。真简单啊!

最后

这是一篇关于迈出第一步的文章。接下来,我计划写一篇关于如何具体编写Terraform的文章!

广告
将在 10 秒后关闭
bannerAds