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

文章目录

  • 专题总览
  • 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

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 上大大节省成本
  • 我们还将在可用性、网络带宽成本等方面节省。
  • 这是一种使现有应用程序更具可扩展性和更便宜的简单方法!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/348454.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】Docker网络模式和Cgroup资源限制

目录 一、Docker 网络实现原理 二、Docker 的网络模式 #网络模式详解: 第一种:host模式 第二种:bridge模式 第三种:container模式 第四种:none模式 第五种:自定义网络 三、Cgroup资源控制 第一种&a…

中断与事件区别

自记: 以外部中断举例: 这张图是一条外部中断线或外部事件线的示意图, 图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套. 图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边…

Java实现校园疫情防控管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…

php实现多进程的几种方式

目录 一:使用pcntl扩展库 二:使用Swoole扩展 三:使用多进程模式PHP-FPM 在PHP中实现多进程主要有以下几种方式: 一:使用pcntl扩展库 pcntl扩展库提供了多线程相关的函数,如pcntl_fork()用于创建子进程…

vue常用指令(v-show)

一、v-show 指令 作用: 根据真假值,切换元素的显示状态 二、代码演示 1、v-show 绑定判断条件后&#xff0c;根据布尔值决定是否显示图片 不显示图片 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><…

pve8.1 安装、创建centos7虚拟机及配置

之前创建虚拟机centos7时&#xff0c;硬盘分配太大了&#xff0c;做成模板后无法进行修改了&#xff0c;安装完pve8.1后&#xff0c;强迫症犯了重新创建一下顺便记录一下配置过程。由于目前centos7还是生产用的比较多的版本所以本次还是安装centos7.9版本。 一、下载镜像 下载…

mysql 多版本并发控制mvcc

行级锁的一个变种避免了加锁&#xff0c;开销低非阻塞读操作&#xff0c;写操作是行级原理&#xff1a;使用数据在某个时间点的快照实现&#xff0c;不同事务在同一个时间可以看到同一个表中的不同数据。分类&#xff1a;乐观&#xff0c;悲观在一行中存储更多数据&#xff0c;…

VR数字展厅,平面静态跨越到3D立体化时代

近些年&#xff0c;VR的概念被越来越多的人提起&#xff0c;较为常见的形式就是VR数字展厅。VR数字展厅的出现&#xff0c;让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新&#xff0c;同时也意味着展览传播的方式不再局限于原来的图文、视频&#xff0c;而是…

统计学-R语言-7.4

文章目录 前言非参数检验两个独立样本的Mann-Whitney检验 练习 前言 本片是对非参数检验最后的介绍。 非参数检验 两个独立样本的Mann-Whitney检验 Mann -Whitney检验也称为Mann- Whitney U检验&#xff08;Mann-Whitney U test&#xff09;或称为 Wilcoxon秩和检验&#xf…

C++ Qt day2

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <io…

UDP 的报文结构和注意事项

1. UDP的特点 1.无连接 就像发短信给对方&#xff0c;只需要对方的端口和IP地址。不需要连接。 2.不可靠传输 没有任何安全机制&#xff0c;发送端发送数据报以后&#xff0c;如果因为⽹络故障该段⽆法发到对⽅&#xff0c;UDP协议层也不会给应⽤层返回任何错误信息。 3.面向…

Java PDFBox 提取页数、PDF转图片

PDF 提取 使用Apache 的pdfbox组件对PDF文件解析读取和转图片。 Maven 依赖 导入下面的maven依赖&#xff1a; <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version> &l…

import tensorflow.contrib.slim as slim中contrib报红,显示没有导入contrib

本人环境&#xff1a; python 3.6 tensorflow 1.13 问题如下图&#xff1a; 解决方法&#xff1a; 找到包的位置&#xff0c;查看tensorflow中是否下载了contrib包&#xff0c;如果有的话&#xff0c;建议重新装一次TensorFlow 如果没有找找&#xff0c;可以在搜索栏搜一下…

什么是5G RedCap?5G RedCap有什么优势?

5G RedCap&#xff08;Reduced Capability&#xff09;是指5G轻量化技术&#xff0c;即通过对5G技术进行一定程度的“功能裁剪”&#xff0c;来降低终端和模组的复杂度、成本、尺寸和功耗等指标&#xff0c;从而“量体裁衣”适配不同的物联需求&#xff0c;实现兼顾物联网系统的…

自锁设计更稳固,同为科技(TOWE)服务器电脑IEC 60320电源线

说起IEC 60320标准电源线&#xff0c;可能很多人不知道具体是什么东西&#xff0c;但要说到台式电脑电源线&#xff0c;那大家就都能耳熟能详了。IEC 60320电源线的用途十分广泛&#xff0c;包括家用电器、医疗设备、数据中心服务器、商业机械设备、自动化生产线等都是用此类电…

【iOS ARKit】人脸追踪之挂载虚拟元素

人脸跟踪&#xff08;Face Tracking&#xff09;是指将人脸检测扩展到视频序列&#xff0c;跟踪同一张人脸在视频序列中的位置。是论上讲&#xff0c;任何出现在视频中的人险都可以被跟踪&#xff0c;也即是说&#xff0c;在连续视频帧中检测到的人脸可以被识别为同一个人。人脸…

c++ 4种类型转换

1. 常量转换(const_cast)。》方便赋值 常量转换用于去掉表达式的const属性&#xff0c;使其变成非常量表达式&#xff0c;方便赋值。常量转换不能改变表达式的类型&#xff0c;只能改变const属性。示例代码&#xff1a; const int a 10; int b const_cast<int&>…

如何在云服务上通过docker部署服务?

如何在云服务上通过docker部署服务&#xff1f; 一、在云服务器上安装Docker1、查看云服务器的OS信息2、[安装Docker并使用&#xff08;Linux&#xff09;](https://help.aliyun.com/zh/ecs/use-cases/deploy-and-use-docker-on-alibaba-cloud-linux-2-instances) 二、通过dock…

基于 Docker 搭建 Uptime-Kuma 一个极简风的应用监控

GitHub&#xff1a;https://github.com/louislam/uptime-kuma 一、uptime-kuma 介绍 Demo&#xff1a;https://uptime.wuhanjiayou.cn/ uptime-kuma 是一款开源的监控工具, 支持 TCP / PING / HTTP 等多种监控方式&#xff0c;可监测网站&#xff0c;数据库&#xff0c;Docker…

nvm安装node 后npm不是内部或外部命令,也不是可运行的程序的处理方法

安装了两个node版本 v10.15.3代表10.15.3版本&#xff0c;打开后 v12.16.2代表node版本12.16.2,打开后 我现在使用10.15.3版本的node&#xff0c;npm可以使用&#xff0c;而当使用12.16.2版本时则不能使用 需要把文件npm, npm.cmd和node_modules三个文件拷贝到v12.16.2文件的…