构建无服务器的零售解决方案以实现无限过道在 AWS 上 架构博客

创建无服务器零售解决方案以实现无限货架功能

作者:Sandeep Mehta 和 Shashank Shrivastava,2023 年 8 月 7 日在 Amazon API Gateway、Amazon CloudFront、架构、AWS Lambda

关键要点

传统的零售模式通常需要管理库存和供应链,但这种模式不适合所有商家。无尽货架商业模式为精简运营的零售商提供了一种解决方案,使他们能够避免收入损失。客户可以轻松地在零售店下单并将商品直接送到他们选择的地方。

在传统商业模式中,零售商需要从头到尾处理订单履行过程,包括库存管理、拥有或租赁仓库以及管理供应链。但许多零售商并没有能力存储额外的库存。

“无尽货架”商业模式是针对那些希望在店内保留足够库存同时避免收入损失的精简零售商的一种替代方案。无尽货架也被称为代发货,即通过与产品合作伙伴的自动化集成来履行订单。这种自动化使得客户在商店货架上找不到特定商品时,能够通过平板电脑或自助终端下单。

为什么无尽货架的概念对企业和客户同样重要?

这意味着:

企业不再需要存储超出货架深度的产品。终端客户可以轻松在商店下单,并将商品直接送到他们的家中或其他地方。

让我们更深入地探讨这些概念。

解决方案概述

当客户在商店中寻找货架上缺货的商品时,店员可以使用平板电脑扫描 SKU 码。自助终端的体验也类似,客户可以通过输入商品名称自行查找商品。

例如,如果客户光顾一家只在货架上存放商品的服装店,并发现店内缺少他们所需尺寸或颜色的商品,店员可以扫描 SKU 码以检查该商品是否可供发货。该应用程序随后向商店的产品合作伙伴发起请求。请求返回可供展示给客户的产品,客户可以选择下单。一旦订单处理完毕,该商品将由合作伙伴直接履行。

无服务器无尽货架参考架构

图 1 说明了如何为订单处理架构搭建无服务器无尽货架架构。

构建无服务器的零售解决方案以实现无限过道在 AWS 上 架构博客

蓝鲸加速器免费版下载

网站托管与安全

我们将在 Amazon Simple Storage ServiceAmazon S3上托管无尽货架网站,并使用 Amazon CloudFront 来提升响应速度。CloudFront 是一个高性能的内容分发网络CDN服务。它通过在边缘提供访问和缓存静态内容来降低与其他 AWS 服务的延迟,而动态内容则通过 Amazon API Gateway 集成提供。动态内容后的 Web 应用防火墙WAF用于防御网络威胁,例如跨站脚本XSS和 SQL 注入。

Amazon Cognito 用于管理应用程序用户池,并提供安全性以确保访问应用程序的用户。

解决方案流程

下面详细审查架构步骤。

步骤 1 店员使用用户名和密码登录应用程序。当店员或客户扫描条形码/SKU 时,执行以下流程。

步骤 2 前端应用程序将 SKU 码转换为产品编号,并调用 Get Item API。

步骤 3 被调用的 getItem AWS Lambda 函数处理 API 调用。

这种架构设计模式支持多方集成,并允许代码的重用。设计可以与任何可以通过 API 集成的合作伙伴进行集成,与特定合作伙伴相关的转换则使用 Lambda 函数单独构建。

我们将使用 Amazon DynamoDB 存储合作伙伴信息的元数据,例如 partnerid、partnername 和 partner APIs。

步骤 4 getItem Lambda 函数从 DynamoDB 表中检索合作伙伴信息,并使用 Transformation Lambda 函数转换请求主体。

步骤 5 getItem Lambda 函数调用正确的合作伙伴 API。当收到请求时,合作伙伴 API 将根据 SKU 码返回可用产品及其详细信息,例如尺寸、颜色和其他变量参数,并附带图片。

此外,API 还提供与所选产品相似的可用产品链接,以便客户了解其他选择。这有助于零售客户提高收入,并提供货架上暂时缺乏的产品。

客户随后可以从可供选择的产品中进行选择。在选择具有特定参数如颜色、尺寸、数量等的正确产品后,客户将其加入购物车并开始结账过程。客户输入送货地址和付款信息以完成订单。

步骤 6 订单被推送到名为 createorderqueue 的 Amazon Simple Queue ServiceAmazon SQS队列。Amazon SQS 提供了一种简单可靠的方式,让客户通过队列解耦和连接微服务。

步骤 7 Amazon SQS 确保数据不丢失,订单由订单 API 从队列中处理。createOrder Lambda 函数从 Amazon SQS 中提取消息并进行处理。

步骤 8 订单 API 主体随后被转换为上下游合作伙伴 API 期望的消息格式。此转换可以由在“partnerstable”DynamoDB 表配置中定义的 Lambda 函数完成。

步骤 9 通过从 partnerstable 获取的端点 URL 调用合作伙伴 API。当订单下达后,合作伙伴 API 响应会返回确认信息。在收到确认后,订单详情将被写入另一个 DynamoDB 表 orderstable。

步骤 10 通过 DynamoDB Streams,可以追踪对 DynamoDB 表的任何插入或更新操作。

步骤 11 一个通知 Lambda 函数调用 Amazon Simple Email ServiceAmazon SES来通知商店订单活动。

步骤 12 处理后的订单与客户的 ERP 应用程序集成,以完成对账过程。这可以通过调用数据同步的 Amazon EventBridge 规则实现。

前置条件

在本次操作中,您需要以下前置条件:

拥有具有管理员访问权限的 AWS 账户AWS 命令行接口AWS CLI。请参阅 AWS CLI 入门。Nodejs16x和 npm。有关更多信息,请参阅 下载和安装 Nodejs 和 npm。awscdk2x。请参阅 AWS CDK 入门。已克隆并配置在本地计算机上的 GitHub serverlesspartnerintegrationendlessaisle 仓库。

构建

本地安装 CDK 库:

bashnpm install g awscdk

构建基础设施包以创建可部署的资产,这些资产将用于 CloudFormation 模板。

bashcd serverlesspartnerintegrationendlessaisle ampamp sh buildsh

生成 CloudFormation 模板

要查看 CDK 生成的 CloudFormation 模板,请执行以下步骤。

bashcd servelesspartnerintegrationendlessaisle/infrastructurecdk bootstrap ampamp cdk synth

检查 “cdkout” 目录中的输出文件。AWS CloudFormation 模板已为您在 AWS 账户中创建可部署。

部署

使用 CDK 部署/重新部署到 AWS 账户。

设置通知的商店电子邮件地址。如果商店想要接收客户订单的更新,他们可以将 STOREEMAIL 值设置为其商店电子邮件。您将在此帐户中收到一封验证电子邮件,之后 SES 可以向您发送订单更新。

bashexport STOREEMAIL=dummytest@someemailcom # 将您的电子邮件放在这里。

根据 此开发者指南 中找到的信息设置 AWS 凭证。

现在运行:

bashcdk deploy

测试

部署后,CDK 将输出可用于测试的 Amazon CloudFront URL。

如果您在设置期间提供了 STOREEMAIL 地址,则请在收件箱中确认来自 Amazon SES 的电子邮件链接。这将允许向您的收件箱发送订单通知。使用以下命令创建一个示例用户,以便您登录网站。

bashaws cognitoidp admincreateuser userpoolid ltREACTAPPUSERPOOLIDgt username ltUserNamegt userattributes Name=emailValue=ltUSEREMAILgt Name=emailverifiedValue=true

用户将通过电子邮件收到密码。在网页浏览器中打开 CloudFront URL。用用户名和密码登录网站。系统将要求您重置密码。探索不同的功能,例如合作伙伴查找、产品搜索、下订单和订单查找。

清除资源

为了避免未来产生费用,在不需要时删除资源并删除 CloudFormation 堆栈。

以下命令将删除您在 AWS 账户中创建的基础设施和网站堆栈:

bashcdk destroy

结论

在这篇博客中,我们展示了如何为零售客户构建一个店内数字渠道。现在您可以使用本文描述的架构构建无尽货架应用程序,并与您的合作伙伴进行集成,或者 联系 加速您的零售业务。

更多阅读

AWS 上的无服务器架构构建无服务器网页应用程序无服务器架构设计示例AWS 零售案例研究

Sandeep Mehta

Sandeep 是 AWS 的高级解决方案架构师,隶属于分析 TFC。Sandeep 热衷于帮助客户设计现代云架构,并推荐适合其需求的服务。他了解业务用例并将其转化为安全、可扩展和弹性的 IT 解决方案。他专注于构建无服务器架构,解决客户痛点。

Shashank Shrivastava

Shashank Shrivastava 是 AWS 的高级云应用程序架构师及无服务器 TFC 成员。他热衷于帮助客户和开发人员构建现代化的无服务器架构应用程序。作为一名务实的开发人员和博主,他倡导社区驱动的学习与技术分享。他的兴趣包括软件架构、开发工具和无服务器计算。

使用 AWS Step Functions 批量更新 Amazon DynamoDB 表关键要点本文介绍了一种利用 AWS Step Functions 进行 Amazon DynamoDB 表批量更...