当前位置: 首页 > 知识库问答 >
问题:

如何使用云形成模板自动缩放DynamoDB?

姬飞昂
2023-03-14

创建DynamoDB CloudForm模板时,您需要指定提供吞吐量:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb表格已提交

但我也看到了这篇文档,其中指出,当您通过控制台创建表时,默认情况下会设置自动缩放。

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ProvisionedThroughput.html#HowItWorks.ProvisionedThroughput.AutoScaling

我的问题是:为了让我的DynamoDB表自动缩放,我需要对Cloudformation做一些特殊的事情吗?

共有3个答案

滕弘新
2023-03-14

这似乎有效:

"ReadScaling" : {
  "Type" : "AWS::ApplicationAutoScaling::ScalableTarget",
  "Properties" : {
    "MaxCapacity" : "<MAX CAPACITY>,
    "MinCapacity" : "<MIN CAPACITY>,
    "ResourceId" : "table/<TABLE NAME>",
    "RoleARN" : "<IAM ROLE ARN>",
    "ScalableDimension" : "dynamodb:table:ReadCapacityUnits",
    "ServiceNamespace" : "dynamodb"
  }
},

"ReadScalingPolicy" : {
  "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy",
  "Properties" : {
    "PolicyName" : "ReadScalingPolicy",
    "PolicyType" : "TargetTrackingScaling",
    "ResourceId" : "table/<TABLE NAME>",
    "ScalableDimension" : "dynamodb:table:ReadCapacityUnits",
    "ServiceNamespace" : "dynamodb",
    "TargetTrackingScalingPolicyConfiguration" : {
      "PredefinedMetricSpecification": {
        "PredefinedMetricType": "DynamoDBReadCapacityUtilization"
      },
      "ScaleInCooldown" : "60",
      "ScaleOutCooldown" : "60",
      "TargetValue" : "70"
    }
  },
  "DependsOn" : "ReadScaling"
},

看见http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AutoScaling.CLI.html有关IAM角色的规范

鲜于致远
2023-03-14

自动缩放可以使用云形成完成。

请参考此答案。

王凌
2023-03-14

尚未使用CloudFormation配置自动缩放DynamoDB

云形成通常不会立即支持AWS服务的新功能。添加支持的延迟可能会有所不同,但通常需要数月时间。

编辑

Amazon刚刚宣布了目标跟踪策略,这就是如何使用单独的资源类型AWS::ApplicationAutoScaling::ScalingPolicy在CloudFormation中实现的。

您仍然需要使用特定的读写吞吐量配置DynamoDB表,但要分别配置读的缩放策略和写的另一个策略。

Amazon在其文档中提供了以下示例。

{
  "Resources": {
    "DDBTable": {
      "Type": "AWS::DynamoDB::Table",
      "Properties": {
        "AttributeDefinitions": [
          {
            "AttributeName": "ArtistId",
            "AttributeType": "S"
          },
          {
            "AttributeName": "Concert",
            "AttributeType": "S"
          },
          {
            "AttributeName": "TicketSales",
            "AttributeType": "S"
          }
        ],
        "KeySchema": [
          {
            "AttributeName": "ArtistId",
            "KeyType": "HASH"
          },
          {
            "AttributeName": "Concert",
            "KeyType": "RANGE"
          }
        ],
        "GlobalSecondaryIndexes": [
          {
            "IndexName": "GSI",
            "KeySchema": [
              {
                "AttributeName": "TicketSales",
                "KeyType": "HASH"
              }
            ],
            "Projection": {
              "ProjectionType": "KEYS_ONLY"
            },
            "ProvisionedThroughput": {
              "ReadCapacityUnits": 5,
              "WriteCapacityUnits": 5
            }
          }
        ],
        "ProvisionedThroughput": {
          "ReadCapacityUnits": 5,
          "WriteCapacityUnits": 5
        }
      }
    },
    "WriteCapacityScalableTarget": {
      "Type": "AWS::ApplicationAutoScaling::ScalableTarget",
      "Properties": {
        "MaxCapacity": 15,
        "MinCapacity": 5,
        "ResourceId": { "Fn::Join": [
          "/",
          [
            "table",
            { "Ref": "DDBTable" }
          ]
        ] },
        "RoleARN": {
          "Fn::GetAtt": ["ScalingRole", "Arn"]
        },
        "ScalableDimension": "dynamodb:table:WriteCapacityUnits",
        "ServiceNamespace": "dynamodb"
      }
    },
    "ScalingRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "application-autoscaling.amazonaws.com"
                ]
              },
              "Action": [
                "sts:AssumeRole"
              ]
            }
          ]
        },
        "Path": "/",
        "Policies": [
          {
            "PolicyName": "root",
            "PolicyDocument": {
              "Version": "2012-10-17",
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": [
                    "dynamodb:DescribeTable",
                    "dynamodb:UpdateTable",
                    "cloudwatch:PutMetricAlarm",
                    "cloudwatch:DescribeAlarms",
                    "cloudwatch:GetMetricStatistics",
                    "cloudwatch:SetAlarmState",
                    "cloudwatch:DeleteAlarms"
                  ],
                  "Resource": "*"
                }
              ]
            }
          }
        ]
      }
    },
    "WriteScalingPolicy": {
      "Type": "AWS::ApplicationAutoScaling::ScalingPolicy",
      "Properties": {
        "PolicyName": "WriteAutoScalingPolicy",
        "PolicyType": "TargetTrackingScaling",
        "ScalingTargetId": {
          "Ref": "WriteCapacityScalableTarget"
        },
        "TargetTrackingScalingPolicyConfiguration": {
          "TargetValue": 50.0,
          "ScaleInCooldown": 60,
          "ScaleOutCooldown": 60,
          "PredefinedMetricSpecification": {
            "PredefinedMetricType": "DynamoDBWriteCapacityUtilization"
          }
        }
      }
    }
  }
}
 类似资料:
  • 我正在尝试为AWS CloudFormation模板制定逻辑流程,该模板将承担IAM角色,可以从另一个AWS帐户的S3存储桶中提取文件。 到目前为止,我得到的是: accountA有一个角色a roleA的策略允许sts:AssumeRole作为accountB:arn:aws:iam::1112223444:role/AllowPullS3中的角色 accountB的角色(AllowPullS3

  • 问题内容: 我需要使用matplotlib获取一个自动拟合数据的图。这是我得到的代码: 这样就创建了一个图,但是无论数据是什么,窗口都始终是相同的(0-〜.8),即使所有数据都在该窗口之外。生成的窗口无法放大,只能放大,因此这是一个主要问题。我找不到在任何地方设置任何类型的大小设置的地方,II也找不到关于默认值的详细信息。我需要一个窗口来自动拟合数据,但是我找不到能执行此操作的任何函数(由于某些原

  • 问题内容: 我有一个带有代码的JPanel。当我用鼠标滚轮滚动时,我希望面板朝着面板中间的位置放大。当前,每当我用鼠标滚轮放大/缩小时,图像左上角的角都保持在同一位置。我很难找到正确的算法。 为了放大图片,代码使用AffineTransform对象,该对象根据双精度值缩放图像,该值根据鼠标滚轮的移动而增大或减小。 还增加了复杂性的是,还可以在面板周围单击和拖动图像。如果单击并拖动它,则缩放仍必须放

  • 我有以下的云形成模板片段。整个模板创建了ECS法门集群以及所有资源。但是现在,我面临着法门服务和任务定义的问题。 模板的服务部分如下所示: 服务: 任务定义如下: 任务定义: 我知道,fargate服务和任务定义在集群中是相互关联的。但问题是,如何使用模板建立这种关系。 我收到以下失败事件: 任务定义中不存在容器abc服务开发人员。(服务:AmazonECS;状态代码:400;错误代码:Inval

  • 我正在尝试HPA:https://kubernetes.io/docs/tasks/run-application/hosteral-pod-autoscale/ HPA: 并创建了新的吊舱: 正如您所看到的,我使用的是,它不支持访问模式。 我发现了一些东西:没有什么可以确保新扩展的pod将与第一个pod运行在同一个节点上。因此,如果卷插件不支持,并且缩放的pod在另一个节点上运行,则它将无法挂载

  • 我有一个向 SNS 主题发送通知的 AWS λ。 Lambda函数 我们使用云形成模板来部署 、 和 。如何访问通过云信息创建的主题的 ARN。 云形成模板