Как писать под AWS на Kotlin без боли и Java-наследия

06 Aug, 2026
501
🔱 64
👥 13

Разработчики, писавшие под AWS на Kotlin, наверняка помнят Java SDK v2. Работать с ним в Kotlin-проектах можно, но приходится постоянно оборачивать CompletableFuture в корутины, мириться с длинным синтаксисом Java-билдеров и тащить в сборку лишние зависимости. Команда AWS решает эту проблему официальным проектом aws-sdk-kotlin — клиентом, написанным с нуля специально под Kotlin.

Что меняется с нативным Kotlin SDK

Главный плюс библиотеки — нативная поддержка корутин и Kotlin Flow. Никаких вермишелей из колбэков и асинхронных оберток. Вызовы S3, DynamoDB или Lambda пишутся ровно так же, как и любой другой асинхронный код на Kotlin.

Второй важный момент — архитектурный задел под мультиплатформенность. Библиотека ориентирована на Kotlin Multiplatform и из коробки работает на нескольких целевых платформах:

  • JVM для классических бэкендов на Ktor или Spring
  • Android для мобильных приложений
  • GraalVM Native Image для быстрого старта компилированных бинарников

Генерация кода через Smithy и точечная сборка

AWS насчитывает сотни сервисов. Если скомпилировать и упаковать клиенты для каждого из них в одну библиотеку, размер итогового артефакта станет неприлично большим. Авторы SDK решили эту задачу через кодогенерацию на базе декларативного языка Smithy.

В репозитории нет готового сгенерированного кода под каждый сервис AWS. Код создается при сборке проекта. Если вы собираете SDK самостоятельно из исходников, можно указать только те сервисы, которые реально нужны в приложении.

Настройка фильтрации происходит в файле local.properties:

# Генерируем клиент только для AWS Lambda
aws.services=+lambda

Если требуется убрать определенные сервисы из сборки, используется знак минус:

# Исключаем AWS Location и DynamoDB
aws.services=-location,-dynamodb

Генерация кода запускается через Gradle:

./gradlew --no-daemon :codegen:sdk:bootstrap

После этого сгенерированный модуль собирается стандартной таской:

./gradlew :services:lambda:build

такой подход экономит время при локальной разработке и тестировании отдельных модулей SDK.

Сборка документации через Dokka

Для документирования кода разработчики задействовали Dokka — стандартный инструмент от JetBrains, работающий с форматом KDoc.

Чтобы сгенерировать API-справку локально, в репозитории предусмотрена команда:

./gradlew --no-daemon --no-parallel dokkaHtmlMultiModule

Готовая HTML-документация складывается в директорию build/dokka/htmlMultiModule. Чтобы открыть её в браузере, понадобится любой простой HTTP-сервер, например встроенный в IntelliJ IDEA или запущенный через Python:

python3 -m http.server --directory build/dokka/htmlMultiModule

Стоит ли переходить на Kotlin SDK

У репозитория около 500 звезд на GitHub. Число относительно небольшое, потому что проект долго находился в статусе активной разработки, а многие команды по привычке используют Java SDK v2. Тем не менее, библиотека уже готова к продакшену и официально поддерживается Amazon.

Библиотека пригодится в четырех сценариях:

  • Вы создаете Android-приложение, которому нужен прямой доступ к сервисам AWS без тащения тяжелых Java-зависимостей.
  • Вы пишете Serverless-функции на Kotlin для AWS Lambda с компиляцией в GraalVM Native Image, где критически важна скорость холодного старта.
  • Ваш бэкенд полностью построен на корутинах и Ktor, и хочется сохранить единый стиль асинхронного кода.
  • Вы делаете мультиплатформенный модуль, объединяющий логику для мобилок и сервера.

Если у вас уже работает большой legacy-проект на Spring Boot со старым Java SDK, экстренно переписывать его смысла нет. Но для новых сервисов и приложений на Kotlin этот SDK выглядит логичным выбором.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.