Build a serverless retail solution for endless aisle on AWS
AWS Architecture BlogBuild a serverless retail solution for endless aisle on AWSby Sandeep Mehta and Shashank Shrivastava | on07 AUG 2023| inAmazon API Gateway,Amazon CloudFront,Architecture,AWS Lambda|Permalink|Comments|ShareIn 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 overviewWhen 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 architectureFigure 1 illustrates how to architect a serverless endless aisle architecture for order processing.Figure 1. Building endless aisle architecture for order processingWebsite hosting and securityWe’ll host the endless aisle website onAmazon Simple Storage Service(Amazon S3) withAmazon CloudFrontfor 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 byAmazon API Gatewayintegration 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 Cognitois used for managing the application user pool, and provides security for who can then access the application.Solution walkthroughLet’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 getItemAWS Lambdafunction 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 useAmazon DynamoDBfor 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 anAmazon 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 invokesAmazon 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 byAmazon Eventbridgerule that invokes a dataSync Lambda function.PrerequisitesFor this walkthrough, you’ll need the following prerequisites:An AWS account with admin accessAWS Command Line Interface (AWS CLI). SeeGetting started with the AWS CLI.Node.js (16.x+) and npm. For more information, seeDownloading and installing Node.js and npm.aws-cdk (2.x+). SeeGetting started with the AWS CDK.The GitHubserverless-partner-integration-endless-aislerepository, cloned, and configured on your local machine.BuildLocally install CDK library:npm install -g aws-cdkBuild an Infrastructure package to create deployable assets, which will be used in CloudFormation template.cd serverless-partner-integration-endless-aisle && sh build.shSynthesize CloudFormation templateTo see the CloudFormation template generated by the CDK, execute the below steps.cd serveless-partner-integration-endless-aisle/infrastructurecdk bootstrap && cdk synthCheck the output files in the “cdk.out” directory. AWS CloudFormation template is created for deployment in your AWS account.DeployUse 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 foundin this developer guide.Now run:cdk deployTestingAfter 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=trueThe 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 upTo 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 destroyConclusionIn 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, orreach outto accelerate your retail business.Further readingServerless on AWSBuild a Serverless Web ApplicationServerless Architecture Design ExamplesAWS retail case studiesSandeep MehtaSandeep is a Senior Solutions Architect and part of Analytics TFC at AWS. Sandeep has passion to help customers design modern cloud architectures and recommend the right services for their requirements. He understands business use cases and translates them to secured, scalable, and resilient IT solutions. His focus is to build serverless architecture for solving customer pain points.Shashank ShrivastavaShashank Shrivastava is a Senior Cloud Application Architect and Serverless TFC member at AWS. He is passionate about helping customers and developers build modern applications on serverless architecture. As a pragmatic developer and blogger, he promotes community-driven learning and sharing of technology. His interests are software architecture, developer tools, and serverless computing.CommentsView Comments
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 […]
Sandeep Mehta
Amazon API Gateway Amazon CloudFront Architecture AWS Lambda