Привет, поклонники бессерверных технологий и поклонники 😶‍🌫️! Вы когда-нибудь совершали досадную ошибку 🙊, которая стоила вашей команде сотни долларов? Больше чем это? Ни за что. Тысячи!? Во-первых, мне жаль, что вы прошли через это. Во-вторых, я знаю, что ты чувствуешь.


TL;DR

При использовании Комплект для разработки облака AWS для подготовки таблицы DynamoDB CDK устанавливает по умолчанию режим выставления счетов как «Предоставленный» вместо оплаты за запрос. Таким образом, Dynamodb фактически перестает быть бессерверным — помните масштабирование до нуля?

Быстрое исправление: при создании экземпляра таблицы AWS Dynamodb обязательно явно установите режим выставления счетов «оплата за запрос». Если вы играете со стопкой игрушек, вы также можете установить политика удаления разрушать». Это означает, что если вы удалите свой стек, в результате будет удалена и таблица (вероятно, плохая идея использовать этот параметр в рабочей среде).

// code/dynamodb-cdk.ts

import { App, RemovalPolicy, Stack } from '@aws-cdk/core';
import { AttributeType, Table, BillingMode } from '@aws-cdk/aws-dynamodb';

const app = new App();
const stack = new Stack(app);

const table = new Table(stack, 'MyTable', {
  partitionKey: { name: 'PK', type: AttributeType.STRING },
  sortKey: { name: 'SK', type: AttributeType.STRING },
  billingMode: BillingMode.PAY_PER_REQUEST,
  removalPolicy: RemovalPolicy.DESTROY,
});
Войти в полноэкранный режим

Выйти из полноэкранного режима


Знакомство с serverless в качестве инженера-программиста

Одной из моих первых миссий в качестве младшего разработчика была помощь в разработке «бессерверного курса 101». Мы стремились помочь будущим новичкам в моей команде быстро ознакомиться с облачными концепциями. Мы создали краткое руководство, в котором рассматриваются основы бессерверных вычислений: лямбда-выражения, шлюз API, роли IAM и таблицы Dynamodb — с AWS в качестве нашего облачного провайдера. Я был очень доволен результатом! Новички наконец-то смогли поиграть в песочнице со сложными и пугающими поначалу концепциями, такими как «функции как услуга» (FaaS) и облачные управляемые базы данных!

Я чувствовал гордость. У нас был небольшой протокол, по которому каждый новый разработчик развертывал игрушечный стек. Он хорошо справился со своей задачей и понравился новичкам без серверов.


Раньше я считал само собой разумеющимся свойство бессерверных технологий масштабирования до нуля 🥺

Конечно, если вы читаете TL;DR и небольшую предысторию, вы начинаете понимать, к чему я клоню со всей этой тирадой.

Каждый из новых инженеров нашей команды развернул игрушечный стек, чтобы узнать о бессерверных технологиях и AWS. В бессерверном учебном пособии используется AWS CDK. Чтобы упростить задачу, мы в основном использовали настройки по умолчанию. Среди этих настроек скрыт «предоставленный» режим выставления счетов и политика удаления «сохранить».

Для упрощения в «предоставленном» режиме выставления счетов DynamoDB AWS выделяет минимальное пространство для хранения и минимальные единицы емкости для чтения (RCU) и единицы емкости для записи (WCU). Затем AWS взимает с вас плату независимо от вашего использования.

Для DynamoDB я обнаружил, что режим выставления счетов «предоставление» стоит около 11 долларов США в месяц за стол (в регионах США), даже если вы вообще не используете стол. Кроме того, при удалении стека политика удаления «retain» предотвращает удаление таблицы DynamoDB вместе со стеком.

Каждый новичок развертывает стек песочницы. Ресурсы хранения предоставляются, т. е. таблица стоит минимальную сумму, даже если мы ее не используем. Таблицы защищены от удаления. Да, потенциально бездонная яма была создана.


Подводя итог: ежемесячно проверяйте свои расходы на бессерверные решения и не принимайте низкие цены на бессерверные услуги как должное.

Бессерверные решения недороги по сравнению с технологическими стеками без серверов. На порядок дешевле. Мой менеджер, похоже, был немного удивлен, когда стеки, развернутые в рамках нашего бессерверного обучения, обходились нам в сотни долларов каждый месяц!

К счастью ✨, мои товарищи по команде обнаружили ошибку через пару месяцев, тем самым ограничив мою дурь от траты тысяч долларов (и большого количества электроэнергии 💚).