[英]How Do I autoscale DynamoDB with a Cloud Formation Template?
創建DynamoDB CloudFormation模板時,需要指定ProvisionedThroughput:
但我也看到這個文檔說,當你通過控制台創建一個表時,默認情況下會設置Auto Scaling。
我的問題是:我是否需要使用Cloudformation來使DynamoDB表自動縮放?
配置Auto Scaling使用CloudFormation尚不可用DynamoDB。
CloudFormation不會立即支持AWS服務的新功能。 添加支持的時間延遲可能會有所不同,但往往需要數月時間。
編輯
亞馬遜剛剛宣布了目標跟蹤策略 ,這是使用單獨的資源類型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"
}
}
}
}
}
}
可以使用CloudFormation完成自動縮放。
請參閱此答案 。
這似乎有效:
"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"
},
有關IAM角色的規范,請參見http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AutoScaling.CLI.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.