本文最后更新于 75 天前,其中的信息可能已经有所发展或是发生改变。
需要用到的
- 一台vps服务器
- Terraform
- oci-cli
一、安装Terraform
wget https://releases.hashicorp.com/terraform/0.15.5/terraform_0.15.5_linux_amd64.zip
解压,并移动文件terraform到/usr/bin目录
unzip terraform_0.15.5_linux_amd64.zip
mv terraform /usr/bin
使用以下命令查看版本
terraform version
显示如下则安装成功
二、安装oci-cli工具
使用以下命令安装oci-cli工具
bash -c "$(curl –L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
一直回车即可
当出现:
这个时候,是在提示你输入y回车,会自动添加环境变量
之后又是一直回车。出现如下提示表示安装成功。可以用:
oci -v
查询版本三、复制用户和租户的ocid
甲骨文后台右上角—用户设置—点击用户以及租户,在信息栏中有我们需要的ID,分别点击复制,可以保存在记事本备份好
四、配置cli
输入如下代码开始配置,配置的路径默认在root目录
oci setup config
具体配置看下面
Enter a location for your config [/root/.oci/config]:
Enter a user OCID: #输入你的用户OCID
Enter a tenancy OCID: #输入你的租户OCID
Enter a region by index or name(e.g.
1: ap-chiyoda-1, 2: ap-chuncheon-1, 3: ap-hyderabad-1, 4: ap-melbourne-1, 5: ap-mumbai-1,
6: ap-osaka-1, 7: ap-seoul-1, 8: ap-sydney-1, 9: ap-tokyo-1, 10: ca-montreal-1,
11: ca-toronto-1, 12: eu-amsterdam-1, 13: eu-frankfurt-1, 14: eu-zurich-1, 15: me-dubai-1,
16: me-jeddah-1, 17: sa-santiago-1, 18: sa-saopaulo-1, 19: uk-cardiff-1, 20: uk-gov-cardiff-1,
21: uk-gov-london-1, 22: uk-london-1, 23: us-ashburn-1, 24: us-gov-ashburn-1, 25: us-gov-chicago-1,
26: us-gov-phoenix-1, 27: us-langley-1, 28: us-luke-1, 29: us-phoenix-1, 30: us-sanjose-1): 9 #这里选择你的区域
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: y #输入y生成公钥
Enter a directory for your keys to be created [/root/.oci]:
Enter a name for your key [oci_api_key]:
Public key written to: /root/.oci/oci_api_key_public.pem
Enter a passphrase for your private key (empty for no passphrase):
Private key written to: /root/.oci/oci_api_key.pem
Fingerprint:
Config written to /root/.oci/config
If you haven't already uploaded your API Signing public key through the
console, follow the instructions on the page linked below in the section
'How to upload the public key':
https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2
复制生成的公钥,使用以下命令获取公钥
cat /root/.oci/oci_api_key_public.pem
把显示出来的内容复制,并且添加到
甲骨文后台—用户设置—资源—API秘钥—添加API秘钥
使用以下命令测试oci配置是否正确
oci iam availability-domain list
提示以下内容则是配置正确
五、Terraform环境初始化
1、我们先获取甲骨文的Terraform脚本
点击 创建VM实例
在这里选择你需要的配置
记得保存私钥
点击 另存为堆栈
一直下一步
点击下载
将压缩包解压到桌面备用
2、配置Terraform
使用以下命令创建Terraform运行目录
cd /opt/
mkdir terraform-learning && cd terraform-learning
将刚刚解压到桌面的main.tf文件 上传到这个目录
将目录设置为Terraform运行目录
terraform init
以上完成后,开始创建任务,用命令:(注意还是在/opt/terraform-learning)
terraform apply
执行完上面命令之后,会提示输入yes
上图还能看到API返回Error Message: Out of host capacity,提示主机容量不足,下面就用脚本来不停刷就行了
六、部署脚本
**终于可以部署脚本来抢服务器了,请先获取PushDeer账号Key(用于推送成功通知),相关自建PushDeer请访问GitHub项目(PushDeer)
6.1 抢购脚本
在root目录下新建一个terraform.sh
cd /root
vi terraform.sh
写入以下内容
#!/bin/bash
path='/opt/terraform-learning/'
FIND_FILE="/root/terraform.log" #日志文件位置
FIND_STR="Apply complete!"
cd $path &&
while true
do
echo 'yes' | terraform apply -lock=false
sleep 1s
done
给Shell脚本赋予执行权限:
chmod +x terraform.sh
使用以下命令后台执行脚本
nohup ./terraform.sh >> terraform.log 2>&1 &
如何结束脚本?
使用以下命令结束脚本
pkill terraform
6.2 监控通知脚本
在root目录下新建一个monitor_terraform.sh
cd /root
vi monitor_terraform.sh
写入以下内容
#! /bin/bash
FIND_FILE="/root/terraform.log" #日志文件位置
FIND_STR="Apply complete!"
red='\033[31m'
green='\033[32m'
yellow='\033[33m'
plain='\033[0m'
while true
do
time=$(date +"%Y-%m-%d %H:%M:%S")
grep -q "${FIND_STR}" ${FIND_FILE}
if [ $? -eq 0 ];then
curl "PushDeer服务器地址/message/push?pushkey=请输入你的Key&text=新加坡抢到机子了!"
#示例 curl "http://127.0.0.1:8800/message/push?pushkey=PDU1TXU0ZAuP4gTw7&text=新加坡抢到机子了!"
pkill terraform
#当抢到时自动停止自动抢购脚本
exit 0
else
echo -e "${green}${time} 未抢到ARM机子!${plain}"
sleep 5s
fi
done
给Shell脚本赋予执行权限:
chmod +x monitor_terraform.sh
使用以下命令后台执行脚本
nohup ./monitor_terraform.sh >> monitor_terraform.log 2>&1 &
如何结束脚本?
使用以下命令结束脚本
pkill monitor_terraform
自动脚本好像挂了
没有啊,还可以继续刷,刚刚抢到一个
–form ‘text=服务器创建成功!’
–form ‘chat_id=你的tg id’
–form ‘parse_mode=markdown’
老哥 我想请问下这 填写tg id 还是机器人id 是通知抢到货的消息吗?
对的,通过tg机器人通知
–form ‘chat_id=你的tg id’ 这就只填写机器人id 就好了吗?
对的,只需要填写你的tg id,纯数字的id
明白了 谢谢你
if [ grep -c “$FIND_STR” $FIND_FILE -ne ‘0’ ]
此行写错了判断行数,导致无法正常识别是否成功创建,现已修复
一般多久能抢到,能在后台看到吗?
一般看有没有货,放货的话差不多就一天,没货的话差不多一周
机器人一定要抢到了才来消息吗?没有一点提示像石沉大海的感觉
目前发现,莫名其妙发不出去消息,可以忽略机器人了
抢到后没有密钥怎么办?
抢到了机器人也不发信息了吗,那怎么知道是否成功了呢?
目前更新了消息推送脚本,通过pushdeer进行推送
之前的脚本除了没有推送,还是正常能用的吗,用之前那个脚本抢了3个周了,还是没反应。不知道是脚本失效还是没抢到。
之前的脚本除了没有推送以外,功能都是正常使用的
那怎么停用老脚本,换这个新脚本呢,或者换只增加消息推送,抢机器的脚本继续运行呢?
停止旧的抢购脚本请使用pkill terraform命令
如果只添加监控脚本的话,请按照6.2的步骤进行
老脚本抢到后还会自动停止吗?
当你使用监控脚本时,检测到抢到以后,会自动发送通知并停止抢购脚本,最后自身退出
抢到后没有密钥怎么办?
在第五步 Terraform环境初始化 中提到过需要保存私钥,如果没有私钥的话,建议使用其他服务器挂载引导卷进行dd系统,或者删机重开
最近比较忙所以就没有怎么管理博客,目前闲下来了稍微有些时间管理和更新博客了
博主你好,请问一下,最后面那个推送的脚本里面的服务器地址怎么填的
看了GitHub的文档说明已经配置好了,现在就等抢到机器了
博主你好,我在 测试oci配置是否正确 这一步中 提示的信息和你的不一样
提示:
“code”: “NotAuthenticated”,
“message”: “The required information to complete authentication was not provided or was incorrect.. Please visit https://docs.oracle.com/en-us/iaas/Content/API/References/apierrors.htm to learn more about this error code”,
我就卡在这里了
过一会又可以了
我也是卡在这里,报401,请问你是怎么解决的呢
过了一会就好了,可能Oracle那边添加api密钥要过一会才会生效吧