AWS 专题学习 P9 (API Gateway、Cognito、Serverless SA)

news/2024/5/20 7:37:55 标签: aws, gateway, serverless

文章目录

  • 专题总览
  • API Gateway
    • API Gateway – 高级集成
    • API Gateway – AWS 服务集成
    • API Gateway - Endpoint Types
    • API Gateway – 安全
  • AWS Step Functions(AWS 步骤函数)
  • Amazon Cognito(认证服务)
    • Cognito User Pools (CUP) – 用户功能
    • Cognito User Pools (CUP) - 集成
    • Cognito Identity Pools(联合身份)
  • Serverless Architectures
    • 移动应用程序:MyTodoList
      • Mobile app: REST API layer
      • Mobile app: giving users access to S3
      • Mobile app: high read throughput, static data
      • Mobile app: caching at the API Gateway
      • 总结
    • Serverless 托管网站:MyBlog.com
      • Serving static content, globally
      • Serving static content, globally, securely
      • Adding a public serverless REST API
      • Leveraging DynamoDB Global Tables
      • User Welcome email flow![Screenshot 2023-08-06 at 22.14.37.png](https://img-blog.csdnimg.cn/img_convert/9b3090e73b6889ca628d9bae7fa97d3f.png)
      • Thumbnail Generation flow
      • 总结
    • Micro Services 架构
    • Micro Services Environment
    • Discussions on Micro Services
      • 软件更新的 offloading (卸载)
    • App 当前架构
      • 为什么选择 CloudFront?

专题总览

包含专题内容总览和系列博客目录
https://blog.csdn.net/weixin_40815218/article/details/135590291

API Gateway

AWS API Gateway 是一项 AWS 服务,它具有以下功能:

  • AWS Lambda + API Gateway => 无需管理基础架构的API管理
  • 支持 WebSocket 协议
  • 处理 API 版本控制(如v1、v2等)
  • 处理不同的环境(如开发、测试、生产等)
  • 处理安全性(身份验证和授权)
  • 创建 API 密钥,处理请求限流
  • 支持 Swagger / Open API 导入,快速定义API
  • 转换和验证请求和响应
  • 生成 SDK 和 API 规范
  • 缓存 API 响应

API Gateway – 高级集成

  • Lambda 函数
    • 调用 Lambda 函数
    • 可以便捷地借助 AWS Lambda,暴露 REST API
  • HTTP
    • 在后端暴露 HTTP 端点
    • 例子:内部 HTTP API,应用程序负载均衡器…
    • 为什么?添加速率限制、缓存、用户认证、API密钥等…
  • AWS服务
    • 通过 API 网关暴露任何 AWS API
    • 例子:启动 AWS Step Function 工作流程,向 SQS 发布消息
    • 为什么?添加身份验证,公开部署,速率控制…

API Gateway – AWS 服务集成

Kinesis Data Streams示例
Screenshot 2023-08-06 at 21.01.45.png

API Gateway - Endpoint Types

  • Edge-Optimized(默认):适用于全球客户
    • 请求通过 CloudFront 边缘位置路由(提高延迟)
    • API Gateway 仍位于一个区域中
  • 区域:
    • 适用于同一区域内的客户
    • 可以手动与 CloudFront 结合使用(更多对缓存策略和分发的控制)
  • 私有:
    • 只能通过 VPC 使用界面 VPC 端点(ENI)访问
    • 使用资源策略来定义访问

API Gateway – 安全

  • 用户身份验证通过
    • IAM 角色(适用于内部应用程序)
    • Cognito(用于外部用户身份认证 - 例如移动用户)
    • 自定义授权者(您自己的逻辑)
  • 通过与 AWS 证书管理器(ACM)集成实现自定义域名的HTTPS 安全性
    • 如果使用 Edge-Optimized 终端点,则证书必须位于us-east-1 区域
    • 如果使用Regional终端点,则证书必须位于 API Gateway 所在的区域
    • 必须在 Route 53 中设置 CNAME 或 A-别名记录

AWS Step Functions(AWS 步骤函数)

  • 可以构建无服务器的可视化工作流程,用于编排 Lambda 函数
  • 功能包括:顺序执行、并行执行、条件判断、超时处理、错误处理等
  • 可以与 EC2、ECS、本地服务器、API Gateway、SQS 队列等进行集成
  • 可以实现人工审批功能
  • 应用场景:订单处理、数据处理、Web应用程序等任何工作流程
    Screenshot 2023-08-06 at 21.48.41.png

Amazon Cognito(认证服务)

  • 为用户提供身份以与我们的Web或移动应用程序进行交互
  • Cognito 用户池:
    • 为应用程序用户提供登录功能
    • 与API Gateway和应用程序负载均衡器集成
  • Cognito 身份池(联合身份):
    • 为用户提供AWS凭证,使他们可以直接访问AWS资源
    • 与 Cognito 用户池集成作为身份提供者
  • Cognito 与 IAM 的比较:“数百个用户”,“移动用户”,“使用SAML进行身份验证”

Cognito User Pools (CUP) – 用户功能

  • 为您的 Web 和移动应用程序创建无服务器用户数据库
  • 简单登录:用户名(或电子邮件)/密码组合
  • 密码重置
  • 电子邮件和电话号码验证
  • 多因素身份验证(MFA)
  • 联合身份:来自 Facebook、Google、SAML 等的用户

Cognito User Pools (CUP) - 集成

  • CUP 可以与 API Gateway应用程序负载均衡器进行集成
    image.png

Cognito Identity Pools(联合身份)

  • 为“用户”获取身份,以获取临时的 AWS 凭证
  • 用户的来源可以是 Cognito 用户池、第三方登录等
  • 用户可以直接访问 AWS 服务,或通过 API Gateway 访问
  • 凭证所应用的 IAM 策略在 Cognito 中定义
  • 可以根据 user_id 进行细粒度控制进行自定义
  • 针对已验证和访客用户的默认 IAM 角色

Screenshot 2023-08-06 at 21.56.42.png

Cognito Identity Pools(CIP)允许在 DynamoDB 中实现行级别的安全性
Screenshot 2023-08-06 at 21.59.34.png

Serverless Architectures

移动应用程序:MyTodoList

我们希望创建一个具备以下要求的移动应用程序:

  • 以HTTPS的方式暴露为REST API
  • 采用无服务器架构
  • 用户应能直接与其在S3中的文件夹进行交互
  • 用户应通过托管的无服务器服务进行身份验证
  • 用户可以编写和阅读待办事项,但他们主要是阅读它们
  • 数据库应具备可伸缩性,并具备一定的高读取吞吐量

Mobile app: REST API layer

Screenshot 2023-08-06 at 22.04.33.png

Mobile app: giving users access to S3

Screenshot 2023-08-06 at 22.05.33.png

Mobile app: high read throughput, static data

Screenshot 2023-08-06 at 22.06.32.png

Mobile app: caching at the API Gateway

Screenshot 2023-08-06 at 22.07.11.png

总结

  • 无服务器 REST API: HTTPS、API Gateway、Lambda、DynamoDB
  • 使用 Cognito 通过 STS 生成临时凭证来访问带有受限策略的 S3 存储桶。应用程序用户可以通过这种方式直接访问 AWS 资源。这种模式可以应用于DynamoDB、Lambda 等。
  • 使用 DAX 在 DynamoDB 上缓存读取操作
  • 在 API Gateway 层级上缓存 REST 请求
  • 使用 Cognito 和 STS 进行身份验证和授权的安全性

Serverless 托管网站:MyBlog.com

  • 这个网站应该具备全球范围的可扩展性
  • 博客很少写入,但经常被读取
  • 网站的一部分是纯静态文件,另一部分是动态的 REST API
  • 尽可能实现缓存
  • 任何新订阅的用户都应该收到欢迎邮件
  • 博客中上传的任何照片都应该生成缩略图

Serving static content, globally

Screenshot 2023-08-06 at 22.12.06.png

Serving static content, globally, securely

Screenshot 2023-08-06 at 22.13.06.png

serverless_REST_API_142">Adding a public serverless REST API

Screenshot 2023-08-06 at 22.13.42.png

Leveraging DynamoDB Global Tables

Screenshot 2023-08-06 at 22.14.12.png

User Welcome email flowScreenshot 2023-08-06 at 22.14.37.png

Thumbnail Generation flow

Screenshot 2023-08-06 at 22.15.10.png

总结

  • 我们使用 CloudFront 和 S3 来分发静态内容。
  • REST API 采用无服务器架构,不需要 Cognito,因为是公开的。
  • 我们利用了全球 DynamoDB 表来全球提供数据服务。
  • (我们也可以使用 Aurora 全球数据库)
  • 我们启用了 DynamoDB Streams 来触发 Lambda 函数。
  • Lambda 函数具有 IAM 角色,可以使用 SES。
  • SES (Simple Email Service) 被用于以无服务器方式发送电子邮件。
  • S3 可以触发 SQS / SNS / Lambda 来通知事件。

Micro Services 架构

  • 我们希望转向微服务架构。
  • 许多服务直接使用 REST API 进行交互。
  • 每个微服务的架构可能因形式和结构而异。
  • 我们希望采用微服务架构,以便每个服务都有更精简的开发生命周期。

Micro Services Environment

Screenshot 2023-08-13 at 21.33.34.png

Discussions on Micro Services

  • 可以自由设计每个微服务
  • Synchronous patterns:API Gateway、负载均衡器
  • Asynchronous patterns:SQS、Kinesis、SNS、Lambda 触发器(S3)
  • 微服务面临的挑战:
    • 创建每个新微服务的重复开销。
    • 优化服务器密度/利用率的问题。
    • 同时运行多个版本的多个微服务的复杂性。
    • 客户端代码需求的增加,以与许多单独的服务集成。
  • 一些挑战可以通过无服务器模式解决:
    • API Gateway 和 Lambda 可以自动扩展,并按使用量付费。
    • 可以轻松克隆 API,复制环境。
    • 通过 Swagger 集成为 API Gateway 生成客户端 SDK。

软件更新的 offloading (卸载)

  • 我们在 EC2 上运行一个应用程序,偶尔会分发软件更新。
  • 当有新的软件更新时,我们会收到大量请求,并且内容会在网络上大规模分发。这非常昂贵。
  • 我们不想改变我们的应用程序,但希望优化成本和 CPU,我们该怎么做?

App 当前架构

Screenshot 2023-08-13 at 22.00.33.png

为什么选择 CloudFront?

  • 不需要更改架构。
  • 它将在边缘缓存软件更新文件。
  • 软件更新文件是静态的(永不更改)。
  • 我们的 EC2 实例不是无服务器的,但 CloudFront 是,它会为我们扩展。
  • 我们的 ASG 不会扩展那么多,我们将在 EC2 上大大节省成本
  • 我们还将在可用性、网络带宽成本等方面节省。
  • 这是一种使现有应用程序更具可扩展性和更便宜的简单方法!

http://www.niftyadmin.cn/n/5351635.html

相关文章

在DevEco开发工具中,使用Previewer预览界面中的UI组件

1、在DevEco工具中,点击并展开PreViewer预览器 2、在PreViewer预览器中,点击Tt按钮(Inspector)切换至组件查看模式 3、在组件查看模式下选择组件,代码呈现选中状态,右侧呈现组件树,右下方呈现组…

机器学习面试题总结60-99

目录 60、Python到底是什么样的语言? 61.Python是如何进行内存管理的? 引用计数和垃圾回收。

Java: Low Poly Islands

一大批岛屿资产供您在下一Unity项目中使用!包括热带岛屿、火山岛、热带山脉、植被、乡村房屋、木板路、船只、粒子、后期FX等。 适用于原型设计、移动、LOD或风格化游戏。 模块化部分很容易在Unity网格上组装在一起。 141种独特的预制件,包括: - 38个具有LOD的岛屿模型 - 30…

5G RACH_时域和频域(二)

< 频域序列生成> 以下是基于36.211-6.3.3.1的频域PRACH序列生成公式。 在ecpri中RRU也同样需要知道PRACH在频域上资源的分配&#xff0c; guard tone在PRACH 的前后怎么放的&#xff0c;根据下表格中的K表示的就是低频段的PRACH PRB的个数。 NumPrb gtLowBandwidth Pr…

Redis 为什么快?

Redis的快速性能可以归因于其设计和实现的几个关键方面&#xff1a; 内存存储: Redis是一个内存中数据结构存储&#xff0c;这意味着所有数据都存储在RAM中&#xff0c;而不是磁盘上。内存访问通常比磁盘快几个数量级。 数据结构优化: Redis为不同类型的操作提供了专门优化的数…

ikuai和openwrt实现异地组网

文章目录 需求A地iKuai路由器的配置B地openwrt路由器的配置 需求 A地&#xff1a;联通宽带&#xff0c;有动态公网IP&#xff0c;使用iKuai软路由&#xff0c;做了动态域名解析&#xff0c;内部网段&#xff1a;192.168.59.0 B地&#xff1a;移动宽带&#xff0c;无公网IP&…

(Sping Xml方式整合第三方框架)学习Spring的第十天

Spring整合mybatis 1 . 导入Mybatis整合Spring的相关坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.13.RELEASE</version></dependency><dependency><…

前端Vue select 下拉框详解以及监听事件

目录 简介 使用详解 演示示例 :key"option.value" :value"option.value" 区别 监听事件 简介 在 Vue 中&#xff0c;下拉框通常通过 <select> 元素与一系列的 <option> 元素来创建。Vue 的数据绑定和指令&#xff08;如 v-model 和 v-for…