有没有办法使用 Heroku 调度程序在一天中的特定时段启动和停止网络测功机?比如工作时间 2 个测功机,晚上只有 1 个测功机?
我真的很想避免将普通用户/通行证凭据放入应用程序本身,因此我正在寻找一种安全的方法来执行此操作(除了每天为每个应用程序手动执行此操作之外)。直接使用“heroku ps:scale web=2”自然会很好,但据我所知,这是不支持的。
感谢您提前提供反馈...
您可以通过创建使用 Heroku API 的脚本来按计划扩展 heroku dynos。然后,您在 Procfile 中创建一个条目并通过 Heroku Scheduler 插件调用它。方法如下:
首先,您需要将 'heroku' python 模块添加到您的
requirements.txt
:
heroku==0.1.2
接下来,创建一个包含您的 API 密钥的配置变量,以便您的脚本可以使用该 API。
heroku 配置:添加 HEROKU_API_KEY=your_api_key_string
您可以在 您的 heroku 账户页面找到您的 API 密钥。
现在您将能够编写一个 Python 脚本来扩展您的测功机。这是一个非常基本的脚本,它接受测功机的数量作为命令行参数。
import os
import sys
import heroku
"""Scale heroku web processes using the heroku python API."""
# you may want to add better argument processing, use argparse, etc.
dynos = int(sys.argv[1])
cloud = heroku.from_key(os.environ.get('HEROKU_API_KEY'))
app = cloud.apps['your_app_name']
try:
# you may want to add a maximum dyno check here to prevent costly mistakes ;)
webproc = app.processes['web']
webproc.scale(dynos)
except KeyError:
# note: scaling to 0 dynos or attempting to scale up if 0 web dynos exist
# both throw this error. Make sure you have at least one dyno.
print >> sys.stderr, "Could not scale web processes - are there 0 web dynos running?"
然后您可以在 Heroku Scheduler 网页中定义整个任务,或者在 Procfile 中定义它并从网页中调用 Procfile 进程名称。我更喜欢后者,因为它可以轻松更新或更改流程,而无需登录 Heroku 的网站。
因此,在 Procfile 中创建条目:
scale_up: python scale.py 2
scale_down: python scale.py 1
然后安排它们:
瞧!您的测功机现在将在一天中的指定时间放大或缩小。
--
请注意,一旦您在计划程序网页上创建了计划任务,您就无法编辑其运行的时间,但如果您创建新任务,您可以设置时间日期,然后删除旧任务。
注 2: 如果您尝试缩小到 0 个 dyno,或者如果当前存在 0 个 web dyno,则尝试扩大规模,heroku python API 似乎会抛出 KeyError。为了避免这两种情况,只要不要缩小到 0 dyno 即可。
它没有内置到平台中,但应该很容易通过调度程序并使用您的 API 令牌来实现。
现在使用 Heroku 插件插件 crontogo 即可轻松完成 https://elements.heroku.com/addons/crontogo
注意:这是一个付费插件,截至 2021 年 10 月仅在美国/欧洲地区可用
参考https://crontogo.com/blog/how-to-schedule-heroku-cli-commands/
设置 2 个职位
第一项工作“Dyno 缩小”:
cron 表达式:0 18 * * 1-5
命令:heroku dyno:scale web=1:Standard-1X
此作业将在工作日(周一至周五)下午 6 点运行,并将应用程序缩减至 1 个 Standard-1X dyno。
第二项工作“Dyno 放大”:
cron 表达式:0 9 * * 1-5
命令:heroku dyno:scale web=2:Standard-1X
此作业将在工作日(周一至周五)上午 9 点运行,并将应用程序扩展到 2 个 Standard-1X 测功机。
您还可以通过 heroku 调度程序来执行此操作,与 cron-to-go 相比,它是免费的。只需填写 [your-app-name] 和 [your-token]。可以通过命令行界面和以下命令生成令牌:
heroku authorizations:create
curl -n -X PATCH https://api.heroku.com/apps/[your-app-name]/formation -d '{ "updates": [ { "quantity": 1, "size": "standard-1X", "type": "web" } ] }' -H "Content-Type: application/json" -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer [your-token]"