Amazon ECS 可以跑 cron job 了...

Amazon ECS 上面固定時間跑某些東西,以前得自己用 AWS Lambda 帶 (或是自己架,不過這樣就要自己考慮 High Availability 架構了),現在則是直接支援:「Amazon ECS Now Supports Time and Event-Based Task Scheduling」。

Previously, you could start and stop Amazon ECS tasks manually, but running tasks on a schedule required writing and integrating an external scheduler with the Amazon ECS API.

Now you can schedule tasks through the Amazon ECS console on fixed time intervals (e.g.: number of minutes, hours, or days). Additionally, you can now set Amazon ECS as a CloudWatch Events target, allowing you to launch tasks by using CloudWatch Events.

AWS 的 scheduled events 可以設定為一分鐘一次了

Twitter 上看到 AWS 的 scheduled events 可以設定為一分鐘一次了:

在 AWS 的相關文件上也發現相關的限制都拿掉了:「Using AWS Lambda with Scheduled Events」。

實際測試也發現沒問題了,之前用 */1 會被擋下來,現在是 ok 的:

aws events put-rule --schedule-expression 'cron(*/1 * * * ? *)' --name test

cron 裡面的百分比符號 % 有特殊意義...

在試了一陣子後才發現的問題,crontab 裡的百分比符號 % 是特殊字元:「escaping double quotes and percent signs (%) in cron」。

取自 Debian 上的 crontab(5)

Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

有點奇怪就是了,因為有 echo 可以用才對?

AWS Lambda 大躍進

AWS Lambda 丟出了一卡車超級基本的功能 (所以超級實用):「AWS Lambda Update – Python, VPC, Increased Function Duration, Scheduling, and More」。

首先是 AWS Lambda 可以跑在 VPC 裡了,這使得 Lambda 可以呼叫內部的 HTTP API 而不需要對 internet 打洞再用其他方式保護。

再來是 AWS Lambda 支援 Python 2.7 了,什麼?你問為什麼不是支援 Python 3?(頭轉過去)

然後可以跑 Cron 了!可以跑 Cron 了!可以跑 Cron 了!(很重要所以要說三次)