Oracle Cloud 自动化部署 ARM 实例 (A1.Flex) 实践指南与避坑笔记

这是一份为您系统整理的 Oracle Cloud 自动化部署实践技术文档。


Oracle Cloud 自动化部署 ARM 实例 (A1.Flex) 实践指南与避坑笔记

文档版本: v1.0 场景描述: 在 Oracle Cloud 免费套餐额度内,利用闲置 AMD 实例作为跳板机,通过 OCI CLI 与资源管理器(Resource Manager),实现 24 小时无人值守自动化申请极度紧缺的美西圣何塞机房 ARM (A1.Flex) 实例。


1. 需求与根本原因排查复盘


2. 核心技术名词解释


3. 带注释的实操命令汇总

环境安装与鉴权配置

# 1. 下载并执行 OCI CLI 官方安装脚本
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

# 2. 刷新环境变量,使 oci 命令立刻生效
source ~/.bashrc
# 或者使用:exec -l $SHELL

# 3. 运行交互式配置向导 (需提前准备 User OCID 和 Tenancy OCID)
oci setup config

# 4. 查看并提取自动生成的公钥,用于填入 Oracle 网页端完成授权
cat ~/.oci/oci_api_key_public.pem

进程守护与挂机管理 (tmux)

# 创建并进入一个名为 auto_arm 的新后台会话
tmux new -s auto_arm

# 赋予脚本执行权限并启动脚本
chmod +x arm_stack.sh
./arm_stack.sh

# 退出但不终止当前后台会话的快捷键手势:
# 依次按下:Ctrl+B -> 松开 -> 按 D

# 重新进入已存在的后台会话(查岗或停止脚本用)
tmux attach -t auto_arm

# 在主系统外排查脚本是否仍在运行
ps -ef | grep arm_stack.sh

实例获取后的防火墙清理 (Ubuntu)

# 获取机器后,清理系统自带的强管控 iptables 规则,放行所有端口
sudo -i
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
apt-get install -y iptables-persistent
netfilter-persistent save


4. 最终版配置文件代码

创建文件 arm_stack.sh,填入以下代码。

修改重点说明:

#!/bin/bash

# ================= 配置区 =================
# [重点修改项]: 将此处替换为您实际的堆栈 OCID (格式: ocid1.ormstack.oc1...)
STACK_OCID="ocid1.ormstack.oc1.us-sanjose-1.amaaaaaapzrp4tiajhsw7keeytrwgdoqn3j2oxfjv3q6evh3j2sfnf36b5nn"
# ==========================================

echo "开始自动执行堆栈抢机任务..."

while true; do
  current_time=$(date "+%Y-%m-%d %H:%M:%S")
  
  # 核心业务逻辑:调用 oci cli 向堆栈发送自动批准(AUTO_APPROVED)的运行作业(Job)
  result=$(oci resource-manager job create-apply-job \
    --stack-id "$STACK_OCID" \
    --execution-plan-strategy "AUTO_APPROVED" \
    2>&1)
    
  if [[ "$result" == *"Job"* ]]; then
      echo "[$current_time] 🚀 堆栈应用请求已成功发送并进入排队状态。"
  else
      # 注: 若网页端 Job 列表产生记录,此处的告警为文本不匹配导致的假报警,可忽略。
      echo "[$current_time] ⚠️ 请求发送失败或配额受限,继续重试..."
  fi
  
  # [重点安全项]: 强制休眠 120 秒,严格控制 API 请求速率避免账号封禁
  sleep 120
done


5. 避坑总结 (Lessons Learned)

  1. OCI CLI 安装死循环陷阱: 若系统残留了旧的安装目录,脚本会询问 Remove this directory? (y/N)。默认选项是 N。若不仔细看直接狂按回车,会导致安装程序无限循环询问。必须手动输入小写 y 并回车才能破局。
  2. API 密钥密码阻碍自动化: 在执行 oci setup config 生成密钥对时,系统会询问 Enter a passphrase for your private key。为了实现无人值守的挂机,绝对不能设置密码。必须直接按回车,或输入 N/A 确认跳过。否则脚本每次运行都会阻塞等待人工输入密码。
  3. 前/后台运行环境错位: 在使用 tmux 时,切忌将含有脚本运行命令(./arm_stack.sh)的多行代码一次性粘贴进终端。这会导致 tmux 退出后台后,脚本在主系统的前台裸跑。正确做法是:进入 tmux -> 手动输入运行命令 -> Ctrl+B, D 退出后台
  4. Oracle 告警邮件被国内邮箱拦截: 使用国内邮箱(如 139、QQ 等)订阅 Oracle 的 Events(事件)通知时,由于反垃圾策略,大概率会发生静默丢信。必须使用 Gmail 等海外主流邮箱 接收“Instance - Launch End”开机成功通知。
  5. 正确理解“Failed”状态: 自动化运行期间,网页端“作业 (Jobs)”列表中产生大量状态为 失败 (Failed) 的记录是完全正常的符合预期的现象。这证明请求已经成功穿透至 Oracle 后台,仅仅是因为物理服务器无货。不要因此怀疑脚本逻辑出错。

Revision #1
Created 2026-05-27 13:04:24 UTC by 天翰
Updated 2026-05-27 13:05:03 UTC by 天翰