- Notifications
You must be signed in to change notification settings - Fork168
FaaS (Function as a service) framework for writing portable Node.js functions
License
GoogleCloudPlatform/functions-framework-nodejs
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
An open source FaaS (Function as a Service) framework based onExpressfor writing portable Node.js functions -- brought to you by the Google Cloud Functions team.
The Functions Framework lets you write lightweight functions that run in manydifferent environments, including:
- Google Cloud Functions
- Your local development machine
- Cloud Run andCloud Run for Anthos
- Knative-based environments
The framework allows you to go from:
/** * Send "Hello, World!" *@param req https://expressjs.com/en/api.html#req *@param res https://expressjs.com/en/api.html#res */exports.helloWorld=(req,res)=>{res.send('Hello, World!');};
To:
curl http://my-url# Output: Hello, World!
All without needing to worry about writing an HTTP server or complicated requesthandling logic.
Watchthis video to learn more about the Node Functions Framework.
- Spin up a local development server for quick testing
- Invoke a function in response to a request
- Automatically unmarshal events conforming to theCloudEvents spec
- Portable between serverless platforms
Add the Functions Framework to yourpackage.json
file usingnpm
.
npm install @google-cloud/functions-framework
Create an
index.js
file with the following contents:exports.helloWorld=(req,res)=>{res.send('Hello, World');};
Run the following command:
npx @google-cloud/functions-framework --target=helloWorld
Openhttp://localhost:8080/ in your browser and seeHello, World.
Create a
package.json
file usingnpm init
:npm init
Create an
index.js
file with the following contents:constfunctions=require('@google-cloud/functions-framework');functions.http('helloWorld',(req,res)=>{res.send('Hello, World');});
Now install the Functions Framework:
npm install @google-cloud/functions-framework
Add a
start
script topackage.json
, with configuration passed viacommand-line arguments:"scripts":{"start":"functions-framework --target=helloWorld"}
Use
npm start
to start the built-in local development server:npm start...Serving function...Function: helloWorldURL: http://localhost:8080/
Send requests to this function using
curl
from another terminal window:curl localhost:8080# Output: Hello, World
Build a container from your function using the Functionsbuildpacks:
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=http \ --env GOOGLE_FUNCTION_TARGET=helloWorld \ my-first-function
Start the built container:
docker run --rm -p 8080:8080 my-first-function# Output: Serving function...
Send requests to this function using
curl
from another terminal window:curl localhost:8080# Output: Hello, World!
TheNode.js 10 runtime on Google Cloud Functionsis based on the Functions Framework. On Cloud Functions, the Functions Frameworkis completely optional: if you don't add it to yourpackage.json
, it will beinstalled automatically.
After you've written your function, you can simply deploy it from your localmachine using thegcloud
command-line tool.Check out the Cloud Functions quickstart.
After you've written your function, added the Functions Framework and updated yourstart
script inpackage.json
, deploy it to Cloud Run withgcloud run deploy
. Check out theCloud Run quickstart for Node.js.
If you want even more control over the environment, you candeploy to Cloud Run for Anthos. With Cloud Run for Anthos, you can run your function on a GKE cluster, which gives you additional control over the environment (including use of GPU-based instances, longer timeouts and more).
Cloud Run and Cloud Run for Anthos both implement theKnative Serving API. The Functions Framework is designed to be compatible with Knative environments. Just build and deploy your container to a Knative environment.
You can configure the Functions Framework using command-line flags orenvironment variables. If you specify both, the environment variable will beignored.
Command-line flag | Environment variable | Description |
---|---|---|
--port | PORT | The port on which the Functions Framework listens for requests. Default:8080 |
--target | FUNCTION_TARGET | The name of the exported function to be invoked in response to requests. Default:function |
--signature-type | FUNCTION_SIGNATURE_TYPE | The signature used when writing your function. Controls unmarshalling rules and determines which arguments are used to invoke your function. Default:http ; accepted values:http orevent orcloudevent |
--source | FUNCTION_SOURCE | The path to the directory of your function. Default:cwd (the current working directory) |
You can set command-line flags in yourpackage.json
via thestart
script.For example:
"scripts":{"start":"functions-framework --target=helloWorld"}
The Functions Framework can unmarshall incomingGoogle Cloud Functionsevent payloads todata
andcontext
objects.These will be passed as arguments to your function when it receives a request.Note that your function must use theevent
-style function signature:
exports.helloEvents=(data,context)=>{console.log(data);console.log(context);};
To enable automatic unmarshalling, set the function signature type toevent
using a command-line flag or an environment variable. By default, the HTTPsignature will be used and automatic event unmarshalling will be disabled.
For more details on this signature type, check out the Google Cloud Functionsdocumentation onbackground functions.
The Functions Framework can unmarshall incomingCloudEvents payloads to acloudevent
object.It will be passed as an argument to your function when it receives a request.Note that your function must use thecloudevent
-style function signature:
constfunctions=require('@google-cloud/functions-framework');functions.cloudEvent('helloCloudEvents',(cloudevent)=>{console.log(cloudevent.specversion);console.log(cloudevent.type);console.log(cloudevent.source);console.log(cloudevent.subject);console.log(cloudevent.id);console.log(cloudevent.time);console.log(cloudevent.datacontenttype);});
More advanced guides and docs can be found in thedocs/
folder.
Contributions to this library are welcome and encouraged. SeeCONTRIBUTING for more information on how to get started.
About
FaaS (Function as a service) framework for writing portable Node.js functions
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.