Гид по технологиям

Создание таблицы DynamoDB с Terraform в режиме PAY_PER_REQUEST

• 5 min read • DevOps • Обновлено 18 Nov 2025
Terraform: DynamoDB таблица PAY_PER_REQUEST
Terraform: DynamoDB таблица PAY_PER_REQUEST

О чём эта статья

В этой статье показаны практические шаги для создания таблицы DynamoDB с использованием Terraform. Мы используем модель выставления счёта PAY_PER_REQUEST (оплата по запросам). Предполагается базовое знание AWS DynamoDB и Terraform.

Основные варианты запроса (варианты намерения)

  • создание таблицы DynamoDB через Terraform
  • Terraform DynamoDB PAY_PER_REQUEST
  • пример конфигурации aws_dynamodb_table
  • как удалить таблицу DynamoDB через Terraform

Предварительные требования

  1. Базовое понимание Terraform.
  2. Установленный Terraform на вашей машине.
  3. Аккаунт AWS.
  4. access_key и secret_key пользователя IAM с правами на создание таблицы DynamoDB.

Важно: безопаснее передавать креденшалы через переменные окружения или профиль AWS CLI, а не хранить их в репозитории.

Что мы сделаем

  1. Напишем конфигурационные файлы Terraform для таблицы DynamoDB.
  2. Создадим таблицу командой terraform apply.
  3. При необходимости удалим таблицу командой terraform destroy.

Написание конфигурационных файлов Terraform для таблицы DynamoDB

Создайте отдельную директорию для файлов Terraform.

Сохраните следующий файл как main.tf. Код также находится в репозитории на GitHub — можно скопировать оттуда.

Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/terraform/create-dynamodb-table/main.tf
File: main.tf
  
provider "aws" {
    access_key = "${var.access_key}"
    secret_key = "${var.secret_key}"
    region = "eu-west-3"
}

resource "aws_dynamodb_table" "my_first_table" {
  name        = "${var.table_name}"
  billing_mode = "${var.table_billing_mode}"
  hash_key       = "employee-id"
  attribute {
    name = "employee-id"
    type = "S"
  }
   tags = {
    environment       = "${var.environment}"
  }
}

Пояснения по полям:

  • name: обязательное — имя таблицы.
  • billing_mode: необязательное — контролирует модель оплаты (PROVISIONED или PAY_PER_REQUEST).
  • hash_key: обязательное — ключ партиционирования (partition key).
  • attribute: определение атрибутов, требуется для hash_key и range_key.
  • tags: теги для ресурса.

Теперь создайте файл terraform.tfvars с вашими ключами доступа. Пример файла:

Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/terraform/create-dynamodb-table/terraform.tfvars
File: terraform.tfvars
access_key = ""  
secret_key = ""

И, наконец, определите переменные в variables.tf:

Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/terraform/create-dynamodb-table/variables.tf
File: variables.tf
variable "access_key" {
        description = "Access key of AWS IAM user"
}
variable "secret_key" {
        description = "Secret key of AWS IAM user"
}

variable "table_name" {
  description = "Dynamodb table name (space is not allowed)"
  default = "my-first-test-table"
}

variable "table_billing_mode" {
  description = "Controls how you are charged for read and write throughput and how you manage capacity."
  default = "PAY_PER_REQUEST"
}


variable "environment" {
  description = "Name of environment"
  default = "test"
}

Параметры по умолчанию:

  • table_name = my-first-test-table.
  • table_billing_mode = PAY_PER_REQUEST (также доступен PROVISIONED).
  • environment = test.

Создание таблицы DynamoDB с помощью Terraform

Когда у вас есть main.tf, terraform.tfvars и variables.tf, выполните команды:

Инициализация каталога Terraform:

terraform init

Инициализация Terraform

Просмотр плана изменений:

terraform plan

План Terraform

Применение изменений (создание таблицы):

terraform apply

Применение Terraform

После выполнения apply проверьте в AWS Console, появилась ли таблица:

Список таблиц DynamoDB в консоли AWS

Удаление созданной таблицы через Terraform

Чтобы удалить таблицу, выполните:

terraform destroy

Удаление Terraform

Команда попросит подтверждение, после чего удалит ресурс из AWS.

Лучшие практики и рекомендации

  • Не храните AWS ключи в репозитории. Используйте переменные окружения (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY), ~/.aws/credentials или провайдерную поддержку SSO/assume-role.
  • Для продакшена предпочитайте IAM-роли для EC2/Lambda/ECS вместо статических ключей.
  • Для продакшена обдумайте использование tags для учёта затрат и автоматической фильтрации.
  • Продумайте схему партиционирования (hash_key и опциональный range_key) с расчётом ожидаемой нагрузки и распределения горячих ключей.

Важно: PAY_PER_REQUEST выгоден при неопределённой или переменной нагрузке; PROVISIONED может быть дешевле при стабильной высокой нагрузке, но требует настройки автошкалирования.

Когда этот подход не подходит (контрпримеры)

  • Если у вас строгие требования к производительности и предсказуемая высокая нагрузка — рассмотрите PROVISIONED с настроенным auto-scaling.
  • Если нужно транзакционное поведение с множеством условных операций на несколько записей — убедитесь, что дизайн таблицы поддерживает транзакции DynamoDB.
  • Для сложных запросов с произвольными фильтрами и большими агрегатами DynamoDB может оказаться неудобной, и лучше подойдут реляционные базы или ElasticSearch.

Альтернативные подходы

  • CloudFormation или CDK вместо Terraform для тех, кто предпочитает нативные инструменты AWS.
  • Использование Terraform-модулей (обёрток) для повторного использования конфигурации.
  • Использование data-ресурсов Terraform для чтения существующих таблиц и импорт в state (terraform import).

Короткая методология (mini-methodology)

  1. Спроектируйте ключи и теги.
  2. Напишите main.tf, variables.tf.
  3. Подайте креденшалы безопасным способом.
  4. terraform init → terraform plan → terraform apply.
  5. Тестируйте созданный ресурс и мониторьте метрики.
  6. При необходимости terraform destroy.

Роль‑ориентированные чек-листы

  • DevOps:
    • Проверить IAM-права и политики.
    • Настроить CI/CD для terraform plan и apply.
    • Настроить бэкапы и мониторинг CloudWatch.
  • Разработчик:
    • Проверить формат ключей и ограничения схемы.
    • Запустить интеграционные тесты записи/чтения.
  • Инженер по безопасности:
    • Убедиться, что ключи не в исходниках.
    • Проверить шифрование в покое (SSE) и контроль доступа.

Критерии приёмки

  • Таблица создана в указанном регионе и видна в консоли.
  • Название таблицы совпадает с var.table_name.
  • Billing mode = PAY_PER_REQUEST (если задано).
  • Теги присутствуют и содержат корректное значение environment.
  • Тестовые операции записи/чтения успешны.

Тесты и сценарии приёмки

  • Записать элемент с employee-id и прочитать его по ключу.
  • Проверить поведение для несуществующего ключа (ожидаем пустой ответ).
  • Проверить IAM-политику: пользователь с недостаточными правами должен получать AccessDenied.

Безопасность и соответствие (GDPR и прочее)

  • DynamoDB хранит данные по предмету конфиденциальности; при обработке персональных данных проверьте требования GDPR/локальные законы.
  • Включите серверное шифрование (SSE) при необходимости и контролируйте доступ через IAM.
  • Логи запросов (CloudTrail) помогут в расследованиях и аудите.

Короткий глоссарий

  • hash_key — ключ партиционирования, определяет равномерность распределения данных.
  • billing_mode — режим оплаты: PAY_PER_REQUEST (on-demand) или PROVISIONED.
  • attribute — определение атрибута таблицы (имя и тип).

Советы по миграции и совместимости

  • Для переноса существующей таблицы используйте terraform import затем приведите конфиг к текущему состоянию.
  • При смене hash_key ресурс уничтожается и создаётся заново — планируйте миграцию данных.

Заключение

В статье показано, как создать таблицу DynamoDB в режиме PAY_PER_REQUEST с помощью Terraform: подготовка файлов, выполнение init, plan, apply, а также удаление через terraform destroy. Дополнительно рассмотрены лучшие практики, альтернативы и проверки приёмки. После успешного создания таблицы вы можете расширять конфигурацию: добавлять индекс global_secondary_index, настраивать шифрование, включать CloudWatch Alarms и автоматическое масштабирование для PROVISIONED режимов.

Важно

  • Всегда храните секреты безопасно.
  • Продумывайте дизайн ключей до создания таблицы — изменение партиционного ключа приводит к пересозданию ресурса.

Краткое резюме:

  • Подготовьте main.tf, variables.tf, terraform.tfvars.
  • Выполните terraform init, plan, apply.
  • Для удаления используйте terraform destroy.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро