EBS

  • 是AWS Elastic Block Store(EBS)提供了用于EC2实例的块存储卷
  • 设计用来提供高可靠性和高性能的存储

    块存储卷

  • 是一种数据存储技术,将存储空间分割成固定大小的“块”,每个块可以像独立硬盘一样被单独管理和操作
  • 低级别数据处理(能够在较低的操作系统级别进行数据处理),高性能(块存储可以与操作系统直接交互),独立性(在没有文件系统的情况下存在,不会存储任何文件结构或元数据),灵活性(轻松扩展或调整大小),可访问性(能够通过存储区域网络(san),互联网协议(ip)网络或本地连接进行访问。)

持久性存储

EBS卷在EC2实例终后仍然存在,可以在创建EC3实例时候将其删除。

多种卷类型

IOPS

  • 是一个衡量计算存储设备性能的指标,表示每秒可以完成的输入/输出操作次数。这个指标通常用于评估硬盘驱动器(HDD)、固态硬盘(SSD)、存储区域网络(SAN)和网络附加存储(NAS)等存储设备的性能。

IOPS高低的因素:

  1. 存储介质:SSD通常提供比HDD更高的IOPS,因为SSD没有移动部件,数据访问速度更快。
  2. 数据块大小:通常较小的数据块会产生更高的IOPS数,每个操作处理的数据量更少。
  3. 读写模式:IOPS性能可能会根据读写操作的比例而变化。一般来说,读写操作的IOPS高于写操作
  4. 并发和队列深度:多个并发操作和更深的队列深度可以提高IOPS,但也可能增加延迟。
  5. 随机与顺序访问:随机I/O操作通常比顺序I/O操作有更低的IOPS,存储设备需要在不同位置寻找数据,尤其是在使用传统的机械硬盘时。

硬盘驱动器(HDD)

  • 一种创痛的机械存储设备,具有较大的存储容量和较低的成本

固态硬盘(SSD)

  • 是一种基于闪存存储技术的存储设备,具有更快的数据访问速度,更多的访问延迟和更高的可靠性,但是SSD的加个通常比HDD高,存储容量也很较小

存储区域网络(SAN)

  • 是一种专用网络,用于连接存储设备和计算设备。SAN通过高速网络连接将存储资源提供给计算设备,使其能够访问和共享存储数据,SAN通常用于大规模企业环境中,提供高性能,高可靠性和可扩展性的存储解决方案。

网络附加存储(NAS)

  • 通过网络连接提供文件级别存储服务的设备,NAS设备通常是独立的存储服务器,可以通过网络协议(NFS或SMB)共享文件,使多个计算设备能够访问和共享存储数据。NAS适用与小型办公环境或家庭用户,提供简单的文件共享和备份功能。

通用型SSD(gp2和gp3)

  • 提供平衡的性能和成本,适用与广泛的应用。gp2卷提供基于卷大小的IOPS,而gp3则允许用户独立选择和调整IOPS和吞吐量,与卷大小没有关系
  • 应用场景: gp2适用于大多数工作负载,如虚拟桌面,中小型数据库,开发和测试环境。gp3是更新的版本,适用于需要可预测的性能和价格的应用程序

预置IOPS SSD(io1和io2)

  • 提供高性能的IOPS,适用于I/O密集型的数据库和应用程序,io2提供更高的耐久性和IOPS效率
  • 应用场景:高性能数据库,如大型关系型数据库或NoSQL数据库,以及需要高吞吐量和低延迟的关键业务应用程序。

吞吐量优化HDD(st1)

  • 低成本HDD卷。适用于频繁访问的,吞吐量密集型工作负载。
  • 应用场景:大数据,数据仓库,日志处理等需要大量顺序读写操作的应用程序。

Cold HDD(st1)

  • 最低成本的HDD卷,适用于较少访问的工作负载。
  • 应用场景:适合用于冷数据存储,如备份和灾难恢复。

磁带(standard)

  • 之前的基础性能HDD卷,现在以及不推荐使用,因为AWS提供更高性能和成本效益更高的选项。

选择EBS卷类型,考虑因素

  • 性能:IOPS,吞吐,延迟
  • 数据访问频率,频繁访问的数据适合SSD,偶尔访问的数据适合HDD。
  • 成本:预算和成本效益
  • 耐久性和可用性:重要应用程序可能需要更高的耐久性和可用性

快照功能

  • 创建EBS卷的快照,并存储在S3中,用于数据备份和恢复
  • 快照捕获了某一时刻卷上的数据状态,并将这些数据存储在S3中

    增量备份

    对一个EBS卷进行快照备份时,仅仅是新的或者被修改过的块会被保存在S3。如果创建了多个快照,S3不会为未更改的块进行重复存储,而是自上次快照以来变化的块。

持久性和可靠性

快照在S3上,是一个高持久性的存储服务,数据会自动复制到多个设施,确保其耐久性。

点对点复制

可以跨AWS区域复制,对于灾难恢复和数据中心迁移非常有用。

数据加密

原始EBS卷加密,快照也会自动加密。同样,从加密快照创建任何新的EBS卷也会自动假面。

成本效益

快照是增量的,所以它们通常比完整卷备份更加经济。

生命周期管理

允许自动创建和删除快照,便于用户按照自定义的策略维护快照

共享或私有

快照可以与特定的AWS账户共享,或者公开共享给所有AWS用户。允许数据和配置的共享,同时支持软件供应商分发产品。

S3

  • 是Amazon Simple Storage Service一个对象存储服务

可扩展性

  • 无限存储:S3提供几乎无限的存储空间,可以在需要时随时存储和检索任意数量数据
  • 自动扩展:其实没有s3自动扩展这说法,只是他会适应存储数据量,无需手动去干预

数据可用性和持久性

  • 高持久性:S3提供99.999999999%的持久性,确保数据不会因为硬件问题而丢失

    多区域复制

  • 多区域复制是一项功能,允许自动复制S3存储桶中对象到一个或者多个不同AWS区域的目标存储桶中

    数据复制策略

  • 可以设置复制策略来指定哪些数据需要被复制,可以是存储桶中的所有数据,也可以是符合特定前缀或标签的数据

版本控制

  • 多区域复制要求源存储桶启动版本控制,确保每个版本对象都会被复制到目标存储桶

延迟和一致性

复制操作通常是异步的,到目标区域会有延迟

成本

多区域复制会产生额外的成本,包括数据传输费用和目标区域存储的费用

数据加密

支持复制过程中,用AWS提供的加密键(SSE-S3或SSE-KMS)或自己的加密键位(SSE-C)

SSE-S3
  • 是Amazon S3提供的服务端加密的一种方式,会自动使用多租户硬件安全模块HSM管理的密钥进行数据加密
    如何工作:
  • 当上传文件到S3时,可以指定使用SSE-S3进行加密
  • S3会为每个保存的对象生成一个唯一的密钥,使用该密钥对数据进行加密,把加密的数据保存的存储中
  • 将每个对象的密钥进一步使用一个主密钥进行加密,这个主密钥是定期轮换的
  • 访问数据时,会自动处理解密过程,可以像访问未加密的数据一样访问加密数据

特点:
简单易用:SSE-S3 的操作非常简单,只需要在上传对象时指定使用 SSE-S3 加密即可,其余的加密和解密过程都由 Amazon S3 自动管理。
透明:对于使用 SSE-S3 加密的数据,用户在访问时不会感觉到任何不同,因为加密和解密都是透明进行的。
安全性:使用 SSE-S3 加密的数据,其密钥管理和保护是由 AWS 的硬件安全模块(HSM)来完成的,这提供了很高的安全保障。
自动加密:默认情况下,所有新的 S3 存储桶都会自动使用 SSE-S3 加密新上传的对象,除非您指定了其他加密方式。

注意事项:
性能影响:使用 SSE-S3 加密可能会对性能产生微小的影响,因为每次读取和写入操作都需要进行加密和解密操作。
成本:虽然 AWS 不额外收费用于 SSE-S3 加密,但是如果您使用了 S3 提供的额外密钥管理功能,如 AWS Key Management Service (KMS),则可能会产生额外费用。
权限:如果您的 AWS Identity and Access Management (IAM) 策略不允许使用 SSE-S3,那么尝试上传文件时可能会遇到权限问题。

SSE-KMS
  • 是Amazon S3的另一种服务端加密选项,提供更多的用户控制权和审计跟踪
  • 如何工作:
    当您启用 SSE-KMS 时,您可以选择使用由 KMS 管理的默认服务密钥,也可以在 KMS 中创建自己的客户主密钥(CMK)。
    当您上传数据到 S3 时,您需要指定使用 KMS 密钥进行加密。
    S3 将与 KMS 通信,使用指定的 CMK 对数据进行加密,并将加密的数据保存到存储中。
    当您需要读取数据时,S3 将请求 KMS 解密数据,然后将解密后的数据返回给您。

特点:
用户控制的密钥:您可以创建、管理和使用您自己的加密密钥,也可以使用由 AWS 管理的默认密钥。
密钥轮换:KMS 支持自动轮换密钥,提高了安全性。
审计日志:与 KMS 集成的 AWS CloudTrail 提供了密钥使用情况的审计日志,方便审计和合规。
细粒度权限:您可以使用 IAM 策略精确控制谁可以使用哪些密钥来加密和解密数据。

注意事项:
性能影响:与 SSE-S3 类似,使用 SSE-KMS 也可能会对性能产生微小的影响,尤其是在加密和解密操作时。
成本:使用 KMS 管理的密钥可能会产生额外的费用,包括密钥存储费用和密钥使用费用。
权限管理:需要确保适当的 IAM 策略和权限设置,以便用户可以正确地使用 KMS 密钥。

权限和角色

适当IAM角色和权限来设置和管理多区域复制

安全性和合规性

  • 数据加密:S3支持服务端加密数据,以及在传输过程中使用SSL/TLS加密数据

过程中SSL/TLS加密

  • 机密协议:AWS S3使用的是SSL/TLS协议在加密传输中的数据,确保互联网安全
  • 自动加密: 通过HTTPS向S3上传或从S3下载数据时候,SSL/TLS加密是自动应用的,以为这无需进行额外的配置
  • 端点安全:使用HTTPS连接可以确保您的数据在从客户端到S3端点的整个路径上都是加密的。
  • 与存储中加密的区别:需要注意的是,传输中加密与存储中加密(例如S3的服务器端加密)是不同的。存储中加密关注的是数据在S3存储桶中处于静止状态时的加密,而传输中加密关注的是数据移动时的安全性。

性能

优化的性能:S3 提供了优化的性能,尤其是对于分布式应用和大数据工作负载。
并行传输:S3 支持多部分上传和下载,使得大文件可以分成小块并行处理,提高数据传输速度。

管理和监控

生命周期管理:S3 提供了生命周期管理策略,允许你自动转移或删除在一定时间后不再需要的数据。
存储类别:S3 提供多种存储类别,如 S3 Standard、S3 Intelligent-Tiering、S3 Standard-IA(低频访问)、S3 One Zone-IA(单可用区低频访问)和 S3 Glacier(用于长期存档),以适应不同的成本和访问频率需求。
监控和日志记录:S3 提供了监控工具,如 S3 访问日志和 AWS CloudTrail,以及与 Amazon CloudWatch 的集成,以便于监控和记录存储操作。

数据处理

存储在S3的数据可以用各种AWS的分析服务

数据分析

数据分析服务可以有Amazon Athena,Amozon Redshift,Amazon EMR

数据转换

数据转换服务可以有AWS GlueAWS Data PipelineAWS Lambda

机器学习

AWS提供了一系列机器学习服务,如Amazon SageMakerAmazon RekognitionAmazon Comprehend等,可以在S3上的数据上构建和训练机器学习模型。

S3 Glacier

数据检索

  • 检索速度必然是比S3存储要长的,主要是因为大数量和低频访问
  • S3 Glacier的检索会产生额外的检索费用,取决于数据大小和检索速度
  • 可指定检索选项

数据管理

可以用生命周期策略自动将数据从S3标准存储转移到S3 Glacier

场景

一般都是在需要存储大量数据但又不经常访问的场景

Route 53

DNS功能

域名注册与转移:Route 53 允许用户注册新的域名或将现有域名从其他注册商转移到 AWS。

托管区域(Hosted Zones):在 Route 53 中,托管区域是一个容器,它包含了处理一个域名及其子域名的 DNS 记录。托管区域分为公有托管区域和私有托管区域。

DNS 记录类型:Route 53 支持多种 DNS 记录类型,包括 A (地址记录),AAAA (IPv6 地址记录),CNAME (规范名称记录),MX (邮件交换记录),TXT (文本记录),NS (名称服务器记录) 和 SOA (起始授权机构记录) 等。

路由策略:Route 53 提供多种路由策略,如简单路由、加权路由、延迟路由、故障转移路由和地理位置路由等,允许用户根据不同的条件来路由流量。

别名记录:Route 53 的别名记录允许将一个域名映射到 AWS 资源,例如 Amazon S3 存储桶、Elastic Load Balancing (ELB) 负载均衡器或另一个 Route 53 托管区域中的域名。与 CNAME 记录不同,别名记录可以用于域名的根节点(例如 example.com)。

DNS 查询日志:用户可以配置 Route 53 以记录所有对托管区域的 DNS 查询,这有助于调试和监控 DNS 活动。

DNSSEC:Route 53 支持 DNS 安全扩展 (DNSSEC),这是一种增强 DNS 安全性的协议,可以保护域名解析过程不被篡改。

全球分布的 DNS 服务器:Route 53 使用全球分布的 DNS 服务器和 Anycast 路由技术,确保 DNS 查询响应迅速且可靠。

DNSSEC安全扩展

保护互联网用户免受伪造DNS数据(缓存投毒)的攻击,通过对DNS响应进行数字签名

主要步骤:
生成密钥:为每一个DNS区域生成一次公钥和私钥。

签名记录:使用私钥对DNS区域中RRsets进行签名,签名存储再DNS作为性的记录类型,称为DNSSEC签名(RRSIG)记录。

分发公钥:将公钥作为DNSKEY记录分发再DNS中,以便任何人都可以用它来验证签名

链式信任:DNSSEC 使用一种链式信任模型,其中每个级别的 DNS 区域都会签署其下一级别的区域的密钥。这个链条一直延伸到根域名服务器,它的密钥被称为根密钥,是整个信任链的基础。

验证:当客户端(如 DNS 解析器)收到 DNSSEC 保护的响应时,它会使用存储在 DNS 中的公钥来验证响应的签名。如果验证成功,客户端可以确信该响应是未被篡改的。

流量管理

路由策略

简单路由:

到单个资源,域名指向一个IP地址或一个Amazon S3 存储桶

场景
  • 单一资源服务,单个web服务器或单个Amazon S3存储桶
  • 不需要复杂的路由决策的简单域名分析

加权路由:

允许你分配不同的权重给相同域名下的多个资源,从而控制流量的分配比例。这对于流量切换和 A/B 测试非常有用。

场景
  • A/B 测试,将流量按照一定比例分配给不同的应用版本。
  • 平滑的流量迁移,逐渐增加指向新资源的流量比例。
  • 负载分配,根据服务器能力分配不同的权重。

延迟路由

根据用户到 AWS 区域的网络延迟自动路由用户请求。这有助于向用户提供最低延迟的响应。

场景
  • 多区域部署,根据用户到 AWS 区域的延迟选择最佳路由。
  • 性能优化,确保用户获得最快的响应时间。

故障转移路由

在主要资源发生故障时,自动将流量切换到备份资源。这对于实现高可用性和灾难恢复非常关键。

场景
  • 灾难恢复,当主要资源发生故障时自动切换到备用资源。
  • 高可用性配置,配合健康检查确保服务不间断

    地理位置路由

    根据用户的地理位置将流量路由到特定的资源。这可以用于内容本地化或遵守地理位置相关的法律法规。
场景
  • 地理目标定位,向特定地理区域的用户提供定制化内容。
  • 法规遵从,确保数据存储和处理遵守特定地区的法律法规。
  • 负载分散,将用户流量分散到不同的区域以减轻特定服务器的负载。

    地理位置优先路由

    根据用户和资源之间的地理位置距离来路由流量。可以通过使用“偏置值”来调整流量的分配
    场景
  • 地理位置敏感的负载均衡,更精细地控制基于用户位置的流量分配。
  • 业务扩展,根据业务需求和用户位置动态调整流量。

    多值答案路由

    当你想要 Route 53 返回多个资源的 IP 地址,并且希望 Route 53 对这些资源进行健康检查时,可以使用这种策略。
场景
  • 提供了内置健康检查的简单负载均衡。
  • 当有多个资源可以提供服务时,增加系统的容错能力。
  • 需要从多个资源中返回单个或多个健康资源的 IP 地址。

Route 53 的Best Match

与EC2配合实现静态网站托管

  • Route 53 可以将流量路由运行在Amazon EC2实例上的应用程序
  • 使用故障转移路由来监控EC2实例的健康状况,在需要时将流量自动切换到备用实例

与ELB配合实现高可用性和负载均衡

  • ELB自动分配进来的应用流量到多个EC2实例,以提高容错能力和可伸缩性
  • Route 53可以直接与ELB集成,将域名解析到ELB的DNS名称,而不是特定的IP地址

与S3配合实现静态网站托管

  • 可以以将域名解析到一个Amazon存储桶,这个存储桶配置为静态网站

与Lambda和API Gateway配合实现无服务器架构

  • Route 53 可以将流量路由到一个API Gateway,后者触发Lambda函数来处理请求
  • 架构可以构建完全无服务器的应用,轻松扩展且成本效益高

与CloudFront配合实现全球内容分发

  • 将用户请求解析到最近的CloudFront边缘位置,加速内容的分发

与shield配合实现防御分布式拒绝服务DDOS攻击

  • 托管型DDos防护服务,可以保护在AWS上运行的应用不受DDos攻击

与WAF配合实现应用层防护

  • 是一种Web应用防火墙,保护Web应用免受常见的网络和应用层攻击。
  • 为域名提供基于规则的控制,防止恶意流量到达应用

与RDS实现数据库故障转移

  • Route 53 可以与Amazon RDS配合实现数据库的故障转移和读取复制

与VPC配合使用构建私有云解析和内部域名服务

  • 通过私有托管区域,企业可以管理内部域名,而这些域名不会被路由到公共互联网上

与Transit Gateway实现多区域网络连接

  • AWS Transit Gateway 允许连接多个 VPC 和本地网络,形成一个中心式的网络枢纽。
  • Route 53 可以用来解析跨这些连接的 VPCs 内部的服务名称。

与 AWS Direct Connect 配合混合云环境

  • AWS Direct Connect 通过私有连接将企业数据中心连接到 AWS,绕过公共互联网,提高安全性和带宽。
  • Route 53 可以用来解析通过 Direct Connect 连接的资源,保证内部和外部解析的一致性。

与ACM构建SSL/TLS证书管理

  • 简化了SSL/TLS证书的获取,管理和部署过程
  • 自动使用DNS验证来验证域名的所有权并且自动续签证书

与EC2和EKS构建容器化应用和微服务

  • ECS和EKS提供容器服务
  • Route 53可以与ECS和EKS集成,通过服务发现机制自动注册和解除注册容器实例,使微服务架构中的服务能够相互发现和通信

稍微理解

Amazon Comprehend +

  • 一项自然语言(NLP)服务,使用机器学习技术赖解析文本中的洞察和关系
  1. 实体识别(Entity Recognition):能够识别文本中的具体实体,如人名、地点、品牌或其他专有名词。
  2. 情感分析(Sentiment Analysis):分析文本的情感倾向,判断它是正面的、负面的、中性的还是复合情感的。
  3. 关键词提取(Key Phrase Extraction):从文本中提取重要的或者有意义的短语。
  4. 语言识别(Language Detection):自动识别文本所使用的语言。
  5. 句法分析(Syntax Analysis):分析文本中的语言构成,比如词性标注和句子成分分析。
  6. 主题建模(Topic Modeling):识别文档集合中的主题模式。

Amazon Rekognition

Amazon Rekognition 是一项基于深度学习的图像和视频分析服务。它可以识别图像和视频中的对象、场景、文字以及人脸。Rekognition 提供了多种功能,包括:

  • 人脸分析:识别人脸、检测面部特征、评估情绪等。
  • 人脸比对:比对两张人脸图像,判断它们是否属于同一个人。
  • 人脸搜索:在大型图像库中搜索特定人脸。
  • 文本识别:检测和识别图像中的文字。
  • 场景分析:识别图像中的场景和对象。

开发者可以通过简单的 API 调用来使用这些功能,从而构建各种视觉分析应用。

Amazon SageMaker

Amazon SageMaker 是一项全面的机器学习平台,旨在简化机器学习模型的构建、训练和部署过程。SageMaker 提供了以下功能:

  • 数据标注:帮助准备训练数据。
  • 模型训练:使用各种机器学习算法训练模型。
  • 模型调优:优化模型性能。
  • 模型部署:将训练好的模型部署到生产环境中。

SageMaker 支持多种常见的机器学习算法和框架,同时提供了一个交互式的开发环境,方便开发者快速迭代和部署模型。

AWS Lambda

AWS Lambda 是一项无服务器计算服务,开发者可以在 Lambda 上运行代码而无需管理服务器。Lambda 可以根据各种事件(如 API 调用、文件上传等)触发执行代码,支持多种编程语言,包括 Python、Node.js、Java 等。Lambda 的特点包括:

  • 弹性扩展:根据请求量自动扩展计算资源。
  • 按需计费:只需为实际使用的计算资源付费。
  • 事件驱动:可以与多种 AWS 服务集成,响应各种事件。

Lambda 适用于构建无服务器应用、自动化任务、数据处理等场景。

AWS Data Pipeline

AWS Data Pipeline 是一项数据处理服务,用于自动化和调度数据处理工作流程。开发者可以使用 Data Pipeline 来定义数据处理流程、调度任务执行、跟踪任务状态等。Data Pipeline 提供了以下功能:

  • 数据源连接:支持多种数据源,包括 AWS 服务和外部数据存储。
  • 灵活调度:可以根据时间表、事件触发等条件调度任务。
  • 任务监控:提供任务状态监控和报警功能。

Data Pipeline 可以帮助简化数据处理流程,提高数据处理的效率和可靠性。

AWS Glue

AWS Glue 是一项全托管的数据集成服务,用于抽取、转换和加载数据。Glue 可以自动发现数据源、推断数据模式、执行数据转换操作,并将数据加载到目标数据存储中。Glue 的主要功能包括:

  • 数据目录:自动创建和维护数据目录。
  • ETL 转换:支持数据抽取、转换和加载。
  • 数据目录版本控制:管理数据目录版本。

AWS Glue 可以帮助用户简化数据集成和数据准备的过程,加速数据处理和分析的流程。

Amazon EMR

Amazon EMR 是一项大数据处理服务,基于开源的 Apache Hadoop 和 Apache Spark 构建。EMR 可以帮助用户快速搭建、扩展和管理大数据处理集群,用于分析、处理大规模数据集。EMR 提供了以下特点:

  • 弹性扩展:根据需求自动扩展集群规模。
  • 多种框架支持:支持 Hadoop、Spark、Presto 等多种大数据处理框架。
  • 安全性和可靠性:提供数据加密、访问控制等安全特性。

EMR 可以帮助用户快速搭建大数据处理环境,进行数据分析和处理。

Amazon Redshift

Amazon Redshift 是一种云数据仓库服务,用于分析大规模数据集。Redshift 提供了高性能的数据查询和分析能力,支持列式存储、压缩和并行查询等特性。Redshift 的特点包括:

  • 高性能:支持大规模数据并行处理,提供快速的查询性能。
  • 可扩展性:可以根据需求扩展集群规模。
  • SQL 兼容:支持标准 SQL 查询语言。

Redshift 可以帮助用户构建数据仓库和商业智能应用,进行复杂的数据分析和查询。

Amazon Athena

Amazon Athena 是一项交互式查询服务,用于在亚马逊 S3 存储中执行 SQL 查询。Athena 可以帮助用户快速分析存储在 S3 中的数据,无需预先加载数据到数据库中。Athena 的特点包括:

  • 无服务器:无需管理基础设施,按需执行查询。
  • 标准 SQL:支持标准 SQL 查询语言。
  • 数据格式支持:支持多种数据格式,如 CSV、JSON 等。

Athena 可以帮助用户快速进行数据查询和分析,适用于需要快速查询大规模数据集的场景。

API Gateway

无服务器集成

无服务器集成是能够将API端点直接连接到无服务器后端服务,如Lambda和DynamoDB,不需要运行或管理任何服务器,这种集成方式简化了API部署和管理,因为AWS负责所有的基础设置管理。

Lambda集成

API Gateway可以将请求直接路由到Lambda函数,当API被调用时,触发一个Lambda函数,该函数执行业务逻辑然后返回响应,允许你构建强大的后端逻辑,无需担心服务器的运行和维护

DynamoDB集成

API Gateway可以直接与DynamoDB集成,运行API直接执行DynamoDB表上的操作,如获取项目,写入项目等。API Gateway,创建一个完全无服务的后端,用于存储和检索数据。

集成流程

创建Lambda函数或DynamoDB表,设置API Gateway资源,创建新的API,配置集成请求和响应,部署,用CloudWatch监控API调用和Lambda函数执行,确保性能和可靠性

流量控制

API Gateway 提供了几种流量控制机制,帮助开发者防止过载后端服务

节流

  • 默认节流:对每个账户提供默认的节流限制,这些限制是以每秒请求数TPS和并发限制来定义的,如果超过限制则会返回429错误
  • 自定义节流

使用计划

  • 允许用户创建使用计划,并与API密钥关联,可定义API密钥允许请求频率的限制和配额限制

突发限制

  • 突发限制是指在短时间内允许的最大请求数。这对于处理短时间内的突然流量增加很有用,同时确保后端服务不会因为大量并发请求而过载。

客户端限流

  • 开发者可以在客户端实施限流措施,这通常是通过重试逻辑和指数退避策略来实现的。这有助于在客户端自动处理和平滑处理 429 错误。

数据转换

API Gateway 中实现数据转换的主要工具是模板和模型:

模板(Mapping Templates)

API Gateway 允许你使用 Velocity Template Language (VTL) 和 JSONPath 表达式来创建映射模板。这些模板定义了如何将客户端请求转换为后端服务所期望的格式,以及如何将后端服务的响应转换为客户端所期望的格式。

请求模板:在请求模板中,你可以添加逻辑来定制请求有效载荷,例如添加或删除 JSON 字段,修改头部信息,或者根据请求参数构建一个全新的请求体。
响应模板:响应模板允许你修改从后端服务返回的数据。你可以转换数据格式,只返回客户端需要的部分数据,或者处理错误响应。

模型(Models)

模型是 API Gateway 中定义的数据结构,它们使用 JSON Schema 描述了 API 的请求和响应数据。模型可以帮助你标准化数据结构,并为你的 API 用户提供清晰的数据格式文档。
请求模型:定义了 API 接收的数据结构,可以用来校验请求数据。
响应模型:定义了 API 返回的数据结构,可以用来校验响应数据。
利用这些数据转换功能,开发者可以确保 API 的前端和后端之间的通信是平滑和一致的,即使它们可能使用不同的数据格式或标准。这也使得 API Gateway 成为一个强大的工具,用于在不修改后端服务的情况下,快速适应前端应用程序的变化需求。

RESTful API 和 WebSocket API

RESTful API

RESTful API 是一种基于 HTTP 协议的 Web API。它遵循 REST 架构原则,通常使用标准的 HTTP 方法,如 GET、POST、PUT、DELETE 等。API Gateway 中的 RESTful API 提供以下特性:

无服务器集成:可以直接与 AWS Lambda 函数或其他 AWS 服务集成,无需运行或管理服务器。
数据转换:通过映射模板对请求和响应进行转换和重写。
流量控制:包括节流、使用计划和配额管理。
安全性:支持 API 密钥、AWS IAM 角色和权限以及 Cognito 用户池进行身份验证和授权。
版本管理和生命周期管理:支持多个发布阶段和版本控制。
监控和日志记录:与 Amazon CloudWatch 集成,以监控API调用和记录日志。
缓存:可以配置 API 缓存以减少延迟和后端负载。
RESTful API 适用于大多数标准的 Web 应用程序场景,特别是那些需要严格的状态无关和资源导向架构的场景。

WebSocket API

WebSocket API 提供了全双工通信通道,允许服务器和客户端之间进行实时、双向的通信。API Gateway 中的 WebSocket API 具有以下特性:

连接管理:API Gateway 负责连接的建立和维护。
规模扩展:可以根据连接数自动扩展,支持大量并发WebSocket连接。
路由选择:基于传入的消息内容,将不同的消息路由到不同的后端服务,如 AWS Lambda 或 HTTP 终端节点。
集成后端服务:与 AWS Lambda 和 HTTP API 直接集成,无需管理服务器。
安全性:可以使用 AWS IAM、Lambda 授权器或自定义授权器来管理连接和消息的授权。
监控和日志记录:与 Amazon CloudWatch 集成,以监控连接和消息传递。
WebSocket API 适用于需要实时通信的应用程序,如聊天应用、实时游戏、实时通知和协作工具。

SDK集成

Amazon API Gateway 提供了与各种编程语言的 SDK 集成支持,这样开发者可以在他们选择的编程语言中更容易地调用由 API Gateway 托管的 API。这些 SDKs,通常称为客户端 SDKs,是自动生成的,并且可以针对已经部署的 API 生成。

以下是 API Gateway 与 SDK 集成的一些关键点:

SDK 生成

对于 RESTful API,API Gateway 允许开发者生成客户端 SDK 来调用 API。这些 SDK 可以针对以下平台生成:

  • Android
  • iOS (Objective-C 和 Swift)
  • JavaScript (适用于浏览器和 Node.js)

生成 SDK 的过程通常涉及到在 API Gateway 控制台中选择你的 API 阶段,然后选择你想要生成的 SDK 的类型。API Gateway 会为你生成一个包含所有必要调用逻辑和数据结构的压缩文件。

SDK 的使用

生成的 SDK 会包含对应语言的库和工具,使得客户端应用程序可以轻松地与 API Gateway 进行通信。例如,生成的 JavaScript SDK 会包含 API 调用的 AJAX 请求代码,而 iOS SDK 会包含构建网络请求的代码。

使用这些 SDK,开发者可以快速地在他们的应用程序中实现以下功能:

  • 调用 API Gateway 托管的 API。
  • 处理请求和响应,包括错误处理。
  • 传递身份验证和授权信息,如果 API 使用了 API 密钥、AWS IAM 或 Amazon Cognito 用户池。

SDK 定制和优化

尽管 SDK 是自动生成的,但开发者仍然可以根据需要对其进行定制。例如,他们可以添加额外的逻辑来处理特定的应用程序场景,或者改进错误处理和重试策略。

此外,开发者可能需要考虑 SDK 如何影响应用程序的性能和大小,特别是在移动应用程序中。他们可能需要优化网络请求,或者去除未使用的 SDK 部分以减小应用程序的体积。

安全性

使用 SDK 时,安全性是一个重要考虑因素。开发者需要确保他们的应用程序安全地存储和传递任何敏感信息,如 API 密钥或用户凭证。此外,他们可能需要实施额外的安全措施,如使用 HTTPS 来保护数据在传输过程中的安全,或者使用 OAuth 和 Amazon Cognito 来为用户提供安全的身份验证和授权。

总的来说,API Gateway 的 SDK 集成简化了客户端应用程序与后端服务的交互,允许开发者专注于构建应用程序的核心功能,而不是编写重复的代码来处理 API 调用。通过自动化的 SDK 生成和简单的集成过程,API Gateway 使得从客户端应用程序到云端服务的开发变得更加快捷和高效。

Lambda

AWS Lambda 是亚马逊网络服务(Amazon Web Services, 简称AWS)提供的一项无服务器计算服务。它允许你运行代码,而无需预置或管理服务器。

事件驱动执行

  • 通过事件触发执行,也可以来自于应用程序的自定义事件

举例场景:Lambda处理在S3上传新文件时触发

1.需要创建一个新的Lambda函数,选为某编程语言运行
2.把函数分配一个执行角色,这里就是有权读取S3的对象,写入CloudWatch日志
3.在S3中设置事件通知,在上传时触发Lambda函数,可以在S3存储属性中找到,把Lambda函数作为目标。

# 举例代码
import boto3
import json
import logging
from urllib.parse import unquote_plus

# 设置日志记录
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# 初始化 S3 客户端
s3_client = boto3.client('s3')

def lambda_handler(event, context):
# 获取存储桶名称和文件键值
bucket_name = event['Records'][0]['s3']['bucket']['name']
file_key = unquote_plus(event['Records'][0]['s3']['object']['key'])

# 记录到 CloudWatch 日志中
logger.info(f'New file uploaded: {file_key} in bucket: {bucket_name}')

# 这里可以添加更多处理逻辑,例如读取文件内容、转换文件格式等

return {
'statusCode': 200,
'body': json.dumps('File processed successfully!')
}

无服务器架构

不需要服务器和任何环境,Lambda负责运行你的代码并自动管理底层计算资源

自动扩展

并发执行

一个事件触发器激活一个Lambda函数,如果有多个事件几乎同时到达,Lambda会自动启动多个实例来处理事件

冷启动与热启动

  • 冷启动:当一个函数被触发而当前没有可用的运行实例时,Lambda会进行一个“冷启动”,即创建一个新的函数实例。过程基本涉及到加载代码,初始化运行时,运行初始化代码(如全局变量声明)等步骤。冷启动通常需要更长启动时间。

  • 热启动:如果一个函数实例在执行完一个时间后仍然处于空闲状态,可以被用来快速响应新的时间,这称为热启动,热启动跳过了实例创建过程比冷启动快

并发限制

Lambda在账户级别有并发执行限制。这个限制是指任何时刻,一个AWS账户可以同时运行的Lambda函数实例的数量。这个限制既保护了用户免受意外的高费用,确保资源的合理分配

预热行为

避免冷启动延迟,用户可以实现预热策略,通过定期触发Lambda函数来保持一定数量的热实例。

安全性控制

IAM角色和策略

  • 创建一个 Lambda 函数时,您需要指定一个执行角色(IAM 角色)。Lambda 函数将使用这个角色的权限来访问 AWS 服务和资源。

    资源策略

    资源策略包含以下部分:

  • Statement:资源策略由一个或多个语句(Statement)组成,每个语句都是一个权限声明,指定了一个允许或拒绝的权限。

  • Effect:每个语句的 Effect 决定了这个语句是允许(Allow)还是拒绝(Deny)某项操作。

  • Action:Action 定义了可以在 Lambda 函数上执行的操作,例如 lambda:InvokeFunction。

  • Resource:Resource 指定了策略适用的资源,对于 Lambda 函数策略来说,这通常是函数的 ARN(Amazon Resource Name)。

  • Principal:Principal 定义了哪些 AWS 账户、用户、角色或服务可以执行在 Action 中定义的操作。

  • Condition:条件(Condition)用于指定策略的有效性取决于一系列预定义的条件是否满足。

举例

下面是一个资源策略的示例,它允许另一个 AWS 账户的用户调用 Lambda 函数:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/ExampleUser"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-west-2:111122223333:function:MyFunction",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "123456789012"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:iam::123456789012:user/ExampleUser"
}
}
}
]
}

在这个例子中,只有在条件满足时(即请求来自特定账户和用户),指定的用户才能调用 MyFunction。通过使用资源策略,您可以跨账户共享 Lambda 函数,或者允许来自 AWS 服务(如 Amazon S3 事件、Amazon SNS 主题、Amazon DynamoDB 更新流等)的触发器调用您的函数。这是实现跨账户功能和集成 AWS 服务的一种强大方式。

环境变量加密

  • 允许您为函数设置环境变量,用于存储配置信息。您可以使用 AWS Key Management Service (KMS) 加密这些环境变量,以保护敏感信息。

    VPC集成

  • Lambda函数可配置在VPC内运行

网络隔离和防火墙

  • 配置 Lambda 函数在 VPC 中运行,您可以使用网络 ACL 和安全组作为网络层的防火墙,来控制流入和流出资源的流量。

    日志和监控

  • 调用和执行情况可以通过 Amazon CloudWatch 进行监控和记录日志。您可以配置日志记录,以便在函数执行时捕获调用请求和响应数据。

场景案例

一个经典的多服务场景,使用 AWS Lambda 的例子是一个自动化的图像处理平台。在这个场景中,用户上传图片到 Amazon S3,这会触发一个 Lambda 函数来处理这些图片(例如,压缩、转换格式、添加水印等),然后结果可以被存储在另一个 S3 桶中,或者被发送到其他服务进行进一步处理或分析。

以下是服务之间的作用和交互:

  1. Amazon S3 (Simple Storage Service):

    • 作为图像和处理后文件的存储位置。
    • 触发 Lambda 函数以响应新上传的图像。
  2. AWS Lambda:

    • 执行图像处理逻辑,如调整大小、格式转换或应用水印。
    • 读取和写入 S3 桶中的文件。
    • 可以调用其他 AWS 服务,如 Amazon Rekognition 进行图像分析。
  3. Amazon Rekognition:

    • 提供图像和视频分析,如识别对象、场景和名人。
    • Lambda 函数可以将图像发送到 Rekognition 以获取元数据,并根据这些信息进一步处理或分类图像。
  4. Amazon DynamoDB:

    • 用于存储图像的元数据,如文件名、大小、图像类型、处理状态和 Rekognition 提供的任何分析数据。
    • Lambda 函数可以更新 DynamoDB 表以反映处理状态或存储分析结果。
  5. Amazon SNS (Simple Notification Service)Amazon SQS (Simple Queue Service):

    • 用于通知系统的其他部分,例如,当图像处理完成时。
    • Lambda 函数可以发布消息到 SNS 主题或 SQS 队列,以触发其他处理流程或通知用户。
  6. AWS Step Functions:

    • 管理和协调复杂的多步骤 Lambda 函数工作流。
    • Lambda 函数可以作为步骤函数状态机中的一个步骤,以确保处理逻辑按照预定顺序执行。
  7. Amazon CloudWatch:

    • 监控 Lambda 函数的性能和日志。
    • Lambda 函数执行时会自动记录日志和各种指标,以供分析和调试。

在这个场景中,用户上传图片到 S3 桶,这个上传操作自动触发一个 Lambda 函数。Lambda 函数读取新上传的图片,进行必要的处理,然后将处理后的图片存储到另一个 S3 桶中。如果启用了图像分析,Lambda 函数还会调用 Amazon Rekognition。处理结果(包括图像元数据和分析数据)可以被存储到 DynamoDB。Lambda 函数还可以将处理完成的事件通过 SNS 或 SQS 发布出去,以便其他应用组件可以响应这些事件。整个处理流程可以用 AWS Step Functions 来协调。最后,Amazon CloudWatch 被用来监控整个过程,包括 Lambda 函数的性能和日志记录。

ELB

Classic Load Balancer(CLB)

  • 支持基于TCP和HTTP/HTTPS的负载均衡
  • 提供固定性能,但没有ALB和NLB那样灵活
  • 支持一个简单的健康检查

    场景举例

  • 旧的或遗留的应用程序,这些应用程序不需要复杂的路由规则,只需简单地在多个服务器之间分发流量。
  • 示例:一个简单的网站或应用程序,客户端通过HTTP/HTTPS请求服务,CLB将请求均匀地分配给后端的多个EC2实例。

Application Load Balancer (ALB)

  • ALB是为HTTP/HTTPS流量设计的,提供高级的请求路由功能,比如基于内容的路由。
  • 支持路径、主机、HTTP头部、HTTP方法和查询参数等多种路由条件。
  • 可以直接与容器化服务和微服务架构进行集成。
  • 提供了更细粒度的健康检查。
  • 支持WebSocket和HTTP/2。

场景举例

  • 面向现代应用程序,特别是在微服务架构中,需要根据URL的不同路径将流量路由到不同的服务。
  • 示例:一个电子商务网站,其中/catalog路径指向商品目录服务,而/cart路径指向购物车服务。ALB可以根据路径将流量路由到不同的服务或容器。

3. Network Load Balancer (NLB)

  • NLB是在第4层(传输层)工作的负载均衡器,专门设计用于处理极高的性能和低延迟需求。
  • 支持静态IP地址或Elastic IP地址。
  • 适用于处理TCP、UDP和TLS流量。
  • 能够处理数百万请求每秒,同时保持极低的延迟。
  • 支持长连接,适合需要保持TCP连接的应用程序。

场景举例

  • 高性能的实时游戏、股票交易平台或需要处理大量TCP连接的任何其他类型的应用程序。
  • 示例:实时多人在线游戏服务器,玩家的连接需要低延迟和高吞吐量,NLB可以有效地在多个游戏服务器实例之间分配TCP流量。

其他服务集成

AWS的Elastic Load Balancing (ELB)服务可以与许多其他AWS服务集成,以提供更完整、更强大的解决方案。以下是一些常与ELB集成使用的AWS服务:

1. Amazon EC2 (Elastic Compute Cloud)

  • ELB通常用来分配流量给后端的EC2实例。当实例的健康检查通过时,它们会被加入负载均衡器的目标池中。

2. Amazon ECS (Elastic Container Service)

  • 对于容器化的应用程序,ALB可以直接与ECS服务集成,自动注册容器实例作为负载均衡器的目标。

3. AWS Fargate

  • Fargate提供了无服务器的容器执行环境,与ELB(特别是ALB)集成时,可以动态地负载均衡到Fargate任务。

4. Amazon EKS (Elastic Kubernetes Service)

  • 对于Kubernetes管理的容器应用程序,ELB可以用来平滑地分配流量到EKS集群中的Pods。

5. AWS Lambda

  • ALB可以直接触发Lambda函数,允许无服务器架构的应用程序响应HTTP/HTTPS请求。

6. AWS Auto Scaling

  • ELB与Auto Scaling紧密集成,可以根据流量增减自动调整EC2实例的数量。

7. Amazon RDS (Relational Database Service)

  • 虽然ELB不直接与RDS集成,但是可以配置应用程序在ELB后面连接到RDS数据库,从而使数据库层与应用层分离,提高可扩展性。

8. Amazon S3 (Simple Storage Service)

  • 对于静态内容,可以配置ALB通过HTTP(S)重定向到S3存储桶,以便高效地提供静态资源。

9. AWS WAF (Web Application Firewall)

  • 可以将AWS WAF与ALB和NLB集成,为应用程序提供基于规则的防护,以防止常见的网络攻击。

10. AWS Certificate Manager (ACM)

  • 与ACM集成可以轻松地在ELB上部署SSL/TLS证书,以实现安全的数据传输。

11. Amazon CloudWatch

  • ELB与CloudWatch集成,提供了监控和日志记录功能,以跟踪和分析负载均衡器的性能。

12. AWS CloudTrail

  • CloudTrail与ELB集成,可以记录所有ELB事件,帮助用户进行安全分析和操作审计。

13. AWS Global Accelerator

  • 对于全球分布的应用程序,可以使用Global Accelerator提高用户到ELB的连接速度和可靠性。

14. AWS Shield

  • 与ELB集成的AWS Shield提供了DDoS保护,以保护应用程序免受分布式拒绝服务攻击。