# Sebastian Hesse > AWS Serverless Cloud Consultant helping teams design and build scalable, cost-efficient cloud solutions on AWS using serverless architecture and infrastructure as code. Sebastian Hesse is an independent consultant based in Germany, operating through sh cloud software GmbH. He focuses on serverless architectures on AWS, with practical experience in AWS Lambda, DynamoDB, API Gateway, EventBridge, Step Functions, SQS, CloudFormation, and AWS CDK. His primary languages are TypeScript and Java. He offers two main services: serverless consulting (architecture design, migration strategy, cost and performance optimization) and hands-on AWS workshops for development teams. His blog covers practical AWS serverless topics with 40+ articles based on real project experience. ## Services - [Serverless Consulting](https://www.sebastianhesse.de/#services): Architecture design and review, migration strategy and execution, cost optimization, and performance tuning for AWS serverless applications. - [AWS Workshops](https://www.sebastianhesse.de/#services): Hands-on team training on AWS Lambda fundamentals, DynamoDB data modeling, EventBridge and SQS patterns, and Step Functions workflows. ## Blog Posts - [Migrating AWS CDK logRetention to logGroup Without Losing Your Logs](https://www.sebastianhesse.de/blog/2026/07/20/migrate-cdk-logretention-to-loggroup): Safely migrate the deprecated CDK logRetention prop to logGroup by importing the existing log group, keeping your logs and avoiding a failed deploy. - [Serverless and AI on AWS in 2026: Governing Agents and the New Agent Economy](https://www.sebastianhesse.de/blog/2026/07/15/serverless-ai-aws-2026-agent-governance-economy): Part two of the 2026 serverless AI tour. Bedrock AgentCore for production governance, Strands Agents, the AWS Serverless agent plugin, and WAF's new AI traffic monetization at the edge. - [Serverless and AI on AWS in 2026: Lambda Gets Hands, S3 Gets Memory](https://www.sebastianhesse.de/blog/2026/07/13/serverless-ai-aws-2026-lambda-hands-s3-memory): How AWS rebuilt serverless compute and storage for AI agents. Lambda MicroVMs, Durable Functions, S3 Vectors, S3 Annotations, and managed Bedrock RAG, with honest costs and trade-offs. - [Build, Test and Debug AWS Lambda Container Images Locally with Docker](https://www.sebastianhesse.de/blog/2026/06/08/local-debugging-docker-lambda-functions): Run AWS Lambda container images on your machine with the Runtime Interface Emulator. Build the image, pass IAM or AWS SSO credentials, verify them with STS, and shell into the container to debug. - [Updating Tags on an OpenSearch Serverless Collection Replaces the Resource](https://www.sebastianhesse.de/blog/2026/03/16/cloudformation-opensearch-serverless-tag-replacement): AWS::OpenSearchServerless::Collection requires replacement when you update tags — a surprising CloudFormation behavior that can break cross-account setups and cause downtime. - [Cross-Account Data Ingestion into OpenSearch Serverless with AWS CDK](https://www.sebastianhesse.de/blog/2026/03/10/opensearch-serverless-cross-account-cdk): How to set up OpenSearch Serverless for cross-account data ingestion using AWS CDK, VPC endpoints, and IAM role assumption. - [Run Custom Build Commands During CDK Synthesis with Code.fromCustomCommand](https://www.sebastianhesse.de/blog/2026/03/01/cdk-code-from-custom-command): Learn how to use CDK's Code.fromCustomCommand to run custom build scripts, download artifacts, or use non-standard toolchains during CDK synthesis. - [Scale CloudWatch Alarms with Metrics Insights Queries](https://www.sebastianhesse.de/blog/2026/02/24/scale-cloudwatch-alarms-with-metrics-insights): Use CloudWatch Metrics Insights to monitor multiple resources by querying their tags. - [Serve Markdown for LLMs and AI Agents Using Amazon CloudFront](https://www.sebastianhesse.de/blog/2026/02/14/serve-markdown-for-llms-using-cloudfront): Serve Markdown to LLM and AI agent clients while keeping HTML for human visitors, using CloudFront Functions, Lambda, and S3. - [Running Scripts Across Multiple AWS Accounts with AWS SSO](https://www.sebastianhesse.de/blog/2026/02/11/run-script-across-multiple-aws-accounts): Execute AWS CLI commands across multiple AWS accounts and regions from your local machine using AWS SSO. - [Importing DynamoDB Items from a CSV File Using the AWS CLI](https://www.sebastianhesse.de/blog/2025/05/22/import-dynamodb-data-from-csv): Re-import DynamoDB items from a CSV file using a simple bash script and the AWS CLI. - [Migrating a CDK Construct to projen and jsii](https://www.sebastianhesse.de/blog/2021/03/01/migrating-a-cdk-construct-to-projen-and-jsii): Convert your existing AWS CDK construct to use projen for easier maintenance and jsii for multi-language publishing. - [Using Spring Boot On AWS Lambda: Clever or Dumb?](https://www.sebastianhesse.de/blog/2021/02/14/using-spring-boot-on-aws-lambda-clever-or-dumb): Analysis of advantages, disadvantages, cold start impact, and GraalVM alternatives for running Spring Boot on AWS Lambda. - [Serverless Sending and Receiving E-Mails, the CDK Way](https://www.sebastianhesse.de/blog/2021/01/31/serverless-sending-and-receiving-e-mails-the-cdk-way): Automate email forwarding with AWS SES using CDK constructs — verify domains, set up receipt rules, and forward emails to Gmail. - [5 Ways To Bundle a Lambda Function Within an AWS CDK Construct](https://www.sebastianhesse.de/blog/2021/01/16/5-ways-to-bundle-a-lambda-function-within-an-aws-cdk-construct): Comparing bundling strategies for Lambda with CDK: inline code, separate files, pre-build bundling, NodejsFunction, and Serverless App Repository. - [Automatically Generate a Nice Looking Serverless REST API Documentation](https://www.sebastianhesse.de/blog/2020/08/27/automatically-generate-a-nice-looking-serverless-rest-api-documentation): Generate REST API documentation from OpenAPI specs using ReDoc, openapi-generator, or swagger-codegen. - [Using DynamoDB Local and Testcontainers in Java within Bitbucket Pipelines](https://www.sebastianhesse.de/blog/2020/05/14/using-dynamodb-local-and-testcontainers-in-java-within-bitbucket-pipelines): Automate DynamoDB testing with Testcontainers and DynamoDB Local in Bitbucket Pipelines. - [Going Serverless — Why and How (Part 2)](https://www.sebastianhesse.de/blog/2020/03/31/going-serverless-why-and-how-2): Serverless best practices: keep functions small, use asynchronous communication, scale responsibly, and manage timeouts with Step Functions. - [Going Serverless — Why and How (Part 1)](https://www.sebastianhesse.de/blog/2019/07/21/going-serverless-why-and-how-1): Start your serverless journey — learn why serverless matters, how to use Infrastructure as Code with SAM, and set up automated deployments. - [Visiting JavaLand 2019](https://www.sebastianhesse.de/blog/2019/03/31/visiting-javaland-2019): JavaLand 2019 takeaways: microservices transactions with SAGA pattern, Domain Driven Design, and Web API design best practices. - [Caching in AWS Lambda](https://www.sebastianhesse.de/blog/2018/12/16/caching-in-aws-lambda): Improve AWS Lambda performance and reduce costs with caching strategies — comparing simple caching, DynamoDB cache, Redis, and ElastiCache. - [Remove Old CloudWatch Log Groups of Lambda Functions](https://www.sebastianhesse.de/blog/2018/10/07/remove-old-cloudwatch-log-groups-of-lambda-functions): Automatically remove orphaned CloudWatch log groups from deleted Lambda functions using a Python script and CloudFormation. - [My First Time on a Bigger Stage](https://www.sebastianhesse.de/blog/2018/09/23/my-first-time-on-a-bigger-stage): Lessons from giving a conference talk at Atlas Camp 2018: storytelling, preparation, and presentation techniques. - [Shut Down CloudFormation Stack Resources Over Night Using AWS Lambda](https://www.sebastianhesse.de/blog/2018/04/22/shut-down-cloudformation-stack-resources-over-night-using-aws-lambda): Save AWS costs by automatically shutting down development stack resources overnight using Lambda functions and CloudFormation parameters. - [Creating Different Environments With AWS CloudFormation](https://www.sebastianhesse.de/blog/2018/02/03/creating-different-aws-cloudformation-environments): Create separate dev, staging, and production environments with AWS CloudFormation using parameters and deploy scripts. - [Keeping Your AWS Budget Under Control](https://www.sebastianhesse.de/blog/2018/01/15/keeping-aws-budget-control): Control AWS spending with AWS Budgets — set up cost alerts and forecasted thresholds to prevent surprise charges. - [Use Jersey and Spring in AWS Lambda](https://www.sebastianhesse.de/blog/2017/08/27/use-jersey-spring-aws-lambda): Integrate Jersey and Spring Framework in AWS Lambda using aws-serverless-java-container for building REST APIs with Java. - [How to Reduce Your CloudFormation Template Size](https://www.sebastianhesse.de/blog/2017/08/12/reduce-cloudformation-template-size): Overcome the 51,200 byte CloudFormation template limit using AWS::Include and cfn-include preprocessor. - [Starter Projects For AWS Lambda Using NodeJS And Java](https://www.sebastianhesse.de/blog/2017/08/01/starter-projects-for-aws-lambda-using-nodejs-and-java): AWS Lambda starter projects for NodeJS and Java with CloudFormation templates. - [Fast AWS Lambda Code Updates And Improved Lambda Logs](https://www.sebastianhesse.de/blog/2017/07/11/fast-aws-lambda-code-updates-and-improved-lambda-logs): Speed up AWS Lambda code updates from 2.5 minutes to 15 seconds with lambda-updater. - [5 Things To Consider For Writing A Lambda Function](https://www.sebastianhesse.de/blog/2017/06/24/5-things-consider-writing-lambda-function): Essential tips for writing AWS Lambda functions: choosing a runtime, using CloudFormation, attaching policies, and improving cold starts. - [Start Dijkstra Shortest Path using JMapViewer](https://www.sebastianhesse.de/blog/2017/01/27/start-dijkstra-shortest-path-using-jmapviewer): Implement Dijkstra's shortest path algorithm with JMapViewer for OpenStreetMap. - [Revert Rebasing Errors with Git Reflog](https://www.sebastianhesse.de/blog/2016/12/15/revert-rebasing-errors-with-git-reflog): Fix Git rebase mistakes using git reflog to recover lost commits. - [Three Inspiring Indie Hacker Projects I've Found on IndieHackers.com](https://www.sebastianhesse.de/blog/2016/12/08/three-inspiring-indie-hacker-projects-ive-found-indiehackers-com): SubmitHub, Logojoy, and park.io — how solo founders automate processes to build profitable businesses. - [Set Up JMapViewer for OSM Data](https://www.sebastianhesse.de/blog/2016/11/24/setting-jmapviewer-osm-data): Set up JMapViewer for OpenStreetMap data in Java Swing applications. - [Deploy a Multi-Module Maven Project to Heroku](https://www.sebastianhesse.de/blog/2016/10/14/deploy-multi-module-maven-project-heroku): Deploy multi-module Maven projects to Heroku with Spring Boot. - [Getting Notified About New JIRA Issues](https://www.sebastianhesse.de/blog/2016/07/14/getting-notified-about-new-jira-issues): Stay updated on new Jira issues with filter subscriptions and automated email notifications. - [How to Test a Web App with Popups Using Selenium](https://www.sebastianhesse.de/blog/2016/07/06/how-to-test-a-web-app-with-popups-using-selenium): Test hover popups with Selenium using Actions class and WebDriverWait. - [Command Line Tool to Quickly Start a Confluence Standalone Instance](https://www.sebastianhesse.de/blog/2016/05/30/command-line-tool-quickly-start-confluence-standalone-instance): Start Confluence standalone instances in seconds with the confluence-starter CLI. - [Apache Troubleshooting and Nginx Rescue](https://www.sebastianhesse.de/blog/2016/02/09/apache-troubleshooting-and-nginx-rescue): Migrate from Apache to Nginx to solve high CPU usage and timeout issues. - [Handle URL Parameters with AngularJS](https://www.sebastianhesse.de/blog/2015/12/31/handle-url-parameters-with-angularjs): Master AngularJS URL handling with $routeProvider and $routeParams. - [Using AngularJS and Spring Together](https://www.sebastianhesse.de/blog/2015/12/23/using-angularjs-and-spring-together): Build web apps with AngularJS and Spring Boot — from Spring Initializr setup to AngularJS routing. - [Manipulate a Page from a Chrome Extension](https://www.sebastianhesse.de/blog/2015/08/09/manipulate-a-page-from-a-chrome-extension): Build Chrome extensions that manipulate web pages using content scripts and context menus. - [Add Spring to JavaFX](https://www.sebastianhesse.de/blog/2015/05/26/add-spring-to-javafx): Integrate Spring Framework with JavaFX for dependency injection in FXML controllers. - [First Steps with JavaFX](https://www.sebastianhesse.de/blog/2015/05/23/first-steps-with-javafx): Learn JavaFX basics with FXML layouts and controllers in this step-by-step tutorial. ## Optional - [About](https://www.sebastianhesse.de/about): Background, expertise, and professional approach. - [Blog Index](https://www.sebastianhesse.de/blog): Full list of all published articles on AWS and serverless topics. - [LinkedIn](https://www.linkedin.com/in/sebastian-hesse): Professional profile and community activity. - [GitHub](https://github.com/seeebiii): Open source projects and code examples. - [Contact](mailto:info@sebastianhesse.de): Direct contact for consulting inquiries.