Terraform

使用 Terraform 在公有云上创建虚拟机环境

Terraform 是一个流行的"基础设施即代码"工具,您可以使用它在公有云上一键创建虚拟机。

Pigsty 提供了阿里云、AWS、腾讯云的 Terraform 模板作为示例。


快速开始

安装 Terraform

在 macOS 上,您可以使用 Homebrew 安装 Terraform:

brew install terraform

其他平台请参考 Terraform 官方安装指南

初始化与应用

进入 Terraform 目录,选择模板,初始化提供商插件,然后应用配置:

cd ~/pigsty/terraform
cp spec/aliyun-meta.tf terraform.tf   # 选择模板
terraform init                         # 安装云提供商插件(首次使用时)
terraform apply                        # 生成执行计划并创建资源

运行 apply 命令后,按提示输入 yes 确认,Terraform 将为您创建虚拟机及相关云资源。

获取 IP 地址

创建完成后,打印管理节点的公网 IP 地址:

terraform output | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

配置 SSH 访问

使用 ssh 脚本自动配置 SSH 别名并分发密钥:

./ssh    # 写入 SSH 配置到 ~/.ssh/pigsty_config 并复制密钥

此脚本会将 Terraform 输出的 IP 地址写入 ~/.ssh/pigsty_config,并使用默认密码 PigstyDemo4 自动分发 SSH 密钥。

配置完成后,您可以直接使用主机名登录:

ssh meta    # 使用主机名而非 IP 登录

销毁资源

测试完成后,可以一键销毁所有创建的云资源:

terraform destroy

模板规格

Pigsty 在 terraform/spec/ 目录下提供了多种预定义的云资源模板:

模板文件云厂商说明
aliyun-meta.tf阿里云单节点元节点模板,支持所有发行版和 AMD/ARM(默认)
aliyun-meta-s3.tf阿里云单节点模板 + OSS 存储桶,用于 PITR 备份
aliyun-full.tf阿里云4 节点沙箱模板,支持所有发行版和 AMD/ARM
aliyun-oss.tf阿里云5 节点构建模板,支持所有发行版和 AMD/ARM
aliyun-pro.tf阿里云多发行版测试模板,用于跨操作系统测试
aws-cn.tfAWSAWS 中国区 4 节点环境
tencentcloud.tf腾讯云腾讯云 4 节点环境

使用模板时,将模板文件复制为 terraform.tf

cd ~/pigsty/terraform
cp spec/aliyun-full.tf terraform.tf   # 使用阿里云 4 节点沙箱模板
terraform init && terraform apply

变量配置

Pigsty 的 Terraform 模板使用变量来控制架构、操作系统发行版和资源配置:

架构与发行版

variable "architecture" {
  description = "架构类型 (amd64 或 arm64)"
  type        = string
  default     = "amd64"    # 注释此行以使用 arm64
  #default     = "arm64"   # 取消注释以使用 arm64
}

variable "distro" {
  description = "发行版代码 (el8,el9,el10,u22,u24,d12,d13)"
  type        = string
  default     = "el9"       # 默认使用 Rocky Linux 9
}

资源配置

locals 块中可以配置以下资源参数:

locals {
  bandwidth        = 100                    # 公网带宽 (Mbps)
  disk_size        = 40                     # 系统盘大小 (GB)
  spot_policy      = "SpotWithPriceLimit"   # 竞价策略:NoSpot, SpotWithPriceLimit, SpotAsPriceGo
  spot_price_limit = 5                      # 最高竞价价格 (仅在 SpotWithPriceLimit 时有效)
}

阿里云配置

凭证设置

将您的阿里云凭证添加到环境变量中,例如在 ~/.bash_profile~/.zshrc 中:

export ALICLOUD_ACCESS_KEY="<your_access_key>"
export ALICLOUD_SECRET_KEY="<your_secret_key>"
export ALICLOUD_REGION="cn-shanghai"

支持的镜像

以下是阿里云中常用的 ECS 公共操作系统镜像 前缀:

发行版代码x86_64 镜像前缀aarch64 镜像前缀
CentOS 7.9el7centos_7_9_x64-
Rocky 8.10el8rockylinux_8_10_x64rockylinux_8_10_arm64
Rocky 9.6el9rockylinux_9_6_x64rockylinux_9_6_arm64
Rocky 10.0el10rockylinux_10_0_x64rockylinux_10_0_arm64
Debian 11.11d11debian_11_11_x64-
Debian 12.11d12debian_12_11_x64debian_12_11_arm64
Debian 13.2d13debian_13_2_x64debian_13_2_arm64
Ubuntu 20.04u20ubuntu_20_04_x64-
Ubuntu 22.04u22ubuntu_22_04_x64ubuntu_22_04_arm64
Ubuntu 24.04u24ubuntu_24_04_x64ubuntu_24_04_arm64
Anolis 8.9an8anolisos_8_9_x64-
Alibaba Cloud Linux 3al3aliyun_3_0_x64-

OSS 存储配置

aliyun-meta-s3.tf 模板会额外创建 OSS 存储桶及相关权限,用于 PostgreSQL 的 PITR 备份:

  • OSS Bucket:创建名为 pigsty-oss 的私有存储桶
  • RAM 用户:创建专用的 pigsty-oss-user 用户
  • 访问密钥:生成 AccessKey 并保存到 ~/pigsty.sk
  • IAM 策略:授予对存储桶的完全访问权限

AWS 配置

凭证设置

设置 AWS 配置和凭证文件:

# ~/.aws/config
[default]
region = cn-northwest-1

# ~/.aws/credentials
[default]
aws_access_key_id = <YOUR_AWS_ACCESS_KEY>
aws_secret_access_key = <AWS_ACCESS_SECRET>

如果需要使用 SSH 密钥,将密钥文件放置在:

~/.aws/pigsty-key
~/.aws/pigsty-key.pub

腾讯云配置

凭证设置

将腾讯云凭证添加到环境变量中:

export TENCENTCLOUD_SECRET_ID="<your_secret_id>"
export TENCENTCLOUD_SECRET_KEY="<your_secret_key>"
export TENCENTCLOUD_REGION="ap-beijing"

快捷命令

Pigsty 提供了一些 Makefile 快捷命令用于 Terraform 操作:

cd ~/pigsty/terraform

make u          # terraform apply -auto-approve + 配置 SSH
make d          # terraform destroy -auto-approve
make apply      # terraform apply(交互式确认)
make destroy    # terraform destroy(交互式确认)
make out        # terraform output
make ssh        # 运行 ssh 脚本配置 SSH 访问
make r          # 重置 terraform.tf 到版本库状态

注意事项