AWS 专题学习 P8 (ECS、EKS、Lambda、CloudFront、DynamoDB)-Serverless 概述

时间:2024-01-24 22:48:57

什么是无服务?

  • 无服务是一种新范式,开发人员无需再管理服务器…
  • 只部署xx代码、xx功能!
  • 最初,无服务 == FaaS(函数即服务)
  • 无服务由 AWS Lambda 开创,但现在还包括任何托管内容:“数据库、消息传递、存储等”。

AWS 中的无服务

  • AWS Lambda
  • DynamoDB
  • AWS Cognito
  • AWS API Gateway
  • Amazon S3
  • AWS SNS & SQS
  • AWS Kinesis Data Firehose
  • Aurora Serverless
  • Step Functions
  • Fargate
    Screenshot 2023-08-06 at 13.22.33.png |

为什么选择 AWS Lambda

  • Amazon EC2
    • 云中的虚拟服务器
    • 受 RAM 和 CPU 限制
    • 连续运行
    • 扩展意味着需要人工干预去添加/删除服务器
  • Amazon Lambda
    • 虚拟功能——无需管理服务器!
    • 受时间限制 - 执行时间短
    • 按需运行
    • 缩放是自动的!

AWS Lambda 的优点

  • 轻松定价:
    • 按请求和计算时间付费
    • 提供免费的使用额度,包括1,000,000个AWS Lambda请求和400,000 GB的计算时间
  • 与整个 AWS 服务套件集成
  • 与多种编程语言集成
  • 通过AWS CloudWatch 轻松监控
  • 轻松为函数获取更多资源(高达 10GB RAM!)
  • 增加 RAM 也能提高CPU和网络性能

AWS Lambda 语言支持

  • Node.js (JavaScript)
  • Python
  • Java(兼容 Java 8)
  • C#(.NET 核心)
  • Go 语言
  • C# / Powershell
  • 红宝石
  • 自定义运行时 API(社区支持,例如 Rust)
  • Lambda 容器映像
    • 容器映像必须实现Lambda Runtime API
    • ECS / Fargate 是运行任意 Docker 镜像的首选

AWS Lambda 集成

Main ones
Screenshot 2023-08-06 at 13.24.42.png
示例:无服务缩略图创建
Screenshot 2023-08-06 at 13.25.22.png
示例:无服务 CRON 作业
Screenshot 2023-08-06 at 13.26.07.png

AWS Lambda 定价:示例

  • 用户可以在此处找到总体定价信息:
    https://aws.amazon.com/lambda/pricing/
  • 按调用量付费:
    • 前 1,000,000 个请求免费
    • 此后每 100 万个请求 0.20 美元(每个请求 0.0000002 美元)
  • 按持续时间付费:(以 1 毫秒为增量)
    • 每月免费 400,000 GB-秒 的计算时间
      • exp: 400,000 秒(如果函数为 1GB RAM)
      • exp: 3,200,000 秒(如果函数为 128 MB RAM)
    • 此后 600,000 GB 秒 1.00 美元
  • 运行 AWS Lambda 通常非常便宜,因此非常受欢迎

AWS Lambda 的限制(per region)

  • 执行:
    • 内存分配:128 MB ~ 10GB(1 MB 增量)
    • 最长执行时间:900 秒(15 分钟)
    • 环境变量 (4 KB)
    • “功能容器”中的磁盘容量(/tmp):512 MB 至 10GB
    • 并发执行:1000(可以增加)
  • 部署:
    • Lambda 函数部署大小(压缩的.zip):50 MB
    • 未压缩部署的大小(代码+依赖项):250 MB
    • 可以使用/tmp目录在启动时加载其他文件
    • 环境变量的大小:4 KB

Customization At The Edge

  • 许多现代应用程序在边缘执行某种形式的逻辑
  • 边缘功能:
    • 用户编写并附加到 CloudFront 分配的代码
    • 靠近用户运行以最大限度地减少延迟
  • CloudFront 提供两种类型:CloudFront Functions 和 Lambda@Edge
  • 用户无需管理全球部署的任何服务器
  • 使用案例:定制CDN 内容
  • 仅按使用量付费
  • 完全无服务

CloudFront Functions vs. Lambda@Edge

Screenshot 2023-08-06 at 13.26.44.png
用例:

  • 网站安全和隐私
  • 边缘的动态 Web 应用程序
  • 搜索引擎优化(SEO)
  • 智能路由跨源和数据中心
  • 边缘机器人缓解
  • 实时图像转换
  • A/B 测试
  • 用户身份验证和授权
  • 用户优先级
  • 用户跟踪和分析

CloudFront Functions

  • 用 JavaScript 编写的轻量级函数
  • 适用于大规模、延迟敏感的 CDN 定制
  • 亚毫秒级启动时间,每秒数百万个请求
  • 用于更改查看器请求和响应:
    • 查看者请求:CloudFront 收到查看者的请求后
    • 查看器响应:在 CloudFront 将响应转发给查看器之前
  • CloudFront 的本机功能(完全在 CloudFront 内管理代码)

Lambda@Edge

  • 用 NodeJS 或 Python 编写的 Lambda 函数
  • 可扩展到每秒 1000 个请求
  • 用于更改 CloudFront 请求和响应:
    • 查看者请求:CloudFront 收到查看者的请求后
    • 源请求:在 CloudFront 将请求转发到源之前
    • 源响应:CloudFront 收到来自源的响应后
    • 查看器响应:在 CloudFront 将响应转发给查看器之前
  • 在一个 AWS 区域 (us-east-1) 中编写用户的函数,然后 CloudFront 复制到其位置

总结

CloudFront Functions

  • 缓存键规范化
    • 转换请求属性(标头、cookie、查询字符串、URL)以创建最佳缓存键
  • Header 操作
    • 在请求或响应中插入/修改/删除 HTTP 标头
  • URL 重写或重定向
  • 请求身份验证和授权
    • 创建并验证用户生成的令牌(例如 JWT)以允许/拒绝请求
      在这里插入图片描述

Lambda@Edge

  • 较长的执行时间(几毫秒)
  • 可调节CPU或内存
  • 用户的代码依赖于第三个库(例如,用于访问其他 AWS 服务的 AWS SDK)
  • 网络访问以使用外部服务进行处理
  • 文件系统访问或对 HTTP 请求正文的访问
    Screenshot 2023-08-06 at 13.30.38.png

默认的 Lambda

  • 默认情况下,用户的 Lambda 函数在用户自己的 VPC 外部(在 AWS 拥有的 VPC 中)启动
  • 因此,它无法访问用户的VPC 中的资源(RDS、ElastiCache、内部ELB…)

Screenshot 2023-08-06 at 13.32.37.png

VPC 中的 Lambda

  • 用户必须定义 VPC ID、子网和安全组
  • Lambda 将在用户的子网中创建 ENI(弹性网络接口)

Screenshot 2023-08-06 at 13.32.59.png

带有 RDS 代理的 Lambda

  • 如果 Lambda 函数直接访问用户的数据库,它们可能会在高负载下打开太多连接
  • RDS 代理
    • 通过池化和共享数据库连接来提高可扩展性
    • 通过减少 66% 的故障转移时间并保留连接来提高可用性
    • 通过在 Secrets Manager 中强制执行 IAM 身份验证和存储凭证来提高安全性
  • Lambda 函数必须部署在用户的 VPC 中,因为 RDS Proxy 永远无法公开访问

Screenshot 2023-08-06 at 13.33.42.png