2017-08-21 20 views
3

私はnodejsにAWS SDKを使用し、コードからdynamodbテーブルを作成しています。それはすべて正常に動作しますが、プロビジョニングされた読み込みと書き込みの能力を有効にするには自動スケーリングが必要です。これは、私が試しているコードですJavaスクリプトからDynamoDBのプロビジョニングされた読み取り容量をオートスケーリングする方法

これは、読み取りと書き込みの容量が5で、自動スケーリングが無効な表を作成します。私は自動スケーリングがコードから処理されているJavaサンプルを見てきましたが、Javaスクリプトは何も処理しませんでした。 NodeJSから自動スケーリングを有効にする方法に関する提案は非常に役に立ちます。 ありがとう

+0

データベース・テーブルで処理するための自動スケーリングを設定することができますAWS管理コンソールからそれ自身を削除します – notionquest

+0

ええ、私はそれを認識しますが、それは私が探しているものではありません。私たちはいくつかのAPIをクライアントに公開しているので、コードレベルから実行する必要があり、コンソールにアクセスすることはできません。 – Avijeet

答えて

3

別のApplicationAutoScalingコールで自動スケーリングを有効にすることができます。ここで

書き込み単位の自動スケーリングを有効にする方法のラムダコードサンプル:

const AWS = require("aws-sdk"); 
var applicationautoscaling = new AWS.ApplicationAutoScaling({ 
    apiVersion: '2016-02-06' 
}); 

exports.handler = (event, context, callback) => { 
    var params = { 
     MaxCapacity: 10, 
     MinCapacity: 2, 
     ResourceId: "table/MyTable", 
     RoleARN: "arn:aws:iam::111111111:role/lambda_s3_exec_role", 
     ScalableDimension: "dynamodb:table:WriteCapacityUnits", 
     ServiceNamespace: "dynamodb" 
    }; 
    applicationautoscaling.registerScalableTarget(params, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else console.log(data); // successful response 
     callback(null, 'write capacity adjusted'); 
    }); 
}; 
+0

ありがとう、私は今日それを試してみます。 Btw私はscalableDimensionで書き込みと一緒にreadcapacityUnitsを言うならば、両方の読み取りと書き込みがスケーラブルな権利として設定することができますか? – Avijeet

+0

はい、どちらも設定できますが、私がAPIを理解する限り、別々の呼び出しを2回設定する必要があります。 –

+0

私はそれを試して、私はエラーが "見つかりません"を取得します。テーブルはdynamodbに存在します。 – Avijeet

0

私はDynamoDBのためのイェンスのウォルターズ・ソリューションおよびUIを踏襲壊れて見えた - 概要から、それは、スケーリングが有効になったと述べたが、とき私は容量タブを見ましたが、それはそれが表示されていませんでした。これは、その解決策が後半スケーリングポリシーを欠いているためです。

ソリューションは、2段階のプロセスである:

  1. スケーラブルなターゲット
  2. を登録対象の所定の位置に

をスケーリングポリシーを入れてここでは、コードです:

var tableName = "your-table-name" 

var autoscalingParams = { 
    MaxCapacity: 15, 
    MinCapacity: 1, 
    ResourceId: "table/" + tableName, 
    RoleARN: "arn:aws:iam::" + accountId + ":role/current-lambdaRole", 
    ScalableDimension: "dynamodb:table:WriteCapacityUnits", 
    ServiceNamespace: "dynamodb" 
}; 

autoscaling.registerScalableTarget(autoscalingParams, function(err, data) { 
    if(err) { 
     console.log('error'); 
     console.log(JSON.stringify(err)); 
    } else { 
     console.log(data); 
    } 

    var scalingPolicy = { 
     ServiceNamespace: "dynamodb", 
     ResourceId: "table/" + tableName, 
     ScalableDimension: "dynamodb:table:WriteCapacityUnits", 
     PolicyName: tableName + "-scaling-policy", 
     PolicyType: "TargetTrackingScaling", 
     TargetTrackingScalingPolicyConfiguration: { 
      PredefinedMetricSpecification: { 
       PredefinedMetricType: "DynamoDBWriteCapacityUtilization" 
      }, 
      ScaleOutCooldown: 60, 
      ScaleInCooldown: 60, 
      TargetValue: 70.0 
     } 
    }; 

    autoscaling.putScalingPolicy(scalingPolicy, function(err, data) { 
     if(err) { 
      console.log('error'); 
      console.log(JSON.stringify(err)); 
     } else { 
      console.log('success!'); 
      console.log(data); 
     } 
     cb(err); 
    }); 
}); 

あなたの役割は、次の行に沿って何か許可が必要です:

{ 
    "IamPolicyLambdaManageScalingDynamoDbTables": { 
    "Type": "AWS::IAM::Policy", 
    "Properties": { 
     "PolicyName": "someName", 
     "PolicyDocument": { 
     "Version": "2012-10-17", 
     "Statement": [ 
      { 
      "Effect": "Allow", 
      "Action": [ 
       "application-autoscaling:RegisterScalableTarget", 
       "application-autoscaling:PutScalingPolicy", 
       "iam:CreateServiceLinkedRole", 
       "iam:PassRole" 
      ], 
      "Resource": "*" 
      } 
     ] 
     }, 
     "Roles": [ 
     { 
      "Ref": "IamRoleLambdaExecution" 
     } 
     ] 
    } 
    } 
} 

注:あなたはおそらく役割リソースのワイルドカードを使用するべきではありませんが、私はそれらがどうあるべきか釘付けされていない正確

関連する問題