背景

在进行从腾讯云到亚马逊云中国区迁移的前期试验时,我们发现,亚马逊云中国区并没有提供免费体验账号,每一份资源都需要付费。为了降低实验成本,我们通常需要启动多个 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 configureAWS Access Key ID [None]: YOUR_ACCESS_KEYAWS Secret Access Key [None]: YOUR_SECRET_KEYDefault region name [None]: cn-north-1Default 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/bashaws 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 实例部署在不同区域,确保时区一致,避免出现意外的时间偏差。

Categories: 解决方案

0 Comments

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注