当前位置: 首页 > news >正文

如何使用 Terraform 自动化部署甲骨文云免费实例?

使用 Terraform 管理甲骨文云(Oracle Cloud)免费实例适合需要重复创建或版本控制基础设施的场景。由于免费层资源有限且区域库存波动大,自动化前必须确认配额与网络环境。

先说结论:Terraform 能有效固化配置,但甲骨文云免费层资源有限,自动化前需人工确认配额与网络。

  • 适合:需要多次重建、配置一致性要求高的场景
  • 先准备:获取 API 密钥、生成 SSH 密钥对、确认免费配额及区域库存
  • 验收:通过控制台和 SSH 双向验证实例状态与网络连通性

前置准备:密钥与配额

在运行 Terraform 前,需区分两类密钥并完成配额检查。

1. API 签名密钥(用于 Terraform 认证)

登录甲骨文云控制台,进入用户设置(User Settings)生成 API 密钥。下载私钥文件(如oci_api_key.pem),记录密钥指纹(Fingerprint)。将私钥权限设置为只读:

chmod 600 oci_api_key.pem

在本地~/.oci/config文件中配置 Tenancy OCID、User OCID、Fingerprint 及私钥路径。

2. SSH 密钥对(用于实例登录)

在本地终端生成 SSH 密钥对,公钥将写入实例,私钥用于登录:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/oci_free_key

同样需保护私钥权限:

chmod 600 ~/.ssh/oci_free_key

3. 确认免费配额

进入控制台“治理与管理”->“配额”,确认VM.Standard.A1.Flex规格在目标区域是否有可用额度。若显示配额为 0 或已用完,需更换区域或清理旧实例。

完整 Terraform 配置

创建项目目录,包含variables.tfmain.tfterraform.tfvars。以下配置包含 VCN 网络、子网及免费 ARM 实例。

1. 变量定义 (variables.tf)

variable "tenancy_ocid" { type = string }
variable "user_ocid" { type = string }
variable "fingerprint" { type = string }
variable "private_key_path" { type = string }
variable "region" { type = string }
variable "compartment_ocid" { type = string }
variable "ssh_public_key" { type = string }
variable "instance_shape" { type = string, default = "VM.Standard.A1.Flex" }

2. 资源配置 (main.tf)

包含 Provider 配置、网络环境(VCN/子网/网关)及实例定义。使用 data source 自动获取最新 Oracle Linux 镜像,避免硬编码 Image OCID。

provider "oci" {tenancy_ocid     = var.tenancy_ociduser_ocid        = var.user_ocidfingerprint      = var.fingerprintprivate_key_path = var.private_key_pathregion           = var.region
}# 获取最新 Oracle Linux 镜像
data "oci_core_images" "ol_image" {compartment_id = var.compartment_ocidoperating_system = "Oracle-Linux"sort_by = "TIMECREATED"sort_order = "DESC"
}# 创建 VCN
resource "oci_core_virtual_network" "free_vcn" {compartment_id = var.compartment_ocidcidr_block     = "10.0.0.0/16"display_name   = "free-tier-vcn"dns_label      = "freetier"
}# 创建互联网网关
resource "oci_core_internet_gateway" "igw" {compartment_id = var.compartment_ocidvcn_id         = oci_core_virtual_network.free_vcn.iddisplay_name   = "free-tier-igw"
}# 创建路由表
resource "oci_core_route_table" "rt" {compartment_id = var.compartment_ocidvcn_id         = oci_core_virtual_network.free_vcn.iddisplay_name   = "free-tier-rt"route_rules {destination       = "0.0.0.0/0"destination_type  = "CIDR_BLOCK"network_entity_id = oci_core_internet_gateway.igw.id}
}# 创建安全列表(放行 22 端口)
resource "oci_core_security_list" "sl" {compartment_id = var.compartment_ocidvcn_id         = oci_core_virtual_network.free_vcn.iddisplay_name   = "free-tier-sL"ingress_security_rules {protocol    = "6"source      = "0.0.0.0/0"tcp_options { min = 22, max = 22 }}egress_security_rules {protocol    = "all"destination = "0.0.0.0/0"}
}# 创建子网
resource "oci_core_subnet" "subnet" {compartment_id      = var.compartment_ocidvcn_id              = oci_core_virtual_network.free_vcn.idcidr_block          = "10.0.1.0/24"display_name        = "free-tier-subnet"dns_label           = "subnet"route_table_id      = oci_core_route_table.rt.idsecurity_list_ids   = [oci_core_security_list.sl.id]subnet_access       = "PUBLIC"
}# 创建实例
resource "oci_core_instance" "free_instance" {compartment_id = var.compartment_ocidshape          = var.instance_shapedisplay_name   = "terraform-free-instance"shape_config {ocpus         = 4memory_in_gb  = 24}create_vnic_details {subnet_id        = oci_core_subnet.subnet.idassign_public_ip = true}source_details {source_type = "image"source_id   = data.oci_core_images.ol_image.images[0].id}metadata = {ssh_authorized_keys = var.ssh_public_key}
}

3. 变量赋值 (terraform.tfvars)

复制示例文件并填入实际值,注意 SSH 公钥内容需完整(包含ssh-rsa前缀)。

tenancy_ocid     = "ocid1.tenancy.oc1..example"
user_ocid        = "ocid1.user.oc1..example"
fingerprint      = "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
private_key_path = "~/.oci/oci_api_key.pem"
region           = "ap-seoul-1"
compartment_ocid = "ocid1.compartment.oc1..example"
ssh_public_key   = file("~/.ssh/oci_free_key.pub")

执行与验证

1. 初始化与应用

在终端执行以下命令。若遇到Out of capacity错误,请更换区域或稍后重试。

terraform init
terraform plan
terraform apply

2. 验证实例状态

登录甲骨文云控制台,在“计算”->“实例”中查看状态是否为“运行中”。确认公网 IP 已分配。

3. 验证 SSH 连接

使用本地私钥连接实例,默认用户为opc

ssh -i ~/.ssh/oci_free_key opc@<实例公网 IP>

若连接成功,说明自动化部署完成。

常见坑与排查

1. 区域缺货(Out of Capacity)

免费 ARM 实例在热门区域(如首尔、东京)常缺货。Terraform 会报错ServiceError: 5xx或提示资源不可用。

  • 解决:更换至冷门区域(如圣保罗、约翰内斯堡)或在main.tf中尝试调整shape_config(如先尝试 1 OCPU 看是否有资源)。

2. 密钥权限错误

若 SSH 连接被拒绝(Permission denied),检查本地私钥权限是否为 600。若 Terraform 报错认证失败,检查 API 私钥路径及~/.oci/config配置是否正确。

3. 网络不通

若实例运行中但无法 SSH,检查安全列表(Security List)是否放行 22 端口,以及路由表是否关联了互联网网关。

参考来源

  • Terraform Registry - Oracle OCI Provider: https://registry.terraform.io/providers/oracle/oci/latest/docs
  • Oracle Cloud Documentation - API Signing Key: https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm
  • Oracle Cloud Free Tier: https://www.oracle.com/cloud/free/

原文链接:https://www.zjcp.cc/ask/11495.html

http://www.jsqmd.com/news/842960/

相关文章:

  • 终极免费macOS应用清理工具:让你的Mac告别数字垃圾
  • 2026年知名的SLA 3D打印机/LCD 3D打印机/巧克力3D打印机/南京树脂3D打印机用户口碑推荐厂家 - 行业平台推荐
  • 别再乱画了!GD32/STM32复位与唤醒按键电路设计,90%新手会踩的坑
  • 告别龟速传输:在AutoDL上利用AutoPanel高效迁移大容量数据集的实战技巧
  • 2026年知名的SLA 3D打印机/南京尼龙3D打印机/南京金属3D打印机/光固化3D打印机厂家哪家好 - 行业平台推荐
  • 2026年海绵不容易塌的浙江减震电动车坐垫/耐老化电动车坐垫主流厂家对比评测 - 行业平台推荐
  • STM32与PS2手柄的无线交互:从硬件对接到按键解析
  • 别再死记硬背了!用PyTorch手把手拆解ECAPA-TDNN中的Res2Net与SENet模块
  • ARM SVE指令集饱和运算原理与应用解析
  • LabVIEW进阶实战:从数据流到状态机,打造高效可维护的图形化程序
  • 解锁CLIP潜力:三种高效微调策略实战解析
  • Elasticsearch 7.6.1 实战:从零构建招聘信息搜索服务(索引、数据与分页)
  • 手把手教你为树莓派CM4或Jetson Nano扩展4G/5G模块:基于Mini PCI-e接口的完整硬件连接与驱动配置指南
  • 3篇6章5节:基于 stat_slab () 函数的高血压临床数据可视化
  • 2026届必备的AI辅助论文网站解析与推荐
  • Django 从 0 到 1 打造完整电商平台:电商项目需求分析与数据库设计
  • ARM SVE2非临时存储指令STNT1原理与应用
  • 终极ncmdumpGUI指南:3步快速解密网易云音乐NCM文件
  • 程序员录音转行动项工具口碑推荐 | 经筛选的实用方案
  • 【NotebookLM生物技术研究实战指南】:20年生信专家亲授5大高价值应用场景与避坑清单
  • Apache RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景
  • 2026年热门的双鸭山监控设备回收/海康监控设备回收综合评价公司 - 行业平台推荐
  • nodejs后端服务如何接入taotoken调用多模型能力
  • 声学工程师的听音训练指南:从主观感知到客观调试
  • 浏览器端RPG Maker资源加密体系分析与实践探索
  • 高速SerDes技术解析:从差分传输到时钟恢复的硬件设计实战
  • 你的手机就是Linux工作站:用Termux+F-Droid打造移动开发环境(从安装到配源)
  • Windows11 开发环境搭建:手把手教你配置 PHP 的依赖管家 Composer
  • 番茄小说下载器终极指南:5种格式+Web界面打造个人数字图书馆
  • 销售跟进转任务,4个实操标准帮你高效交接无遗漏