Production-Ready Serverless (Nov 2024, CDK)
Learn how to build modern, cloud-native applications on AWS with this hands-on workshop.
Lecture: What do we mean by serverless?
Lecture: When is serverless the right choice for your workload?
Lecture: The serverless-first mindset
Lecture: What about vendor lock-in?
What do you hope to get out of this workshop?
Prerequisite: Adding an IAM user
Lecture: Lambda 101
Exercise: Create Lambda functions in AWS Console
Lecture: Understanding Lambda's scaling behaviour
Lecture: How Lambda works under the hood
Lecture: Lambda EFS integration
Lecture: Lambda extensions
Lecture: Intro to Provisioned Concurrency
Lecture: When to use Provisioned Concurrency
Lecture: When to use Lambda destinations
Lecture: CloudFormation 101
Lecture: IAM 101
Lecture: Serverless Framework vs AWS SAM vs AWS CDK vs Terraform
Serverless Framework or CDK, your choice!
Lecture: Introduction to AWS CDK
Exercise - Install CDK
Exercise: Create a new CDK project
Source code: Create a new CDK project
Exercise: Deploy the CDK project
Exercise: Supporting ephemeral environments
Source code: Supporting ephemeral environments
Lecture: DynamoDB 101
Lecture: API Gateway 101
Exercise: Create an API with API Gateway and Lambda
Source code: Create an API with API Gateway and Lambda
Exercise: Creating the Restaurants API
Source code: Creating the Restaurants API
Exercise: Displaying restaurants on the landing page
Source code: Displaying restaurants on the landing page
Lecture: Securing API Gateway
Exercise: Secure API Gateway with AWS_IAM
Source code: Secure API Gateway with AWS_IAM
Lecture: Cognito 101
Exercise: Create a new Cognito User Pool
Source code: Create a new Cognito User Pool
Lecture: Secure API Gateway with Cognito User Pool
Exercise: Secure API Gateway with Cognito User Pool
Source code: Secure API Gateway with Cognito User Pool
Lecture: API Gateway best practices
Lecture: API Gateway REST API vs HTTP API vs ALB
Lecture: When to use Lambda function URLs
Lecture: How to assign a static IP to a Lambda function
Lecture: When to use API Gateway service proxies
(Optional) Challenges
Live Q&A #1
Live Q&A #2
Lecture: The general strategy for testing API Gateway REST APIs
Lecture: Unit vs Integration vs End-to-End tests
Lecture: Hexagonal architectures the what why and when
Lecture: Writing integration tests
Exercise: Writing integration tests
Source code: Writing integration tests
Lecture: Writing end-to-end tests
Exercise: Writing end-to-end tests
Source code: Writing end-to-end tests
Lecture: CI/CD
Exercise: Set up CI/CD with GitHub Actions
Lecture: Intro to SSM Parameter Store
Lecture: The problems with environment variables
Exercise: Load dynamic configurations
Source code: Load dynamic configurations
Lecture: Ephemeral (Temporary) environments explained
Exercise: Share SSM parameters with temporary environments
Source code: Share SSM parameters with temporary environments
Exercise: Share information via SSM Parameters
Source code: Exercise: Share information via SSM Parameters
Lecture: Securely handle secrets
Exercise: Securely handle secrets
Source code: Securely handle secrets
Lecture: SSM Parameter Store vs Secrets Manager
Lecture: How to handle serverful resources when using ephemeral environments
Lecture: How to load test serverless apps
Lecture: How to organize your system into repositories
Lecture: Best practices for AWS Organizations and accounts
(Optional) Challenges
How are we doing so far?
Live Q&A #3
Live Q&A #4
Lecture: Introduction to Event-Driven Architectures
Lecture: Introduction to Domain-Driven Design
Lecture: Introduction to EventBridge
Lecture: Comparing EventBridge event bus topologies
Lecture: Processing events with EventBridge and Lambda
Exercise: Processing events with EventBridge and Lambda
Source code: Processing events with EventBridge and Lambda
Lecture: How to include SNS and EventBridge in end-to-end tests
Exercise: Include SNS and EventBridge in end-to-end tests
Source code: Include SNS and EventBridge in end-to-end tests
Lecture: Dealing with failures
Exercise: Implement idempotency in event processing
Source code: Implement idempotency in event processing
Exercise: Implement error handling in event processing
Source code: Implement error handling in event processing
Lecture: SNS vs SQS vs Kinesis vs EventBridge
Lecture: How to control Lambda concurrency
Lecture: How to structure and version your events
Lecture: Events vs Commands
Lecture: Light event vs. Rich event
Lecture: Domain vs Integration events
Lecture: Context Mapping and Anti-Corruption Layers
Lecture: Where should you implement the Anti-Corruption Layer?
Lecture: Do you need an event broker
Lecture: How to forward events to a data lake
Lecture: Introduction to event sourcing
Lecture: Introduction to CQRS
Lecture: Orchestration vs Choreography
Lecture: Introduction to AWS Step Functions
Lecture: Introduction to Amazon States Language (ASL)
Lecture: Designing an order processing workflow with Step Functions
Exercise: Implement an order processing workflow with Step Functions
Source code: Implement an order processing workflow with Step Functions
(Optional) Challenges
Become an affiliate and earn 50% commission
Live Q&A #5
Live Q&A #6
Lecture: Log aggregation
Lecture: How to avoid CloudWatch Logs altogether
Lecture: Structured logging
Exercise: Structured logging
Source code: Structured logging
Lecture: Sample debug logs in production
Exercise: Sample debug logs in production
Source code: Sample debug logs in production
Lecture: Lambda's advanced logging controls
Lecture: Intro to AWS X-Ray
Exercise: X-Ray
Source code: X-Ray
Lecture: X-Ray limitations
Lecture: Intro to Lumigo
Exercise: Lumigo
Lecture: Alerts you should have
Exercise: Powertuning Lambda functions
Lecture: Introduction to LLRT
Lecture: How to build multi-region, active-active serverless applications
Lecture: All you need to know about caching for serverless applications
Lecture: Costly mistakes to avoid
How our app might look in the real world
How did we do?
Wrap up
Live Q&A #7
Live Q&A #8