<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Randy M. Alonzo</title>
    <description>The latest articles on DEV Community by Randy M. Alonzo (@randyalonzo-dev).</description>
    <link>https://dev.to/randyalonzo-dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4111851%2F5576d63b-fa1e-4d79-8a64-c8d46d99b645.jpg</url>
      <title>DEV Community: Randy M. Alonzo</title>
      <link>https://dev.to/randyalonzo-dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/randyalonzo-dev"/>
    <language>en</language>
    <item>
      <title>⚡ AWS Lambda Can Run for 90 Minutes Now — But Should It?</title>
      <dc:creator>Randy M. Alonzo</dc:creator>
      <pubDate>Thu, 17 Sep 2026 16:27:22 +0000</pubDate>
      <link>https://dev.to/randyalonzo-dev/aws-lambda-can-run-for-90-minutes-now-but-should-it-52ni</link>
      <guid>https://dev.to/randyalonzo-dev/aws-lambda-can-run-for-90-minutes-now-but-should-it-52ni</guid>
      <description>&lt;p&gt;⚡ AWS Lambda Can Run for 90 Minutes Now — But Should It?&lt;/p&gt;

&lt;p&gt;For years, AWS learners eventually memorized one number:&lt;/p&gt;

&lt;p&gt;⏱️ 15 minutes.&lt;/p&gt;

&lt;p&gt;Need a function to run for 5 minutes?&lt;/p&gt;

&lt;p&gt;Lambda could handle it.&lt;/p&gt;

&lt;p&gt;Need 10 minutes?&lt;/p&gt;

&lt;p&gt;Still possible.&lt;/p&gt;

&lt;p&gt;Need 20, 30, or 60 minutes?&lt;/p&gt;

&lt;p&gt;Now you were probably reconsidering the architecture.&lt;/p&gt;

&lt;p&gt;Then AWS changed the equation.&lt;/p&gt;

&lt;p&gt;On September 9, 2026, AWS announced that Lambda Managed Instances can support function executions of up to:&lt;/p&gt;

&lt;p&gt;🔥 90 MINUTES&lt;/p&gt;

&lt;p&gt;for asynchronous and supported Event Source Mapping invocations.&lt;/p&gt;

&lt;p&gt;That is six times the familiar 15-minute limit.&lt;/p&gt;

&lt;p&gt;But there is a much more important question than:&lt;/p&gt;

&lt;p&gt;“Can Lambda run for 90 minutes?”&lt;/p&gt;

&lt;p&gt;The real question is:&lt;/p&gt;

&lt;p&gt;🤔 Should your workload run inside Lambda for 90 minutes?&lt;/p&gt;

&lt;p&gt;That is where this update becomes an architecture discussion rather than just a product announcement.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🚨 First: This Is NOT “Every Lambda Function Now Runs for 90 Minutes”&lt;/p&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;The new 90-minute maximum applies specifically to:&lt;/p&gt;

&lt;p&gt;✅ AWS Lambda Managed Instances&lt;/p&gt;

&lt;p&gt;and to:&lt;/p&gt;

&lt;p&gt;✅ Asynchronous invocations&lt;/p&gt;

&lt;p&gt;✅ Supported Event Source Mapping invocations&lt;/p&gt;

&lt;p&gt;It does not mean every Lambda function suddenly received a 90-minute timeout.&lt;/p&gt;

&lt;p&gt;Synchronous Lambda invocations still retain the familiar:&lt;/p&gt;

&lt;p&gt;⏱️ 15-minute maximum.&lt;/p&gt;

&lt;p&gt;The Lambda initialization phase on Managed Instances also remains limited to 15 minutes.&lt;/p&gt;

&lt;p&gt;And some Event Source Mapping integrations, including Amazon MQ and Amazon DocumentDB, remain subject to the 15-minute limit.&lt;/p&gt;

&lt;p&gt;So the accurate statement is not:&lt;/p&gt;

&lt;p&gt;“Lambda now runs for 90 minutes.”&lt;/p&gt;

&lt;p&gt;A better statement is:&lt;/p&gt;

&lt;p&gt;“Lambda Managed Instances can now support up to 90-minute execution for specific asynchronous and Event Source Mapping workloads.”&lt;/p&gt;

&lt;p&gt;That detail changes everything.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧠 What Are Lambda Managed Instances?&lt;/p&gt;

&lt;p&gt;Before discussing the longer timeout, it helps to understand the environment where it applies.&lt;/p&gt;

&lt;p&gt;Lambda Managed Instances extend the Lambda programming model while allowing functions to run using managed EC2-based capacity.&lt;/p&gt;

&lt;p&gt;AWS continues handling infrastructure responsibilities such as:&lt;/p&gt;

&lt;p&gt;⚙️ Instance lifecycle&lt;/p&gt;

&lt;p&gt;🔄 Scaling&lt;/p&gt;

&lt;p&gt;🩹 Operating system and runtime patching&lt;/p&gt;

&lt;p&gt;🌐 Routing&lt;/p&gt;

&lt;p&gt;⚖️ Load balancing&lt;/p&gt;

&lt;p&gt;while developers continue working with familiar Lambda concepts such as:&lt;/p&gt;

&lt;p&gt;⚡ Functions&lt;/p&gt;

&lt;p&gt;📜 Handlers&lt;/p&gt;

&lt;p&gt;🔐 Execution roles&lt;/p&gt;

&lt;p&gt;🌐 VPC configuration&lt;/p&gt;

&lt;p&gt;📊 CloudWatch monitoring&lt;/p&gt;

&lt;p&gt;Lambda Managed Instances are especially interesting for workloads that benefit from:&lt;/p&gt;

&lt;p&gt;🖥️ Specialized compute&lt;/p&gt;

&lt;p&gt;📈 Predictable or steady-state usage&lt;/p&gt;

&lt;p&gt;⚙️ Greater compute configuration flexibility&lt;/p&gt;

&lt;p&gt;💰 EC2-based pricing characteristics&lt;/p&gt;

&lt;p&gt;⏱️ And now, significantly longer continuous execution.&lt;/p&gt;

&lt;p&gt;This is not simply “normal Lambda with a bigger timer.”&lt;/p&gt;

&lt;p&gt;It represents another compute option inside the AWS ecosystem.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔥 Why the 15-Minute Limit Mattered&lt;/p&gt;

&lt;p&gt;The old timeout forced an important architecture decision.&lt;/p&gt;

&lt;p&gt;Imagine you have a job that normally requires:&lt;/p&gt;

&lt;p&gt;25 minutes.&lt;/p&gt;

&lt;p&gt;Traditional Lambda execution could not simply continue until completion.&lt;/p&gt;

&lt;p&gt;You had to rethink the workload.&lt;/p&gt;

&lt;p&gt;Maybe you:&lt;/p&gt;

&lt;p&gt;🔄 Split the task into smaller Lambda functions.&lt;/p&gt;

&lt;p&gt;📬 Used queues between processing stages.&lt;/p&gt;

&lt;p&gt;🧩 Introduced Step Functions.&lt;/p&gt;

&lt;p&gt;📦 Moved processing into containers.&lt;/p&gt;

&lt;p&gt;⚙️ Used AWS Batch.&lt;/p&gt;

&lt;p&gt;🖥️ Ran the workload on EC2.&lt;/p&gt;

&lt;p&gt;Sometimes that restructuring improved the architecture.&lt;/p&gt;

&lt;p&gt;Sometimes it added complexity mainly because the workload could not complete inside the Lambda execution window.&lt;/p&gt;

&lt;p&gt;The new 90-minute option changes that trade-off for some workloads.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧪 What Kinds of Workloads Could Benefit?&lt;/p&gt;

&lt;p&gt;AWS specifically highlights examples such as:&lt;/p&gt;

&lt;p&gt;📊 Data processing&lt;/p&gt;

&lt;p&gt;🎥 Media transcoding&lt;/p&gt;

&lt;p&gt;💰 Financial calculations&lt;/p&gt;

&lt;p&gt;🤖 AI inference&lt;/p&gt;

&lt;p&gt;⚙️ Batch processing&lt;/p&gt;

&lt;p&gt;🌐 Web crawling&lt;/p&gt;

&lt;p&gt;📁 Large file transfers&lt;/p&gt;

&lt;p&gt;Imagine a data-processing task that consistently takes:&lt;/p&gt;

&lt;p&gt;22 minutes.&lt;/p&gt;

&lt;p&gt;Previously:&lt;/p&gt;

&lt;p&gt;❌ Too long for a standard 15-minute Lambda execution.&lt;/p&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;p&gt;✅ Potentially feasible on Lambda Managed Instances when invoked through a supported asynchronous pattern.&lt;/p&gt;

&lt;p&gt;That can reduce the need to break a naturally continuous computation into artificial pieces solely because of the previous timeout.&lt;/p&gt;

&lt;p&gt;But convenience introduces another question.&lt;/p&gt;

&lt;p&gt;What happens when that 22-minute job fails at minute 21?&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 The Longer Your Function Runs, the More Expensive Failure Becomes&lt;/p&gt;

&lt;p&gt;Suppose your function performs a 45-minute AI inference job.&lt;/p&gt;

&lt;p&gt;Everything works for:&lt;/p&gt;

&lt;p&gt;10 minutes.&lt;/p&gt;

&lt;p&gt;20 minutes.&lt;/p&gt;

&lt;p&gt;30 minutes.&lt;/p&gt;

&lt;p&gt;Then at minute 39:&lt;/p&gt;

&lt;p&gt;💥 Something fails.&lt;/p&gt;

&lt;p&gt;Maybe:&lt;/p&gt;

&lt;p&gt;🌐 An external dependency disconnects.&lt;/p&gt;

&lt;p&gt;🔑 A temporary credential expires.&lt;/p&gt;

&lt;p&gt;📡 A network connection dies.&lt;/p&gt;

&lt;p&gt;🧠 The process throws an exception.&lt;/p&gt;

&lt;p&gt;🗄️ A downstream service becomes unavailable.&lt;/p&gt;

&lt;p&gt;Now what?&lt;/p&gt;

&lt;p&gt;If your workload simply starts again from the beginning, you may repeat almost 40 minutes of expensive computation.&lt;/p&gt;

&lt;p&gt;That is why a longer timeout changes more than the maximum runtime.&lt;/p&gt;

&lt;p&gt;It increases the importance of:&lt;/p&gt;

&lt;p&gt;🔁 Retry behavior&lt;/p&gt;

&lt;p&gt;🧠 Idempotency&lt;/p&gt;

&lt;p&gt;💾 Checkpointing&lt;/p&gt;

&lt;p&gt;📊 Observability&lt;/p&gt;

&lt;p&gt;🔐 Credential lifetime&lt;/p&gt;

&lt;p&gt;🌐 Connection lifetime&lt;/p&gt;

&lt;p&gt;💰 Failure cost&lt;/p&gt;

&lt;p&gt;Longer-running serverless workloads require more deliberate failure design.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔁 Idempotency Becomes Even More Important&lt;/p&gt;

&lt;p&gt;Imagine an SQS message triggers your Lambda function.&lt;/p&gt;

&lt;p&gt;The function:&lt;/p&gt;

&lt;p&gt;1️⃣ Reads the message.&lt;/p&gt;

&lt;p&gt;2️⃣ Processes a large dataset.&lt;/p&gt;

&lt;p&gt;3️⃣ Writes results into a database.&lt;/p&gt;

&lt;p&gt;4️⃣ Sends a notification.&lt;/p&gt;

&lt;p&gt;Now imagine the function fails after writing the database result but before completing the invocation.&lt;/p&gt;

&lt;p&gt;The event may eventually be retried.&lt;/p&gt;

&lt;p&gt;What happens when the same job runs again?&lt;/p&gt;

&lt;p&gt;Does it:&lt;/p&gt;

&lt;p&gt;✅ Detect that the operation already completed?&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;❌ Write duplicate records?&lt;/p&gt;

&lt;p&gt;❌ Charge the customer twice?&lt;/p&gt;

&lt;p&gt;❌ Send duplicate notifications?&lt;/p&gt;

&lt;p&gt;❌ Process the same file again?&lt;/p&gt;

&lt;p&gt;That is the idea behind idempotency.&lt;/p&gt;

&lt;p&gt;An idempotent operation can safely be repeated without creating unintended duplicate effects.&lt;/p&gt;

&lt;p&gt;With longer execution windows, the consequences of poorly designed retries can become more expensive.&lt;/p&gt;

&lt;p&gt;The takeaway:&lt;/p&gt;

&lt;p&gt;⏱️ Longer timeout&lt;/p&gt;

&lt;p&gt;does not reduce the importance of good distributed-system design.&lt;/p&gt;

&lt;p&gt;It increases it.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💾 This Is Where Durable Functions Become Interesting&lt;/p&gt;

&lt;p&gt;AWS also supports Lambda durable functions.&lt;/p&gt;

&lt;p&gt;Durable functions introduce checkpointing concepts that allow execution progress to be preserved.&lt;/p&gt;

&lt;p&gt;Imagine a long-running workload:&lt;/p&gt;

&lt;p&gt;Step 1&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;15 minutes of processing&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;💾 Checkpoint&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Step 2&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;20 minutes of processing&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;💾 Checkpoint&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Step 3&lt;/p&gt;

&lt;p&gt;Now suppose the underlying execution experiences a failure during Step 3.&lt;/p&gt;

&lt;p&gt;Without useful checkpointing:&lt;/p&gt;

&lt;p&gt;🔄 Start everything again.&lt;/p&gt;

&lt;p&gt;With durable execution:&lt;/p&gt;

&lt;p&gt;💾 Previously completed work can be recognized during recovery.&lt;/p&gt;

&lt;p&gt;AWS describes durable functions as using checkpoints to track execution progress and replay execution while skipping completed work.&lt;/p&gt;

&lt;p&gt;That becomes particularly valuable when re-running earlier computation would be expensive.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🤖 Example: Long AI Inference&lt;/p&gt;

&lt;p&gt;Imagine an inference workload takes approximately:&lt;/p&gt;

&lt;p&gt;40 minutes.&lt;/p&gt;

&lt;p&gt;At minute 35:&lt;/p&gt;

&lt;p&gt;💥 Infrastructure failure.&lt;/p&gt;

&lt;p&gt;Starting again from minute zero means repeating 35 minutes of computation.&lt;/p&gt;

&lt;p&gt;For expensive workloads, that can hurt:&lt;/p&gt;

&lt;p&gt;💰 Cost&lt;/p&gt;

&lt;p&gt;⏱️ Latency&lt;/p&gt;

&lt;p&gt;📈 Throughput&lt;/p&gt;

&lt;p&gt;😵 Operational reliability&lt;/p&gt;

&lt;p&gt;A durable approach can make checkpointing part of the design.&lt;/p&gt;

&lt;p&gt;The important architecture question becomes:&lt;/p&gt;

&lt;p&gt;“Can the workload safely restart?”&lt;/p&gt;

&lt;p&gt;If yes:&lt;/p&gt;

&lt;p&gt;A normal retry model may be enough.&lt;/p&gt;

&lt;p&gt;If no:&lt;/p&gt;

&lt;p&gt;Consider checkpointing or another execution model.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📨 What Happens With Asynchronous Lambda Invocations?&lt;/p&gt;

&lt;p&gt;For asynchronous invocations, Lambda can apply retry behavior when a function fails or times out.&lt;/p&gt;

&lt;p&gt;That means architects need to think carefully about what happens when long-running work is retried.&lt;/p&gt;

&lt;p&gt;Questions worth asking:&lt;/p&gt;

&lt;p&gt;❓ Can the same event safely execute twice?&lt;/p&gt;

&lt;p&gt;❓ Does processing create external side effects?&lt;/p&gt;

&lt;p&gt;❓ Should failed events go to a dead-letter queue?&lt;/p&gt;

&lt;p&gt;❓ Should an on-failure destination be configured?&lt;/p&gt;

&lt;p&gt;❓ What should happen after repeated failure?&lt;/p&gt;

&lt;p&gt;❓ Can processing resume instead of restart?&lt;/p&gt;

&lt;p&gt;Long execution makes these questions more consequential.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📬 SQS + 90-Minute Lambda Requires Careful Configuration&lt;/p&gt;

&lt;p&gt;SQS is a natural companion for asynchronous processing.&lt;/p&gt;

&lt;p&gt;Architecture:&lt;/p&gt;

&lt;p&gt;📨 Amazon SQS&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;⚡ Lambda Managed Instance&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🧠 Long-running processing&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🗄️ Store result&lt;/p&gt;

&lt;p&gt;But there is an important timing relationship.&lt;/p&gt;

&lt;p&gt;The queue's visibility timeout needs to accommodate the Lambda processing window and retry behavior.&lt;/p&gt;

&lt;p&gt;AWS currently recommends configuring the SQS visibility timeout to at least:&lt;/p&gt;

&lt;p&gt;6 × the Lambda function timeout.&lt;/p&gt;

&lt;p&gt;So imagine configuring:&lt;/p&gt;

&lt;p&gt;Lambda timeout:&lt;/p&gt;

&lt;p&gt;90 minutes&lt;/p&gt;

&lt;p&gt;Then the queue visibility timeout needs careful planning around that execution duration.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because you do not want the same SQS message becoming visible again while the original invocation is still processing it.&lt;/p&gt;

&lt;p&gt;Longer Lambda execution means surrounding services must also be configured with longer-running processing in mind.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📦 Batch Failure Handling Matters Too&lt;/p&gt;

&lt;p&gt;Imagine an Event Source Mapping sends several records to your function.&lt;/p&gt;

&lt;p&gt;The batch contains:&lt;/p&gt;

&lt;p&gt;Record 1 ✅&lt;/p&gt;

&lt;p&gt;Record 2 ✅&lt;/p&gt;

&lt;p&gt;Record 3 ❌&lt;/p&gt;

&lt;p&gt;Record 4 ✅&lt;/p&gt;

&lt;p&gt;Record 5 ✅&lt;/p&gt;

&lt;p&gt;Without careful failure handling, one bad record can cause successful records to be processed again.&lt;/p&gt;

&lt;p&gt;For supported event sources, AWS provides partial batch failure capabilities.&lt;/p&gt;

&lt;p&gt;That allows your application to communicate:&lt;/p&gt;

&lt;p&gt;“These records succeeded.”&lt;/p&gt;

&lt;p&gt;“These records failed.”&lt;/p&gt;

&lt;p&gt;Then only failed records need to be retried.&lt;/p&gt;

&lt;p&gt;With workloads that may run for tens of minutes, avoiding unnecessary reprocessing becomes even more valuable.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🌐 Long-Lived Network Connections Become a Real Architecture Concern&lt;/p&gt;

&lt;p&gt;A five-second Lambda function usually does not make you think much about connection longevity.&lt;/p&gt;

&lt;p&gt;A 70-minute function should.&lt;/p&gt;

&lt;p&gt;Imagine your function connects to:&lt;/p&gt;

&lt;p&gt;🗄️ Amazon RDS&lt;/p&gt;

&lt;p&gt;⚡ Amazon ElastiCache&lt;/p&gt;

&lt;p&gt;🌐 External APIs&lt;/p&gt;

&lt;p&gt;🔌 Third-party databases&lt;/p&gt;

&lt;p&gt;🚪 Services through a NAT Gateway&lt;/p&gt;

&lt;p&gt;Now ask:&lt;/p&gt;

&lt;p&gt;Will this connection remain valid for the full execution?&lt;/p&gt;

&lt;p&gt;AWS recommends reviewing idle connection behavior when designing long-running Managed Instance functions.&lt;/p&gt;

&lt;p&gt;For example, downstream services may terminate idle connections.&lt;/p&gt;

&lt;p&gt;Network infrastructure may have its own idle timeout.&lt;/p&gt;

&lt;p&gt;A connection that works during a short Lambda invocation may behave differently across an hour-long job.&lt;/p&gt;

&lt;p&gt;This means long-running functions should be built assuming:&lt;/p&gt;

&lt;p&gt;Connections can disappear.&lt;/p&gt;

&lt;p&gt;Clients may need reconnection logic.&lt;/p&gt;

&lt;p&gt;Retries need to be safe.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔑 Temporary Credentials Have Lifetimes Too&lt;/p&gt;

&lt;p&gt;Long-running Lambda functions may interact with:&lt;/p&gt;

&lt;p&gt;🔐 Temporary AWS credentials&lt;/p&gt;

&lt;p&gt;🎟️ Authentication tokens&lt;/p&gt;

&lt;p&gt;🌐 Third-party API tokens&lt;/p&gt;

&lt;p&gt;🗄️ Temporary database credentials&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;Will these credentials remain valid throughout the entire execution?&lt;/p&gt;

&lt;p&gt;If not:&lt;/p&gt;

&lt;p&gt;How will they be refreshed?&lt;/p&gt;

&lt;p&gt;This is another subtle consequence of increasing execution duration.&lt;/p&gt;

&lt;p&gt;Something that easily survives a 3-minute function may expire during a 75-minute process.&lt;/p&gt;

&lt;p&gt;AWS specifically recommends reviewing temporary credentials and tokens for long-running Managed Instance functions.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🌍 DNS Can Change During Long Executions&lt;/p&gt;

&lt;p&gt;Another subtle concern:&lt;/p&gt;

&lt;p&gt;DNS.&lt;/p&gt;

&lt;p&gt;An application may resolve:&lt;/p&gt;

&lt;p&gt;api.example.com&lt;/p&gt;

&lt;p&gt;at the beginning of execution.&lt;/p&gt;

&lt;p&gt;But what happens if the destination changes later?&lt;/p&gt;

&lt;p&gt;DNS records have TTL values.&lt;/p&gt;

&lt;p&gt;Long-running applications should respect those TTL values rather than assuming one DNS result remains valid indefinitely.&lt;/p&gt;

&lt;p&gt;AWS SDKs generally handle this appropriately, but custom clients deserve attention.&lt;/p&gt;

&lt;p&gt;Again:&lt;/p&gt;

&lt;p&gt;Long-running Lambda begins to resemble some operational concerns traditionally associated with persistent applications.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;⚡ So Should Everything Move to 90-Minute Lambda?&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;And that is probably the most important part of this update.&lt;/p&gt;

&lt;p&gt;The increased timeout expands your architectural options.&lt;/p&gt;

&lt;p&gt;It does not eliminate the other options.&lt;/p&gt;

&lt;p&gt;The right question is:&lt;/p&gt;

&lt;p&gt;“What execution model matches this workload?”&lt;/p&gt;

&lt;p&gt;Let us compare.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;⚡ Option #1 — Lambda Managed Instances&lt;/p&gt;

&lt;p&gt;Consider this approach when:&lt;/p&gt;

&lt;p&gt;✅ Your application already fits the Lambda programming model.&lt;/p&gt;

&lt;p&gt;✅ Processing is event-driven.&lt;/p&gt;

&lt;p&gt;✅ Execution is asynchronous.&lt;/p&gt;

&lt;p&gt;✅ The job naturally completes within the supported window.&lt;/p&gt;

&lt;p&gt;✅ You want Lambda's managed operational model.&lt;/p&gt;

&lt;p&gt;✅ Longer continuous execution removes unnecessary architectural fragmentation.&lt;/p&gt;

&lt;p&gt;✅ Specialized compute or Managed Instance economics fit the workload.&lt;/p&gt;

&lt;p&gt;Questions to ask:&lt;/p&gt;

&lt;p&gt;❓ Is the workload idempotent?&lt;/p&gt;

&lt;p&gt;❓ What happens if execution fails near completion?&lt;/p&gt;

&lt;p&gt;❓ How are retries handled?&lt;/p&gt;

&lt;p&gt;❓ Are connections and credentials safe for the entire duration?&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔄 Option #2 — AWS Step Functions&lt;/p&gt;

&lt;p&gt;Step Functions becomes interesting when the real problem is not:&lt;/p&gt;

&lt;p&gt;“How long can one piece of code run?”&lt;/p&gt;

&lt;p&gt;but instead:&lt;/p&gt;

&lt;p&gt;“How should multiple pieces of work coordinate?”&lt;/p&gt;

&lt;p&gt;Step Functions supports workflows involving:&lt;/p&gt;

&lt;p&gt;🔀 Branching&lt;/p&gt;

&lt;p&gt;🔁 Retries&lt;/p&gt;

&lt;p&gt;🛑 Error handling&lt;/p&gt;

&lt;p&gt;⏳ Waiting&lt;/p&gt;

&lt;p&gt;📨 Service integrations&lt;/p&gt;

&lt;p&gt;🔄 Multiple processing steps&lt;/p&gt;

&lt;p&gt;📞 Callback patterns&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Receive file&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Validate&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Process&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Wait for external result&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Transform&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Store output&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Notify user&lt;/p&gt;

&lt;p&gt;That may be easier to understand as a workflow than as one enormous 80-minute function.&lt;/p&gt;

&lt;p&gt;Step Functions also supports Retry and Catch behavior for handling task failures.&lt;/p&gt;

&lt;p&gt;The decision is architectural:&lt;/p&gt;

&lt;p&gt;One long computation?&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;Several coordinated steps?&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📦 Option #3 — Amazon ECS + AWS Fargate&lt;/p&gt;

&lt;p&gt;Maybe your workload is already containerized.&lt;/p&gt;

&lt;p&gt;Maybe you require:&lt;/p&gt;

&lt;p&gt;🐳 Custom container behavior&lt;/p&gt;

&lt;p&gt;🖥️ Greater runtime control&lt;/p&gt;

&lt;p&gt;📦 Larger application dependencies&lt;/p&gt;

&lt;p&gt;⚙️ Long-running worker processes&lt;/p&gt;

&lt;p&gt;🔧 More control over CPU and memory configuration&lt;/p&gt;

&lt;p&gt;AWS Fargate allows ECS workloads to run containers without requiring you to manage EC2 server clusters directly.&lt;/p&gt;

&lt;p&gt;That can be attractive when:&lt;/p&gt;

&lt;p&gt;The application naturally behaves like a containerized worker rather than an event-driven function.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;“Can I force this workload into Lambda?”&lt;/p&gt;

&lt;p&gt;ask:&lt;/p&gt;

&lt;p&gt;“Which compute abstraction naturally matches the application?”&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;⚙️ Option #4 — AWS Batch&lt;/p&gt;

&lt;p&gt;For true batch workloads, AWS Batch deserves consideration.&lt;/p&gt;

&lt;p&gt;AWS Batch is designed to plan, schedule, and run batch-computing workloads while managing underlying compute capacity.&lt;/p&gt;

&lt;p&gt;That can be useful for:&lt;/p&gt;

&lt;p&gt;🧮 Scientific workloads&lt;/p&gt;

&lt;p&gt;🤖 Machine learning processing&lt;/p&gt;

&lt;p&gt;📊 Analytics&lt;/p&gt;

&lt;p&gt;🧪 Simulation&lt;/p&gt;

&lt;p&gt;🎞️ Large-scale media processing&lt;/p&gt;

&lt;p&gt;📦 Queued compute jobs&lt;/p&gt;

&lt;p&gt;If your problem fundamentally looks like:&lt;/p&gt;

&lt;p&gt;“Here are thousands of compute jobs. Schedule and execute them efficiently.”&lt;/p&gt;

&lt;p&gt;then the workload may align naturally with AWS Batch.&lt;/p&gt;

&lt;p&gt;Again:&lt;/p&gt;

&lt;p&gt;Longer Lambda does not mean every batch workload should become a Lambda workload.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧠 Architecture Decision: Ask About the Workload, Not the Trend&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;“Which AWS service is best?”&lt;/p&gt;

&lt;p&gt;ask questions like:&lt;/p&gt;

&lt;p&gt;⏱️ How long does processing take?&lt;/p&gt;

&lt;p&gt;📈 Is traffic steady or bursty?&lt;/p&gt;

&lt;p&gt;📦 Is the application containerized?&lt;/p&gt;

&lt;p&gt;🔄 Is the workload one computation or many coordinated steps?&lt;/p&gt;

&lt;p&gt;💥 What happens when execution fails?&lt;/p&gt;

&lt;p&gt;📬 How does work enter the system?&lt;/p&gt;

&lt;p&gt;💾 Does the workload need checkpoints?&lt;/p&gt;

&lt;p&gt;🔐 What credentials are involved?&lt;/p&gt;

&lt;p&gt;🌐 Does the workload maintain long-lived connections?&lt;/p&gt;

&lt;p&gt;💰 What does the cost profile look like?&lt;/p&gt;

&lt;p&gt;📊 How will I monitor it?&lt;/p&gt;

&lt;p&gt;🧪 Can processing safely run more than once?&lt;/p&gt;

&lt;p&gt;Architecture decisions become much clearer when they begin with requirements instead of service popularity.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📊 A Quick Decision Framework&lt;/p&gt;

&lt;p&gt;⚡ Lambda Managed Instances&lt;/p&gt;

&lt;p&gt;Think:&lt;/p&gt;

&lt;p&gt;Event-driven + continuous asynchronous execution + Lambda programming model.&lt;/p&gt;

&lt;p&gt;🔄 Step Functions&lt;/p&gt;

&lt;p&gt;Think:&lt;/p&gt;

&lt;p&gt;Workflow orchestration + multiple steps + retries + branching + waiting.&lt;/p&gt;

&lt;p&gt;📦 ECS / Fargate&lt;/p&gt;

&lt;p&gt;Think:&lt;/p&gt;

&lt;p&gt;Containerized workload + runtime control + long-running process.&lt;/p&gt;

&lt;p&gt;⚙️ AWS Batch&lt;/p&gt;

&lt;p&gt;Think:&lt;/p&gt;

&lt;p&gt;Queued batch jobs + compute-intensive processing + scheduling at scale.&lt;/p&gt;

&lt;p&gt;These services can also work together.&lt;/p&gt;

&lt;p&gt;Architecture is not always:&lt;/p&gt;

&lt;p&gt;A versus B.&lt;/p&gt;

&lt;p&gt;Sometimes it is:&lt;/p&gt;

&lt;p&gt;A + B + C.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🏗️ Example Architecture #1 — Long Data Processing Job&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;p&gt;An S3 upload triggers processing of a very large file.&lt;/p&gt;

&lt;p&gt;Architecture:&lt;/p&gt;

&lt;p&gt;🪣 Amazon S3&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📨 Amazon SQS&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;⚡ Lambda Managed Instance&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📊 Process dataset&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🪣 Store output in S3&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📈 CloudWatch&lt;/p&gt;

&lt;p&gt;Typical processing time:&lt;/p&gt;

&lt;p&gt;35–50 minutes.&lt;/p&gt;

&lt;p&gt;Now ask:&lt;/p&gt;

&lt;p&gt;✅ Is processing idempotent?&lt;/p&gt;

&lt;p&gt;✅ Is the SQS visibility timeout configured correctly?&lt;/p&gt;

&lt;p&gt;✅ Can the job safely restart?&lt;/p&gt;

&lt;p&gt;✅ Are downstream connections resilient?&lt;/p&gt;

&lt;p&gt;✅ Are metrics and logs sufficient?&lt;/p&gt;

&lt;p&gt;✅ Is Lambda Managed Instances the right cost model?&lt;/p&gt;

&lt;p&gt;This is where the new capability becomes genuinely useful.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 Failure Scenario #1 — Minute 47 Failure&lt;/p&gt;

&lt;p&gt;Imagine the job normally takes 50 minutes.&lt;/p&gt;

&lt;p&gt;At minute:&lt;/p&gt;

&lt;p&gt;47&lt;/p&gt;

&lt;p&gt;the function fails.&lt;/p&gt;

&lt;p&gt;The event is retried.&lt;/p&gt;

&lt;p&gt;What happens?&lt;/p&gt;

&lt;p&gt;Option A:&lt;/p&gt;

&lt;p&gt;🔄 Repeat the entire 47 minutes.&lt;/p&gt;

&lt;p&gt;Option B:&lt;/p&gt;

&lt;p&gt;💾 Resume from a checkpoint.&lt;/p&gt;

&lt;p&gt;Option C:&lt;/p&gt;

&lt;p&gt;📦 Use another architecture where job state is managed differently.&lt;/p&gt;

&lt;p&gt;There is no universal answer.&lt;/p&gt;

&lt;p&gt;But the failure should be designed before production.&lt;/p&gt;

&lt;p&gt;Do not wait until minute 47 to discover your recovery strategy.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 Failure Scenario #2 — Duplicate Delivery&lt;/p&gt;

&lt;p&gt;The same event executes twice.&lt;/p&gt;

&lt;p&gt;Does your workload:&lt;/p&gt;

&lt;p&gt;✅ recognize the duplicate?&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;❌ create duplicate output?&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A financial workload should not accidentally process the same transaction twice.&lt;/p&gt;

&lt;p&gt;A file processor should not create multiple inconsistent copies.&lt;/p&gt;

&lt;p&gt;A notification system should avoid sending the same message repeatedly.&lt;/p&gt;

&lt;p&gt;Long-running execution does not change the fundamental rule:&lt;/p&gt;

&lt;p&gt;Design distributed systems expecting retries and duplicates.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 Failure Scenario #3 — External API Dies Midway&lt;/p&gt;

&lt;p&gt;Your Lambda function processes data for 30 minutes.&lt;/p&gt;

&lt;p&gt;Then it calls an external API.&lt;/p&gt;

&lt;p&gt;The API returns:&lt;/p&gt;

&lt;p&gt;500 Internal Server Error.&lt;/p&gt;

&lt;p&gt;What happens next?&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;🔁 Should you retry?&lt;/p&gt;

&lt;p&gt;⏱️ How long should you wait?&lt;/p&gt;

&lt;p&gt;📈 Should exponential backoff be used?&lt;/p&gt;

&lt;p&gt;🚫 When should you stop?&lt;/p&gt;

&lt;p&gt;💾 Should progress be checkpointed before the call?&lt;/p&gt;

&lt;p&gt;📨 Should the failed job move to another queue?&lt;/p&gt;

&lt;p&gt;This is why “90 minutes” is not simply a timeout configuration.&lt;/p&gt;

&lt;p&gt;It becomes a reliability-design problem.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 Failure Scenario #4 — Authentication Token Expires&lt;/p&gt;

&lt;p&gt;Your job obtains a temporary token.&lt;/p&gt;

&lt;p&gt;Token lifetime:&lt;/p&gt;

&lt;p&gt;60 minutes.&lt;/p&gt;

&lt;p&gt;Function execution:&lt;/p&gt;

&lt;p&gt;75 minutes.&lt;/p&gt;

&lt;p&gt;At minute 65:&lt;/p&gt;

&lt;p&gt;🔐 Authentication begins failing.&lt;/p&gt;

&lt;p&gt;The Lambda function itself is still running.&lt;/p&gt;

&lt;p&gt;But its dependency is no longer accessible.&lt;/p&gt;

&lt;p&gt;The lesson:&lt;/p&gt;

&lt;p&gt;Longer compute duration requires reviewing assumptions made by every dependency around that compute.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧪 A Student-Friendly Hands-On Lab&lt;/p&gt;

&lt;p&gt;You do not need to immediately create a 90-minute production workload.&lt;/p&gt;

&lt;p&gt;Instead, build a simulation.&lt;/p&gt;

&lt;p&gt;Create a long-running asynchronous processing flow.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;📨 SQS&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;⚡ Lambda&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🧠 Process several simulated steps&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📊 Write progress into logs&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🗄️ Save result&lt;/p&gt;

&lt;p&gt;Example stages:&lt;/p&gt;

&lt;p&gt;Step 1 — Validate input&lt;/p&gt;

&lt;p&gt;Step 2 — Load data&lt;/p&gt;

&lt;p&gt;Step 3 — Process chunk A&lt;/p&gt;

&lt;p&gt;Step 4 — Process chunk B&lt;/p&gt;

&lt;p&gt;Step 5 — Save results&lt;/p&gt;

&lt;p&gt;Then deliberately introduce:&lt;/p&gt;

&lt;p&gt;💥 An exception during Step 4.&lt;/p&gt;

&lt;p&gt;Observe:&lt;/p&gt;

&lt;p&gt;📊 CloudWatch logs.&lt;/p&gt;

&lt;p&gt;📨 Retry behavior.&lt;/p&gt;

&lt;p&gt;🔁 Duplicate processing.&lt;/p&gt;

&lt;p&gt;⏱️ Execution duration.&lt;/p&gt;

&lt;p&gt;Then modify your design.&lt;/p&gt;

&lt;p&gt;Add:&lt;/p&gt;

&lt;p&gt;🆔 Idempotency keys.&lt;/p&gt;

&lt;p&gt;💾 Checkpointing.&lt;/p&gt;

&lt;p&gt;📬 Failure destinations.&lt;/p&gt;

&lt;p&gt;📊 Better structured logs.&lt;/p&gt;

&lt;p&gt;Now the exercise teaches architecture, not just Lambda syntax.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📈 Monitoring Matters More When Jobs Take Longer&lt;/p&gt;

&lt;p&gt;Imagine a 2-second Lambda function.&lt;/p&gt;

&lt;p&gt;If it fails, you usually discover quickly.&lt;/p&gt;

&lt;p&gt;Now imagine a function that runs for:&lt;/p&gt;

&lt;p&gt;68 minutes.&lt;/p&gt;

&lt;p&gt;You do not want to discover at minute 68 that nothing useful happened.&lt;/p&gt;

&lt;p&gt;Observability becomes critical.&lt;/p&gt;

&lt;p&gt;Monitor:&lt;/p&gt;

&lt;p&gt;⏱️ Duration&lt;/p&gt;

&lt;p&gt;❌ Errors&lt;/p&gt;

&lt;p&gt;🚫 Throttles&lt;/p&gt;

&lt;p&gt;📈 Resource utilization&lt;/p&gt;

&lt;p&gt;🧠 Application progress&lt;/p&gt;

&lt;p&gt;📜 Logs&lt;/p&gt;

&lt;p&gt;🔄 Retry behavior&lt;/p&gt;

&lt;p&gt;For Lambda Managed Instances, AWS also exposes capacity-provider-level metrics such as CPU and memory utilization.&lt;/p&gt;

&lt;p&gt;Long-running execution should produce enough telemetry to answer:&lt;/p&gt;

&lt;p&gt;“Is useful work actually progressing?”&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💰 What About Cost?&lt;/p&gt;

&lt;p&gt;Longer execution does not automatically mean cheaper or more expensive architecture.&lt;/p&gt;

&lt;p&gt;The answer depends on:&lt;/p&gt;

&lt;p&gt;⚙️ Compute configuration&lt;/p&gt;

&lt;p&gt;📈 Utilization&lt;/p&gt;

&lt;p&gt;⏱️ Duration&lt;/p&gt;

&lt;p&gt;🔢 Concurrency&lt;/p&gt;

&lt;p&gt;📦 Workload pattern&lt;/p&gt;

&lt;p&gt;💳 Pricing model&lt;/p&gt;

&lt;p&gt;📊 Steady-state versus bursty traffic&lt;/p&gt;

&lt;p&gt;AWS specifically notes that Lambda Managed Instances are particularly suited to steady-state workloads with predictable high-volume traffic, while default Lambda capacity may still be more cost-effective for burstier workloads.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;p&gt;“90 minutes exists”&lt;/p&gt;

&lt;p&gt;is not enough information to make a cost decision.&lt;/p&gt;

&lt;p&gt;Measure your workload.&lt;/p&gt;

&lt;p&gt;Model the alternatives.&lt;/p&gt;

&lt;p&gt;Then decide.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;⚠️ Do Not Set Every Timeout to 90 Minutes&lt;/p&gt;

&lt;p&gt;Another tempting response to the announcement is:&lt;/p&gt;

&lt;p&gt;“Great! Set everything to 5,400 seconds.”&lt;/p&gt;

&lt;p&gt;Please don't.&lt;/p&gt;

&lt;p&gt;Timeouts are also safety mechanisms.&lt;/p&gt;

&lt;p&gt;Imagine buggy code enters an unintended loop.&lt;/p&gt;

&lt;p&gt;A short timeout limits how long the problem continues.&lt;/p&gt;

&lt;p&gt;A very generous timeout allows the problem to consume resources much longer.&lt;/p&gt;

&lt;p&gt;Set the timeout based on realistic workload behavior.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Expected duration:&lt;/p&gt;

&lt;p&gt;12 minutes&lt;/p&gt;

&lt;p&gt;Maybe the correct timeout is:&lt;/p&gt;

&lt;p&gt;15 or 20 minutes.&lt;/p&gt;

&lt;p&gt;Not automatically:&lt;/p&gt;

&lt;p&gt;90 minutes.&lt;/p&gt;

&lt;p&gt;Configuration should reflect expected execution, not the maximum number AWS allows.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🎤 Turn This Update Into an Interview Discussion&lt;/p&gt;

&lt;p&gt;Imagine an interviewer asks:&lt;/p&gt;

&lt;p&gt;“A workload runs asynchronously for about 40 minutes. AWS Lambda Managed Instances now support up to 90-minute execution. Would you use Lambda?”&lt;/p&gt;

&lt;p&gt;A weak answer:&lt;/p&gt;

&lt;p&gt;“Yes, because Lambda supports 90 minutes now.”&lt;/p&gt;

&lt;p&gt;A stronger answer:&lt;/p&gt;

&lt;p&gt;“I would first evaluate the workload characteristics. If it is event-driven, naturally fits the Lambda programming model, runs asynchronously, and can safely handle retries and duplicate execution, Lambda Managed Instances could be a good option. I would also evaluate idempotency, connection and credential lifetimes, checkpointing requirements, observability, and cost. If the workload is really a multi-step orchestration, containerized worker, or large batch-processing job, I would also compare Step Functions, ECS/Fargate, or AWS Batch before deciding.”&lt;/p&gt;

&lt;p&gt;That demonstrates:&lt;/p&gt;

&lt;p&gt;🧠 Architecture thinking&lt;/p&gt;

&lt;p&gt;⚡ Lambda knowledge&lt;/p&gt;

&lt;p&gt;🔄 Workflow awareness&lt;/p&gt;

&lt;p&gt;📦 Container knowledge&lt;/p&gt;

&lt;p&gt;⚙️ Batch-compute awareness&lt;/p&gt;

&lt;p&gt;💥 Failure analysis&lt;/p&gt;

&lt;p&gt;💰 Cost awareness&lt;/p&gt;

&lt;p&gt;🔐 Operational thinking&lt;/p&gt;

&lt;p&gt;Much stronger than memorizing:&lt;/p&gt;

&lt;p&gt;“Lambda maximum timeout = 90 minutes.”&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔥 The Bigger Lesson&lt;/p&gt;

&lt;p&gt;The biggest Lambda update is not simply:&lt;/p&gt;

&lt;p&gt;15 minutes → 90 minutes.&lt;/p&gt;

&lt;p&gt;The bigger change is:&lt;/p&gt;

&lt;p&gt;AWS architects now have another compute decision to make.&lt;/p&gt;

&lt;p&gt;Previously, exceeding 15 minutes could immediately eliminate Lambda from certain designs.&lt;/p&gt;

&lt;p&gt;Now some of those workloads deserve another look.&lt;/p&gt;

&lt;p&gt;But every expanded capability also expands the architecture questions.&lt;/p&gt;

&lt;p&gt;Longer execution introduces more responsibility around:&lt;/p&gt;

&lt;p&gt;🔁 Retries&lt;/p&gt;

&lt;p&gt;💾 Recovery&lt;/p&gt;

&lt;p&gt;🔐 Credentials&lt;/p&gt;

&lt;p&gt;🌐 Connections&lt;/p&gt;

&lt;p&gt;📊 Monitoring&lt;/p&gt;

&lt;p&gt;💰 Cost&lt;/p&gt;

&lt;p&gt;🧠 Idempotency&lt;/p&gt;

&lt;p&gt;💥 Failure handling&lt;/p&gt;

&lt;p&gt;A higher limit gives you flexibility.&lt;/p&gt;

&lt;p&gt;It does not remove the need for engineering judgment.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🎯 Final Thoughts&lt;/p&gt;

&lt;p&gt;I think the most interesting part of AWS Lambda's new 90-minute capability is not the number itself.&lt;/p&gt;

&lt;p&gt;It is the conversation it creates.&lt;/p&gt;

&lt;p&gt;For years:&lt;/p&gt;

&lt;p&gt;Long-running workload?&lt;/p&gt;

&lt;p&gt;Lambda probably was not the first choice.&lt;/p&gt;

&lt;p&gt;Now the answer becomes:&lt;/p&gt;

&lt;p&gt;“Maybe.”&lt;/p&gt;

&lt;p&gt;And “maybe” is where architecture becomes interesting.&lt;/p&gt;

&lt;p&gt;Do not choose Lambda because the timeout increased.&lt;/p&gt;

&lt;p&gt;Do not reject Lambda because you remember the old 15-minute limitation.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;📋 Understand the workload.&lt;/p&gt;

&lt;p&gt;🧠 Understand the failure model.&lt;/p&gt;

&lt;p&gt;⏱️ Understand the execution characteristics.&lt;/p&gt;

&lt;p&gt;🔄 Understand retries.&lt;/p&gt;

&lt;p&gt;💾 Understand recovery.&lt;/p&gt;

&lt;p&gt;📊 Understand observability.&lt;/p&gt;

&lt;p&gt;💰 Understand cost.&lt;/p&gt;

&lt;p&gt;Then choose the compute model that actually fits.&lt;/p&gt;

&lt;p&gt;That is the difference between:&lt;/p&gt;

&lt;p&gt;Knowing AWS services&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;Designing with AWS services.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;☁️ Your Turn — Architecture Challenge&lt;/p&gt;

&lt;p&gt;Imagine this workload:&lt;/p&gt;

&lt;p&gt;📊 Data-processing job&lt;/p&gt;

&lt;p&gt;⏱️ Typical duration: 35–50 minutes&lt;/p&gt;

&lt;p&gt;📨 Triggered asynchronously&lt;/p&gt;

&lt;p&gt;💥 Occasionally fails around minute 30&lt;/p&gt;

&lt;p&gt;💰 Reprocessing is moderately expensive&lt;/p&gt;

&lt;p&gt;📈 Workload arrives consistently throughout the day&lt;/p&gt;

&lt;p&gt;What architecture would you investigate first?&lt;/p&gt;

&lt;p&gt;⚡ Lambda Managed Instances&lt;/p&gt;

&lt;p&gt;🔄 AWS Step Functions&lt;/p&gt;

&lt;p&gt;📦 ECS + AWS Fargate&lt;/p&gt;

&lt;p&gt;⚙️ AWS Batch&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;🧩 A combination of them?&lt;/p&gt;

&lt;p&gt;And more importantly:&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;💬 Share the architecture you would choose and the trade-offs that would drive your decision.&lt;/p&gt;

&lt;p&gt;There may not be one universally correct answer.&lt;/p&gt;

&lt;p&gt;That is exactly what makes the discussion valuable. 🚀&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📚 AWS Resources Behind This Article&lt;/p&gt;

&lt;p&gt;• AWS announcement: 90-minute function timeout on Lambda Managed Instances&lt;/p&gt;

&lt;p&gt;• AWS Compute Blog: Announcing 90-minute function timeout on AWS Lambda Managed Instances&lt;/p&gt;

&lt;p&gt;• AWS Lambda documentation: Configuring function timeout&lt;/p&gt;

&lt;p&gt;• AWS Lambda documentation: Managed Instances best practices&lt;/p&gt;

&lt;p&gt;• AWS Step Functions documentation: Service integrations and error handling&lt;/p&gt;

&lt;p&gt;• Amazon ECS documentation: AWS Fargate architecture&lt;/p&gt;

&lt;p&gt;• AWS Batch documentation: What is AWS Batch?&lt;/p&gt;

&lt;p&gt;Always verify current service limits, supported invocation types, pricing, and regional availability in the latest AWS documentation before designing production workloads.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>lambda</category>
      <category>architecture</category>
    </item>
    <item>
      <title>⚡ No Server to Manage: Build Your First AWS Serverless API with Lambda + DynamoDB</title>
      <dc:creator>Randy M. Alonzo</dc:creator>
      <pubDate>Thu, 17 Sep 2026 16:17:51 +0000</pubDate>
      <link>https://dev.to/randyalonzo-dev/no-server-to-manage-build-your-first-aws-serverless-api-with-lambda-dynamodb-ena</link>
      <guid>https://dev.to/randyalonzo-dev/no-server-to-manage-build-your-first-aws-serverless-api-with-lambda-dynamodb-ena</guid>
      <description>&lt;p&gt;⚡ No Server to Manage: Build Your First AWS Serverless API with Lambda + DynamoDB&lt;/p&gt;

&lt;p&gt;You have probably heard the word:&lt;/p&gt;

&lt;p&gt;“Serverless.”&lt;/p&gt;

&lt;p&gt;At first, it sounds strange.&lt;/p&gt;

&lt;p&gt;How can an application run without a server?&lt;/p&gt;

&lt;p&gt;The answer is simple:&lt;/p&gt;

&lt;p&gt;Servers still exist.&lt;/p&gt;

&lt;p&gt;You just are not provisioning, patching, maintaining, and operating a traditional application server in the same way.&lt;/p&gt;

&lt;p&gt;Instead, you focus more on:&lt;/p&gt;

&lt;p&gt;🧠 Application logic&lt;/p&gt;

&lt;p&gt;🌐 Requests&lt;/p&gt;

&lt;p&gt;🔐 Permissions&lt;/p&gt;

&lt;p&gt;🗄️ Data&lt;/p&gt;

&lt;p&gt;📊 Monitoring&lt;/p&gt;

&lt;p&gt;AWS handles much of the underlying infrastructure required to run your function.&lt;/p&gt;

&lt;p&gt;For a student learning cloud computing, this creates a great opportunity.&lt;/p&gt;

&lt;p&gt;You can build something small...&lt;/p&gt;

&lt;p&gt;but still learn how multiple AWS services communicate with each other.&lt;/p&gt;

&lt;p&gt;That is exactly what we are going to do.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🎯 What We Are Building&lt;/p&gt;

&lt;p&gt;We are going to create a simple:&lt;/p&gt;

&lt;p&gt;Student Learning Tracker API&lt;/p&gt;

&lt;p&gt;The API will allow us to save learning records such as:&lt;/p&gt;

&lt;p&gt;👤 Student ID&lt;/p&gt;

&lt;p&gt;📚 Topic&lt;/p&gt;

&lt;p&gt;✅ Status&lt;/p&gt;

&lt;p&gt;📝 Notes&lt;/p&gt;

&lt;p&gt;🕒 Timestamp&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "studentId": "student001",&lt;br&gt;
  "topic": "AWS IAM",&lt;br&gt;
  "status": "completed",&lt;br&gt;
  "notes": "Practiced least privilege and AccessDenied troubleshooting"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Instead of storing this information inside a traditional server application, we will connect several AWS services.&lt;/p&gt;

&lt;p&gt;Our architecture will look like this:&lt;/p&gt;

&lt;p&gt;👨‍💻 Client&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🌐 Amazon API Gateway&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;⚡ AWS Lambda&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🗄️ Amazon DynamoDB&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📤 JSON Response&lt;/p&gt;

&lt;p&gt;Behind the scenes, we will also use:&lt;/p&gt;

&lt;p&gt;🔐 AWS IAM&lt;/p&gt;

&lt;p&gt;for permissions&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;📊 Amazon CloudWatch&lt;/p&gt;

&lt;p&gt;for logs and troubleshooting.&lt;/p&gt;

&lt;p&gt;This one small project already introduces several important cloud concepts.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧠 What “Serverless” Actually Means&lt;/p&gt;

&lt;p&gt;Serverless does not mean:&lt;/p&gt;

&lt;p&gt;“There are literally no servers.”&lt;/p&gt;

&lt;p&gt;It means that you do not directly manage the servers running your application logic.&lt;/p&gt;

&lt;p&gt;With AWS Lambda, you upload your code.&lt;/p&gt;

&lt;p&gt;Then AWS handles much of the infrastructure required to run that code when it is invoked.&lt;/p&gt;

&lt;p&gt;That changes the developer's focus.&lt;/p&gt;

&lt;p&gt;Instead of spending most of your time thinking:&lt;/p&gt;

&lt;p&gt;Which virtual machine should I create?&lt;/p&gt;

&lt;p&gt;How much CPU do I need?&lt;/p&gt;

&lt;p&gt;How do I patch the operating system?&lt;/p&gt;

&lt;p&gt;How do I keep the server running?&lt;/p&gt;

&lt;p&gt;You begin thinking more about:&lt;/p&gt;

&lt;p&gt;⚡ What should this function do?&lt;/p&gt;

&lt;p&gt;📥 What request does it receive?&lt;/p&gt;

&lt;p&gt;🗄️ What data does it need?&lt;/p&gt;

&lt;p&gt;🔐 What permissions does it require?&lt;/p&gt;

&lt;p&gt;📤 What response should it return?&lt;/p&gt;

&lt;p&gt;📊 How will I troubleshoot it?&lt;/p&gt;

&lt;p&gt;That is a different way of designing applications.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🏗️ Understanding the Architecture First&lt;/p&gt;

&lt;p&gt;Before touching the AWS console, understand what each service will do.&lt;/p&gt;

&lt;p&gt;🌐 Amazon API Gateway&lt;/p&gt;

&lt;p&gt;This will provide the HTTP endpoint our client can call.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;POST /entries&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;GET /entries/{entryId}&lt;/p&gt;

&lt;p&gt;⚡ AWS Lambda&lt;/p&gt;

&lt;p&gt;This contains our application logic.&lt;/p&gt;

&lt;p&gt;It will:&lt;/p&gt;

&lt;p&gt;Receive the request&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Understand which route was called&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Process the data&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Communicate with DynamoDB&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Return a response&lt;/p&gt;

&lt;p&gt;🗄️ Amazon DynamoDB&lt;/p&gt;

&lt;p&gt;This stores our learning records.&lt;/p&gt;

&lt;p&gt;Each record becomes an item inside a DynamoDB table.&lt;/p&gt;

&lt;p&gt;🔐 AWS IAM&lt;/p&gt;

&lt;p&gt;This controls what the Lambda function is actually allowed to do.&lt;/p&gt;

&lt;p&gt;Our function should not automatically receive unlimited AWS permissions.&lt;/p&gt;

&lt;p&gt;It should receive only the permissions required for this project.&lt;/p&gt;

&lt;p&gt;📊 Amazon CloudWatch&lt;/p&gt;

&lt;p&gt;This helps us observe what happens when the function runs.&lt;/p&gt;

&lt;p&gt;If something fails, logs become one of our most useful troubleshooting tools.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💰 Before Building: Think About Cost&lt;/p&gt;

&lt;p&gt;Before creating cloud resources, develop one habit early:&lt;/p&gt;

&lt;p&gt;Always know what you are creating.&lt;/p&gt;

&lt;p&gt;Even when experimenting with small learning projects:&lt;/p&gt;

&lt;p&gt;💳 Review the pricing model.&lt;/p&gt;

&lt;p&gt;📊 Monitor your account.&lt;/p&gt;

&lt;p&gt;🔔 Configure budget notifications where appropriate.&lt;/p&gt;

&lt;p&gt;🗑️ Remove resources you no longer need.&lt;/p&gt;

&lt;p&gt;🧠 Understand which resources remain active after you close your browser.&lt;/p&gt;

&lt;p&gt;Cloud engineering is not only about making systems work.&lt;/p&gt;

&lt;p&gt;It is also about operating resources responsibly.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🗄️ STEP #1 — Create the DynamoDB Table&lt;/p&gt;

&lt;p&gt;Let's start with the data layer.&lt;/p&gt;

&lt;p&gt;Create a DynamoDB table.&lt;/p&gt;

&lt;p&gt;Suggested table name:&lt;/p&gt;

&lt;p&gt;student-learning-tracker&lt;/p&gt;

&lt;p&gt;For this project, use:&lt;/p&gt;

&lt;p&gt;Partition key:&lt;/p&gt;

&lt;p&gt;entryId&lt;/p&gt;

&lt;p&gt;Type:&lt;/p&gt;

&lt;p&gt;String&lt;/p&gt;

&lt;p&gt;Why entryId?&lt;/p&gt;

&lt;p&gt;Because every learning record should have its own unique identifier.&lt;/p&gt;

&lt;p&gt;A record might eventually look like this:&lt;/p&gt;

&lt;p&gt;entryId:&lt;br&gt;
"e7f2..."&lt;/p&gt;

&lt;p&gt;studentId:&lt;br&gt;
"student001"&lt;/p&gt;

&lt;p&gt;topic:&lt;br&gt;
"AWS Lambda"&lt;/p&gt;

&lt;p&gt;status:&lt;br&gt;
"in-progress"&lt;/p&gt;

&lt;p&gt;notes:&lt;br&gt;
"Building my first serverless API"&lt;/p&gt;

&lt;p&gt;timestamp:&lt;br&gt;
"2026-09-17T15:30:00Z"&lt;/p&gt;

&lt;p&gt;Using a unique entry ID makes it straightforward to retrieve one specific learning record later.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧩 Understanding the DynamoDB Item&lt;/p&gt;

&lt;p&gt;DynamoDB stores data as items.&lt;/p&gt;

&lt;p&gt;You can think of an item as similar to one record.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;entryId&lt;br&gt;
→ Unique identifier&lt;/p&gt;

&lt;p&gt;studentId&lt;br&gt;
→ Who owns the entry&lt;/p&gt;

&lt;p&gt;topic&lt;br&gt;
→ What they are learning&lt;/p&gt;

&lt;p&gt;status&lt;br&gt;
→ planned / in-progress / completed&lt;/p&gt;

&lt;p&gt;notes&lt;br&gt;
→ Additional information&lt;/p&gt;

&lt;p&gt;timestamp&lt;br&gt;
→ When the entry was created&lt;/p&gt;

&lt;p&gt;This is intentionally simple.&lt;/p&gt;

&lt;p&gt;A beginner project should teach you the architecture before adding unnecessary complexity.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔐 STEP #2 — Understand the Lambda Execution Role&lt;/p&gt;

&lt;p&gt;This is where our previous IAM article becomes useful.&lt;/p&gt;

&lt;p&gt;Your Lambda function needs permission to communicate with DynamoDB.&lt;/p&gt;

&lt;p&gt;But the function should not contain hardcoded AWS access keys.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;⚡ Lambda Function&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🎭 Execution Role&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📜 IAM Permissions&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🗄️ DynamoDB&lt;/p&gt;

&lt;p&gt;For this project, our function needs only a few DynamoDB actions.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;dynamodb:PutItem&lt;/p&gt;

&lt;p&gt;dynamodb:GetItem&lt;/p&gt;

&lt;p&gt;And ideally, those actions should apply only to:&lt;/p&gt;

&lt;p&gt;student-learning-tracker&lt;/p&gt;

&lt;p&gt;rather than every DynamoDB table in the account.&lt;/p&gt;

&lt;p&gt;That is least privilege in practice.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📜 Example IAM Permission&lt;/p&gt;

&lt;p&gt;Conceptually, the DynamoDB permission might look like this:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "Version": "2012-10-17",&lt;br&gt;
  "Statement": [&lt;br&gt;
    {&lt;br&gt;
      "Effect": "Allow",&lt;br&gt;
      "Action": [&lt;br&gt;
        "dynamodb:PutItem",&lt;br&gt;
        "dynamodb:GetItem"&lt;br&gt;
      ],&lt;br&gt;
      "Resource": "YOUR_DYNAMODB_TABLE_ARN"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Replace:&lt;/p&gt;

&lt;p&gt;YOUR_DYNAMODB_TABLE_ARN&lt;/p&gt;

&lt;p&gt;with the ARN of the table you created.&lt;/p&gt;

&lt;p&gt;Do not blindly copy broad permissions simply because they make the project work.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;What actions does this function actually need?&lt;/p&gt;

&lt;p&gt;For our first version:&lt;/p&gt;

&lt;p&gt;Write one item.&lt;/p&gt;

&lt;p&gt;Read one item.&lt;/p&gt;

&lt;p&gt;That is enough.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;⚠️ One IAM Detail Worth Knowing&lt;/p&gt;

&lt;p&gt;There is an AWS-managed policy called:&lt;/p&gt;

&lt;p&gt;AWSLambdaDynamoDBExecutionRole&lt;/p&gt;

&lt;p&gt;The name can sound like:&lt;/p&gt;

&lt;p&gt;“This lets my Lambda write items into DynamoDB.”&lt;/p&gt;

&lt;p&gt;But that policy is primarily intended for Lambda functions working with DynamoDB Streams.&lt;/p&gt;

&lt;p&gt;For our application, where Lambda directly performs actions such as:&lt;/p&gt;

&lt;p&gt;dynamodb:PutItem&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;dynamodb:GetItem&lt;/p&gt;

&lt;p&gt;we need the corresponding table permissions.&lt;/p&gt;

&lt;p&gt;Always inspect what a policy actually grants.&lt;/p&gt;

&lt;p&gt;Do not rely only on its name.&lt;/p&gt;

&lt;p&gt;That habit will save you from many IAM problems later.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;⚡ STEP #3 — Create the Lambda Function&lt;/p&gt;

&lt;p&gt;Now create your Lambda function.&lt;/p&gt;

&lt;p&gt;Suggested name:&lt;/p&gt;

&lt;p&gt;student-learning-api&lt;/p&gt;

&lt;p&gt;Choose a Python runtime.&lt;/p&gt;

&lt;p&gt;For the execution role:&lt;/p&gt;

&lt;p&gt;Use a role that includes basic Lambda logging permissions and the DynamoDB permissions required by this project.&lt;/p&gt;

&lt;p&gt;Next, create an environment variable:&lt;/p&gt;

&lt;p&gt;Key:&lt;/p&gt;

&lt;p&gt;TABLE_NAME&lt;/p&gt;

&lt;p&gt;Value:&lt;/p&gt;

&lt;p&gt;student-learning-tracker&lt;/p&gt;

&lt;p&gt;Why use an environment variable?&lt;/p&gt;

&lt;p&gt;Because we do not want to hardcode configuration everywhere inside the application.&lt;/p&gt;

&lt;p&gt;Our code can simply read:&lt;/p&gt;

&lt;p&gt;TABLE_NAME&lt;/p&gt;

&lt;p&gt;from the environment.&lt;/p&gt;

&lt;p&gt;That also makes the function easier to reuse in different environments later.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💻 STEP #4 — Add the Lambda Code&lt;/p&gt;

&lt;p&gt;Here is a simple example.&lt;/p&gt;

&lt;p&gt;The function supports:&lt;/p&gt;

&lt;p&gt;POST /entries&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;GET /entries/{entryId}&lt;/p&gt;

&lt;p&gt;Python example:&lt;/p&gt;

&lt;p&gt;import json&lt;br&gt;
import os&lt;br&gt;
import uuid&lt;br&gt;
from datetime import datetime, timezone&lt;/p&gt;

&lt;p&gt;import boto3&lt;/p&gt;

&lt;p&gt;dynamodb = boto3.resource("dynamodb")&lt;br&gt;
table = dynamodb.Table(os.environ["TABLE_NAME"])&lt;/p&gt;

&lt;p&gt;def response(status_code, body):&lt;br&gt;
    return {&lt;br&gt;
        "statusCode": status_code,&lt;br&gt;
        "headers": {&lt;br&gt;
            "content-type": "application/json"&lt;br&gt;
        },&lt;br&gt;
        "body": json.dumps(body)&lt;br&gt;
    }&lt;/p&gt;

&lt;p&gt;def lambda_handler(event, context):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;route_key = event.get("routeKey", "")

if route_key == "POST /entries":

    try:
        body = json.loads(event.get("body") or "{}")
    except json.JSONDecodeError:
        return response(
            400,
            {"message": "Invalid JSON body"}
        )

    required_fields = [
        "studentId",
        "topic",
        "status"
    ]

    missing = [
        field
        for field in required_fields
        if not body.get(field)
    ]

    if missing:
        return response(
            400,
            {
                "message": "Missing required fields",
                "fields": missing
            }
        )

    item = {
        "entryId": str(uuid.uuid4()),
        "studentId": body["studentId"],
        "topic": body["topic"],
        "status": body["status"],
        "notes": body.get("notes", ""),
        "timestamp": datetime.now(
            timezone.utc
        ).isoformat()
    }

    table.put_item(Item=item)

    return response(
        201,
        item
    )


if route_key == "GET /entries/{entryId}":

    path_parameters = (
        event.get("pathParameters") or {}
    )

    entry_id = path_parameters.get("entryId")

    if not entry_id:
        return response(
            400,
            {"message": "entryId is required"}
        )

    result = table.get_item(
        Key={
            "entryId": entry_id
        }
    )

    item = result.get("Item")

    if not item:
        return response(
            404,
            {"message": "Entry not found"}
        )

    return response(
        200,
        item
    )


return response(
    404,
    {"message": "Route not found"}
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Do not worry if every line does not immediately make sense.&lt;/p&gt;

&lt;p&gt;The important thing is understanding the flow.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔎 Reading the Code as an Architecture&lt;/p&gt;

&lt;p&gt;Let's simplify it.&lt;/p&gt;

&lt;p&gt;First:&lt;/p&gt;

&lt;p&gt;dynamodb = boto3.resource("dynamodb")&lt;/p&gt;

&lt;p&gt;This creates the DynamoDB service resource used by the code.&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;table = dynamodb.Table(os.environ["TABLE_NAME"])&lt;/p&gt;

&lt;p&gt;This tells our function which table to use.&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;route_key = event.get("routeKey", "")&lt;/p&gt;

&lt;p&gt;This helps determine which API route triggered the function.&lt;/p&gt;

&lt;p&gt;If the request is:&lt;/p&gt;

&lt;p&gt;POST /entries&lt;/p&gt;

&lt;p&gt;we:&lt;/p&gt;

&lt;p&gt;📥 Parse the request body.&lt;/p&gt;

&lt;p&gt;✅ Validate required fields.&lt;/p&gt;

&lt;p&gt;🆔 Generate a unique entry ID.&lt;/p&gt;

&lt;p&gt;🕒 Add a timestamp.&lt;/p&gt;

&lt;p&gt;🗄️ Write the item into DynamoDB.&lt;/p&gt;

&lt;p&gt;📤 Return the created item.&lt;/p&gt;

&lt;p&gt;If the request is:&lt;/p&gt;

&lt;p&gt;GET /entries/{entryId}&lt;/p&gt;

&lt;p&gt;we:&lt;/p&gt;

&lt;p&gt;📥 Read entryId from the URL.&lt;/p&gt;

&lt;p&gt;🔎 Search DynamoDB.&lt;/p&gt;

&lt;p&gt;📦 Retrieve the item.&lt;/p&gt;

&lt;p&gt;📤 Return the item as JSON.&lt;/p&gt;

&lt;p&gt;That is already a real API workflow.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧪 STEP #5 — Test Lambda Before Adding API Gateway&lt;/p&gt;

&lt;p&gt;This is an important troubleshooting habit.&lt;/p&gt;

&lt;p&gt;Do not connect every service immediately.&lt;/p&gt;

&lt;p&gt;First test the function independently.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because if everything is connected at once and the application fails, you now have multiple possible failure points.&lt;/p&gt;

&lt;p&gt;Is it:&lt;/p&gt;

&lt;p&gt;API Gateway?&lt;/p&gt;

&lt;p&gt;Lambda?&lt;/p&gt;

&lt;p&gt;IAM?&lt;/p&gt;

&lt;p&gt;DynamoDB?&lt;/p&gt;

&lt;p&gt;The event structure?&lt;/p&gt;

&lt;p&gt;The table?&lt;/p&gt;

&lt;p&gt;The Region?&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;Build one layer.&lt;/p&gt;

&lt;p&gt;Test it.&lt;/p&gt;

&lt;p&gt;Then add another layer.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧪 Example POST Test Event&lt;/p&gt;

&lt;p&gt;Because the final HTTP API will provide a route key and body, you can simulate something similar.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "routeKey": "POST /entries",&lt;br&gt;
  "body": "{\"studentId\":\"student001\",\"topic\":\"AWS Lambda\",\"status\":\"in-progress\",\"notes\":\"Building my first serverless API\"}"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Run the Lambda test.&lt;/p&gt;

&lt;p&gt;Expected result:&lt;/p&gt;

&lt;p&gt;201&lt;/p&gt;

&lt;p&gt;and an item containing something similar to:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "entryId": "...",&lt;br&gt;
  "studentId": "student001",&lt;br&gt;
  "topic": "AWS Lambda",&lt;br&gt;
  "status": "in-progress",&lt;br&gt;
  "notes": "Building my first serverless API",&lt;br&gt;
  "timestamp": "..."&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Now open DynamoDB.&lt;/p&gt;

&lt;p&gt;Check the table.&lt;/p&gt;

&lt;p&gt;You should see the item.&lt;/p&gt;

&lt;p&gt;That proves:&lt;/p&gt;

&lt;p&gt;⚡ Lambda executed.&lt;/p&gt;

&lt;p&gt;🔐 IAM allowed the write.&lt;/p&gt;

&lt;p&gt;🗄️ DynamoDB stored the item.&lt;/p&gt;

&lt;p&gt;Before we even create the public API.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 What If Lambda Returns AccessDeniedException?&lt;/p&gt;

&lt;p&gt;Excellent.&lt;/p&gt;

&lt;p&gt;Now you have a troubleshooting exercise.&lt;/p&gt;

&lt;p&gt;The question is:&lt;/p&gt;

&lt;p&gt;Who is making the DynamoDB request?&lt;/p&gt;

&lt;p&gt;The Lambda execution role.&lt;/p&gt;

&lt;p&gt;Then ask:&lt;/p&gt;

&lt;p&gt;Does that role allow:&lt;/p&gt;

&lt;p&gt;dynamodb:PutItem&lt;/p&gt;

&lt;p&gt;on:&lt;/p&gt;

&lt;p&gt;the correct DynamoDB table ARN?&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;🎭 Execution role&lt;/p&gt;

&lt;p&gt;📜 Attached permissions&lt;/p&gt;

&lt;p&gt;⚙️ Required action&lt;/p&gt;

&lt;p&gt;📦 Resource ARN&lt;/p&gt;

&lt;p&gt;🌎 AWS Region&lt;/p&gt;

&lt;p&gt;This directly connects to the IAM concepts we learned earlier.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🌐 STEP #6 — Create the API Gateway HTTP API&lt;/p&gt;

&lt;p&gt;Now we need an HTTP endpoint.&lt;/p&gt;

&lt;p&gt;Create an API in:&lt;/p&gt;

&lt;p&gt;Amazon API Gateway&lt;/p&gt;

&lt;p&gt;For a beginner serverless application, an HTTP API provides a clean way to connect HTTP routes to Lambda.&lt;/p&gt;

&lt;p&gt;Add your Lambda function as the integration.&lt;/p&gt;

&lt;p&gt;Our request flow becomes:&lt;/p&gt;

&lt;p&gt;👨‍💻 Client&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🌐 API Gateway&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;⚡ Lambda&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🗄️ DynamoDB&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🛣️ STEP #7 — Create the Routes&lt;/p&gt;

&lt;p&gt;Create two routes.&lt;/p&gt;

&lt;p&gt;First:&lt;/p&gt;

&lt;p&gt;POST /entries&lt;/p&gt;

&lt;p&gt;Purpose:&lt;/p&gt;

&lt;p&gt;Create a new learning record.&lt;/p&gt;

&lt;p&gt;Second:&lt;/p&gt;

&lt;p&gt;GET /entries/{entryId}&lt;/p&gt;

&lt;p&gt;Purpose:&lt;/p&gt;

&lt;p&gt;Retrieve one learning record.&lt;/p&gt;

&lt;p&gt;Connect both routes to:&lt;/p&gt;

&lt;p&gt;student-learning-api&lt;/p&gt;

&lt;p&gt;Now the Lambda function can inspect the route key and decide what logic to execute.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📤 STEP #8 — Test the POST Endpoint&lt;/p&gt;

&lt;p&gt;After deployment, API Gateway gives you an invoke URL.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://YOUR_API_ID.execute-api.REGION.amazonaws.com" rel="noopener noreferrer"&gt;https://YOUR_API_ID.execute-api.REGION.amazonaws.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your POST endpoint becomes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://YOUR_API_URL/entries" rel="noopener noreferrer"&gt;https://YOUR_API_URL/entries&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example request:&lt;/p&gt;

&lt;p&gt;curl -X POST "YOUR_API_URL/entries" \&lt;br&gt;
  -H "content-type: application/json" \&lt;br&gt;
  -d '{&lt;br&gt;
    "studentId": "student001",&lt;br&gt;
    "topic": "AWS Lambda",&lt;br&gt;
    "status": "completed",&lt;br&gt;
    "notes": "Built my first Lambda API"&lt;br&gt;
  }'&lt;/p&gt;

&lt;p&gt;Expected response:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "entryId": "...",&lt;br&gt;
  "studentId": "student001",&lt;br&gt;
  "topic": "AWS Lambda",&lt;br&gt;
  "status": "completed",&lt;br&gt;
  "notes": "Built my first Lambda API",&lt;br&gt;
  "timestamp": "..."&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Congratulations.&lt;/p&gt;

&lt;p&gt;At that point:&lt;/p&gt;

&lt;p&gt;🌐 An HTTP request entered API Gateway.&lt;/p&gt;

&lt;p&gt;⚡ API Gateway invoked Lambda.&lt;/p&gt;

&lt;p&gt;🔐 Lambda used its execution role.&lt;/p&gt;

&lt;p&gt;🗄️ Lambda wrote data into DynamoDB.&lt;/p&gt;

&lt;p&gt;📤 Lambda returned JSON.&lt;/p&gt;

&lt;p&gt;You just connected four AWS services into one working application.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📥 STEP #9 — Test the GET Endpoint&lt;/p&gt;

&lt;p&gt;Copy the entryId from the POST response.&lt;/p&gt;

&lt;p&gt;Now request:&lt;/p&gt;

&lt;p&gt;GET /entries/{entryId}&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;curl "YOUR_API_URL/entries/YOUR_ENTRY_ID"&lt;/p&gt;

&lt;p&gt;Expected response:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "entryId": "...",&lt;br&gt;
  "studentId": "student001",&lt;br&gt;
  "topic": "AWS Lambda",&lt;br&gt;
  "status": "completed",&lt;br&gt;
  "notes": "Built my first Lambda API",&lt;br&gt;
  "timestamp": "..."&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Now you have:&lt;/p&gt;

&lt;p&gt;CREATE&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;READ&lt;/p&gt;

&lt;p&gt;functionality.&lt;/p&gt;

&lt;p&gt;You could later extend the project with:&lt;/p&gt;

&lt;p&gt;✏️ UPDATE&lt;/p&gt;

&lt;p&gt;🗑️ DELETE&lt;/p&gt;

&lt;p&gt;📋 LIST&lt;/p&gt;

&lt;p&gt;🔎 QUERY&lt;/p&gt;

&lt;p&gt;🔐 AUTHENTICATION&lt;/p&gt;

&lt;p&gt;But do not rush.&lt;/p&gt;

&lt;p&gt;Understand the basic architecture first.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📊 STEP #10 — Use CloudWatch Logs&lt;/p&gt;

&lt;p&gt;This is where the project becomes especially useful for troubleshooting.&lt;/p&gt;

&lt;p&gt;Lambda invocation logs can be sent to:&lt;/p&gt;

&lt;p&gt;Amazon CloudWatch Logs&lt;/p&gt;

&lt;p&gt;when the execution role has the required logging permissions.&lt;/p&gt;

&lt;p&gt;Instead of guessing why the function failed, inspect the logs.&lt;/p&gt;

&lt;p&gt;You can also deliberately add useful messages inside your code.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;print("Processing POST /entries")&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;print(f"Reading entry: {entry_id}")&lt;/p&gt;

&lt;p&gt;Do not log passwords, tokens, personal secrets, or sensitive data.&lt;/p&gt;

&lt;p&gt;Logging should help you troubleshoot.&lt;/p&gt;

&lt;p&gt;Not create another security problem.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 TROUBLESHOOTING LAB #1 — AccessDeniedException&lt;/p&gt;

&lt;p&gt;Scenario:&lt;/p&gt;

&lt;p&gt;API Gateway works.&lt;/p&gt;

&lt;p&gt;Lambda runs.&lt;/p&gt;

&lt;p&gt;But DynamoDB fails.&lt;/p&gt;

&lt;p&gt;CloudWatch shows:&lt;/p&gt;

&lt;p&gt;AccessDeniedException&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;👤 Who made the request?&lt;/p&gt;

&lt;p&gt;Lambda execution role.&lt;/p&gt;

&lt;p&gt;⚙️ What action failed?&lt;/p&gt;

&lt;p&gt;Maybe:&lt;/p&gt;

&lt;p&gt;dynamodb:PutItem&lt;/p&gt;

&lt;p&gt;📦 Which resource?&lt;/p&gt;

&lt;p&gt;Your DynamoDB table.&lt;/p&gt;

&lt;p&gt;Likely investigation:&lt;/p&gt;

&lt;p&gt;🔐 Execution role&lt;/p&gt;

&lt;p&gt;📜 IAM policy&lt;/p&gt;

&lt;p&gt;📦 Table ARN&lt;/p&gt;

&lt;p&gt;🌎 Region&lt;/p&gt;

&lt;p&gt;This is exactly why IAM knowledge matters.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 TROUBLESHOOTING LAB #2 — ResourceNotFoundException&lt;/p&gt;

&lt;p&gt;Suppose Lambda reports:&lt;/p&gt;

&lt;p&gt;ResourceNotFoundException&lt;/p&gt;

&lt;p&gt;Possible causes:&lt;/p&gt;

&lt;p&gt;❌ TABLE_NAME contains the wrong value.&lt;/p&gt;

&lt;p&gt;❌ DynamoDB table exists in another Region.&lt;/p&gt;

&lt;p&gt;❌ You renamed or deleted the table.&lt;/p&gt;

&lt;p&gt;❌ Your code points toward a resource that does not exist.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;🗄️ Exact table name&lt;/p&gt;

&lt;p&gt;🌎 Region&lt;/p&gt;

&lt;p&gt;⚙️ Environment variable&lt;/p&gt;

&lt;p&gt;📦 Resource existence&lt;/p&gt;

&lt;p&gt;Do not immediately edit the IAM policy.&lt;/p&gt;

&lt;p&gt;ResourceNotFound is not the same error as AccessDenied.&lt;/p&gt;

&lt;p&gt;Different symptom.&lt;/p&gt;

&lt;p&gt;Different investigation.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 TROUBLESHOOTING LAB #3 — API Returns 500&lt;/p&gt;

&lt;p&gt;Your browser or API client receives:&lt;/p&gt;

&lt;p&gt;500 Internal Server Error&lt;/p&gt;

&lt;p&gt;Do not panic.&lt;/p&gt;

&lt;p&gt;Start tracing the request.&lt;/p&gt;

&lt;p&gt;🌐 Did API Gateway receive it?&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;⚡ Was Lambda invoked?&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📊 What appears in CloudWatch Logs?&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;💥 Did the code throw an exception?&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🗄️ Did DynamoDB return an error?&lt;/p&gt;

&lt;p&gt;Logs can reveal errors such as:&lt;/p&gt;

&lt;p&gt;JSON parsing failures&lt;/p&gt;

&lt;p&gt;Missing environment variables&lt;/p&gt;

&lt;p&gt;DynamoDB exceptions&lt;/p&gt;

&lt;p&gt;Programming errors&lt;/p&gt;

&lt;p&gt;Unexpected event structures&lt;/p&gt;

&lt;p&gt;This is where observability turns guessing into evidence.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 TROUBLESHOOTING LAB #4 — Invalid JSON&lt;/p&gt;

&lt;p&gt;Try sending:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  studentId: student001&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;That is not valid JSON.&lt;/p&gt;

&lt;p&gt;Our function attempts:&lt;/p&gt;

&lt;p&gt;json.loads(...)&lt;/p&gt;

&lt;p&gt;and should return:&lt;/p&gt;

&lt;p&gt;400&lt;/p&gt;

&lt;p&gt;with something like:&lt;/p&gt;

&lt;p&gt;Invalid JSON body&lt;/p&gt;

&lt;p&gt;This teaches another important lesson:&lt;/p&gt;

&lt;p&gt;Not every application failure is an AWS infrastructure problem.&lt;/p&gt;

&lt;p&gt;Sometimes the request itself is wrong.&lt;/p&gt;

&lt;p&gt;Always identify the failure layer.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;💥 TROUBLESHOOTING LAB #5 — Lambda Works, API Gateway Doesn't&lt;/p&gt;

&lt;p&gt;This scenario is particularly educational.&lt;/p&gt;

&lt;p&gt;Lambda works when tested directly.&lt;/p&gt;

&lt;p&gt;But the API endpoint fails.&lt;/p&gt;

&lt;p&gt;What changed?&lt;/p&gt;

&lt;p&gt;The application logic may be fine.&lt;/p&gt;

&lt;p&gt;Now investigate the integration layer.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;🌐 API Gateway route&lt;/p&gt;

&lt;p&gt;⚡ Lambda integration&lt;/p&gt;

&lt;p&gt;🛣️ Route key&lt;/p&gt;

&lt;p&gt;📥 Event structure&lt;/p&gt;

&lt;p&gt;🔐 Permission for API Gateway to invoke Lambda&lt;/p&gt;

&lt;p&gt;📊 CloudWatch logs&lt;/p&gt;

&lt;p&gt;This is why testing each layer independently is so useful.&lt;/p&gt;

&lt;p&gt;You can say:&lt;/p&gt;

&lt;p&gt;Lambda works.&lt;/p&gt;

&lt;p&gt;DynamoDB works.&lt;/p&gt;

&lt;p&gt;The failure appears only when API Gateway enters the path.&lt;/p&gt;

&lt;p&gt;You have already reduced the troubleshooting scope.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🌍 TROUBLESHOOTING LAB #6 — Browser Says CORS Error&lt;/p&gt;

&lt;p&gt;Your API works through a terminal tool.&lt;/p&gt;

&lt;p&gt;But your web application cannot call it.&lt;/p&gt;

&lt;p&gt;The browser reports a CORS problem.&lt;/p&gt;

&lt;p&gt;Now you are dealing with another layer.&lt;/p&gt;

&lt;p&gt;CORS determines which origins can make browser-based requests to the API.&lt;/p&gt;

&lt;p&gt;If you later connect this API to a frontend, configure CORS intentionally.&lt;/p&gt;

&lt;p&gt;Do not blindly allow everything in a production application.&lt;/p&gt;

&lt;p&gt;Instead, understand:&lt;/p&gt;

&lt;p&gt;🌐 Which frontend origin needs access?&lt;/p&gt;

&lt;p&gt;⚙️ Which HTTP methods are required?&lt;/p&gt;

&lt;p&gt;📋 Which headers are required?&lt;/p&gt;

&lt;p&gt;Security configuration should match the application.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔐 Security: Do Not Stop at “It Works”&lt;/p&gt;

&lt;p&gt;A working API is only the beginning.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;Who should be allowed to use this endpoint?&lt;/p&gt;

&lt;p&gt;Our learning version may be intentionally simple.&lt;/p&gt;

&lt;p&gt;A real application may require authentication and authorization.&lt;/p&gt;

&lt;p&gt;Possible options can include:&lt;/p&gt;

&lt;p&gt;🔐 IAM authorization&lt;/p&gt;

&lt;p&gt;👤 Amazon Cognito&lt;/p&gt;

&lt;p&gt;🔑 JWT-based authorization&lt;/p&gt;

&lt;p&gt;or another architecture appropriate to the application.&lt;/p&gt;

&lt;p&gt;Also think about:&lt;/p&gt;

&lt;p&gt;🧹 Input validation&lt;/p&gt;

&lt;p&gt;🚦 Rate limiting and throttling&lt;/p&gt;

&lt;p&gt;📜 Logging&lt;/p&gt;

&lt;p&gt;🔐 Least-privilege IAM&lt;/p&gt;

&lt;p&gt;🔒 Encryption&lt;/p&gt;

&lt;p&gt;🗄️ Data sensitivity&lt;/p&gt;

&lt;p&gt;🧾 Auditability&lt;/p&gt;

&lt;p&gt;Security should not be something added only at the end.&lt;/p&gt;

&lt;p&gt;It should be part of how you think about the design.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🔑 Never Put AWS Access Keys in the Lambda Code&lt;/p&gt;

&lt;p&gt;Do not write:&lt;/p&gt;

&lt;p&gt;AWS_ACCESS_KEY_ID = "..."&lt;/p&gt;

&lt;p&gt;AWS_SECRET_ACCESS_KEY = "..."&lt;/p&gt;

&lt;p&gt;inside your application.&lt;/p&gt;

&lt;p&gt;Lambda already supports execution roles.&lt;/p&gt;

&lt;p&gt;The application can receive temporary credentials through the AWS environment based on that role.&lt;/p&gt;

&lt;p&gt;This is one of the major advantages of using IAM roles correctly.&lt;/p&gt;

&lt;p&gt;Your application code should describe:&lt;/p&gt;

&lt;p&gt;What the application does.&lt;/p&gt;

&lt;p&gt;IAM should describe:&lt;/p&gt;

&lt;p&gt;What the application is allowed to do.&lt;/p&gt;

&lt;p&gt;Keep those responsibilities separate.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🛡️ Practice Least Privilege&lt;/p&gt;

&lt;p&gt;Our Lambda does not need:&lt;/p&gt;

&lt;p&gt;AdministratorAccess&lt;/p&gt;

&lt;p&gt;It does not need:&lt;/p&gt;

&lt;p&gt;FullAccess to every DynamoDB table.&lt;/p&gt;

&lt;p&gt;For this version, it might only need:&lt;/p&gt;

&lt;p&gt;dynamodb:PutItem&lt;/p&gt;

&lt;p&gt;dynamodb:GetItem&lt;/p&gt;

&lt;p&gt;on:&lt;/p&gt;

&lt;p&gt;student-learning-tracker&lt;/p&gt;

&lt;p&gt;That is much closer to good cloud security.&lt;/p&gt;

&lt;p&gt;When the project grows, add permissions intentionally.&lt;/p&gt;

&lt;p&gt;Do not start with everything.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧠 Think About Failure Before Production&lt;/p&gt;

&lt;p&gt;Ask yourself:&lt;/p&gt;

&lt;p&gt;What happens if DynamoDB is unavailable?&lt;/p&gt;

&lt;p&gt;What happens if the request body is malformed?&lt;/p&gt;

&lt;p&gt;What happens if an item does not exist?&lt;/p&gt;

&lt;p&gt;What happens if a user sends a huge request?&lt;/p&gt;

&lt;p&gt;What happens if Lambda throws an exception?&lt;/p&gt;

&lt;p&gt;What happens if permissions change?&lt;/p&gt;

&lt;p&gt;What happens if someone repeatedly calls the API?&lt;/p&gt;

&lt;p&gt;These questions move you from:&lt;/p&gt;

&lt;p&gt;“I made a tutorial work.”&lt;/p&gt;

&lt;p&gt;toward:&lt;/p&gt;

&lt;p&gt;“I am thinking about how a system behaves.”&lt;/p&gt;

&lt;p&gt;That difference matters.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📊 Observe the Entire Request Path&lt;/p&gt;

&lt;p&gt;When the system works:&lt;/p&gt;

&lt;p&gt;👨‍💻 Client&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🌐 API Gateway&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;⚡ Lambda&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🔐 IAM authorization&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🗄️ DynamoDB&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;⚡ Lambda&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🌐 API Gateway&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📤 Client&lt;/p&gt;

&lt;p&gt;When something fails, identify where the request stopped.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Client&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;API Gateway&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Lambda&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;❌ AccessDeniedException&lt;/p&gt;

&lt;p&gt;Likely investigation:&lt;/p&gt;

&lt;p&gt;Lambda execution role&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;Client&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;API Gateway&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;❌ Lambda never invoked&lt;/p&gt;

&lt;p&gt;Likely investigation:&lt;/p&gt;

&lt;p&gt;API route or integration&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;Client&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;❌ Browser CORS failure&lt;/p&gt;

&lt;p&gt;Likely investigation:&lt;/p&gt;

&lt;p&gt;API CORS configuration&lt;/p&gt;

&lt;p&gt;Troubleshooting becomes easier when you can visualize the architecture.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧪 Intentionally Break the Application&lt;/p&gt;

&lt;p&gt;Once everything works, break it.&lt;/p&gt;

&lt;p&gt;Seriously.&lt;/p&gt;

&lt;p&gt;In a controlled lab environment, try:&lt;/p&gt;

&lt;p&gt;💥 Remove dynamodb:PutItem.&lt;/p&gt;

&lt;p&gt;💥 Change TABLE_NAME to the wrong table.&lt;/p&gt;

&lt;p&gt;💥 Send malformed JSON.&lt;/p&gt;

&lt;p&gt;💥 Request an entry that does not exist.&lt;/p&gt;

&lt;p&gt;💥 Change the API route.&lt;/p&gt;

&lt;p&gt;💥 Remove required integration permissions.&lt;/p&gt;

&lt;p&gt;Then observe:&lt;/p&gt;

&lt;p&gt;🚨 Error&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;📊 Evidence&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🔎 Investigation&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🧠 Hypothesis&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;🛠️ Fix&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;✅ Retest&lt;/p&gt;

&lt;p&gt;A working tutorial teaches you the happy path.&lt;/p&gt;

&lt;p&gt;A broken tutorial teaches you troubleshooting.&lt;/p&gt;

&lt;p&gt;You need both.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📝 Document the Project Like an Engineer&lt;/p&gt;

&lt;p&gt;Do not finish the project and immediately forget it.&lt;/p&gt;

&lt;p&gt;Create a GitHub repository.&lt;/p&gt;

&lt;p&gt;Your README could contain:&lt;/p&gt;

&lt;p&gt;📌 Project Name&lt;/p&gt;

&lt;p&gt;Student Learning Tracker Serverless API&lt;/p&gt;

&lt;p&gt;🎯 Objective&lt;/p&gt;

&lt;p&gt;Build a beginner-friendly serverless API using AWS managed services.&lt;/p&gt;

&lt;p&gt;🏗️ Architecture&lt;/p&gt;

&lt;p&gt;Client&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;API Gateway&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Lambda&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;DynamoDB&lt;/p&gt;

&lt;p&gt;☁️ AWS Services Used&lt;/p&gt;

&lt;p&gt;API Gateway&lt;/p&gt;

&lt;p&gt;AWS Lambda&lt;/p&gt;

&lt;p&gt;Amazon DynamoDB&lt;/p&gt;

&lt;p&gt;AWS IAM&lt;/p&gt;

&lt;p&gt;Amazon CloudWatch&lt;/p&gt;

&lt;p&gt;🔐 Security&lt;/p&gt;

&lt;p&gt;Lambda execution role&lt;/p&gt;

&lt;p&gt;Least-privilege DynamoDB access&lt;/p&gt;

&lt;p&gt;No hardcoded AWS credentials&lt;/p&gt;

&lt;p&gt;🧪 API Routes&lt;/p&gt;

&lt;p&gt;POST /entries&lt;/p&gt;

&lt;p&gt;GET /entries/{entryId}&lt;/p&gt;

&lt;p&gt;💥 Problems Encountered&lt;/p&gt;

&lt;p&gt;AccessDenied&lt;/p&gt;

&lt;p&gt;Incorrect table name&lt;/p&gt;

&lt;p&gt;Malformed JSON&lt;/p&gt;

&lt;p&gt;API integration errors&lt;/p&gt;

&lt;p&gt;🔎 Troubleshooting&lt;/p&gt;

&lt;p&gt;Describe how each problem was isolated and resolved.&lt;/p&gt;

&lt;p&gt;📚 Lessons Learned&lt;/p&gt;

&lt;p&gt;Explain what you actually understand now that you did not understand before.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📸 Add Evidence to Your GitHub Project&lt;/p&gt;

&lt;p&gt;Useful screenshots could include:&lt;/p&gt;

&lt;p&gt;🏗️ Architecture diagram&lt;/p&gt;

&lt;p&gt;🗄️ DynamoDB table structure&lt;/p&gt;

&lt;p&gt;⚡ Lambda function configuration&lt;/p&gt;

&lt;p&gt;🌐 API Gateway routes&lt;/p&gt;

&lt;p&gt;📊 CloudWatch logs&lt;/p&gt;

&lt;p&gt;🧪 Successful API test&lt;/p&gt;

&lt;p&gt;🚨 One failed test and its resolution&lt;/p&gt;

&lt;p&gt;But be careful.&lt;/p&gt;

&lt;p&gt;Do not expose:&lt;/p&gt;

&lt;p&gt;❌ Access keys&lt;/p&gt;

&lt;p&gt;❌ Secret keys&lt;/p&gt;

&lt;p&gt;❌ Tokens&lt;/p&gt;

&lt;p&gt;❌ Passwords&lt;/p&gt;

&lt;p&gt;❌ Sensitive account data&lt;/p&gt;

&lt;p&gt;❌ Private information&lt;/p&gt;

&lt;p&gt;Screenshots should prove your work without leaking credentials.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🎤 Turn the Project Into an Interview Story&lt;/p&gt;

&lt;p&gt;Instead of saying:&lt;/p&gt;

&lt;p&gt;“I know Lambda and DynamoDB.”&lt;/p&gt;

&lt;p&gt;You could say:&lt;/p&gt;

&lt;p&gt;“I built a serverless Student Learning Tracker API using API Gateway, Lambda, DynamoDB, IAM, and CloudWatch. API Gateway exposed POST and GET routes, Lambda handled the application logic, and DynamoDB stored the records. I configured the Lambda execution role with only GetItem and PutItem permissions for the required table. During testing I intentionally removed PutItem, reproduced an AccessDeniedException, used CloudWatch logs to identify the authorization failure, restored the least-privilege permission, and verified the API again.”&lt;/p&gt;

&lt;p&gt;That one project demonstrates:&lt;/p&gt;

&lt;p&gt;⚡ Lambda&lt;/p&gt;

&lt;p&gt;🌐 APIs&lt;/p&gt;

&lt;p&gt;🗄️ Databases&lt;/p&gt;

&lt;p&gt;🔐 IAM&lt;/p&gt;

&lt;p&gt;📊 Monitoring&lt;/p&gt;

&lt;p&gt;🔎 Troubleshooting&lt;/p&gt;

&lt;p&gt;🧠 Architecture thinking&lt;/p&gt;

&lt;p&gt;🗣️ Technical communication&lt;/p&gt;

&lt;p&gt;That is much stronger than simply saying:&lt;/p&gt;

&lt;p&gt;“Familiar with AWS.”&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧩 How This Connects to AWS Certification Learning&lt;/p&gt;

&lt;p&gt;This project helps turn several certification concepts into something real.&lt;/p&gt;

&lt;p&gt;When you study:&lt;/p&gt;

&lt;p&gt;AWS Lambda&lt;/p&gt;

&lt;p&gt;you now remember the function you deployed.&lt;/p&gt;

&lt;p&gt;When you study:&lt;/p&gt;

&lt;p&gt;IAM roles&lt;/p&gt;

&lt;p&gt;you remember the execution role that needed DynamoDB permissions.&lt;/p&gt;

&lt;p&gt;When you study:&lt;/p&gt;

&lt;p&gt;DynamoDB&lt;/p&gt;

&lt;p&gt;you remember your table and partition key.&lt;/p&gt;

&lt;p&gt;When you study:&lt;/p&gt;

&lt;p&gt;API Gateway&lt;/p&gt;

&lt;p&gt;you remember the HTTP routes.&lt;/p&gt;

&lt;p&gt;When you study:&lt;/p&gt;

&lt;p&gt;CloudWatch&lt;/p&gt;

&lt;p&gt;you remember reading logs after an application failure.&lt;/p&gt;

&lt;p&gt;Theory becomes easier to remember when it has a story attached to it.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🚀 Where You Can Take This Project Next&lt;/p&gt;

&lt;p&gt;Once the basic API works, you can extend it gradually.&lt;/p&gt;

&lt;p&gt;Possible Version 2 features:&lt;/p&gt;

&lt;p&gt;✏️ Update an entry&lt;/p&gt;

&lt;p&gt;DELETE /entries/{entryId}&lt;/p&gt;

&lt;p&gt;🗑️ Delete an entry&lt;/p&gt;

&lt;p&gt;DELETE /entries/{entryId}&lt;/p&gt;

&lt;p&gt;📋 List learning entries&lt;/p&gt;

&lt;p&gt;GET /entries&lt;/p&gt;

&lt;p&gt;🔎 Filter by student or topic&lt;/p&gt;

&lt;p&gt;👤 Add authentication&lt;/p&gt;

&lt;p&gt;🌐 Build a frontend&lt;/p&gt;

&lt;p&gt;📊 Add custom monitoring&lt;/p&gt;

&lt;p&gt;🔐 Improve authorization&lt;/p&gt;

&lt;p&gt;🏗️ Deploy through Infrastructure as Code&lt;/p&gt;

&lt;p&gt;Do not add all of these on Day 1.&lt;/p&gt;

&lt;p&gt;Build in layers.&lt;/p&gt;

&lt;p&gt;Version 1 should teach you the foundation.&lt;/p&gt;

&lt;p&gt;Version 2 should teach you the next problem.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🧹 Clean Up When You Finish&lt;/p&gt;

&lt;p&gt;Cloud learning also means knowing how to remove infrastructure.&lt;/p&gt;

&lt;p&gt;When you no longer need the lab:&lt;/p&gt;

&lt;p&gt;🗑️ Remove the API Gateway API.&lt;/p&gt;

&lt;p&gt;🗑️ Delete the Lambda function.&lt;/p&gt;

&lt;p&gt;🗑️ Delete the DynamoDB table if the data is no longer needed.&lt;/p&gt;

&lt;p&gt;🗑️ Remove unnecessary IAM policies and roles.&lt;/p&gt;

&lt;p&gt;📊 Review CloudWatch log groups.&lt;/p&gt;

&lt;p&gt;💰 Check your billing dashboard.&lt;/p&gt;

&lt;p&gt;A project is not finished until you understand its lifecycle.&lt;/p&gt;

&lt;p&gt;Create.&lt;/p&gt;

&lt;p&gt;Operate.&lt;/p&gt;

&lt;p&gt;Troubleshoot.&lt;/p&gt;

&lt;p&gt;Clean up.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🌱 The Bigger Lesson&lt;/p&gt;

&lt;p&gt;At first, this project looks like:&lt;/p&gt;

&lt;p&gt;“Build a Lambda function.”&lt;/p&gt;

&lt;p&gt;But it is actually teaching much more.&lt;/p&gt;

&lt;p&gt;🌐 API Gateway teaches you how clients reach backend logic.&lt;/p&gt;

&lt;p&gt;⚡ Lambda teaches event-driven compute.&lt;/p&gt;

&lt;p&gt;🗄️ DynamoDB teaches managed NoSQL storage.&lt;/p&gt;

&lt;p&gt;🔐 IAM teaches service-to-service authorization.&lt;/p&gt;

&lt;p&gt;📊 CloudWatch teaches observability.&lt;/p&gt;

&lt;p&gt;💥 Failures teach troubleshooting.&lt;/p&gt;

&lt;p&gt;📝 GitHub teaches documentation.&lt;/p&gt;

&lt;p&gt;🎤 Explaining the project teaches communication.&lt;/p&gt;

&lt;p&gt;One project.&lt;/p&gt;

&lt;p&gt;Multiple skills.&lt;/p&gt;

&lt;p&gt;That is why I prefer learning AWS through small systems instead of memorizing isolated service definitions.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;🎯 Final Thoughts&lt;/p&gt;

&lt;p&gt;You do not need to build the next massive cloud platform to start learning serverless architecture.&lt;/p&gt;

&lt;p&gt;Start with:&lt;/p&gt;

&lt;p&gt;One API.&lt;/p&gt;

&lt;p&gt;One Lambda function.&lt;/p&gt;

&lt;p&gt;One DynamoDB table.&lt;/p&gt;

&lt;p&gt;One IAM role.&lt;/p&gt;

&lt;p&gt;A few routes.&lt;/p&gt;

&lt;p&gt;Some logs.&lt;/p&gt;

&lt;p&gt;Then make it work.&lt;/p&gt;

&lt;p&gt;Break it.&lt;/p&gt;

&lt;p&gt;Understand why it broke.&lt;/p&gt;

&lt;p&gt;Fix it.&lt;/p&gt;

&lt;p&gt;Document what you learned.&lt;/p&gt;

&lt;p&gt;That cycle matters more than simply getting a green success message.&lt;/p&gt;

&lt;p&gt;The real goal is not:&lt;/p&gt;

&lt;p&gt;“I followed a Lambda tutorial.”&lt;/p&gt;

&lt;p&gt;The goal is:&lt;/p&gt;

&lt;p&gt;“I understand how an HTTP request travels through my AWS architecture, what permissions each component requires, where failures can occur, and how I would troubleshoot them.”&lt;/p&gt;

&lt;p&gt;That is practical cloud learning.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;☁️ Your Turn&lt;/p&gt;

&lt;p&gt;Imagine this scenario:&lt;/p&gt;

&lt;p&gt;🌐 API Gateway receives the request.&lt;/p&gt;

&lt;p&gt;⚡ Lambda runs.&lt;/p&gt;

&lt;p&gt;📊 CloudWatch confirms the function was invoked.&lt;/p&gt;

&lt;p&gt;🗄️ The DynamoDB table exists.&lt;/p&gt;

&lt;p&gt;But Lambda returns:&lt;/p&gt;

&lt;p&gt;AccessDeniedException&lt;/p&gt;

&lt;p&gt;What would you investigate first?&lt;/p&gt;

&lt;p&gt;🎭 The Lambda execution role?&lt;/p&gt;

&lt;p&gt;⚙️ The DynamoDB action?&lt;/p&gt;

&lt;p&gt;📦 The table ARN?&lt;/p&gt;

&lt;p&gt;🌎 The Region?&lt;/p&gt;

&lt;p&gt;📜 An explicit deny?&lt;/p&gt;

&lt;p&gt;Or something else?&lt;/p&gt;

&lt;p&gt;💬 Share how you would troubleshoot it.&lt;/p&gt;

&lt;p&gt;And if you build your own serverless project:&lt;/p&gt;

&lt;p&gt;Do not just share the finished architecture.&lt;/p&gt;

&lt;p&gt;Share the problem that taught you the most. 🚀&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;📚 Official AWS References&lt;/p&gt;

&lt;p&gt;AWS Lambda + API Gateway Tutorial:&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway-tutorial.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway-tutorial.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Lambda Execution Roles:&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Lambda CloudWatch Logs:&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon DynamoDB Getting Started:&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwbbd6a599bypmh5m0tv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwbbd6a599bypmh5m0tv.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>aws</category>
      <category>api</category>
    </item>
    <item>
      <title>AWS Student Rewards: A Practical Starting Guide for Students Building a Cloud Career ☁️🧑🏻‍💻</title>
      <dc:creator>Randy M. Alonzo</dc:creator>
      <pubDate>Sun, 06 Sep 2026 04:50:32 +0000</pubDate>
      <link>https://dev.to/randyalonzo-dev/aws-student-rewards-a-practical-starting-guide-for-students-building-a-cloud-career-1amd</link>
      <guid>https://dev.to/randyalonzo-dev/aws-student-rewards-a-practical-starting-guide-for-students-building-a-cloud-career-1amd</guid>
      <description>&lt;p&gt;🎓 Why AWS Student Rewards caught my attention&lt;/p&gt;

&lt;p&gt;If you're a university student interested in cloud computing, IT, cybersecurity, DevOps, data, or artificial intelligence, AWS Student Rewards is worth understanding.&lt;/p&gt;

&lt;p&gt;The program combines something I think is especially useful for students:&lt;/p&gt;

&lt;p&gt;Learning + hands-on practice + community participation + certification preparation.&lt;/p&gt;

&lt;p&gt;Instead of simply completing a course and moving on, students can participate in AWS Builder Center, earn community badges, receive learning benefits, gain AWS Credits, and work toward an AWS Foundational Certification exam voucher.&lt;/p&gt;

&lt;p&gt;But there are several details worth understanding before starting.&lt;/p&gt;

&lt;p&gt;☁️ What is AWS Student Rewards?&lt;/p&gt;

&lt;p&gt;AWS Student Rewards is a program available through AWS Builder Center for eligible, verified higher-education students.&lt;/p&gt;

&lt;p&gt;The journey is roughly:&lt;/p&gt;

&lt;p&gt;Verify student status&lt;br&gt;
↓&lt;br&gt;
Complete your Builder Center profile&lt;br&gt;
↓&lt;br&gt;
Unlock AWS Skill Builder Premium&lt;br&gt;
↓&lt;br&gt;
Participate in Builder Center&lt;br&gt;
↓&lt;br&gt;
Earn badges&lt;br&gt;
↓&lt;br&gt;
Reach Student Rewards milestones&lt;br&gt;
↓&lt;br&gt;
Work toward an AWS Foundational Certification&lt;/p&gt;

&lt;p&gt;AWS currently uses SheerID for student verification. Most verification attempts may be completed quickly, while some students can be asked for additional documentation.&lt;/p&gt;

&lt;p&gt;Official AWS Student Rewards announcement:&lt;br&gt;
&lt;a href="https://builder.aws.com/content/3I1qkUtKhwU6K1VaGkfYRwtbz3o/introducing-student-rewards-on-aws-builder-center" rel="noopener noreferrer"&gt;https://builder.aws.com/content/3I1qkUtKhwU6K1VaGkfYRwtbz3o/introducing-student-rewards-on-aws-builder-center&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎁 What can verified students earn?&lt;/p&gt;

&lt;p&gt;The current Student Rewards structure is:&lt;/p&gt;

&lt;p&gt;Student verification + completed profile&lt;br&gt;
→ 12 months of AWS Skill Builder Premium&lt;/p&gt;

&lt;p&gt;7 Builder Center badges&lt;br&gt;
→ $10 AWS Credits&lt;/p&gt;

&lt;p&gt;14 Builder Center badges&lt;br&gt;
→ Additional $20 AWS Credits&lt;/p&gt;

&lt;p&gt;21 Builder Center badges&lt;br&gt;
→ AWS Foundational Certification exam voucher&lt;/p&gt;

&lt;p&gt;That means the badge milestones can provide a total of $30 in AWS Credits, while the 21-badge milestone unlocks the certification exam voucher.&lt;/p&gt;

&lt;p&gt;The 12-month Skill Builder Premium benefit is especially interesting because AWS says it includes access to 900+ courses, hands-on labs, certification preparation, and game-based learning.&lt;/p&gt;

&lt;p&gt;🏅 What are the 21 badges?&lt;/p&gt;

&lt;p&gt;This is an important distinction.&lt;/p&gt;

&lt;p&gt;The badges involved in Student Rewards are AWS Builder Center community/activity badges.&lt;/p&gt;

&lt;p&gt;They are not the same as:&lt;/p&gt;

&lt;p&gt;• AWS Certifications&lt;br&gt;
• Skill Builder course-completion badges&lt;br&gt;
• Certification exam badges&lt;br&gt;
• Technical credentials&lt;/p&gt;

&lt;p&gt;Builder Center badges can be earned through activities such as publishing articles, commenting, maintaining engagement, completing profile activities, and participating in the community.&lt;/p&gt;

&lt;p&gt;So I would not approach the program as:&lt;/p&gt;

&lt;p&gt;“How can I collect 21 badges as quickly as possible?”&lt;/p&gt;

&lt;p&gt;A better mindset is:&lt;/p&gt;

&lt;p&gt;Learn → participate → build → document → help others → earn badges naturally.&lt;/p&gt;

&lt;p&gt;That makes the time spent on Builder Center valuable even beyond the rewards.&lt;/p&gt;

&lt;p&gt;🚀 How I would start&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use an AWS Builder ID you plan to keep&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Try to avoid creating unnecessary duplicate accounts.&lt;/p&gt;

&lt;p&gt;Your badges, profile activity, articles, Wishes, and Student Rewards progress are things you may want associated with one long-term Builder Center identity.&lt;/p&gt;

&lt;p&gt;Keeping everything organized from the beginning can prevent confusion later.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Complete student verification&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Go through the official Student Rewards verification process and provide accurate information.&lt;/p&gt;

&lt;p&gt;Pay particular attention to your:&lt;/p&gt;

&lt;p&gt;• Full name&lt;br&gt;
• University or college&lt;br&gt;
• Email address&lt;br&gt;
• Enrollment information&lt;/p&gt;

&lt;p&gt;Your information should match your legitimate student records as closely as possible.&lt;/p&gt;

&lt;p&gt;AWS currently uses SheerID to perform the verification.&lt;/p&gt;

&lt;p&gt;⚠️ What if student verification fails?&lt;/p&gt;

&lt;p&gt;A failed automated verification does not necessarily mean the end of the process.&lt;/p&gt;

&lt;p&gt;Some verification attempts may require additional documentation.&lt;/p&gt;

&lt;p&gt;If you encounter a problem, I recommend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check that your information matches your university records.&lt;/li&gt;
&lt;li&gt;Follow the instructions provided during verification.&lt;/li&gt;
&lt;li&gt;Contact the appropriate verification support channel when necessary.&lt;/li&gt;
&lt;li&gt;Keep any case or reference numbers.&lt;/li&gt;
&lt;li&gt;Avoid repeated verification attempts across unnecessary accounts.&lt;/li&gt;
&lt;li&gt;Keep your primary AWS Builder Center identity consistent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is one part of the process I am learning about myself, and I think documenting these challenges can also help future students avoid the same confusion.&lt;/p&gt;

&lt;p&gt;📚 Use Skill Builder before you receive the exam voucher&lt;/p&gt;

&lt;p&gt;One mistake would be waiting until badge 21 before studying.&lt;/p&gt;

&lt;p&gt;If you successfully unlock the 12-month Premium benefit, start learning immediately.&lt;/p&gt;

&lt;p&gt;Use it to build foundational knowledge around areas such as:&lt;/p&gt;

&lt;p&gt;• AWS Cloud concepts&lt;br&gt;
• Compute&lt;br&gt;
• Storage&lt;br&gt;
• Networking&lt;br&gt;
• Databases&lt;br&gt;
• Identity and security&lt;br&gt;
• Cloud economics&lt;br&gt;
• Artificial intelligence&lt;br&gt;
• Machine learning&lt;br&gt;
• Generative AI&lt;/p&gt;

&lt;p&gt;The certification voucher should be the result of your learning journey, not the beginning of it.&lt;/p&gt;

&lt;p&gt;☁️ Which certification could you work toward?&lt;/p&gt;

&lt;p&gt;AWS currently has Foundational-level certifications including:&lt;/p&gt;

&lt;p&gt;AWS Certified Cloud Practitioner&lt;/p&gt;

&lt;p&gt;A strong starting point for people who want broad knowledge of the AWS Cloud, including services, security, architecture concepts, pricing, billing, and cloud fundamentals.&lt;/p&gt;

&lt;p&gt;AWS Certified AI Practitioner&lt;/p&gt;

&lt;p&gt;A foundational credential focused on AI, machine learning, generative AI, foundation models, responsible AI, security, compliance, and AWS AI concepts.&lt;/p&gt;

&lt;p&gt;AWS Certified AI Practitioner documentation:&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/aws-certification/latest/ai-practitioner-01.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/aws-certification/latest/ai-practitioner-01.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Student Rewards benefit is described by AWS as a Foundational Certification exam voucher.&lt;/p&gt;

&lt;p&gt;Before scheduling an exam, always check the terms associated with the voucher you actually receive.&lt;/p&gt;

&lt;p&gt;🛠️ Don't stop at certification preparation&lt;/p&gt;

&lt;p&gt;Certifications can help demonstrate structured knowledge.&lt;/p&gt;

&lt;p&gt;But practical experience makes that knowledge much stronger.&lt;/p&gt;

&lt;p&gt;If you're studying AWS, try combining your learning with small projects.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Learn Amazon S3&lt;/p&gt;

&lt;p&gt;→ Build a static website or storage project.&lt;/p&gt;

&lt;p&gt;Learn Amazon EC2&lt;/p&gt;

&lt;p&gt;→ Deploy and configure a small virtual server.&lt;/p&gt;

&lt;p&gt;Learn AWS Lambda&lt;/p&gt;

&lt;p&gt;→ Build a simple serverless function.&lt;/p&gt;

&lt;p&gt;Learn IAM&lt;/p&gt;

&lt;p&gt;→ Practice users, roles, permissions, and least-privilege concepts.&lt;/p&gt;

&lt;p&gt;Learn databases&lt;/p&gt;

&lt;p&gt;→ Build something using an AWS database service.&lt;/p&gt;

&lt;p&gt;Then document what you did.&lt;/p&gt;

&lt;p&gt;A student portfolio containing:&lt;/p&gt;

&lt;p&gt;AWS Certification + Projects + GitHub + Technical Articles&lt;/p&gt;

&lt;p&gt;can communicate much more than a certification badge by itself.&lt;/p&gt;

&lt;p&gt;✍️ Builder Center can become part of your portfolio&lt;/p&gt;

&lt;p&gt;Publishing articles here isn't only about earning badges.&lt;/p&gt;

&lt;p&gt;It is also an opportunity to practice explaining technical concepts.&lt;/p&gt;

&lt;p&gt;You could write about:&lt;/p&gt;

&lt;p&gt;• Something you learned in AWS Skill Builder&lt;br&gt;
• A project you completed&lt;br&gt;
• An AWS service you experimented with&lt;br&gt;
• A problem you encountered&lt;br&gt;
• A certification topic you finally understood&lt;br&gt;
• Mistakes you made while building&lt;br&gt;
• Advice for other students starting with AWS&lt;/p&gt;

&lt;p&gt;Being able to explain what you learned clearly is itself a valuable professional skill.&lt;/p&gt;

&lt;p&gt;🧠 Don't chase badges without gaining skills&lt;/p&gt;

&lt;p&gt;The rewards are attractive.&lt;/p&gt;

&lt;p&gt;AWS Credits? Useful.&lt;/p&gt;

&lt;p&gt;Skill Builder Premium? Valuable.&lt;/p&gt;

&lt;p&gt;Certification exam voucher? Definitely worth pursuing.&lt;/p&gt;

&lt;p&gt;But the greatest value comes from what you can do after earning them.&lt;/p&gt;

&lt;p&gt;Instead of optimizing only for:&lt;/p&gt;

&lt;p&gt;“How quickly can I get 21 badges?”&lt;/p&gt;

&lt;p&gt;I would rather optimize for:&lt;/p&gt;

&lt;p&gt;“How much stronger can my AWS knowledge become while earning those 21 badges?”&lt;/p&gt;

&lt;p&gt;That difference matters.&lt;/p&gt;

&lt;p&gt;🌱 A better student cloud roadmap&lt;/p&gt;

&lt;p&gt;My personal approach would look something like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Confirm student eligibility.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Learn&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use AWS Skill Builder.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Create small hands-on AWS projects.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Participate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Contribute genuinely to Builder Center.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Document&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Write articles and project notes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prepare&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Study systematically for the certification exam.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Certify&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use the voucher when properly prepared.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Continue building&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Move beyond foundational knowledge into deeper AWS skills.&lt;/p&gt;

&lt;p&gt;That turns Student Rewards into something much bigger than a voucher.&lt;/p&gt;

&lt;p&gt;🎯 Final thoughts&lt;/p&gt;

&lt;p&gt;AWS Student Rewards gives students an interesting opportunity to combine education, community, practical cloud learning, and certification preparation in one ecosystem.&lt;/p&gt;

&lt;p&gt;I'm currently going through this journey myself.&lt;/p&gt;

&lt;p&gt;My goal isn't simply to reach 21 badges.&lt;/p&gt;

&lt;p&gt;I want to use the process to:&lt;/p&gt;

&lt;p&gt;• Learn AWS properly&lt;br&gt;
• Build practical cloud projects&lt;br&gt;
• Improve my technical communication&lt;br&gt;
• Document what I learn&lt;br&gt;
• Prepare for an AWS certification&lt;br&gt;
• Create evidence of real skills that I can eventually show employers&lt;/p&gt;

&lt;p&gt;The certification voucher may be one of the rewards at the end of the journey.&lt;/p&gt;

&lt;p&gt;But the knowledge, projects, documentation, and experience developed along the way can be worth even more.&lt;/p&gt;

&lt;p&gt;☁️ What about you?&lt;/p&gt;

&lt;p&gt;If you're participating in AWS Student Rewards:&lt;/p&gt;

&lt;p&gt;Which AWS Foundational Certification are you planning to pursue?&lt;/p&gt;

&lt;p&gt;And more importantly:&lt;/p&gt;

&lt;p&gt;What are you planning to build with AWS while working toward it?&lt;/p&gt;

&lt;p&gt;Let's learn, build, and grow together. 🚀&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>certification</category>
      <category>career</category>
    </item>
  </channel>
</rss>
