Terraform
Terraform
https://developer.hashicorp.com/terraform/intro
什么是 Terraform
?
Terraform 是一种基础设施即代码工具,可让您在人类可读的配置文件中定义云和本地资源,您可以对这些文件进行版本控制、重用和共享。然后,您可以使用一致的工作流程来配置和管理所有基础设施的整个生命周期。Terraform 可以管理计算、存储和网络资源等低级组件,以及 DNS 条目和 SaaS 功能等高级组件。
Terraform
是如何工作的
Terraform
通过应用程序编程接口 (API
) 创建和管理云平台和其他服务上的资源。提供商使 Terraform
能够通过可访问的 API
与几乎任何平台或服务配合使用
核心 Terraform
工作流程由三个阶段组成
Write
(写入):定义资源,这些资源可能跨多个云提供商和服务。例如,您可以创建一个配置,以在具有安全组和负载均衡器的虚拟私有云 (VPC) 网络中的虚拟机上部署应用程序。Plan
(计划): Terraform 创建一个执行计划,描述它将根据现有基础设施和您的配置创建、更新或销毁的基础设施。Apply
(应用):获得批准后,Terraform 将按照正确的顺序执行建议的操作,并尊重任何资源依赖性。例如,如果您更新 VPC 的属性并更改该 VPC 中的虚拟机数量,Terraform 将在扩展虚拟机之前重新创建 VPC。
安装 Terraform
https://developer.hashicorp.com/terraform/downloads
centos
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform
mac
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
或者直接下载安装包
wget https://releases.hashicorp.com/terraform/1.5.4/terraform_1.5.4_darwin_amd64.zip
unzip terraform_1.5.4_darwin_amd64.zip
mv terraform /usr/local/bin
-
vscode
插件 (自动补全代码)Terraform
HashiCorp Terraform
Terraform
语法
配置语法
- Terraform的配置文件都是以
.tf
为后缀 - Terraform支持两种模式
HCL、JSON
Provider
插件
providers
地址:https://registry.terraform.io/browse/providers
Terraform
通过 provider
管理基础设施,使用 provider
与云供应商 API
进行交互,每个 Provider
都包含相关的资源和数据源
声明 Provider
每个 Terraform
模块必须声明它需要哪些 Provider
,以便 Terraform
可以安装和使用它们。
提供者要求在一个 required_providers
块中声明。
## versions.tf
terraform {
required_providers {
alicloud = {
// Provider 源地址
source = "aliyun/alicloud"
// Provider 版本
version = "1.208.0"
}
}
}
配置 Provider
- 关键字 provider
- Provider 名称
# Configure the Alicloud Provider
provider "PROVIDER_NAME" {
// 参数配置
access_key = var.alicloud.access_key
secret_key = var.alicloud.secret_key
region = var.region
}
- 实例
## provider.tf
provider "alicloud" {
access_key = var.alicloud.access_key
secret_key = var.alicloud.secret_key
region = var.region
}
-
阿里云提供商接受多种输入凭据进行身份验证的方式
- Static credentials
- Environment variables
- Shared credentials/configuration file
- ECS Role
- Assume role
- Sidecar Credentials
详细使用查看官网:https://registry.terraform.io/providers/aliyun/alicloud/latest/docs
alias
配置多个 Provider
可以为同一个Provider定义多个配置,并选择基于每个资源或每个模块使用哪一个。这样做的主要原因是支持一个云平台的多个区域。
引用方式:
<PROVIDER NAME>.<ALIAS>
alicloud.beiling
provider.hangzhou
在其他配置文件中指定资源区域时,可以使用此模式引用
## provider.tf
provider "alicloud" {
access_key = var.alicloud.access_key
secret_key = var.alicloud.secret_key
}
provider "alicloud" {
alias = "beijing"
region = "cn-beijing-b"
}
provider "alicloud" {
alias = "hangzhou"
region = "cn-hangzhou-a"
}
Resource
资源
- 资源来自
Provider
,是Terraform
中最重要的元素。每个资源块描述一个或多个基础对象,例如网络、计算实例或更高级别的组件,例如DNS
记录。 - 资源名称必须以字母或下划线开头,并且只能包含字母、数宇、下划线和破折号。
resource "resource_type" "name" {
// resource_config
}
Resource-ECS
资源
定义一台ECS实例:
- 可用区
- 安全组
- 实例规格
- 系统盘类型
- 名称描达
- 镜像
- 实例名称
- 带宽
- 交换机
- 付费类型
- 账户密码
resource "alicloud_instance" "myecs" {
availability_zone = var.region
security_groups = alicloud_security_group. group.*.id
instance_type = "ecs.n1.tiny"
system_disk_category = "cloud_efficiency"
svstem_disk_name = "tf_svstem_disk_name"
system_disk_description = "tf_system_disk_description"
image_Id = "centos 7_5_X64_206_allbase_20211130.vhd"
instance_name = "mytestecs"
switch_id = alicloud_vswitch.vsw.id
internet_max_bandwidth_out = 1
internet_charge_type = "PayByTraffic"
password = "root@123"
}