Serving
Restate services can run in two ways: as an HTTP endpoint or as AWS Lambda functions.
Creating an HTTP endpoint
- Create the endpoint
- Bind one or multiple services to it.
- Listen on the specified port (default
9080
) for connections and requests.
import * as restate from "@restatedev/restate-sdk";restate .endpoint() .bind(myService) .bind(myVirtualObject) .bind(myWorkflow) .listen();
Customizing the HTTP2 server
If you need to manually control or customize the HTTP2 server, you can call http2Handler()
instead of listen()
, and then use it to manually instantiate the HTTP server:
const http2Handler = restate .endpoint() .bind(myService) .bind(myVirtualObject) .bind(myWorkflow) .http2Handler();const httpServer = http2.createServer(http2Handler);httpServer.listen();
Creating a Lambda handler
To register your service as a Lambda function, use the /lambda
import
component and change the endpoint into a Lambda handler.
import * as restate from "@restatedev/restate-sdk/lambda";export const handler = restate .endpoint() .bind(myService) .bind(myVirtualObject) .bind(myWorkflow) .handler();
Have a look at the deployment section for guidance on how to deploy your services on AWS Lambda.
Run on Lambda without handler changes
The implementation of your services and handlers remains the same for both deployment options.
Validating request identity
SDKs can validate that incoming requests come from a particular Restate instance. You can find out more about request identity in the Security docs
restate .endpoint() .bind(myService) .bind(myVirtualObject) .bind(myWorkflow) .withIdentityV1("publickeyv1_w7YHemBctH5Ck2nQRQ47iBBqhNHy4FV7t2Usbye2A6f") .listen();