Hacker News new | comments | show | ask | jobs | submit login
Show HN: Deploy a Go Lambda to Ping a Site in 20 Seconds (github.com)
75 points by frankcash 9 months ago | hide | past | web | favorite | 32 comments

Kind 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/

Much nicer example I think and no AWS tax / lock-in.

What are the main benefits of using OpenFaaS except for vendor lock in? 99% of the time, I want a kinesis stream, or S3 event to start my lambdas, which it seems I would have to wire up myself

An 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...

actually, 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).

HEAD is still less wasteful and just as effective.

You 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.

Looks 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!

1. 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!

Pretty 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).

url could be set via an environmental variable: https://docs.aws.amazon.com/lambda/latest/dg/go-programming-...

I could definitely look into this, thanks for the suggestion!

I raised a PR to just that: https://github.com/frankcash/go-lambda-ping/pull/1

The URL is set in terraform.tfvars, which then gets passed to the lambda resource.

I'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?

I built a python version recently, it uses the serverless library to deploy to AWS. https://github.com/nickromano/serverless-ping

What's approx. monthly cost of running something like this on lambda e.g. every 5 minutes?

If you want to access it over HTTP you will have to pay for "AWS API Gateway" which is not free.

API 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/

This is amazing! Does anyone know a good resource to learn more about Lambda and how to setup small projects like this?

I’m working on a comprehensive resource for running Lambda Go projects here:


The guide on periodicnworker functions is how I would build this pinger.


Dumb question, never used lambda before, how often is this triggered? I can’t tell at first look through the code.

The 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.

Ah, so you ping the lambda to have it ping the coded in website?

Or you could invoke the lambda on a schedule using Cloudwatch


Yup! Didn't want to include the TF to do the scheduling (for simplicity) but I could add it if people want.

.. as a service!

Nice! Is there a use case for this, or is this just a go/terraform example? Either way, pretty cool!

I 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.

That's a bit long really.

That's not the function invocation time (i.e. cold start etc) but rather time to build and deploy (and then maybe imvoke?)

Ah, I'm sorry then :( .

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact