Aws Dynamodb - 如何在 cloudformation 中重用自动缩放的 ScalableTarget

Aws Dynamodb - how to reuse ScalableTarget of auto-scaling in cloudformation

我正在尝试向多个 Dynamodb 表添加自动缩放,因为所有表都将具有相同的自动缩放配置模式。

我当然可以一次又一次地创建 scalableTarget 但它是重复的。

我想知道是否可以重新使用可扩展目标

"DDBTable": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
       "TableName": "Banner_v1", 
       ...
   }
},
 
 "WriteCapacityScalableTarget": {
        "Type": "AWS::ApplicationAutoScaling::ScalableTarget",
        "Properties": {
            "MaxCapacity": 15,
            "MinCapacity": 5,
            "ResourceId": {
                "Fn::Join": [
                    "/",
                    [
                        "table",
                        {
                            "Ref": "DDBTable"
                        }
                    ]
                ]
            },
            "RoleARN": {
              "Fn::ImportValue" : "ScalingRoleArn"
            },
            "ScalableDimension": "dynamodb:table:WriteCapacityUnits",
            "ServiceNamespace": "dynamodb"
        }
    },   
      "WriteScalingPolicy": {
        "Type": "AWS::ApplicationAutoScaling::ScalingPolicy",
        "Properties": {
            "PolicyName": "WriteAutoScalingPolicy",
            "PolicyType": "TargetTrackingScaling",
            "ScalingTargetId": {
                "Ref": "WriteCapacityScalableTarget"
            },
            "TargetTrackingScalingPolicyConfiguration": {
                "TargetValue": 50,
                "ScaleInCooldown": 60,
                "ScaleOutCooldown": 60,
                "PredefinedMetricSpecification": {
                    "PredefinedMetricType": "DynamoDBWriteCapacityUtilization"
                }
            }
        }
    },

试过了但没有用。

"WriteCapacityScalableTarget": {
   "Type": "AWS::ApplicationAutoScaling::ScalableTarget",
   "Properties": {
       "ResourceId": {
       ...
           "Fn::Join": [
               "/",
               [
                   "table",
                   {
                       "Ref": "DDBTable"
                   },
                   "table",
                   {
                     "Ref": "AnotherTable2"
                   }
               ]
           ]
       },
       ...
   }

I can of course create scalableTarget again and again but it’s repetitive

使用普通 CFN,这就是您必须要做的。原因是 ResourceId 只是一个 string,而不是 list of strings.

CFN 中唯一的其他选择是使用 custom resource or macros。在这两种情况下,您都必须开发一些 lambda 函数来自动执行重复的操作。