質問
DynamoDBをCDKで構築したときにprovisionedからondemandに変更できないです。以下のようなエラーが出てしまうのですが、どのように対応すれば良いのでしょうか。同じ境遇の方や解決された方がいらっしゃいましたらご教示いただきたいです。
よろしくお願いします。
Invalid request provided: When switching billing mode to OnDemand, the previous template must specify a value for all autoscaled resources, so that Cloudformation can rollback if needed.
機械翻訳
無効なリクエストが提供されました: 請求モードをオンデマンドに切り替える場合、Cloudformation が必要に応じてロールバックできるように、前のテンプレートですべての自動スケーリングされたリソースの値を指定する必要があります。
エラー内容
CDK を実行したときのエラー内容です。
00:00:00 | UPDATE_FAILED | AWS::DynamoDB::GlobalTable | Table4B424B7A
Resource handler returned message: "Invalid request provided: When switching billing mode to OnDemand, the previous template must specify a value for all autoscaled resources, so that Cloudformation can rollback if needed." (RequestToken: 744d72a5-010d-de42-9a96-38a5f47dcc25, HandlerErrorCode: InvalidReque
st)
❌ CdkStack failed: Error: The stack named CdkStack failed to deploy: UPDATE_ROLLBACK_COMPLETE: Resource handler returned message: "Invalid request provided: When switching billing mode to OnDemand, the previous template must specify a value for all autoscaled resources, so that Cloudformation can rollback if needed." (RequestToken: 744d72a5-010d-de42-9a96-38a5f47dcc25, HandlerErrorCode: InvalidRequest)
at FullCloudFormationDeployment.monitorDeployment (/Users/aws-cdk/node_modules/aws-cdk/lib/index.js:421:10708)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.deployStack2 [as deployStack] (/Users/aws-cdk/node_modules/aws-cdk/lib/index.js:424:180618)
at async /Users/aws-cdk/node_modules/aws-cdk/lib/index.js:424:163866
CDK の実装内容
変更前(provisioned で DynamoDB を構築)
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
// : 省略
const table = new dynamodb.TableV2(this, 'Table', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
globalSecondaryIndexes: [
{
indexName: 'index',
partitionKey: { name: 'code', type: dynamodb.AttributeType.STRING },
},
],
billing: dynamodb.Billing.provisioned({
readCapacity: dynamodb.Capacity.autoscaled({ minCapacity: 5, maxCapacity: 50, targetUtilizationPercent: 25 }),
writeCapacity: dynamodb.Capacity.autoscaled({ minCapacity: 1, maxCapacity: 5 }),
}),
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
// : 省略
変更後(onDemand で DynamoDB を構築)
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
// : 省略
const table = new dynamodb.TableV2(this, 'Table', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
globalSecondaryIndexes: [
{
indexName: 'index',
partitionKey: { name: 'code', type: dynamodb.AttributeType.STRING },
},
],
billing: dynamodb.Billing.onDemand(), // ★★★ 変更箇所
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
// : 省略