The missing cron CLI for AWS Cloudwatch and Lambda
Do you have an AWS account? Great. Do you want to run cron jobs in the cloud?
Cronyo provides A simple CLI to manage your cron jobs on AWS.
In addition, Cronyo can instantly deploy a couple of super-simple, helpful and secure lambda functions to perform HTTP GET/POST requests for you. So if you need to trigger any webhooks on schedule, an AWS account and Cronyo is all you need :)
Key Features:
- Simple command line interface to manage cron jobs (much simpler than aws events put-rules, aws lambda add-permission, aws events put-targets, Cloudformation, or Terraform)
- Pre-built AWS Lambda functions for simple HTTP GET/POST requests, or use your own lambdas.
- Cost Effective (you'll need a TON of cron rules to worry about costs).
- Simple but Secure (HTTP GET/POST include an HMAC signature so you can validate the request is genuine).
- Easy deployment of lambda functions using
cronyo deploy. No need to twiddle with AWS. - Easily add, delete, enable, disable and export (to yaml) your cron rules.
read the blog post: Simple and Secure Cron using AWS Lambda
Cronyo takes the next step, and provides an automated solution with a CLI.
- import from yaml
- export/import from crontab-esque files
- add other lambdas?
You will need an AWS account with the aws cli installed. Then run:
$ pip install cronyo
$ cronyo configure
$ cronyo deploy # (optional, if you want to use the http POST/GET lambdas)It will automatically configure two AWS Lambda functions (cronyo-http_post and cronyo-http_get)
cronyo --help- prints a help screen.cronyo configure- opens your editor so you can edit the config.json file. Use it to update your namespace and signing key.cronyo preflight- runs preflight checks to make sure you have access to AWS.cronyo deploy- deploys the code and configs to AWS automatically.cronyo export- exports all existing cron rules to yamlcronyo export --prefix- exports all existing cron rules starting withprefixto yamlcronyo export --search- exports all existing cron rules matching the search string anywhere in the namecronyo add http_get '{"url": "https://example.com"}' --cron "5 4 * * ? *"- sends an HTTP GET request to example.com at 4:05am every daycronyo disable cronyo-24a0b5504111d9b1d797- disables cron with the namecronyo-24a0b5504111d9b1d797cronyo enable cronyo-24a0b5504111d9b1d797- enables cron with the namecronyo-24a0b5504111d9b1d797cronyo delete cronyo-24a0b5504111d9b1d797- deletes cron with the namecronyo-24a0b5504111d9b1d797cronyo update http_get '{"url": "https://example.com"}' --cron "5 4 * * ? *" --name myrule- updates an existing rule
cronyo creates a name for your cron jobs automatically (unless a custom name is specified). Names are required unique identifiers, and cannot be changed after creation (this is AWS limitation). Names can only contain certain characters.
cronyo comes with a (configurable) namespace -- cronyo by default. You can change the default using cronyo configure.
cronyo supports cron or rate expressions. See the AWS
docs for specific info.
Note that --cron "<expr>" must be surrounded by quotes, however --rate won't work with quotes. This is because cron
expressions include characters like * which mess-up the CLI input.
cronyo add http_get '{"url": "https://example.com"}' --cron "5 4 * * ? *"will send an HTTP GET request to example.com at 4:05am every daycronyo add http_post '{"url": "https://example.com"}' --rate 5 minuteswill send an HTTP POST request to example.com every 5 minutescronyo add http_post '{"url": "https://example.com", "headers": {"User-Agent": "007"}, "cookies": {"biscuit": "oreo"}, "params": {"a": "b"}, "data": {"key": "value"}}' --rate 5 minuteswill send an HTTP POST with custom cookies, headers, URL params and form data.cronyo add arn:aws:lambda:us-east-1:313623401231:function:cronyo-http_post:live '{"url": "https://example.com"}' --rate 5 minuteswill call a lambda function with a specific ARN with given event paramaters every 5 minutescronyo add http_post '{"url": "https://example.com"}' --rate 5 minutes --name my-cron-jobusing--nameto provide a custom name (see Names above)cronyo add http_post '{"url": "https://example.com"}' --rate 5 minutes --description "describe your cron job"using--descriptionto provide a description for the job.
Cronyo is distributed under the MIT license. All 3rd party libraries and components are distributed under their respective license terms.
Copyright (C) 2020 Yoav Aner
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.