简介
不久前,我分享了一篇文章,总结了五个适合初学者的 AWS 实践项目,帮助大家入门云计算。你可以在这里 重温那篇文章。
在这篇文章中,我将介绍七个项目,帮助你在云计算中不断成长。根据我自己工作场所遇到的常见工具、技术和概念策划了这些项目。每个项目专注于特定类型的服务、技术或资源。我尽量让它们尽可能多样化。我希望在构建这些项目时,你能获得一些关键的实践经验,以支持你自己的云计算之旅。让我们开始吧!
Project 1:创建一个书店应用并探索 AWS 数据库
概述
我们开始一个项目,让您可以立即与最终结果互动。得益于 AWS 提供的 CloudFormation 模板,基础设施即代码(IaC)使您只需几次点击即可配置一个书店演示应用程序。书店应用程序使用各种专用数据库,如 DynamoDB、ElasticSearch、ElastiCache for Redis 和 Neptune,以提供多种用例,如产品目录、搜索功能、畅销书列表和社交推荐列表。
总体而言,这个项目充满了乐趣和 AWS 资源的实际应用。
学习成果
查看上面的架构图,该项目中部署了多个 AWS 资源,使您能够在几个关键领域获得全面的学习体验。
首先,利用 DynamoDB 作为产品目录的持久记录系统,展示了 NoSQL 数据库设计、可扩展性和高可用性的原则。集成 Amazon Elasticsearch 增强了搜索功能,教您如何高效地索引和查询数据。使用 DynamoDB Streams 与 AWS Lambda 进行 Elasticsearch 索引的异步更新,引入了事件驱动架构和无服务器计算概念。实施 Elasticache for Redis 来管理畅销书列表,展示了内存数据存储技术和性能优化。使用 Amazon Neptune 进行社交推荐,提供了图数据库和个性化内容交付的见解。
此外,利用 API Gateway 和 Lambda 处理各种 API 调用,突出了 RESTful API 设计和无服务器应用程序开发。
总的来说,这个项目让你掌握使用各种 AWS 服务构建强大、可扩展和高性能云应用的实用技能。
助你开启征程的资源
额外提示:
- 确保在删除项目时成功销毁 CloudFormation 堆栈!为避免额外的资源费用,请验证 CloudFormation 堆栈是否成功销毁。如果没有,请手动删除各个实例,尤其是 Neptune。
Project 2:构建一个回合制游戏并学习事件驱动架构
概述
事件驱动架构是一种软件架构范式,其中应用程序的流程由事件决定,例如用户操作、数据状态的变化或传感器输出。这些事件触发特定的操作、过程或工作流。这个关于事件驱动架构的入门项目允许你使用亚马逊 DynamoDB 和亚马逊简单通知系统(SNS)构建一个多人回合制游戏,名为 Nim。这个项目允许你:
- 利用 DynamoDB 作为持久的记录系统来存储游戏状态
- 使用 AWS Lambda 打包和执行函数代码,而无需配置底层资源
- 利用 API Gateway 和 Lambda 处理各种基于 HTTP 的 API 调用
- 实现亚马逊 SNS 进行短信消息发送,以提醒用户游戏中的重要事件
- 集成亚马逊 Cognito 进行用户注册和身份验证
- 使用 Cloud9 作为基于云的 IDE 来执行和交互程序代码
学习成果
这个实践项目提供了关于事件驱动架构和无服务器计算的宝贵实践经验。
通过利用 DynamoDB 作为持久的记录系统,您将学习如何设计和管理可扩展、低延迟的数据库,以支持实时应用程序。使用 AWS Lambda 和 API Gateway 教会您如何构建和部署无服务器的基于 HTTP 的 API,而无需管理底层基础设施。集成 Amazon SNS 展示了如何实现通知以增强用户参与度,同时 Amazon Cognito 引入了强大的用户身份验证和注册功能。
最后,使用 Cloud9 可以实现本地代码的实施(在 AWS 内),并提供有关在基于云的 IDE 中开发和测试的见解。
入门资源:
额外提示:
- SNS 处于沙盒模式。当您按照教程的说明进行操作时,您可能会在设置您的手机号码与 SNS 时遇到困难,因为它现在默认设置为沙盒模式。要克服这个问题,您需要先注册您的手机号码。您可以从 AWS 文档中了解更多信息。
- 教程中的 Lambda Nodejs 版本可能已经过时。只需用更新版本的 Nodejs 更新应用程序代码(在教程的 Model 1 中)。
Project 3:构建一个 QuickSight 仪表板并学习 BI 工具
概述
AWS QuickSight 是一个可扩展的无服务器商业智能(BI)服务,允许用户从多种数据源创建和共享交互式仪表板和可视化。它还使用户能够在没有广泛数据科学专业知识的情况下获得可操作的洞察。在这个项目中,我们使用 Amazon QuickSight 分析和可视化航班数据,并练习使用上述 QuickSight 的内置功能,以获得有关数据的洞察。特别是,我们创建以下图表:
- 条形图
- 地理空间图
- 桑基图
- 饼图
- 基于机器学习的预测图表
学习成果
通过这个 AWS QuickSight 项目,您可以在与数据分析相关的几个关键领域获得宝贵的技能,例如数据摄取和准备、数据可视化、深入分析和数据过滤、仪表板创建和共享、AWS 集成(包括与内部源如 S3、RDS、Athena 等以及外部源如 MySQL、Salesforce 等的集成),并获得机器学习的实际应用经验(这是一个日益热门的话题)。
入门资源:
额外提示:
AWS 技能构建者教程,确实需要花费一些费用(查看订阅价格)。为了保持经济实惠,您可以选择获得他们的 7 天免费试用,或者按照我下面提供的两个替代项目链接。第一个是由 Tech With Lucy 创建的项目。第二个是来自 AWS QuickSight 社区的教程。我已在下面添加了这两个链接:
Project 4:构建一个待办事项网络服务并学习 API
概述:
API(应用程序编程接口)是不同软件系统之间的中介,允许它们交换数据或功能。在软件开发中,API 通过提供预定义的协议和端点来简化集成,使开发人员能够访问诸如身份验证、数据存储或机器学习等服务,而无需了解底层实现。这个简单的动手项目让我们体会到 API 的实用性,通过构建一个简单的 API 并将其集成到一个简单的 Web 应用程序中。
在这个项目中,我们创建了一个通知系统,用户在一个简单的前端网页中输入待办消息,选择通知类型(短信或电子邮件),然后点击发送。后端集成了 API 网关、Lambda 和 SNS,然后将消息以文本形式发送到您的手机或发送到您的电子邮件。
学习成果:
该项目是学习、构建和部署简单 API(API 网关)的绝佳入门,并将其与其他 AWS 服务(如 AWS Lambda 和 SNS)集成。在这个项目中,API 网关充当前端(用户输入)和后端逻辑(处理此逻辑并将其发送到另一个下游过程——Amazon SNS 的 Lambda 函数)之间的中介。该项目还帮助您学习其他常用 AWS 服务的基础知识,如 Lambda 和 SNS。
Additional Tips: 额外提示:
如果您想了解更多关于 API 开发的内容,跟随更详细的教程,或创建一个更复杂的待办事项应用程序,我在下面提供了所有 3 个资源的链接:
Project 5:构建一个聊天机器人应用程序并探索对话式人工智能
概述:
AWS Lex 是一项完全托管的服务,用于构建基于语音和文本的对话界面,采用与亚马逊 Alexa 相同的深度学习技术。它通过提供自然语言理解 (NLU) 和自动语音识别 (ASR),简化了聊天机器人和虚拟助手的创建。
这个项目让我们能够欣赏像亚马逊 Lex 这样的工具的强大,通过构建一个简单的食品订购聊天机器人。这个聊天机器人允许您订购和自定义汉堡,具有以下特点:
- 从 3 个不同的特许经营店订购汉堡
- 每个特许经营店都有 3 种独特的配料
- 以 3 种不同的尺寸订购汉堡
- 从配菜和饮料的选择中进行选择
- 聊天机器人执行上述逻辑(即,如果您从相应的特许经营店选择了不正确的配料,机器人将自动提示您错误信息)
学习成果:
构建这个聊天机器人让你接触到一个简单但有效的介绍,旨在设计和构建对话式人工智能(这是一个越来越热门的话题)。Amazon Lex 使你能够轻松添加理解意图、保持上下文的人工智能,并构建聊天界面,而无需担心硬件或基础设施。使用 Lex 还为你提供了设计对话式人工智能的实践经验,并理解自然语言处理如何提高用户参与度。
入门资源:
额外提示:
如果你想跟随更多有趣和高级的 Amazon Lex 和聊天机器人构建教程,你可以按照下面的教程构建语言翻译应用程序或酒店预订用例:
Project 6:构建一个容器化应用程序并学习微服务架构
图片来源:https://github.com/dockersamples/example-voting-app
概述:
容器化应用程序是包含所有必要组件(如代码、运行时、库和依赖项等)的软件包,打包成轻量级、可移植的容器。当使用容器化应用程序构建微服务时,它们是小型、独立可部署的服务,专注于更大系统中的特定功能。该项目使我们能够欣赏容器化应用程序和微服务架构的实用性,通过创建一个简单的投票应用程序,该应用程序建立在多个运行在 AWS EC2 实例上的 Docker 容器之上。
学习成果:
这是一个很好的入门项目,可以让你接触到容器、微服务和运行容器化应用程序。它允许你构建一个简单的 Web 应用程序,作为 Docker 容器的组合,而不是一个单体应用程序。在这个应用程序中,每个微服务都在自己的容器中运行,从而实现可扩展性、隔离性和易于部署。这种架构非常有用,因为它允许开发人员构建、测试、部署和扩展单个服务,而不会影响整个应用程序。最终,这种架构为创建可扩展、弹性和高度模块化的云原生应用程序提供了一个强大的解决方案。
入门资源
额外提示
如果您想了解更多关于实现微服务的信息,或者如果您想构建一个更高级的项目,我已将以下两个资源的链接附上:
Project 7:构建一个图像处理应用程序并学习无服务器架构
概述
我们的最终项目涉及构建一个简单的图像处理应用程序,展示无服务器计算的实用性和便利性。无服务器计算允许开发人员构建和运行应用程序,而无需管理底层服务器基础设施。在这个项目中,我们创建了一个简单的应用程序,允许我们自动将原始图像调整为 5 个不同分辨率的缩略图。
学习成果:
这个项目是学习使用 AWS 服务进行无服务器计算的绝佳起点,同时也是练习常见的 AWS 集成,如 AWS Lambda 和 S3,以实现所需的输出。我们探讨了 Lambda 函数如何通过特定的 AWS 事件(在这种情况下,是在 S3 桶中上传的对象)自动触发,并且我们还了解了 S3 事件通知——这是我在工作场所观察到的许多架构中的一种常见做法。我们还欣赏了 Python 的图像处理能力,这些能力通过 PIL(Python 图像库)或 Pillow 等库提供,可以将图像调整为多种分辨率。
入门资源
- Adrian Cantrill's Video Tutorial Adrian Cantrill 的视频教程
- Adrian Cantrill's GitHub Project Adrian Cantrill 的 GitHub 项目
额外提示:
如果您想了解更多关于 S3 事件通知或与 Lambda 的集成,或者如果您想构建一个稍微复杂一点的项目,我在下面提供了两个链接:
结论
我一直认为 hands-on 项目和现实世界的经验是获取实用、现实、工作技能时最有价值的老师。上面的这些项目帮助我巩固了自己在作为一名云解决方案架构师薄弱领域的理解。我希望这些项目也能帮助大家在云计算领域的更多方面巩固你的理解。Cloud 是一个广阔的领域,拥有无尽的地平线,是非常值得大家去探索的。