export const meta = { title: `Express server`, description: `How to deploy an Express server to AWS using AWS Amplify`, }; In this guide you'll learn how to deploy an [Express](https://expressjs.com/) web server complete with routing. ### Initializing the Amplify project Initialize a new Amplify project: ```sh amplify init # Follow the steps to give the project a name, environment name, and set the default text editor. # Accept defaults for everything else and choose your AWS Profile. ``` ### Creating the API and function Next, create the API and web server. To do so, you can use the Amplify `add` command: ```sh amplify add api ? Please select from one of the below mentioned services: REST ? Provide a friendly name for your resource to be used as a label for this category in the project: myapi ? Provide a path (e.g., /items): /items (or whatever path you would like) ? Choose a Lambda source: Create a new Lambda function ? Provide a friendly name for your resource to be used as a label for this category in the project: mylambda ? Provide the AWS Lambda function name: mylambda ? Choose the function runtime that you want to use: NodeJS ? Choose the function template that you want to use: Serverless express function ? Do you want to access other resources created in this project from your Lambda function? N ? Do you want to invoke this function on a recurring schedule? N ? Do you want to edit the local lambda function now? N ? Restrict API access: N ? Do you want to add another path? N ``` The CLI has created a few things for you: - API endpoint - Lambda function - Web server using [Serverless Express](https://github.com/awslabs/aws-serverless-express) in the function - Some boilerplate code for different methods on the `/items` route ### Updating the function code Let's open the code for the server. Open __amplify/backend/function/mylambda/src/index.js__. In this file you will see the main function handler with the `event` and `context` being proxied to an express server located at `./app.js` (do not make any changes to this file): ```js const awsServerlessExpress = require('aws-serverless-express'); const app = require('./app'); const server = awsServerlessExpress.createServer(app); exports.handler = (event, context) => { console.log(`EVENT: ${JSON.stringify(event)}`); awsServerlessExpress.proxy(server, event, context); }; ``` Next, open __amplify/backend/function/mylambda/src/app.js__. Here, you will see the code for the express server and some boilerplate for the different HTTP methods for the route you declared. Find the route for `app.get('/items')` and update it to the following: ```js // amplify/backend/function/mylambda/src/app.js app.get('/items', function(req, res) { const items = ['hello', 'world'] res.json({ success: 'get call succeed!', items }); }); ``` ### Deploying the service To deploy the API and function, you can run the `push` command: ```sh amplify push ``` import js0 from "/src/fragments/guides/api-rest/js/express-api-call.mdx"; import ios1 from "/src/fragments/guides/api-rest/ios/express-api-call.mdx"; import android2 from "/src/fragments/guides/api-rest/android/express-api-call.mdx"; From here, you may want to add additional path. To do so, run the update command: ```sh amplify update api ``` From there, you can add, update, or remove paths. To learn more about interacting with REST APIs using Amplify, check out the complete documentation [here](/lib/restapi/getting-started). The API endpoint is located in the `aws-exports.js` folder. You can also interact directly with the API using this URL and the specified path: ```sh curl https://.execute-api..amazonaws.com//items ```