Создание таблицы DynamoDB с Terraform в режиме PAY_PER_REQUEST
О чём эта статья
В этой статье показаны практические шаги для создания таблицы DynamoDB с использованием Terraform. Мы используем модель выставления счёта PAY_PER_REQUEST (оплата по запросам). Предполагается базовое знание AWS DynamoDB и Terraform.
Основные варианты запроса (варианты намерения)
- создание таблицы DynamoDB через Terraform
- Terraform DynamoDB PAY_PER_REQUEST
- пример конфигурации aws_dynamodb_table
- как удалить таблицу DynamoDB через Terraform
Предварительные требования
- Базовое понимание Terraform.
- Установленный Terraform на вашей машине.
- Аккаунт AWS.
access_keyиsecret_keyпользователя IAM с правами на создание таблицы DynamoDB.
Важно: безопаснее передавать креденшалы через переменные окружения или профиль AWS CLI, а не хранить их в репозитории.
Что мы сделаем
- Напишем конфигурационные файлы Terraform для таблицы DynamoDB.
- Создадим таблицу командой
terraform apply. - При необходимости удалим таблицу командой
terraform destroy.
Написание конфигурационных файлов Terraform для таблицы DynamoDB
Создайте отдельную директорию для файлов Terraform.
Сохраните следующий файл как main.tf. Код также находится в репозитории на GitHub — можно скопировать оттуда.
Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/terraform/create-dynamodb-table/main.tfFile: 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.tfvarsFile: terraform.tfvarsaccess_key = " "
secret_key = " "И, наконец, определите переменные в variables.tf:
Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/terraform/create-dynamodb-table/variables.tfFile: variables.tfvariable "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 plan
Применение изменений (создание таблицы):
terraform apply
После выполнения apply проверьте в AWS Console, появилась ли таблица:

Удаление созданной таблицы через Terraform
Чтобы удалить таблицу, выполните:
terraform destroy
Команда попросит подтверждение, после чего удалит ресурс из 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)
- Спроектируйте ключи и теги.
- Напишите
main.tf,variables.tf. - Подайте креденшалы безопасным способом.
terraform init→terraform plan→terraform apply.- Тестируйте созданный ресурс и мониторьте метрики.
- При необходимости
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.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента