Невозможно создать таблицу в DynamoDB с режимом выставления счетов, установленным в PAY_PER_REQUEST - PullRequest
0 голосов
/ 30 января 2019

В настоящее время я создаю таблицу в DynamoDB, используя клиентское приложение AWS.Команда, которую я использую:

aws dynamodb create-table --cli-input-json file://.feature_promotions-dynamodb.json  --endpoint-url http://localhost:8000

Исходя из документов для create-table, я смогу установить для режима биллинга значение PAY_PER_REQUEST, не устанавливая выделенную пропускную способность, но каждый разЗапустив команду, я получаю следующую ошибку:

An error occurred (ValidationException) when calling the CreateTable operation: No provisioned throughput specified for the table

Я обновил awscli вчера до

aws-cli/1.16.90 Python/3.7.2 Darwin/18.2.0 botocore/1.12.80

Кроме этого, у меня нет идей о том, как это исправить,Мой обходной путь в настоящее время состоит в том, чтобы просто создать таблицу с выделенной пропускной способностью и затем перейти к консоли, чтобы изменить ее, но это кажется ненужным.В конечном итоге я хотел бы иметь возможность запускать эту команду в сценарии bash без необходимости впоследствии исправлять настройки таблицы в консоли AWS.

Ниже приведен файл JSON, который я загружаю в команде create-table.Атрибут и значение "BillingMode": "PAY_PER_REQUEST" устанавливаются после "AttributeDefinition", и я ожидаю, что это будет работать без ошибок.Если я удалю строку режима биллинга и добавлю следующий атрибут в файл

"ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
      }

, он создаст таблицу без ошибок.

{
  "TableName": "dev.feature_promotions",
  "AttributeDefinitions": [
    {
      "AttributeName": "display_title",
      "AttributeType": "S"
    },
    {
      "AttributeName": "end_date",
      "AttributeType": "N"
    },
    {
      "AttributeName": "id",
      "AttributeType": "N"
    },
    {
      "AttributeName": "partner_id",
      "AttributeType": "N"
    },
    {
      "AttributeName": "start_date",
      "AttributeType": "N"
    },
    {
      "AttributeName": "view_scope_id",
      "AttributeType": "N"
    }
  ],
  "BillingMode": "PAY_PER_REQUEST",
  "KeySchema": [
    {
      "AttributeName": "id",
      "KeyType": "HASH"
    }
  ],
  "GlobalSecondaryIndexes": [
    {
      "IndexName": "start_date-index",
      "KeySchema": [
        {
          "AttributeName": "start_date",
          "KeyType": "HASH"
        },
        {
          "AttributeName": "id",
          "KeyType": "RANGE"
        }
      ],
      "Projection": {
        "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
      }
    },
    {
      "IndexName": "display_title-index",
      "KeySchema": [
        {
          "AttributeName": "display_title",
          "KeyType": "HASH"
        },
        {
          "AttributeName": "id",
          "KeyType": "RANGE"
        }
      ],
      "Projection": {
        "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
      }
    },
    {
      "IndexName": "end_date-index",
      "KeySchema": [
        {
          "AttributeName": "end_date",
          "KeyType": "HASH"
        },
        {
          "AttributeName": "id",
          "KeyType": "RANGE"
        }
      ],
      "Projection": {
        "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
      }
    },
    {
      "IndexName": "partner_id-index",
      "KeySchema": [
        {
          "AttributeName": "partner_id",
          "KeyType": "HASH"
        },
        {
          "AttributeName": "id",
          "KeyType": "RANGE"
        }
      ],
      "Projection": {
        "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
      }
    },
    {
      "IndexName": "view_scope_id-index",
      "KeySchema": [
        {
          "AttributeName": "view_scope_id",
          "KeyType": "HASH"
        },
        {
          "AttributeName": "id",
          "KeyType": "RANGE"
        }
      ],
      "Projection": {
        "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
      }
    }
  ],
  "StreamSpecification": {
    "StreamEnabled": true,
    "StreamViewType": "NEW_AND_OLD_IMAGES"
  },
  "SSESpecification": {
    "Enabled": true,
    "SSEType": "AES256",
    "KMSMasterKeyId": ""
  }
}

Что я делаю не так?

1 Ответ

0 голосов
/ 31 января 2019

Вы можете использовать только одну из "BillingMode": "PAY_PER_REQUEST" или ProvisionedThroughput на столе или GSI.Вам необходимо удалить ProvisionedThroughput на любых ресурсах по требованию.

РЕДАКТИРОВАТЬ: Для ясности нельзя использовать ProvisionedThroughput в индексах таблицы по требованию.Чтобы это исправить, просто удалите все экземпляры ProvisionedThroughput.Ваши индексы также будут по запросу.

...