Skip to content

Bluetape4k AWS Part 1: Repository Overview and Mental Model

Small robotic operators wiring AWS service blocks and local test equipment on a Kotlin workbench
AWS integration is an operational boundary, not a handful of SDK calls.

This is Part 1 of the bluetape4k-aws series. The series starts with Part 1: repository overview and mental model. Part 2 covers core modules and service coverage, Part 3 follows Spring Boot 4, Ktor 3, and working examples, Part 4 compares the approach with Spring Cloud AWS, and Part 5 walks through real examples from examples/ and bluetape4k-workshop/aws.

AWS already has the AWS SDK for Java v2 and the AWS SDK for Kotlin. Both are powerful, official starting points for AWS APIs. Application code usually wants a smaller, service-shaped interface: suspend functions, coroutine-friendly async bridges, framework-specific configuration, local emulators, and version alignment through a BOM.

bluetape4k-aws sits in that space. It does not replace the AWS SDKs. It builds on Java SDK v2 and the Kotlin SDK, then provides reusable helpers for integration code Kotlin/JVM services otherwise repeat across applications. Plain Kotlin services should be able to stay framework-neutral. Spring Boot 4 and Ktor 3 services should get framework wiring that feels native to those stacks. The central question is not “should bluetape4k make a new SDK?” It is “how should service code use the SDKs without carrying every integration detail itself?”

Bluetape4k AWS module map with application entry points, BOM, runtime modules, framework integrations, examples, local verification, and AWS services
bluetape4k-aws keeps the BOM, SDK wrappers, framework adapters, examples, and local verification model aligned.

The repository is easiest to read as three layers.

First, there are core SDK wrappers. bluetape4k-aws-java works with AWS Java SDK v2 sync and async clients, plus coroutine extensions. Java SDK v2 has broad service coverage and a stable production API, but its async model needs a Kotlin-friendly bridge in coroutine services. For high-throughput S3 transfer paths, the design also allows AWS CRT runtime dependencies and CRT-backed S3AsyncClient beans so Spring auto-configuration can build the transfer manager on the optimized client. bluetape4k-aws-kotlin is closer to the AWS Kotlin SDK side: native suspend helpers and DSL builders for code that wants to stay on the Kotlin SDK path.

Second, the core stays framework-neutral. S3, SQS, SNS, DynamoDB, KMS, SES, CloudWatch, Kinesis, and STS helpers should not force a web framework into plain service code. That lets the same helper interface work from CLI tools, workers, Spring Boot services, and Ktor services.

Third, the edges become framework-aware. bluetape4k-aws-spring-boot owns Spring Boot 4 auto-configuration, templates, repositories, listeners, and property binding. bluetape4k-aws-ktor owns Ktor 3 SigV4 signing, coroutine S3 REST clients, SQS consumer runtime, and DynamoDB server repository helpers. The core remains portable; the edge speaks the framework’s language.

AWS request flow from a Kotlin service through a framework adapter, bluetape4k AWS wrapper, AWS SDK client, then LocalStack or AWS services
Service code sees a Kotlin-first API; the runtime can route to emulator-backed tests or real AWS.

The project provides these module families. The Spring module started from the kind of Spring-friendly AWS integration experience Spring Cloud AWS popularized, but targets Spring Boot 4 with coroutine-oriented bluetape4k helpers. The same core helpers then extend into Ktor 3, so the Spring Boot and Ktor modules are not competing stacks; they are framework adapters over the same AWS wrapper interface.

AreaRepresentative moduleResponsibility
BOMbluetape4k-aws-bomAlign versions for io.github.bluetape4k.aws:* modules
Java SDK bridgebluetape4k-aws-javaAWS Java SDK v2 wrappers, async/coroutine extensions, CRT-backed S3 transfers, broad service coverage
Kotlin SDK helpersbluetape4k-aws-kotlinAWS Kotlin SDK suspend helpers and DSL builders
Shared persistencebluetape4k-aws-exposedExposed JDBC foundation for AWS-backed configuration
Spring Boot edgebluetape4k-aws-spring-bootSpring Cloud AWS-inspired Spring Boot 4 auto-config, S3 transfer, SES sender, SNS parser, SQS listener, DynamoDB/KMS/Secrets Manager/Parameter Store
Ktor edgebluetape4k-aws-ktorKtor 3 extension of the same core helpers: SigV4, coroutine S3 client, SQS runtime, DynamoDB server repository
Examplesexamples/*Runnable Ktor and Spring Boot integrations for DynamoDB, S3, SQS, and Exposed

The model is selective adoption. Pulling in a Spring Boot module should not drag a Ktor runtime with it. The BOM aligns versions, core modules handle SDK and coroutine boundaries, and framework adapters remove application wiring where they are useful.

AWS integration code gets expensive when the only faithful test environment is a real account. bluetape4k-aws therefore treats the local verification model as part of the repository, not as an afterthought.

The README describes integration tests backed by Testcontainers-based AWS emulators. Production runtime points at AWS, while development and CI can attach an emulator behind the same SDK clients. Tests can choose the emulator with options such as -Dbluetape4k.aws.emulator=.... The recent direction is Floci-first with LocalStack as a fallback; MiniStack is treated as a comparison candidate rather than the default target.

The value is straightforward. Service code calls the same wrapper, and the runtime endpoint changes under test. DynamoDB tables, S3 buckets, and SQS queues do not have to be provisioned in a real AWS account just to verify Spring Boot or Ktor wiring and coroutine behavior.

bluetape4k-aws is not an AWS SDK reimplementation. It is a Kotlin/JVM integration layer over the official AWS SDKs, combining coroutine helpers, framework adapters, local emulator verification, and BOM alignment. Plain Kotlin services can use the wrapper layer directly, Spring Boot 4 and Ktor 3 services get native wiring, and tests can reduce account dependency through LocalStack, Floci, and Testcontainers.

Next, we will look more closely at aws-java, aws-kotlin, aws-exposed, and service coverage. Knowing where each AWS service belongs is the first step toward not building a custom SDK client factory in every service.

Comments

Leave a note or reaction with your GitHub account.