In our example, we will assume that there are three content types named “Books,” “Videos,” and “All”. We will set up a system such that whenever an entry is created or updated, the webhook will invoke a Lambda function that will create or update the corresponding entry, respectively, in the “All” content type.
Having such a system in place immensely enhances search queries operations. So instead of performing different search queries on “Books” and “Videos,” you can simply perform such queries in a single REST API request in “All” content type.
- Basic knowledge of AWS Lambda
- Working knowledge of AWS API Gateways
- Access to the AWS environment
- Contentstack account
Set up Lambda Webhook Listener
Setting up an AWS Lambda Webhook Listener is a four-step procedure:
Create an AWS Lambda Function
To get notified when the event is triggered, you need to create the AWS Lambda function as shown below:
- Login to your AWS Management Console, select AWS Lambda Service from the service list.
- Click on the Create Function button, and then the Author from Scratch option.
- Configure you lambda based on your requirements. Choose Node.js as your run-time language.
Note: You can use any language instead of Node.js. You can also add triggers to your lambda to push an event to SNS when the lambda is invoked.
- AWS Lambda offers an inline code editor. Here, you will write the code for the task that we going to perform here. To get an example code, contact our support team.
Note: You can either write your lambda code here. Another option is to write the lambda code on your machine and then load it in the code editor. The inline editor has the basic code written, you can replace it with your own code.
- In the Lambda function handler and role, keep the index.handler as Handler and for the Role, choose an existing role or create a new role from template(s).
- Review your setting and click on the Create Function option if everything you entered is correct.
Now that you have configured your lambda, let's move on and configure the AWS API Gateways.
Set up API Gateway
For your Lambda to be accessible publicly through an HTTP POST, you need to configure the AWS API Gateway using your function as the backend for the API as shown below:
- Log in to AWS Management Console and select API Gateways from the services list.
- Click on the Getting started or Create API button (depending on whether you have already an API configured or not).
- From the available options, select New API. Enter the name and description of your API.
- Click on Actions in the Resources column, and select Create Method.
- From the resultant dropdown, Select POST and click on the checkmark.
- Select Lambda Function as the integration type for this endpoint.
- Select the Lambda Region, and then type in the name of your Lambda Function.
Note: The region into which your Lambda is deployed isn’t easily identifiable when you’re deploying your Lambda, so you might have to do a little hunting.
- Click on the Save button. You’ll get a notification which asks you to confirm that this API will be granted permission to invoke your Lambda function.
- Click OK to grant the permission.
Deploy Your API
To make your API ready to use, you need to deploy your API.
- From the Actions drop-down, select Deploy API.
- Select New Stage in the Deployment stage and enter prod (or anything you like to identify this stage) in the Stage name.
- Click on the Deploy button.
Your API is now deployed and you will get a URL, which you can use to invoke the APIs.
Configure a Webhook in Contentstack
Now to trigger the event on any update on the entry, you will have to set up a Webhook in Contentstack.
- Log in to your Contentstack account, click on the Settings cog icon and select Webhooks.
- Click on + New Webhook.
- Enter the name for your Webhook, for example, AWS-Webhook Listener.
- In the URL to notify field, enter the URL to be notified when the event is triggered. This URL is the one which you generated when you deployed your APIs (as shown in the above section).
- Inside the When section, you need to create conditions for your Books and Videos content types as shown below:
For Books content type
For Videos content type
This implies that if any entry inside the Books and Videos content types is created, updated, or deleted, a webhook will be triggered to invoke the AWS Lambda function.
- Click on the Save button to save your webhook settings.
Now try creating or updating an entry in Books or Videos content types. You should see the corresponding changes in the “All” content type.