在您推送新的 Lambda 代码时,保持稳定的调用目标。
发布带编号的不可变版本;公开一个指向该版本的别名。调用者调用别名 ARN。
原因: 版本是代码 + 配置的冻结快照;别名提供了间接性,因此调用者永远不会直接调用 `$LATEST`。
AWS Certified Developer Associate
最后审核:2026年5月
DVA-C02 考试涉及的架构模式快速参考。从头到尾阅读,或跳转到任意章节。
在您推送新的 Lambda 代码时,保持稳定的调用目标。
发布带编号的不可变版本;公开一个指向该版本的别名。调用者调用别名 ARN。
原因: 版本是代码 + 配置的冻结快照;别名提供了间接性,因此调用者永远不会直接调用 `$LATEST`。
逐步推出新的 Lambda 版本,并在出错时自动回滚。
带权重版本路由(例如 90/10)的别名。CodeDeploy `LambdaCanary10Percent5Minutes` 或 `LambdaLinear*` 转移流量并监控 CloudWatch 警报。
原因: 内置的流量转移 + 警报驱动的回滚消除了手动编写的金丝雀逻辑。
无需重新部署即可注入配置(数据库 URL、功能标志)。
Lambda 环境变量。静态时通过 KMS 加密;检索时可引用自定义 CMK 进行额外的传输中加密。
在多个 Lambda 函数之间共享 NumPy / pandas / 常用运行时。
打包为 Lambda 层;每个函数最多 5 个层,总计 250 MB 解压后大小。每个层都有版本化的 ARN。
对延迟敏感的同步 Lambda —— 不允许冷启动。
在别名上配置预置并发。预初始化 N 个执行环境;按 GB-秒计费。
原因: 以可预测的成本消除冷启动。在别名上设置应用程序自动扩缩以适应负载变化。
具有大量初始化代码的 Java 或 Python Lambda;需要快速冷启动且无需支付预置并发费用。
在已发布版本上启用 SnapStart。AWS 会快照已初始化的运行时并从中恢复。
原因: Java 免费;Python/.NET 按恢复次数收费。将冷启动时间从数秒缩短到 <1 秒,且无空闲成本。
Lambda 需要消费 Kinesis 流 / DynamoDB 流 / SQS 队列 / MSK 主题。
事件源映射(拉取式)。Lambda 轮询;批处理大小 + 最大批处理窗口调整吞吐量与延迟。失败 → 通过 On-Failure 目标发送到 DLQ。
原因: 对于拉取源,服务无法直接调用 Lambda;映射是 Lambda 的轮询适配器。
异步 Lambda 成功/失败路由,无需 Lambda DLQ。
函数上的 OnSuccess / OnFailure 目标。目标:SNS、SQS、EventBridge、另一个 Lambda。包括调用上下文。
原因: 目标捕获完整的事件 + 响应;传统的 DLQ 仅捕获事件负载。
为新的 REST API 选择 API Gateway 类型。
HTTP API:更便宜、更快、内置 JWT 认证、更简单。REST API:功能齐全(映射模板、请求验证器、WAF、私有端点、X-Ray、API 缓存)。
原因: 除非您需要仅 REST 的功能,否则默认为 HTTP API。WebSocket API 是用于有状态实时场景的独立产品。
在不重新部署独立 API 的情况下,将 API 更改从开发 → 测试 → 生产环境进行推广。
单个 API 上的阶段(Stage)。部署阶段以发布;阶段变量存储环境特定的值,例如 Lambda 别名。
后端 Lambda 期望的形状与客户端发送的不同。
请求/响应映射模板(仅限 REST API)。使用 `$input`、`$context`、`$util` 进行 JSON 转换的 VTL。
原因: 映射模板在 API Gateway 中运行——没有额外的 Lambda 跳转,也没有额外的延迟或成本。
在路由请求之前,验证自定义令牌(非 Cognito,非 IAM)。
Lambda 授权方。TOKEN 类型读取头部;REQUEST 类型读取完整的请求上下文。返回 IAM 策略 + principalId。按身份缓存,具有 TTL。
在每个请求上验证 Cognito 用户池 JWT。
Cognito User Pool 授权方 (REST) 或 JWT 授权方 (HTTP)。API Gateway 验证令牌;无需 Lambda。
原因: 对于常见的 JWT 场景,原生验证比 Lambda 授权方更便宜、更快。
对合作伙伴 API 消费者进行限流/配额管理。
使用计划 (Usage Plan) + API 密钥。计划将密钥与具有速率限制(请求/秒)+ 突发 + 配额(请求/天或月)的阶段绑定。
减少重复 GET 请求的后端负载。
阶段级缓存(REST API)。TTL 可配置;缓存键从方法 + 路径 + 选定的查询/头部参数派生。
仅在满足某个前置条件(例如 status == "PENDING")时更新项目。
使用 `ConditionExpression` 的 PutItem/UpdateItem。失败会引发 `ConditionalCheckFailedException`。
原因: 服务器端检查避免了读-修改-写竞争,无需加锁。
跨多个 DynamoDB 项目的原子性操作(全部成功或全部失败)。
`TransactWriteItems` / `TransactGetItems`。最多 100 个项目 / 4 MB;WCU/RCU 成本是普通写入/读取的两倍。
无需读-修改-写即可递增计数器。
UpdateExpression `ADD count :inc`。服务器原子性地应用增量。
迭代大型查询/扫描结果集。
响应中的 `LastEvaluatedKey` → 下一次调用中的 `ExclusiveStartKey`,直到不再存在。通过 `Limit` 参数限制。
需要主键之外的额外访问模式。
GSI:备用分区 + 排序键,最终一致性,独立容量,可随时添加。LSI:相同分区键,备用排序键,强一致性选项,必须在表创建时创建。
仅索引具有特定属性的项目(例如,仅 ACTIVE 订单)。
稀疏索引:省略要排除的项目的属性。没有索引属性的项目不会出现在 GSI/LSI 中。
批量读取/写入多个项目。
`BatchGetItem`(最多 100 个项目 / 16 MB)和 `BatchWriteItem`(最多 25 个项目 / 16 MB)。非原子性;部分失败在 `UnprocessedItems` 中返回。
防止并发写入器造成更新丢失。
版本属性 + `ConditionExpression: version = :v`。失败的写入通过重新读取来重试。
在每次 DynamoDB 更改时触发下游操作。
DynamoDB Streams + Lambda 事件源映射。流视图:NEW_IMAGE / OLD_IMAGE / NEW_AND_OLD_IMAGES / KEYS_ONLY。
浏览器直接上传/下载到 S3,无需您的服务器代理字节。
SDK `getSignedUrl` 用于 GET 或 PUT。由 IAM 用户签名(sigv4)时有效期最长 7 天;由角色派生的会话有效期更短。
原因: 减轻后端带宽压力;URL 是一种临时功能,作用域为一个对象 + 方法。
从 SDK 可靠地上传大型文件 (≫100 MB)。
`CreateMultipartUpload` → 并行 `UploadPart` → `CompleteMultipartUpload`。SDK 高级传输管理器自动处理分块大小。
原因: 必需 >5 GB;建议 ≥100 MB。失败的分块独立重新上传。设置生命周期以中止不完整的多部分上传,以回收存储空间。
当 S3 中创建/删除对象时运行代码。
S3 事件通知 → Lambda / SNS / SQS / EventBridge。按前缀和后缀过滤。
浏览器应用程序从 S3 跨源获取数据 (`fetch('https://bucket.s3...')`);CORS 预检失败。
配置存储桶 CORS 规则:允许的来源、方法 (GET/PUT)、头部和公开的头部。
无需下载即可从 50 GB CSV/JSON/Parquet 对象中过滤行。
使用 SQL 的 S3 Select。仅返回匹配的行;按扫描 + 返回的字节付费。
从公共移动/Web 客户端登录用户,无需发送密码。
使用 `USER_SRP_AUTH` 流程的 Cognito 用户池。客户端计算 SRP 证明;后端永远不会看到密码。返回 ID + 访问 + 刷新令牌。
联合用户(Google/Apple/Cognito 用户池)需要临时 AWS 凭证才能直接从移动应用程序调用 AWS API。
Cognito 身份池。通过 STS 交换身份提供商令牌 → IAM 角色 → 临时 AWS 凭证。
原因: 用户池用于用户认证;身份池用于授权用户访问 AWS 资源。
选择 Step Functions 工作流类型。
Standard: 长期运行(≤1 年),恰好一次,每 1k 次转换 $0.025,完整历史记录。Express:≤5 分钟,至少一次或至多一次,按请求 + 持续时间计费;适用于高容量 ETL/流式传输。
工作流步骤失败;希望进行带退避的重试并路由到恢复状态。
`Retry` 数组(按状态,带 `BackoffRate` + `MaxAttempts`)和 `Catch` 用于终端失败路由。按 `ErrorEquals` 匹配(例如 `States.TaskFailed`,自定义错误名称)。
将相同的工作流应用于数组中的每个项目,并带有并发限制。
带 `ItemsPath` 和 `MaxConcurrency` 的 Map 状态。分布式 Map 通过 S3 支持的输入处理 10k+ 项目。
根据 cron 计划或匹配传入事件触发 Lambda。
EventBridge 规则。计划:`rate(...)` 或 `cron(...)`。模式:JSON 事件过滤器;匹配来源、详细信息类型、详细信息字段。
将来自 SQS / Kinesis / DynamoDB Streams / MSK 的事件路由到具有可选过滤器 + 转换的目标。
EventBridge Pipes。源 → 过滤器 → 丰富(Lambda/Step Functions) → 目标。对于简单情况无需 Lambda。
按客户严格按顺序处理消息,并进行去重。
SQS FIFO 队列。`MessageGroupId` 划分排序(每组并行);`MessageDeduplicationId`(或基于内容的去重)在 5 分钟内丢弃重复项。
消费者拉取消息但在删除之前崩溃。
消息隐藏 `VisibilityTimeout` 秒,然后重新出现以进行重新投递。调整到最长预期处理时间 + 缓冲区。
原因: 太短 → 重复处理。太长 → 崩溃时恢复缓慢。如有需要,`ChangeMessageVisibility` 可以延长消息在途时间。
一个事件必须到达多个消费者(Lambda / SQS 队列 / HTTP 端点)。
具有多个订阅者的 SNS 主题。订阅筛选策略仅路由与每个订阅者匹配的消息。
调整 Kinesis Data Streams 容量以实现写入吞吐量。
每个分片 = 1 MB/秒或 1000 条记录/秒入,2 MB/秒出。添加分片(拆分)或使用按需模式进行自动扩缩。
EC2 / ECS 任务 / Lambda 上的代码需要 AWS 访问权限 — 无嵌入式密钥。
通过实例配置文件 (EC2) 或任务/执行角色 (ECS/Lambda) 附加 IAM 角色。SDK 从元数据服务拉取临时凭证;自动轮换。
从应用程序代码或 CLI 进行跨账户访问。
调用者主体通过 `sts:AssumeRole`。目标角色的信任策略将调用者列为 `Principal`。返回临时凭证(最长 12 小时)。
跨账户 AssumeRole 失败 — 权限似乎正确。
两者都必须设置:目标角色上的信任策略将调用者列为 Principal;调用者的身份策略允许对目标角色 ARN 进行 `sts:AssumeRole`。
原因: 信任 = 谁可以担任。权限 = 担任后可以做什么。两者缺失其一 → AccessDenied。
仅授予用户访问其 S3 中自己文件夹的策略。
在资源 ARN 中使用 `${aws:username}` 或 `${aws:PrincipalTag/X}`:`arn:aws:s3:::bucket/${aws:username}/*`。
让团队自行管理 IAM 角色,但限制他们可以授予的权限。
在团队创建者角色上设置权限边界策略。他们创建的任何带有边界的角色,其有效权限都是身份策略 + 边界的交集。
按源 IP / VPC / 区域 / MFA 限制操作。
策略 `Condition`:`aws:SourceIp`、`aws:SourceVpc`、`aws:SourceVpce`、`aws:RequestedRegion`、`aws:MultiFactorAuthPresent`。
SPA / 移动客户端与调用 Cognito 的服务器端服务。
公共客户端(SPA、移动)→ 无 secret 的应用程序客户端。机密客户端(服务器)→ 带有 secret 的应用程序客户端;客户端必须包含 `SECRET_HASH`(username + clientId 的 HMAC)。
区分 Cognito ID 令牌、访问令牌和刷新令牌。
ID = 用户身份声明(在客户端消费)。Access = 用于 API 的范围授权。Refresh = 获取新的 ID/访问令牌。除了 Refresh 令牌外,都是 JWT。
无需构建表单即可即插即用的登录/注册 UI。
Cognito Hosted UI。OAuth2 授权码流程:重定向到 `/oauth2/authorize` → 带 `code` 的回调 URL → 在 `/oauth2/token` 交换。
直接使用 KMS 加密小秘密(≤4 KB)。
`kms:Encrypt` 返回包含密钥 ARN 的密文 Blob。如果调用者具有权限并且(如果指定)`EncryptionContext` 匹配,`kms:Decrypt` 会恢复明文。
使用 KMS 加密大数据,而不会触及 4 KB 的直接加密限制。
信封加密。`GenerateDataKey` 返回明文 + 加密的 DEK;使用 DEK 在本地加密数据,将加密的 DEK 存储在旁边,丢弃明文 DEK。
原因: KMS 对小型 DEK 强制执行访问控制;批量加密在本地以线路速度进行。
授予另一个主体对 CMK 的有时限访问权限,无需编辑密钥策略。
创建 `kms:CreateGrant` 授权,限定操作 + 授权者。使用 `RetireGrant` 撤销。
间接引用 KMS 密钥,以便底层 CMK 可以轮换而无需更改代码。
使用 `alias/my-key`(或 `arn:aws:kms:region:acct:alias/my-key`)。更新别名以指向新的 CMK;消费者继续工作。
选择凭证存储。
Secrets Manager:内置轮换,原生 RDS/Redshift/DocumentDB 集成,每秘密每月 $0.40。Parameter Store SecureString:免费套餐(Standard),无内置轮换,分层 `/app/env/key` 路径。
自动轮换 RDS 凭证。
Secrets Manager 原生轮换(托管 Lambda)用于 Aurora/RDS/DocumentDB/Redshift。主/用户模式使用单独的主秘密来轮换用户秘密。
在 Parameter Store 中存储一个静态 KMS 加密的配置值。
SecureString 参数类型。为自定义 CMK 指定 `--key-id`;否则使用 `aws/ssm`。解密需要对 CMK 具有 `kms:Decrypt` 权限。
将 CloudFront 访问权限限制为经过身份验证的用户。
签名 URL(单个资源)或签名 Cookie(多个资源、SPA/流媒体)。使用存储在 CloudFront 密钥组中的 CloudFront 密钥对作为公钥进行签名。
选择 S3 服务器端加密。
SSE-S3(托管 AES-256,默认)、SSE-KMS(CMK,通过 CloudTrail 审计,密钥策略)、SSE-C(客户提供密钥,您管理)、DSSE-KMS(高合规性双层加密)。
查找授予账户外部访问权限或权限过高的角色/策略。
IAM Access Analyzer。查找外部访问;从 CloudTrail 历史记录生成策略以实现最小权限调整。
Lambda 环境变量包含敏感值。
Lambda 默认使用 KMS 对静态环境变量进行加密。对于传输中/解密控制,配置自定义 CMK 并使用控制台中的加密助手来传输预加密的密文。
浏览器 → 带有 `Authorization` 头部信息的 API Gateway 被预检请求阻塞。
添加 OPTIONS 方法(模拟集成)。在 `Access-Control-Allow-Headers` 中允许 `Authorization`;在 `Access-Control-Allow-Origin` 中允许调用者。
从非 SDK 代码向 AWS 服务签署自定义 HTTP 请求。
Sigv4:从 secret + 日期 + 区域 + 服务派生签名密钥;规范化请求;签名;添加 `Authorization`、`X-Amz-Date`、`X-Amz-Security-Token` 头部。
担任一个广泛的角色,但针对特定会话缩小范围。
`AssumeRole` 与 `Policy`(内联会话策略)一起进一步限制有效权限:角色 + 会话策略的交集。
即使 IAM 策略允许,S3 访问也被拒绝。
存储桶策略和身份策略都会被评估。任何地方的显式拒绝都会生效。公共访问阻止设置也可以覆盖允许。
构建 CI/CD 管道:源 → 构建 → 测试 → 部署,并进行手动生产审批。
CodePipeline 阶段,每个阶段包含一个或多个操作。在测试和部署之间添加手动审批操作。源 = CodeCommit / GitHub / S3 / ECR。
为 CodeBuild 定义构建步骤。
仓库根目录下的 `buildspec.yml`。阶段:`install`、`pre_build`、`build`、`post_build`。输出:`artifacts.files`、`cache.paths`。通过 `env.variables` 或 Parameter Store/Secrets Manager 引用环境变量。
将 Lambda 流量先转移 10%,然后 100%,并在警报触发时自动回滚。
CodeDeploy 与 `LambdaCanary10Percent5Minutes` / `10Percent10Minutes` / `10Percent15Minutes` / `10Percent30Minutes` 配合使用。在 DeploymentGroup 中配置 CloudWatch 警报。
以等量增量逐步推出 Lambda。
`LambdaLinear10PercentEvery1Minute` / `2Minutes` / `3Minutes` / `10Minutes`。每次增量转移 +10%,直到 100%。
ALB 后面的 ECS 服务的蓝/绿部署。
CodeDeploy 计算平台 = ECS。创建绿色任务集;ALB 将侦听器转移到绿色目标组;在流量切换前和终止蓝色任务集前可选手动批准。
更新 EC2 机群,无需整个机群停机。
使用 `OneAtATime` / `HalfAtATime` / `AllAtOnce` 配置进行原地部署。自动扩缩组钩子在部署期间暂停新实例启动。
在 AWS 内部托管 Git 仓库,并使用 IAM 控制访问。
CodeCommit。认证:每个 IAM 用户的 SSH 密钥,每个 IAM 用户的 HTTPS Git 凭证,或 AWS CLI 凭证助手。通过 SNS / Lambda 在推送时触发。
为无服务器应用程序选择 IaC 工具。
CDK:编程语言 (TS/Python/Java/Go/.NET),完整的应用程序构造,多资源模式。SAM:CFN 的 YAML 扩展,专注于无服务器,更简单。两者都编译为 CloudFormation。
使用最少的 YAML 定义 Lambda + API Gateway + DynamoDB 堆栈。
`Transform: AWS::Serverless-2016-10-31`。资源:`AWS::Serverless::Function`、`Api`、`SimpleTable`。`sam build` → `sam deploy --guided`。
编写 CDK 代码结构。
`App` 包含一个或多个 `Stack`。每个 Stack 包含构造 (L1/L2/L3)。`cdk synth` → CFN 模板。`cdk deploy` 通过 CFN 部署。
选择 CDK 构造级别。
L1 = 原始 CFN (`CfnXxx`)。L2 = 带有安全默认值的精选包装器(最常见)。L3 = 结合多个资源以实现完整架构的模式(例如 `LambdaRestApi`)。
在应用到 CloudFormation 堆栈之前预览更改。
`create-change-set` → 查看添加/修改/替换的 JSON → `execute-change-set`。替换操作会导致资源重新创建。
堆栈更新中途失败。
CloudFormation 自动回滚,除非 `DisableRollback` 为 true。停留在 `UPDATE_ROLLBACK_FAILED`?使用 `ContinueUpdateRollback` 和 `ResourcesToSkip`。
在堆栈更新期间防止关键资源(例如 RDS 数据库)意外更新。
堆栈策略:JSON 拒绝在资源的逻辑 ID 上执行 `Update:Replace` 和 `Update:Delete`。通过特定更新上的显式覆盖来绕过。
跨堆栈重用基础设施。
嵌套堆栈(`AWS::CloudFormation::Stack` 与 `TemplateURL`)用于由一个父级拥有的重用。通过输出 + `Fn::ImportValue` 实现跨堆栈的紧密耦合。
将 Parameter Store 值或 Secrets Manager 秘密注入 CFN 模板。
`{{resolve:ssm:/path/to/param}}`、`{{resolve:ssm-secure:/path}}`、`{{resolve:secretsmanager:secret-id:SecretString:json-key}}`。在部署时解析。
选择 Elastic Beanstalk 部署策略。
一次性全部 (All-at-once)(最快,有停机时间),滚动 (Rolling)(无额外实例,部分容量),带额外批次的滚动 (Rolling with additional batch)(无容量损失,额外成本),不可变 (Immutable)(新 ASG,最安全),蓝/绿 (Blue/Green)(独立环境,交换 CNAME)。
自定义 Elastic Beanstalk 环境(软件包、文件、容器命令)。
源包中的 `.ebextensions/*.config` YAML。较新的平台:`.platform/hooks/...` shell 脚本用于预构建/预部署/后部署生命周期。
需要一个稳定、永不变更的 Lambda 工件。
发布一个带编号的版本。代码 + 大部分配置(内存、超时、环境变量、层)冻结。`$LATEST` 是可变的;带编号的版本是不可变的。
将 Docker 镜像推送到 ECR,供 ECS / EKS / Lambda 使用。
`aws ecr get-login-password | docker login` → `docker tag` → `docker push`。Lambda 容器镜像:部署时拉取一次镜像;标记的镜像必须在同一区域。
在 ECS 上运行一次性批处理与长时间运行的 Web 服务。
RunTask = 单个任务,完成并退出。Service = 维护 N 个期望的任务,重启失败,与 ALB/NLB 集成。
降低容错 ECS 工作负载的计算成本。
Fargate Spot 容量提供商。通过权重和基数与常规 Fargate 混合使用。任务可能会在 2 分钟警告后中断。
跟踪一个请求,该请求在 Lambda → DynamoDB → 外部 HTTP 之间扇出。
每个服务跳段的 X-Ray 段,下游调用的子段。服务映射可视化拓扑 + 延迟。采样规则限制容量。
将可搜索数据与参考数据附加到 X-Ray 跟踪。
Annotations:在控制台中可索引、可过滤(例如 `customerId`、`tier`)。Metadata:不索引、自由格式(请求正文、调试用的响应正文)。
生产环境中 X-Ray 成本很高。
自定义采样规则。默认:前 1 req/s + 额外 5%。规则按服务 / URL 路径 / 方法匹配。
查询过去一小时内 Lambda 日志中的错误,按 5 分钟桶分组。
CloudWatch Logs Insights:`fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(5m)`。
从日志模式生成自定义指标(例如 `OutOfMemoryError` 的计数)。
日志组上的指标过滤器。模式匹配日志事件;过滤器创建您可以设置警报的自定义 CloudWatch 指标。
无需单独的 `PutMetricData` API 调用即可从 Lambda 发出自定义指标。
嵌入式指标格式 (Embedded Metric Format):将结构化 JSON 写入 stdout;CloudWatch 解析日志并创建指标。更便宜且异步。
原因: 将指标路径与请求路径解耦;没有 API 延迟或额外的 IAM 权限。
应用程序每秒发出高分辨率自定义指标。
`PutMetricData` 与 `StorageResolution=1` 结合使用,实现 1 秒粒度。标准分辨率为 60 秒;高分辨率成本更高。
Lambda 冷启动影响 p99 延迟目标。
为可预测负载使用 Provisioned Concurrency。对于 Java/Python 初始代码量大的情况使用 SnapStart。精简依赖项,使用 ARM/Graviton,将繁重的初始化移到处理程序之外。
选择 Lambda 内存以获得最佳成本/延迟。
内存还会扩展 CPU + 网络。使用 AWS Lambda Power Tuning 状态机来扫描内存,并找到适合您工作负载的最佳点。
长时间的 Lambda 调用触及 15 分钟的硬限制。
分解为 Step Functions;卸载到 Fargate(长时间运行)或 Batch(HPC)。Lambda 最长 900 秒;不可协商。
来自 Lambda 的 `TooManyRequestsException`;并发限制已达。
每个函数保留并发(限制 + 保留)或请求账户级别限制增加。异步调用排队并重试;同步调用出错。
DynamoDB 返回 `ProvisionedThroughputExceededException`。
CloudWatch `WriteThrottleEvents` / `ReadThrottleEvents`。切换到按需模式,增加预置容量,或通过更好的键设计修复热分区。
一个分区键获得不成比例的流量;在低聚合负载下发生限流。
重新设计高基数分区键。对于写入:使用随机分片作为前缀(例如 `shard#user`);对于读取:跨分片进行分散-收集。
无需更改应用程序逻辑即可实现微秒级 DynamoDB 读取延迟。
DAX 集群 + DAX SDK 作为 DynamoDB SDK 的即插即用替代。读取从内存缓存提供;写入通过缓存写入表。
为 ElastiCache / DAX 选择缓存策略。
惰性加载(缓存未命中 → 数据库 → 填充缓存):仅缓存请求的数据,但易过时。直写(每次写入都写入缓存 + 数据库):始终最新,但写入有额外成本。TTL 无论哪种方式都限制了过时。
API Gateway 返回 429 Too Many Requests。
默认账户级别:10,000 req/sec + 5,000 突发。每个阶段和每个方法可覆盖;通过使用计划实现每个键的限流,用于合作伙伴层控制。
高流量期间 AWS 服务出现瞬时错误。
AWS SDK 自动以指数退避 + 抖动进行重试。配置 `RetryMode = adaptive` 或 `standard`;调整 `maxAttempts`。
部署后 CloudFront 提供过时内容。
使路径失效(`/index.html`,`/*`)——每月超过 1000 个免费路径后按路径计费。更好的是:版本化文件名(`app.abc123.js`),这样可以自然地绕过缓存。