AWS Architecture Blog
Build a serverless retail solution for endless aisle on AWS
In traditional business models, retailers handle order-fulfillment processes from start to finish—including inventory management, owning or leasing warehouses, and managing supply chains. But many retailers aren’t set up to carry additional inventory.
The “endless aisle” business model is an alternative solution for lean retailers that are carrying enough in-store inventory while wanting to avoid revenue loss. Endless aisle is also known as drop-shipping, or fulfilling orders through automated integration with product partners. Such automation results in a customer’s ability to place an order on a tablet or kiosk when they cannot find a specific product of their choice on in-store shelves.
Why is the endless aisle concept important for businesses and customers alike? It means that:
- Businesses no longer need to stock products more than shelf deep.
- End customers can easily place an order at the store and get it shipped directly to their home or place of choice.
Let’s explore these concepts further.
Solution overview
When customers are in-store and looking to order items that are not available on shelves, a store associate can scan the SKU code on a tablet. The kiosk experience is similar, where the customer can search for the item themselves by typing in its name.
For example, if a customer visits a clothing store that only stocks the items on shelves and finds the store is out of a product in their size, preferred color, or both, the associate can scan the SKU and check whether the item is available to ship. The application then raises a request with a store’s product partner. The request returns the available products the associate can show to the customer, who can then choose to place an order. When the order is processed, it is directly fulfilled by the partner.
Serverless endless aisle reference architecture
Figure 1 illustrates how to architect a serverless endless aisle architecture for order processing.
Website hosting and security
We’ll host the endless aisle website on Amazon Simple Storage Service (Amazon S3) with Amazon CloudFront for better response time. CloudFront is a content delivery network (CDN) service built for high performance and security. CloudFront can reduce the latency to other AWS services by providing access at the edge and by caching the static content, while dynamic content is provided by Amazon API Gateway integration for our use case. A Web Application Firewall (WAF) is used after CloudFront for protection against internet threats, such as cross-site scripting (XSS) and SQL injection.
Amazon Cognito is used for managing the application user pool, and provides security for who can then access the application.
Solution walkthrough
Let’s review the architecture steps in detail.
Step 1. The store associate logs into the application with their username and password. When the associate or customer scans the bar code/SKU, the following process flow is executed.
Step 2. The front-end application translates the SKU code into a product number and invokes the Get Item API.
Step 3. An invoked getItem AWS Lambda function handles the API call.
This architecture’s design pattern supports multiple partner integration and allows reusability of the code. The design can be integrated with any partner with the ability to integrate using APIs, and the partner-specific transformation is built separately using Lambda functions.
We’ll use Amazon DynamoDB for storing partner information metadata—for example, partner_id, partner_name, partner APIs.
Step 4. The getItem Lambda function fetches partner information from an DynamoDB table. It transforms the request body using a Transformation Lambda function.
Step 5. The getItem Lambda function calls the right partner API. Upon receiving a request, the partner API returns the available product (based on SKU code) with details such as size, color, and any other variable parameter, along with images.
It can also provide links to similar available products the customer may be interested in based on the selected product. This helps retail clients increase their revenue and offer products that aren’t available at a given time on their shelves.
The customer then selects from the available products. Having selected the right product with specific details on parameters such as color, size, quantity, and more, they add them to the cart and begin the check-out process. The customer enters their shipping address and payment information to place an order.
Step 6. The orders are pushed to an Amazon Simple Queue Service (Amazon SQS) queue named create-order-queue. Amazon SQS provides a straightforward and reliable way for customers to decouple and connect micro-services together using queues.
Step 7. Amazon SQS ensures that there is no data loss and orders are processed from the queue by the orders API. The createOrder Lambda function pulls the messages from Amazon SQS and processes them.
Step 8. The orders API body is then transformed into the message format expected by the partner API. This transformation can be done by a Lambda function defined in the configuration in the ‘partners-table’ DynamoDB table.
Step 9. A partner API is called using the endpoint URL, which is obtained from the partners-table. When the order is placed, a confirmation will be returned by the partner API response. With this confirmation, order details are entered in another DynamoDB table called orders-table.
Step 10. With DynamoDB stream, you can track any insert or update to the DynamoDB table.
Step 11. A notifier Lambda function invokes Amazon Simple Email Service (Amazon SES) to notify the store about order activity.
Step 12. The processed orders are integrated with the customer’s ERP application for the reconciliation process. This can be achieved by Amazon Eventbridge rule that invokes a dataSync Lambda function.
Prerequisites
For this walkthrough, you’ll need the following prerequisites:
- An AWS account with admin access
- AWS Command Line Interface (AWS CLI). See Getting started with the AWS CLI.
- Node.js (16.x+) and npm. For more information, see Downloading and installing Node.js and npm.
- aws-cdk (2.x+). See Getting started with the AWS CDK.
- The GitHub serverless-partner-integration-endless-aisle repository, cloned, and configured on your local machine.
Build
Locally install CDK library:
npm install -g aws-cdk
Build an Infrastructure package to create deployable assets, which will be used in CloudFormation template.
cd serverless-partner-integration-endless-aisle && sh build.sh
Synthesize CloudFormation template
To see the CloudFormation template generated by the CDK, execute the below steps.
cd serveless-partner-integration-endless-aisle/infrastructure
cdk bootstrap && cdk synth
Check the output files in the “cdk.out” directory. AWS CloudFormation template is created for deployment in your AWS account.
Deploy
Use CDK to deploy/redeploy your stack to an AWS Account.
Set store email address for notifications. If a store wants to get updates about customer orders, they can set STORE_EMAIL value with store email. You will receive a verification email in this account, after which SES can send you order updates.
export STORE_EMAIL=”dummytest@someemail.com” - Put your email here.
Set up AWS credentials with the information found in this developer guide.
Now run:
cdk deploy
Testing
After the deployment, CDK will output Amazon Cloudfront URL to use for testing.
- If you have provided STORE_EMAIL address during the set up, then approve the email link received from Amazon SES in your inbox. This will allow order notifications to your inbox.
- Create a sample user by using the following command, that you can use to login to the website.
aws cognito-idp admin-create-user --user-pool-id <REACT_APP_USER_POOL_ID> --username <UserName> --user-attributes Name="email",Value="<USER_EMAIL>" Name="email_verified",Value=true
- The user will receive password in their email.
- Open CloudFront URL in a web browser. Login to the website with the username and password. It will ask you to reset your password.
- Explore different features such as Partner Lookup, Product search, Placing an order, and Order Lookup.
Cleaning up
To avoid incurring future charges, delete the resources, delete the cloud formation stack when not needed.
The following command will delete the infrastructure and website stack created in your AWS account:
cdk destroy
Conclusion
In this blog, we demonstrated how to build an in-store digital channel for retail customers. You can now build your endless aisle application using the architecture described in this blog and integrate with your partners, or reach out to accelerate your retail business.