mirror of
https://github.com/openfaas/faas.git
synced 2025-06-11 01:36:47 +00:00
Update intro
This commit is contained in:
parent
bb8ccb2e40
commit
f239033aa5
@ -1,21 +1,33 @@
|
|||||||
Watchdog
|
Watchdog
|
||||||
==========
|
==========
|
||||||
|
|
||||||
The FaaS watchdog is designed to marshal a HTTP request between your public HTTP URL and a individual function.
|
The watchdog provides an unmanged and generic interface between the outside world and your function. Its job is to marshal a HTTP request accepted on the API Gateway and to invoke your chosen appliaction. The watchdog is a tiny Golang webserver - see the diagram below for how this process works.
|
||||||
|
|
||||||
Every FaaS function should embed this binary and uses it as its entrypoint. It is in effect a tiny web-server or shim that will fork your desired process for every HTTP request.
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Create a new function:
|
> Above: a tiny web-server or shim that forks your desired process for every incoming HTTP request
|
||||||
|
|
||||||
- [x] Use an existing or a new Docker image
|
Every function needs to embed this binary and use it as its `ENTRYPOINT` or `CMD`, in effect it is the init process for your container. Once your process is forked the watchdog passses in the HTTP request via `stdin` and reads a HTTP response via `stdout`. This means your process does not need to know anything about the web or HTTP.
|
||||||
|
|
||||||
|
Here's how to create a new function:
|
||||||
|
|
||||||
|
**Create a function via the CLI**
|
||||||
|
|
||||||
|
The FaaS CLI will allow you to abstract all Docker knowledge away, you just have to write a handler file in one of the supported runtimes.
|
||||||
|
|
||||||
|
[Read a tutorial on the FaaS CLI](https://github.com/alexellis/faas-cli)
|
||||||
|
|
||||||
|
**Package your function**
|
||||||
|
|
||||||
|
Here's how to package your function if you don't want to use the CLI or have existing binaries or images:
|
||||||
|
|
||||||
|
- [x] Use an existing or a new Docker image as base image `FROM`
|
||||||
- [x] Add the fwatchdog binary from the [Releases page](https://github.com/alexellis/faas/releases) via `curl` or `ADD https://`
|
- [x] Add the fwatchdog binary from the [Releases page](https://github.com/alexellis/faas/releases) via `curl` or `ADD https://`
|
||||||
- [x] Set an `fprocess` environmental variable with the function you want to run for each request
|
- [x] Set an `fprocess` environmental variable with the function you want to run for each request
|
||||||
- [x] Expose port 8080
|
- [x] Expose port 8080
|
||||||
- [x] Set the `CMD` to `fwatchdog`
|
- [x] Set the `CMD` to `fwatchdog`
|
||||||
|
|
||||||
Example Dockerfile:
|
Example Dockerfile for an `echo` function:
|
||||||
|
|
||||||
```
|
```
|
||||||
FROM alpine:3.5
|
FROM alpine:3.5
|
||||||
@ -29,9 +41,9 @@ ENV fprocess="/bin/cat"
|
|||||||
CMD ["fwatchdog"]
|
CMD ["fwatchdog"]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Implementing the a healthcheck**
|
**Implementing a Docker healthcheck**
|
||||||
|
|
||||||
Docker swarm will keep your function out of the DNS-RR / IPVS pool if the task (container) is not healthy.
|
A Docker Healthcheck is not required but is best practice. It will make sure that the watchdog is ready to accept a request before forwarding requests via the API Gateway. If the function or watchdog runs into an unrecoverable issue Swarm will also be able to restart the container.
|
||||||
|
|
||||||
Here is an example of the `echo` function implementing a healthcheck with a 5-second checking interval.
|
Here is an example of the `echo` function implementing a healthcheck with a 5-second checking interval.
|
||||||
|
|
||||||
@ -43,15 +55,15 @@ ENV fprocess="cat /etc/hostname"
|
|||||||
HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1
|
HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1
|
||||||
```
|
```
|
||||||
|
|
||||||
The watchdog process creates a .lock file in `/tmp/` on starting its internal Golang HTTP server. `[ -e file_name ]` is shell to check if a file exists.
|
The watchdog process creates a .lock file in `/tmp/` on starting its internal Golang HTTP server. `[ -e file_name ]` is shell to check if a file exists. With Windows Containers this is an invalid path so you may want to set the `suppress_lock` environmental variable.
|
||||||
|
|
||||||
Swarm tutorial on Healthchecks:
|
Read my Docker Swarm tutorial on Healthchecks:
|
||||||
|
|
||||||
* [Test-drive Docker Healthcheck in 10 minutes](http://blog.alexellis.io/test-drive-healthcheck/)
|
* [Test-drive Docker Healthcheck in 10 minutes](http://blog.alexellis.io/test-drive-healthcheck/)
|
||||||
|
|
||||||
**Environmental overrides:**
|
**Environmental overrides:**
|
||||||
|
|
||||||
A number of environmental overrides can be added for additional flexibility and options:
|
The watchdog can be configured through environmental variables. You must always specifiy an `fprocess` variable.
|
||||||
|
|
||||||
| Option | Usage |
|
| Option | Usage |
|
||||||
|------------------------|--------------|
|
|------------------------|--------------|
|
||||||
@ -117,6 +129,8 @@ With a body:
|
|||||||
Without a body:
|
Without a body:
|
||||||
* GET
|
* GET
|
||||||
|
|
||||||
|
> The API Gateway currently supports the POST route for functions.
|
||||||
|
|
||||||
**Content-Type of request/response**
|
**Content-Type of request/response**
|
||||||
|
|
||||||
By default the watchdog will match the response of your function to the "Content-Type" of the client.
|
By default the watchdog will match the response of your function to the "Content-Type" of the client.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user