
Show HN: Deploy a Go Lambda to Ping a Site in 20 Seconds - frankcash
https://github.com/frankcash/go-lambda-ping
======
alexellisuk
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/](https://blog.alexellis.io/first-faas-python-function/)

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

~~~
dblooman
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

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

~~~
laci27
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).

~~~
giancarlostoro
HEAD is still less wasteful and just as effective.

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

~~~
frankcash
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!

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

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

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

------
ericfrederich
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?

------
nickromano
I 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)

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

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

~~~
misframer
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/](https://aws.amazon.com/api-
gateway/pricing/)

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

~~~
nzoschke
I’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-f...](https://github.com/nzoschke/gofaas/blob/master/docs/worker-
functions.md)

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

~~~
shironineja
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.

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

~~~
mali9
Or you could invoke the lambda on a schedule using Cloudwatch

[https://docs.aws.amazon.com/lambda/latest/dg/with-
scheduled-...](https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-
events.html)

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

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

~~~
frankcash
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.

------
tamrix
That's a bit long really.

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

