如何为AWS Amplify表指定读写容量单元以脱离按需模式?
在AWS Amplify中通过CloudFormation配置DynamoDB预置容量模式的最佳实践
由于AWS Amplify CLI未提供直接切换DynamoDB表计费模式的选项,以下是基于基础设施即代码(IaC)原则的最佳实践方案,确保变更可复用、可追踪且不会被Amplify后续操作覆盖:
1. 使用Amplify内置的资源覆盖机制(推荐)
Amplify允许通过override命令修改自动生成的CloudFormation资源配置,这是最贴合Amplify工作流的方式:
- 执行命令生成覆盖模板:
amplify override api - 在生成的
amplify/backend/api/<你的API名称>/override.ts(或.js)文件中,找到目标DynamoDB表资源,修改计费模式与预置吞吐量:import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper'; export function override(resources: AmplifyApiGraphQlResourceStackTemplate) { // 替换为你实际的表名,比如对应GraphQL模型的表 const targetTable = resources.tables['TodoTable']; // 设置为预置计费模式 targetTable.billingMode = 'PROVISIONED'; // 指定预置读写容量(根据业务负载调整) targetTable.provisionedThroughput = { ReadCapacityUnits: 5, WriteCapacityUnits: 5 }; } - 执行
amplify push部署变更,该配置会被纳入Amplify的版本控制体系,后续部署自动沿用。
2. 独立创建自定义DynamoDB资源
如果需要完全脱离Amplify API的自动生成逻辑,可单独定义CloudFormation模板管理表:
- 在Amplify项目中添加自定义资源:
amplify add custom - 在
amplify/backend/custom/<自定义资源名称>/template.yaml中编写表的配置:Resources: CustomProvisionedTable: Type: AWS::DynamoDB::Table Properties: TableName: CustomProvisionedTable AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: id KeyType: HASH BillingMode: PROVISIONED ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5 - 若需要关联Amplify的GraphQL API,可在API配置中通过ARN引用该自定义表,避免Amplify自动生成重复资源。
3. 保障配置的可维护性
- 将所有修改的模板文件(override脚本、自定义CloudFormation模板)加入Git版本控制,确保变更可追溯、可协作。
- 建议使用CloudFormation参数隔离环境差异,比如为开发/生产环境设置不同的预置容量:
然后在// 在override.ts中引用参数 targetTable.provisionedThroughput = { ReadCapacityUnits: resources.templateParameters.ReadCapacity || 2, WriteCapacityUnits: resources.templateParameters.WriteCapacity || 2 };amplify/team-provider-info.json中为不同环境配置参数值。
4. 安全验证变更
- 在生产环境部署前,先在测试环境执行
amplify push并查看CloudFormation变更集,确认仅修改计费模式与吞吐量,无其他意外变更。 - 切换模式后,持续监控CloudWatch中的表读写指标,根据实际负载调整预置容量,避免出现限流或资源浪费。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

