5 ms·
Show HN: Deploy a Go Lambda to Ping a Site in 20 Seconds
- tamrix 9y agoThat's a bit long really.
- sonaltr 9y agoLooks nice! 1. Why go? (nothing wrong with it in itself, but last I had checked (before go on lambda was released)...Python was supposed the fastest of the bunch available) 1 a. Python can be embedded into a CF template...meaning deployment is slightly nicer (maybe not recommended though?) 2. I think the ability to change the time (20 secs) based on an SSM parameter would be cool!
- frankcash 9y ago1. I chose go since Lambda support was recently added for it. I have a lot of experience using Python and Node.js with Lambdas. 2. Sorry, I include the "20 Seconds" as a symbol of how easy it is to deploy!
- ohyoutravel 9y agoNice! Is there a use case for this, or is this just a go/terraform example? Either way, pretty cool!
- frankcash 9y agoI created this as a terraform example and chose go since it was recently added to Lambda. I have a personal use case of this: pinging my heroku "dev" tier instance so it stays alive a bit longer.
- isuckatcoding 9y agoPretty neat. Instead of hard coding the url, you could provide it as parameter to the main. Pretty sure it’s possible (at least using the node and c# Lambda it was).
- frankcash 9y agoI could definitely look into this, thanks for the suggestion!
- davewongillies 9y agoI raised a PR to just that: https://github.com/frankcash/go-lambda-ping/pull/1 https://github.com/frankcash/go-lambda-ping/pull/1 The URL is set in terraform.tfvars, which then gets passed to the lambda resource.
- RileyJames 9y agourl could be set via an environmental variable: https://docs.aws.amazon.com/lambda/latest/dg/go-programming-model-env-variables.html https://docs.aws.amazon.com/lambda/latest/dg/go-programming-...
- dpeck 9y agoDumb question, never used lambda before, how often is this triggered? I can’t tell at first look through the code.
- shironineja 9y agoThe lambda doesn't have a schedule within because doing so would split the concerns poorly; rather you would hit this lambda on your own schedule.
- dpeck 9y agoAh, so you ping the lambda to have it ping the coded in website?
- shironineja 9y ago.. as a service!
- mali9 9y agoOr you could invoke the lambda on a schedule using Cloudwatch https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-...
- frankcash 9y agoYup! Didn't want to include the TF to do the scheduling (for simplicity) but I could add it if people want.
- laci27 9y agoThis is amazing! Does anyone know a good resource to learn more about Lambda and how to setup small projects like this?
- nzoschke 9y agoI’m working on a comprehensive resource for running Lambda Go projects here: https://github.com/nzoschke/gofaas https://github.com/nzoschke/gofaas The guide on periodicnworker functions is how I would build this pinger. https://github.com/nzoschke/gofaas/blob/master/docs/worker-functions.md https://github.com/nzoschke/gofaas/blob/master/docs/worker-f...
- joosters 9y agoAn actual ping would be more impressive :) Perhaps to be less wasteful, the HTTP request should be a HEAD instead of GET? There’s little point downloading a whole page if you are going to just throw away the contents...
- laci27 9y agoactually, it's not. We create a special page, with PHP and one with nodejs, that just replies '1', so besides status, we also get a notice if nodejs or PHP malfunctions (which does happen on some servers, 1-2 time a year).
- giancarlostoro 9y agoHEAD is still less wasteful and just as effective.
- mbrumlow 9y agoYou can still do all that with HEAD, the only difference is you don't return a message body, thus saving 1 byte plus a few in the actual header you would not need any more. For example; you would do a head request and node.js and php would still need to be configured to handled the HEAD request but instead of its handler returning "1" it would simply return.
- alexellisuk 9y agoKind of a shame to have to hack on the source-code and inject a new URL - would have been better to have used a parameter. Anyway - here's how to do it with OpenFaaS and Python from August 2017 :-) https://blog.alexellis.io/first-faas-python-function/ https://blog.alexellis.io/first-faas-python-function/
- ivanhoe 9y agoWhat's approx. monthly cost of running something like this on lambda e.g. every 5 minutes?
- codegladiator 9y agoZero http://serverlesscalc.com/ http://serverlesscalc.com/
- alexellisuk 9y agoIf you want to access it over HTTP you will have to pay for "AWS API Gateway" which is not free.
- misframer 9y agoAPI Gateway isn't much at that rate. (1 month) / (5 minutes) = 8760 "$3.50 per million API calls received, plus the cost of data transfer out, in gigabytes." [0] 8760 * ($3.50 / 1000000) = $0.03. [0] https://aws.amazon.com/api-gateway/pricing/ https://aws.amazon.com/api-gateway/pricing/
- ericfrederich 9y agoI'm curious about how AWS handles lambdas written in Go. Go produces statically linked Linux binaries. What is it about Go that is supported? What is it about binaries written in other languages that isn't supported?
- nickromano 9y agoI built a python version recently, it uses the serverless library to deploy to AWS. https://github.com/nickromano/serverless-ping https://github.com/nickromano/serverless-ping