terraform 入门(二):构建基础设施

543 阅读4分钟

本篇笔记参考官方教程

作者学习环境:VMware虚拟机,centos7。

准备工作: 安装好terraform安装AWS CLI注册AWS账户关联凭证

本次学习目的:在AWS上预置一个EC2实例。EC2实例是在AWS上运行的虚拟机,是许多infrastructure projects的通用组件。

1.配置环境变量: 访问密钥 ID、访问密钥、区域(从上述关联凭证中获取)。示例(仅作展示):

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=us-west-2

2.创建main.tf文件

每个 Terraform 配置必须位于其自己的工作目录中。

创建目录,切换到目录,创建main.tf

mkdir learn-terraform-aws-instance
cd learn-terraform-aws-instance
touch main.tf

vim main.tf,将以下内容输入其中。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"
  region  = "us-west-2"
}

resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}

3.插曲

编辑此 main.tf 配置中使用的 AMI ID(ami = "ami-830c94e3" )特定于 us-west-2区域。

作者看了自己的aws使用us-east-1,需要根据教程去找对应区域的ami id(并在main.tf使用此 ID 进行修改。然后重新运行terraform apply。)

查找 Linux AMI参考官方教程,使用 Amazon EC2 控制台查找 Linux AMI:

①.通过以下网址打开 Amazon EC2 控制台:console.aws.amazon.com/ec2/

②.从导航栏,选择您在其中启动实例的区域。您可以选择向您提供的任何区域,无需理会您身处的位置。

③.在导航窗格中,选择 AMIs(AMI)。

④.(可选)使用 Filter(筛选条件)和 Search(搜索)选项将显示的 AMI 列表范围限定为符合您的标准的 AMI。例如,要列出 AWS 提供的所有 Linux AMI,请选择 Public images(公有映像)。然后使用 Search(搜索)选项进一步缩小显示的 AMI 列表的范围。选择 Search(搜索)栏,然后从菜单中选择 Owner alias(拥有者别名),然后选择 = 运算符,最后选择值 amazon。再次选择 Search(搜索)栏以选择 Platform(平台),然后选择 = 运算符,然后从提供的列表中选择操作系统。

⑤.(可选)选择 Preferences(首选项)图标(新控制台)或 Show/Hide Columns(显示/隐藏列)图标(旧控制台)可选择要显示的镜像属性,例如根设备类型。或者,可以从列表中选择 AMI,然后在 Details(详细信息)选项卡中查看其属性。

4.初始化目录: 下载并安装配置中定义的提供程序。

terraform init

本例是aws提供的,Terraform 下载aws提供程序并将其安装在当前工作目录的隐藏子目录中,名为.terraform. 该 terraform init命令打印出安装了哪个版本的提供程序。Terraform 还会创建一个名为.terraform.lock.hcl的锁定文件,该文件指定使用的确切提供程序版本,以便您可以控制何时更新用于项目的提供程序。

5.格式化并验证配置

官方建议在所有配置文件中使用一致的格式, terraform fmt 命令会自动更新当前目录中的配置以提高可读性和一致性。使用terraform validate命令,确保您的配置在语法上有效且内部一致。

6.创建infrastructure

使用terraform apply命令应用配置。执行后会打印出“执行计划”,描述terraform将采取的操作:

输出格式类似于 Git 等工具生成的 diff 格式。 输出在 aws_instance.app_server 旁边有一个 +,这意味着 Terraform 将创建此资源。 在此之下,它显示了将要设置的属性。 当显示的值为 (known after apply) 时,表示在创建资源之前该值是未知的。 例如,AWS 在创建实例时将 Amazon 资源名称 (ARN) 分配给实例,因此在您应用更改并且 AWS 提供商从 AWS API 返回该值之前,Terraform 无法知道 arn 属性的值。

7.访问 EC2 控制台可以看到新 EC2 实例。

8.检查状态

应用配置时,Terraform 将数据写入名为 terraform.tfstate 的文件中。 Terraform 将其管理的资源的 ID 和属性存储在此文件中,以便以后可以更新或销毁这些资源。

Terraform 状态文件是 Terraform 可以跟踪其管理的资源的唯一方式,并且通常包含敏感信息,因此必须安全地存储您的状态文件,并将访问权限限制在需要管理您的基础架构的受信任的团队成员。 在生产中,建议使用 Terraform Cloud 或 Terraform Enterprise 远程存储的状态。 Terraform 还支持其他几个可用于存储和管理状态的远程后端。

使用 terraform show 检查当前状态。当 Terraform 创建此 EC2 实例时,它还从 AWS 提供商处收集资源的元数据并将元数据写入状态文件。 在下一教程中,将修改配置以引用这些值来配置其他资源和输出值。

9.手动管理状态 Terraform 有一个名为 terraform state 的内置命令,用于高级状态管理。 使用 list 子命令列出项目状态下的资源。

terraform state list