背景
在进行从腾讯云到亚马逊云中国区迁移的前期试验时,我们发现,亚马逊云中国区并没有提供免费体验账号,每一份资源都需要付费。为了降低实验成本,我们通常需要启动多个 EC2 实例来测试。然而,关闭这些实例时如果不加以控制,就会产生额外费用。
为此,我们编写了一个脚本,实现每天自动关闭 EC2 实例。因为在亚马逊云中,停止 EC2 实例不会收费,只有少量存储费用,所以通过这个脚本可以有效节省开销。
在这个过程中,我们将设置一台 EC2 实例来运行定时任务,定期关闭其它实例。接下来,我们将介绍如何通过 AWS CLI 和 cron
配置定时关闭 EC2 实例。
步骤 1:安装 AWS CLI
首先,在目标 EC2 实例上安装 AWS CLI 工具。这台机器使用 Ubuntu 12.04 操作系统,因此可以通过包管理器一键安装:
$ sudo apt-get install awscli
安装完成后,需要配置 AWS CLI 工具以便认证。执行以下命令进行配置:
$ aws configure
AWS Access Key ID [None]: YOUR_ACCESS_KEY
AWS Secret Access Key [None]: YOUR_SECRET_KEY
Default region name [None]: cn-north-1
Default output format [None]: json
AWS Access Key ID
和AWS Secret Access Key
需要替换为你的 AWS 账户凭证。Default region name
填写cn-north-1
(即 AWS 中国区区域)。输出格式设置为 json
。
如果你不想每次手动配置认证,可以通过 AWS CLI 配置文件进行管理,具体方法参见 AWS CLI 配置文档。
步骤 2:编写关闭实例脚本
在 EC2 实例上创建一个脚本文件,命名为 stopinstance.sh
,并在文件中加入以下内容:
#!/bin/bash
aws ec2 stop-instances --instance-ids i-68726951 i-965ca276 i-377a620e i-d35fa133 i-fe5ca21e
这条命令会停止指定的 EC2 实例,--instance-ids
后面跟着的是你需要停止的 EC2 实例 ID。请根据实际情况替换这些 ID。
为了让脚本可执行,需要修改文件权限:
$ chmod +x stopinstance.sh
步骤 3:设置定时任务(Cron)
接下来,我们使用 cron
定时任务来定期执行 stopinstance.sh
脚本。运行以下命令编辑 cron
配置:
$ crontab -e
在打开的编辑器中,添加以下定时任务配置:
* 18 * * * ~/stopinstance.sh >> ~/shutdown.log 2>&1
这条规则表示在每天的 18:00(下午 6 点)执行 stopinstance.sh
脚本。>> ~/shutdown.log 2>&1
将脚本的标准输出和错误输出都保存到shutdown.log
文件中,方便后续查看执行情况。
Cron 配置说明:
*
:代表分钟字段,这里是每分钟。18
:代表小时字段,即每天的 18 点。*
:代表日期字段,每月的任意一天。*
:代表月份字段,任意月份。*
:代表星期字段,任意星期几。
注意:使用
cron
执行任务时,请确保机器的时区设置与期望的执行时间一致。如果需要调整时区,可以修改系统的时区配置。
步骤 4:验证与监控
完成配置后,可以通过以下命令手动测试脚本,确保它能够正常停止指定实例:
$ ./stopinstance.sh
查看 shutdown.log
文件,确认脚本的执行情况:
$ cat ~/shutdown.log
如果一切正常,脚本将会在每天的 18:00 自动运行,关闭指定的 EC2 实例,确保不产生不必要的费用。
总结
通过使用 AWS CLI 和 cron
定时任务,我们可以轻松实现 EC2 实例的定时关闭。这样不仅能有效节省云资源费用,还可以确保在不需要实例时,停止它们以降低开销。通过这种方式,我们能够更好地管理 AWS 资源,并确保项目在实验阶段的高效与低成本运行。
提示:定时任务中的时区配置非常重要。如果 EC2 实例部署在不同区域,确保时区一致,避免出现意外的时间偏差。
0 Comments