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

Amazon web services 如何使用云形成模板自动缩放DynamoDB?,amazon-web-services,amazon-dynamodb,amazon-cloudformation,Amazon Web Services,Amazon Dynamodb,Amazon Cloudformation,创建DynamoDB CloudFormation模板时,需要指定ProvisionedThroughput: 但是我也看到了这个文档,它说当您通过控制台创建一个表时,自动缩放是默认设置的 我的问题是:我需要对Cloudformation做一些特殊的事情来让我的DynamoDB表自动缩放吗?使用Cloudformation配置自动缩放DynamoDB还不可用 AWS服务的新功能通常不会立即得到CloudFormation的支持。添加支持时的延迟可能会有所不同,但通常需要几个月的时间 编辑

创建DynamoDB CloudFormation模板时,需要指定ProvisionedThroughput:

但是我也看到了这个文档,它说当您通过控制台创建一个表时,自动缩放是默认设置的

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

使用Cloudformation配置自动缩放DynamoDB还不可用


AWS服务的新功能通常不会立即得到CloudFormation的支持。添加支持时的延迟可能会有所不同,但通常需要几个月的时间


编辑

Amazon刚刚宣布,这是如何在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"
          }
        }
      }
    }
  }
}
这似乎有效:

"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"
},
“ReadScaling”:{
“类型”:“AWS::ApplicationAutoScaling::ScalableTarget”,
“财产”:{
“最大容量”:,
“最小容量”:,
“资源ID”:“表/”,
“RoleARN”:“,
“ScalableDimension”:“dynamodb:table:ReadCapacityUnits”,
“ServiceNamespace”:“dynamodb”
}
},
“ReadScalingPolicy”:{
“类型”:“AWS::ApplicationAutoScaling::ScalingPolicy”,
“财产”:{
“PolicyName”:“ReadScalingPolicy”,
“策略类型”:“TargetTrackingScaling”,
“资源ID”:“表/”,
“ScalableDimension”:“dynamodb:table:ReadCapacityUnits”,
“ServiceNamespace”:“dynamodb”,
“TargetTrackingScalingPolicyConfiguration”:{
“预定义的度量规范”:{
“预定义的度量类型”:“DynamoDBReadCapacityUtilization”
},
“ScaleInColdown”:“60”,
“ScaleOutColdown”:“60”,
“TargetValue”:“70”
}
},
“DependsOn”:“ReadScaling”
},

有关IAM角色的规范,请参见

可以使用CloudFormation完成自动缩放

参考这个