<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:webfeeds="http://webfeeds.org/rss/1.0" version="2.0">
  <channel>
    <atom:link href="http://pubsubhubbub.appspot.com/" rel="hub"/>
    <atom:link href="https://f43.me/jeremy-daly.xml" rel="self" type="application/rss+xml"/>
    <title>Jeremy Daly</title>
    <description>Product Guy, Serverless Advocate &amp;amp; Startup Veteran</description>
    <link>http://www.jeremydaly.com</link>
    <webfeeds:icon>https://s2.googleusercontent.com/s2/favicons?alt=feed&amp;domain=www.jeremydaly.com</webfeeds:icon>
    <generator>f43.me</generator>
    <lastBuildDate>Fri, 13 Mar 2026 06:48:41 +0100</lastBuildDate>
    <item>
      <title><![CDATA[Context Engineering for Commercial Agent Systems]]></title>
      <description><![CDATA[<div class="hero-image-wrapper mb-8 not-prose"><img class="hero-image" src="https://www.jeremydaly.com/images/blog/context-engineering-hero.jpg" alt="" /></div><p>When you build agents for a single user on a laptop, almost anything works.<br />When you build commercial multi-tenant agents serving enterprises, almost nothing accidental survives.</p><p>Since late 2024, I’ve spent most of my time building and optimizing commercial, multi-tenant agent systems with a team of engineers inside a large SaaS platform serving hundreds of enterprise customers. We stress-tested agents under real constraints: tenant isolation, financial accuracy, auditability, cost control, and scale.</p><p>When I wasn’t working on those systems, I was consulting with other teams, collaborating with peers building agent platforms, and running independent experiments and side projects to pressure-test orchestration models, retrieval architectures, evaluation harnesses, and model upgrades under similarly real-world conditions.</p><p><strong>Different environments. Same constraints.</strong></p><p>We evaluated and implemented systems across direct foundation model orchestration, managed agent runtimes, multi-agent coordination patterns, graph-oriented orchestration, and MCP integrations.</p><p>In parallel, we architected a multi-tenant semantic layer over economically material enterprise cost data. Not RAG over documents, but a deterministic parsing and interpretation engine performing canonical identity modeling, entity resolution, ontology alignment, and context-aware re-ranking with full provenance. Underneath it: hybrid search, columnar analytics, vector stores, and AI-native data models.</p><p>We built replay-based regression harnesses. We instrumented token cost and execution traces per run. We fine-tuned and distilled local models for latency and cost optimization.</p><p>We heavily utilized production agentic coding systems like Claude Code and Cursor, studying how they handle production-grade context management: pruning between turns, isolating workspaces, externalizing heavy operations, aggressively controlling context surfaces. The same patterns we were engineering, they were hardening in the wild.</p><p>Across all of this, a clear convergence emerged.</p><p>Models improve. APIs standardize. Tool use matures.</p><p>But in commercial multi-tenant systems, those are not the determining factors.</p><p><strong>Context is.</strong></p><p>What follows is not theory. It emerged from debugging memory drift across tenants. From tightening isolation guarantees that survive scale. From building promotion gates to prevent memory poisoning. From implementing retention under enterprise compliance. From learning that token economics only become predictable when context is disciplined.</p><p>This is not just one team’s experience. The same architectural pressures are visible across production systems like <strong>Claude Code</strong>, <strong>Cursor</strong>, <strong>Letta</strong>, <strong>AWS AgentCore</strong>, and others. Implementations differ. The convergence is real.</p><p>The systems that survive production pressure consistently share the same traits:</p><ul><li>Typed memory instead of transcript blobs</li>
<li>Separation between canonical truth and derived acceleration layers</li>
<li>Explicit promotion and compaction gates</li>
<li>Trace envelopes for replay and audit</li>
<li>Aggressive pruning between turns</li>
<li>Isolation boundaries enforced as security boundaries</li>
<li>Cost surfaces treated as first-class signals</li>
</ul><p>The systems that fail optimize for <em>demo velocity</em>. They index raw transcripts. They reuse context wholesale. They blur truth and acceleration. They discover cost, drift, and cross-tenant risk too late.</p><p>This guide synthesizes:</p><ul><li>Lived experience building commercial multi-tenant agents</li>
<li>Public architectural signals from mature agent systems</li>
<li>Explicit engineering rules for context discipline</li>
</ul><p>In commercial multi-tenant systems, context is not an implementation detail.</p><p><strong>It is infrastructure.</strong></p><p>And infrastructure requires engineering discipline.</p><div class="admonition note"><p class="admonition-title flex items-center"> IMPORTANT NOTE</p><p>This guide is <strong>NOT</strong> canon. No single person or team’s experience is. What it represents is accumulated knowledge from building under real constraints, knowledge that appears to converge with architectural decisions the broader ecosystem is arriving at independently. Where we align with production systems like Claude Code or AWS AgentCore, it is not because we copied their work. It is because the same pressures produce the same load-bearing patterns. Treat this as a field guide, not a specification.</p><p>The code blocks in this guide are pseudo-code expressing architectural invariants, <strong>not implementation details</strong>. They illustrate structural contracts that must hold regardless of language or framework.</p></div><br /><hr /><h2 id="part-i-context-is-infrastructure">Part I: Context Is Infrastructure</h2><h3 id="the-three-non-negotiables-of-commercial-agent-systems">The Three Non-Negotiables of Commercial Agent Systems</h3><ol><li><strong>Structural Isolation</strong></li>
<li><strong>Deterministic Replay</strong></li>
<li><strong>Economic predictability</strong></li>
</ol><p>These are not optional features. They are architectural constraints.</p><p>If your system cannot enforce tenant boundaries structurally, it will eventually leak.<br />If your system cannot run deterministic replays, you cannot debug or evolve it safely.<br />If your system cannot predict cost per run, it cannot scale sustainably.</p><h3 id="models-are-commoditized-context-is-not">Models Are Commoditized. Context Is Not.</h3><p>Everyone has access to the same frontier models. Claude. GPT. Gemini. The APIs are public. The prices are falling. Capabilities are converging.</p><p>What differentiates systems is no longer the model.</p><p><strong>It's the context.</strong></p><p>Two teams using the same model can produce radically different outcomes depending on how they externalize knowledge and constrain behavior.</p><p>That's true for coding assistants. It's even more true for commercial agent systems.</p><p>Because in commercial systems, context isn't just about output quality. It's about:</p><ul><li><strong>Policy compliance:</strong> did the agent follow the rules?</li>
<li><strong>Data isolation:</strong> can Tenant A's data leak into Tenant B's context?</li>
<li><strong>Cross-tenant safety:</strong> does shared infrastructure introduce shared risk?</li>
<li><strong>Cost control:</strong> can you predict and bound what each run costs?</li>
<li><strong>Replay and auditability:</strong> can you reconstruct what the agent knew at decision time?</li>
<li><strong>Correctness under ambiguity:</strong> does the system degrade gracefully or silently?</li>
</ul><p>If you get context wrong, you don't just get worse answers. You get silent corruption.</p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="context-as-competitive-surface">Context as Competitive Surface</h3><p><strong>Pattern:</strong> Context assembly is becoming a competitive differentiator.</p><ul><li><a href="https://support.bolt.new/building/using-bolt/agents" target="_blank" rel="noopener">Bolt</a> frames token efficiency and richer context as economic levers, not just model inputs.</li>
<li><a href="https://blog.replit.com/decision-time-guidance" target="_blank" rel="noopener">Replit</a> describes injecting minimal diagnostic signals instead of dumping full logs into context.</li>
</ul><p>The ecosystem is optimizing context selection, not just model choice.</p></div><h3 id="decisions-as-first-class-records">Decisions as First-Class Records</h3><p>There's a shift happening beneath the surface that most teams haven't fully internalized.</p><p>Enterprise software historically captured objects: <em>customers</em>, <em>invoices</em>, <em>tickets</em>, <em>accounts</em>. Systems of record persisted <em>state</em>.</p><p>Agent systems introduce something new: <strong>decisions</strong>.</p><ul><li>Why was this exception approved?</li>
<li>Which policy version applied?</li>
<li>What precedent influenced this action?</li>
<li>What context was visible at decision time?</li>
</ul><p>We're not fully at “context graphs” yet. But we can't get there unless we build the foundations now:</p><ul><li>Append-only trace logs</li>
<li>Scoped memory promotion</li>
<li>Provenance tracking</li>
<li>Replayable context assembly</li>
</ul><p>Context management isn't just about controlling what the model sees. It's about observing and recording <em>how context influences action</em>.</p><p>Without traceability, you cannot optimize.<br />Without replay, you cannot debug.<br />Without provenance, you cannot trust durable memory.</p><p>The foundation for future “context graphs” is not speculation. It's disciplined trace capture starting today.</p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="decisions-and-traces-are-first-class-primitives">Decisions and Traces Are First-Class Primitives</h3><p><strong>Pattern:</strong> Platforms are standardizing structured decision records and trace envelopes.</p><ul><li><a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" target="_blank" rel="noopener">Anthropic's evals guidance</a> formally defines "transcript/trace/trajectory" as the complete record of a run including outputs, tool calls, and intermediate results.</li>
<li><a href="https://platform.openai.com/docs/api-reference/responses" target="_blank" rel="noopener">OpenAI's Responses API</a> assigns durable response IDs, supports <code>previous_response_id</code> threading, and exposes explicit metadata and usage fields.</li>
<li><a href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener">Claude Code</a> exports structured telemetry via OpenTelemetry, making execution observable at the run level.</li>
</ul><p>Traceability is becoming infrastructure, not instrumentation added later.</p></div><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="non-negotiables-not-features">Non-Negotiables, Not Features</h3><p><strong>Context boundaries are infrastructure, not application logic.</strong></p><ul><li><strong>Isolation</strong> is structural, not prompt-based.</li>
<li><strong>Replay</strong> is the baseline for trust.</li>
<li><strong>Economics</strong> must be predictable per run.</li>
</ul></div><br /><hr /><h2 id="part-ii-memory-as-a-scoped-typed-system">Part II: Memory as a Scoped, Typed System</h2><h3 id="memory-must-be-scoped-and-typed">Memory Must Be Scoped and Typed</h3><p>Before we talk about storage or retrieval, we need a shared vocabulary.</p><p>The word “memory” is overloaded. So is “context.”</p><p>If you don’t explicitly define both <strong>scope</strong> and <strong>type</strong>, you end up with a single undifferentiated blob store. And that’s where security and correctness failures begin.</p><p>A robust commercial agent system classifies memory along two dimensions:</p><ol><li><strong>Scope</strong>: who can see it (a security boundary)</li>
<li><strong>Type</strong>: what kind of memory it is (semantic role)</li>
</ol><p>In practice, every production system we evaluated converged on some form of this separation.</p><p>This is not academic modeling. It is <em>operational survival</em>.</p><h3 id="memory-scopes-security-boundaries">Memory Scopes (Security Boundaries)</h3><p>These are structural isolation layers. They are enforced at the storage and routing layers, <strong>never</strong> delegated to the model.</p><h4 id="global-scope-platform-wide-tenant-invariant-memory">Global Scope: Platform-Wide, Tenant-Invariant Memory</h4><ul><li>System safety rules</li>
<li>Tool contracts</li>
<li>Product ontology</li>
<li>Agent “constitution”</li>
</ul><p><strong>Properties:</strong></p><ul><li>Immutable at runtime</li>
<li>Versioned</li>
<li>Deployment-controlled</li>
<li>Never writable by agents</li>
</ul><ul><li>Organization policies</li>
<li>Knowledge bases</li>
<li>Playbooks</li>
<li>Connector configurations</li>
</ul><p><strong>Properties:</strong></p><ul><li>Shared across users in a tenant</li>
<li>Policy-gated promotion</li>
<li>Subject to tenant retention rules</li>
</ul><p>This is where governance lives. It is also where poisoning risk becomes systemic if not handled correctly.</p><h4 id="user-scope-personalized-memory-within-a-tenant">User Scope: Personalized Memory Within a Tenant</h4><ul><li>Preferences</li>
<li>Working style</li>
<li>Personal notes</li>
<li>User-specific entitlements</li>
</ul><p><strong>Properties:</strong></p><ul><li>Visible only to the user (and system)</li>
<li>Promotion-gated</li>
<li>TTL or policy-based retention</li>
</ul><p>Cursor’s user-local memory posture reflects this discipline. User state stays user-scoped by default.</p><ul><li>Tool outputs</li>
<li>Intermediate plans</li>
<li>Scratch buffers</li>
<li>Temporary retrieval results</li>
</ul><p><strong>Properties:</strong></p><ul><li>Short-lived</li>
<li>Subject to aggressive garbage collection</li>
<li>Not durable unless explicitly promoted</li>
</ul><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="memory-scopes-converge-on-hierarchical-file-like-policy">Memory Scopes Converge on Hierarchical, File-Like Policy</h3><p><strong>Pattern:</strong> Memory is scoped and layered, not dumped into a single store.</p><ul><li><a href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener">Claude Code</a> implements multiple memory layers including managed policy, project memory, modular rules, user memory, local project memory, and auto-memory, all with deterministic precedence and on-demand loading.</li>
<li><a href="https://docs.cursor.com/en/context" target="_blank" rel="noopener">Cursor</a> describes "Rules" with explicit scopes (project vs user) and multiple activation modes (Always Apply, Apply Intelligently, Apply to Specific Files, Apply Manually).</li>
<li><a href="https://docs.windsurf.com/windsurf/cascade/agents-md" target="_blank" rel="noopener">Windsurf</a> implements location-based scoping via <a href="http://AGENTS.md" target="_blank" rel="noopener">AGENTS.md</a> where subdirectory placement defines the scope boundary.</li>
<li><a href="https://docs.warp.dev/knowledge-and-collaboration/warp-drive/warp-drive-as-agent-mode-context" target="_blank" rel="noopener">Warp</a> organizes durable context as typed artifacts (Workflows, Notebooks, Rules, MCP Servers, etc.) rather than raw transcript.</li>
</ul><p>Scope boundaries are becoming filesystem conventions, not prompt-level suggestions.</p></div><h3 id="memory-type-semantic-role">Memory Type (Semantic Role)</h3><p>Memory types cut across scopes. Scope defines <strong>who can see it</strong>. Type defines what the memory represents and how it is <strong>expected to behave</strong>.</p><ul><li>
<p><strong>Policy memory</strong><br />Normative rules and constraints.<br />Typically global or tenant-scoped.<br />Versioned and tightly controlled.</p>
</li>
<li>
<p><strong>Preference memory</strong><br />Stable personalization parameters.<br />Usually user-scoped.</p>
</li>
<li>
<p><strong>Fact memory</strong><br />Durable assertions the agent may reuse.<br />Must include provenance.</p>
</li>
<li>
<p><strong>Episodic memory</strong><br />Structured summaries of completed work.<br />“Case resolved.”<br />“Migration completed.”<br />“Exception granted.”<br />Reusable artifacts extracted from traces.</p>
</li>
<li>
<p><strong>Trace memory</strong><br />Raw, append-only execution events.<br />This is your flight recorder.</p>
</li>
</ul><p>The most common failure mode in early systems is allowing episodic or fact memory to silently drift into policy memory.</p><p><strong>That is how precedent poisoning begins.</strong></p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="memory-classification-is-becoming-explicit">Memory Classification Is Becoming Explicit</h3><p><strong>Pattern:</strong> Memory types (policy, preference, episodic, fact) are being separated structurally.</p><ul><li><a href="https://github.com/letta-ai/ai-memory-sdk" target="_blank" rel="noopener">Letta's AI Memory SDK</a> exposes labeled memory blocks (human, summary, policies, history, preferences) backed by per-subject agent state.</li>
<li><a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-types.html" target="_blank" rel="noopener">Amazon Bedrock AgentCore</a> separates short-term memory (raw interaction events) from long-term memory (structured records extracted across sessions) with semantic retrieval APIs.</li>
<li><a href="https://support.bolt.new/building/using-bolt/agents" target="_blank" rel="noopener">Bolt</a> separates ephemeral chat history from durable "Project Knowledge," instructing users to promote constraints into the dedicated durable channel.</li>
</ul></div><div class="admonition lesson"><p class="admonition-title flex items-center"> The more you know</p><h3 id="a-simple-rule">A Simple Rule</h3><p>Memory without scope is exposure. Memory without type is entropy.</p><p>Once you have both, you can start engineering context deliberately.</p></div><h4 id="memory-layer-summary"><strong>Memory Layer Summary:</strong></h4><p></p><table><thead><tr><th class="c1">Layer</th>
<th class="c1">Scope</th>
<th class="c1">Typical Contents</th>
<th class="c1">Retention</th>
<th class="c1">Write Policy</th>
<th class="c1">Canonical Store</th>
</tr></thead><tbody><tr><td class="c2">Constitution</td>
<td class="c2">Global</td>
<td class="c2">Safety rules, tool contracts, ontologies</td>
<td class="c2">Versioned</td>
<td class="c2">Write-locked</td>
<td class="c2">Artifact registry (versioned policy bundles) + object store</td>
</tr><tr><td class="c2">Org memory</td>
<td class="c2">Tenant</td>
<td class="c2">Playbooks, knowledge base, connectors, norms</td>
<td class="c2">Policy-based</td>
<td class="c2">Gated promotion</td>
<td class="c2">Structured memory store</td>
</tr><tr><td class="c2">Personal memory</td>
<td class="c2">User</td>
<td class="c2">Preferences, working style, drafts</td>
<td class="c2">TTL-based + user controls</td>
<td class="c2">Gated promotion</td>
<td class="c2">Structured memory store</td>
</tr><tr><td class="c2">Runtime state</td>
<td class="c2">Session</td>
<td class="c2">Tool outputs, scratch space, intermediate plans</td>
<td class="c2">Hours–days</td>
<td class="c2">Auto GC</td>
<td class="c2">Ephemeral cache (working set); trace captures events/references</td>
</tr><tr><td class="c2">Episodes</td>
<td class="c2">User / Tenant</td>
<td class="c2">“Case resolved,” “refactor complete,” derived summaries</td>
<td class="c2">Months+</td>
<td class="c2">Explicit promotion</td>
<td class="c2">Structured memory store</td>
</tr><tr><td class="c2">Traces</td>
<td class="c2">Tenant (partitioned by session/run)</td>
<td class="c2">Events, retrievals, tool calls, approvals</td>
<td class="c2">Policy-based (often long-lived)</td>
<td class="c2">Append-only</td>
<td class="c2">Event log</td>
</tr></tbody></table><p>Note how:</p><ul><li>Session memory is volatile</li>
<li>User memory is semi-durable</li>
<li>Tenant memory is high-stakes</li>
<li>Global memory is immutable</li>
</ul><p>Each layer carries different isolation risk and promotion risk.</p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="tenant-configuration-needed-an-override-layer">Tenant Configuration Needed an Override Layer</h3><p>We initially treated tenant-scoped configuration as the single source of truth for all users within a tenant. It worked well when needs were uniform.</p><p>As adoption grew, users needed to adjust specific settings without changing the tenant-wide baseline. Without partial overrides, every exception became either a tenant mutation or a workaround.</p><p>We introduced a resolution layer. Tenant configuration remained canonical, but user-scoped records could shadow specific fields. Reads resolved through explicit precedence rules, with tenant state authoritative and user preferences layered on top.</p><p>Scope is not just about visibility. It defines resolution order when multiple layers have opinions about the same setting.</p></div><h3 id="why-scoped-typed-memory-changes-everything">Why Scoped + Typed Memory Changes Everything</h3><p>Without scope boundaries:</p><ul><li>Cross-tenant contamination becomes possible</li>
<li>Retrieval filters become advisory</li>
<li>Privacy guarantees degrade</li>
</ul><p>Without type boundaries:</p><ul><li>Precedents become directives</li>
<li>Facts become policies</li>
<li>Session artifacts become durable memory</li>
</ul><p>Scoped + typed memory is the minimum viable structure for safe autonomy.</p><p>It allows:</p><ul><li>Isolation enforcement</li>
<li>Promotion gating</li>
<li>Retention control</li>
<li>Cost modeling by layer</li>
<li>Evaluation at the run level</li>
</ul><p><strong>And most importantly:</strong> it prevents a single undifferentiated memory surface from quietly becoming a liability.</p><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="name-the-boundary">Name the Boundary</h3><p><strong>Memory must be explicitly typed and scoped.</strong></p><ul><li><strong>Scope</strong> defines the security boundary.</li>
<li><strong>Type</strong> defines behavioral semantics.</li>
<li>If either is ambiguous, drift becomes structural.</li>
</ul></div><br /><hr /><h2 id="part-iii-truth-vs-acceleration">Part III: Truth vs Acceleration</h2><p>Once you define a memory taxonomy, the next mistake most systems make is collapsing storage into a single layer.</p><p>Everything goes into:</p><ul><li>A vector database</li>
<li>A document store</li>
<li>A transcript log</li>
<li>Or worse, a hybrid of all three</li>
</ul><p>That works for prototypes.</p><p>It does not work for commercial, multi-tenant agent systems.</p><p>The core distinction you must preserve is this:</p><p><strong>Separate truth from acceleration.</strong></p><p>In practice, that means designing two canonical stores and two derived stores.</p><h3 id="canonical-stores-truth">Canonical Stores (Truth)</h3><p>Canonical stores serve as the system of record. They hold durable, immutable facts from which state can be deterministically derived.</p><p>They must support:</p><ul><li>Auditability</li>
<li>Replay</li>
<li>Version awareness</li>
<li>Deterministic reconstruction</li>
</ul><p>Their full state must be reconstructible from their own persisted history, not dependent on secondary indexes, caches, or materialized views.</p><h4 id="1-canonical-event-log-append-only">1. Canonical Event Log (Append-Only)</h4><p>This is your flight recorder.</p><p>Every agent run emits multiple events that include:</p><ul><li>Context retrieved</li>
<li>Policies evaluated</li>
<li>Tool calls made</li>
<li>Approvals routed</li>
<li>Outputs generated</li>
<li>Memory promoted</li>
</ul><p>This log is:</p><ul><li>Append-only</li>
<li>Immutable</li>
<li>Replayable</li>
<li>Version-aware</li>
</ul><p>It allows you to answer:</p><ul><li>What did the agent know at decision time?</li>
<li>Which policy version applied?</li>
<li>Why was this exception granted?</li>
<li>What was retrieved and why?</li>
</ul><p>Without this log:</p><ul><li>You cannot debug autonomy.</li>
<li>You cannot build evaluation loops.</li>
<li>You cannot build future context graphs.</li>
</ul><h4 id="example-agent-event"><strong>Example agent event:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-json">1{2 "event_id": "evt_01J...",3 "run_id": "run_01J...",4 "tenant_id": "t_123",5 "user_id": "u_456",6 "ts": "2026-02-16T18:21:22Z",7 "type": "retrieval",8 "artifact_ids": ["mem_88"],9 "candidate_count": 32,10 "policy": { "version": "tenant_policy_v8" }11}</code></div></div><p>This is not logging. It is infrastructure.</p><h4 id="2-canonical-structured-memory-store">2. Canonical Structured Memory Store</h4><p>This stores durable memory state.</p><p>Unlike the event log, this is not raw trace data. It stores structured artifacts:</p><ul><li>Facts</li>
<li>Preferences</li>
<li>Episodic summaries</li>
<li>Approved overrides</li>
<li>Tenant-level knowledge</li>
</ul><p>Every record must include:</p><ul><li>Scope</li>
<li>Class</li>
<li>Provenance</li>
<li>Retention policy</li>
<li>Sensitivity classification</li>
</ul><p><strong>Crucially:</strong> This store, not the vector index, is truth.</p><h4 id="example-memory-record"><strong>Example memory record:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-json">1{2 "memory_id": "mem_88",3 "tenant_id": "t_42",4 "user_id": "u_7",5 "scope": "tenant",6 "memory_type": "episode",7 "status": "verified",8 "content_ref": "obj_441",9 "content_digest": "sha256:...",10 "provenance_run_id": "run_01J...",11 "retention_policy": "policy_12",12 "sensitivity": "internal",13 "created_at": 173102944114}</code></div></div><p>If your vector store becomes your truth layer, you will eventually:</p><ul><li>Lose provenance</li>
<li>Lose replayability</li>
<li>Break deletion guarantees</li>
<li>Create retention drift</li>
</ul><h3 id="derived-stores-projections">Derived Stores (Projections)</h3><p>Derived stores exist for performance.</p><p>They are:</p><ul><li>Rebuildable</li>
<li>Ephemeral</li>
<li>Invalidatable</li>
<li>Non-authoritative</li>
</ul><p>They are accelerators, <em>not truth</em>.</p><p>The retrieval index is your serving layer for recall.</p><p>It may include:</p><ul><li>Embeddings</li>
<li>Lexical search (BM25 or equivalent)</li>
<li>Hybrid ranking</li>
<li>Freshness boosts</li>
<li>Scope filters</li>
<li>Metadata constraints</li>
</ul><p><strong>But it must be rebuildable from canonical sources.</strong></p><p>It is a projection.</p><p>If your vector store becomes your truth layer, you will eventually lose structural integrity.</p><h4 id="2-object-store-large-payloads">2. Object Store (Large Payloads)</h4><p>Agent systems frequently deal with:</p><ul><li>Large documents</li>
<li>Attachments</li>
<li>Extraction outputs</li>
<li>Tool responses</li>
<li>External system dumps</li>
</ul><p>These do not belong in structured memory. They belong in an object store, referenced by ID, tagged with scope and sensitivity, and governed by retention policy.</p><p>Objects should be content-addressed (or at minimum content-hashed) so they can be verified, deduplicated, and traced back to immutable source bytes. Derived artifacts such as embeddings, chunks, summaries, and classifications should be stored separately and keyed by <code>(object_id, content_digest, model/version)</code>. They are projections for retrieval and acceleration, not canonical truth.</p><p>Summaries are especially useful for faster retrieval and context compression, but they must remain reproducible and auditable. A summary should always reference:</p><ul><li>the source <code>object_id</code></li>
<li>the source content digest</li>
<li>the model and prompt/version used to generate it</li>
<li>creation timestamp and optional verification status</li>
</ul><p>The event log and structured memory should reference these objects, never embed large payloads directly.</p><p>If using managed ingestion systems such as Amazon Bedrock Knowledge Bases, treat them as synchronization and chunking layers that build and refresh retrieval indexes from object storage. They orchestrate ingestion and pruning, but they do not replace the underlying search engine or the need for canonical content verification.</p><p>Hybrid search (lexical + semantic) provides stronger precision and filtering guarantees than vector-only retrieval when correctness and isolation matter.</p><p>Lexical search preserves <em>deterministic filtering</em>.<br />Semantic search improves <em>recall</em>.</p><p>Combined ranking reduces false matches and helps minimize hallucinations.</p><p>Engines such as <a href="https://opensearch.org/" target="_blank" rel="noopener">OpenSearch</a>, <a href="https://typesense.org/" target="_blank" rel="noopener">Typesense</a>, and <a href="https://www.pinecone.io/" target="_blank" rel="noopener">Pinecone</a> natively support hybrid retrieval, combining keyword relevance (BM25-style scoring) with vector similarity to balance precision and semantic recall.</p><p><a href="https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html" target="_blank" rel="noopener">Amazon Bedrock Knowledge Bases</a> is not a search engine itself, but instead a managed ingestion and synchronization layer that builds and refreshes retrieval indexes (typically backed by a hybrid store) from documents stored in S3. It helps prune, chunk, and rebuild indexes, on your behalf.</p><p>Critically, the index, regardless of engine, must be built from:</p><ul><li>Canonical structured memory</li>
<li>Curated documents</li>
<li>Approved episodes</li>
</ul><p><strong>It must not be built directly from raw transcripts.</strong></p><p>Raw transcripts are noisy, redundant, and context-fragmented. Indexing them directly undermines traceability and weakens retrieval discipline.</p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="the-vector-index-became-accidental-truth">The Vector Index Became Accidental Truth</h3><p>We relied on the vector index because it already contained embeddings, metadata, and retrieval paths. It was fast, convenient, and close to the model.</p><p>Over time, it quietly became the de facto system of record. Deletion became probabilistic, retention policies diverged across layers, and rebuilding the index shifted historical behavior because canonical truth had never been explicitly defined.</p><p>We separated acceleration from truth. Canonical records became immutable objects with explicit provenance and retention semantics. The vector index was reduced to a projection layer, fully rebuildable from canonical sources.</p><p>If your retrieval layer is the only place certain data lives, it is not acceleration. It is an unauditable system of record.</p></div><h3 id="isolation-at-the-projection-layer">Isolation at the Projection Layer</h3><p>Isolation is not a retrieval tuning feature.</p><p><strong>It is a system invariant.</strong></p><p>But the retrieval index is where projection-layer drift most commonly appears.</p><p>Filtering must occur <em>before ranking</em>, not after.</p><p>Every retrieval query must include:</p><ul><li>Tenant ID</li>
<li>Scope visibility constraint</li>
<li>Expiration checks</li>
<li>Sensitivity boundaries</li>
</ul><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1class IdentityEnvelope:2 def __init__(self, tenant_id, user_id, roles, privacy_mode, policy_version):3 self.tenant_id = tenant_id4 self.user_id = user_id5 self.roles = roles6 self.privacy_mode = privacy_mode7 self.policy_version = policy_version89def retrieve(query, envelope: IdentityEnvelope):10 assert envelope.tenant_id is not None11 assert envelope.policy_version is not None1213 filters = {14 "tenant_id": envelope.tenant_id,15 "policy_version": envelope.policy_version,16 "visibility": allowed_scopes(envelope),17 "not_expired": True18 }1920 candidates = hybrid_search(query, filters)21 return rank(candidates)</code></div></div><p>If filtering is applied after ranking, cross-tenant artifacts may still influence embedding neighborhoods.</p><p>Partition semantics must match canonical storage.</p><p>If canonical storage is tenant-partitioned but the retrieval index is globally indexed with soft filters, isolation becomes advisory.</p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="event-logs-and-structured-records-are-splitting-into-distinct-tiers">Event Logs and Structured Records Are Splitting into Distinct Tiers</h3><p><strong>Pattern:</strong> Canonical truth is separating from derived acceleration layers.</p><ul><li><a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-types.html" target="_blank" rel="noopener">Amazon Bedrock AgentCore</a> implements this split explicitly: short-term memory stores raw interaction events; long-term memory holds structured information extracted asynchronously with semantic retrieval.</li>
<li><a href="https://platform.openai.com/docs/api-reference/responses" target="_blank" rel="noopener">OpenAI's Responses API</a> provides durable response IDs, explicit metadata fields, and detailed usage breakdowns including cached tokens, the API-level anchors for trace envelopes.</li>
</ul><p>Raw event capture and structured state are becoming architecturally distinct.</p></div><h3 id="content-proofs-and-cross-tenant-isolation">Content Proofs and Cross-Tenant Isolation</h3><p>In shared or multi-tenant retrieval systems, consider cryptographic “content proofs” to prevent cross-copy leakage.</p><p>Cursor, for example, uses Merkle-tree-based content proofs during shared index onboarding to ensure results are returned only if the requester can prove legitimate possession.</p><p>This pattern can be applied at the object-store level:</p><ul><li>Maintain tenant-scoped manifests</li>
<li>Maintain Merkle roots over authorized (<code>object_id</code>, <code>digest</code>) pairs</li>
<li>Enforce verifiable inclusion boundaries</li>
</ul><p>This reinforces isolation at the projection layer.</p><p><strong>Cryptography does not replace logical isolation. It reinforces it.</strong></p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="content-proofs-and-index-isolation-are-production-patterns">Content Proofs and Index Isolation Are Production Patterns</h3><p><strong>Pattern:</strong> Derived indexes enforce isolation cryptographically, not just logically.</p><ul><li><a href="https://cursor.com/blog/secure-codebase-indexing" target="_blank" rel="noopener">Cursor's blog</a> and <a href="https://cursor.com/security" target="_blank" rel="noopener">Security page</a> describes Merkle-tree-based "content proofs" for secure teammate index reuse, filtering results unless the client can prove file possession, then deleting proofs after roots match.</li>
<li><a href="https://cursor.com/data-use" target="_blank" rel="noopener">Cursor's data-use disclosure</a> documents temporary encrypted caching with client-generated keys that exist server-side only during the request.</li>
</ul><p>Projection layers are being hardened against cross-boundary leakage.</p></div><h3 id="a-quick-mental-model">A Quick Mental Model</h3><p>Think of it this way:</p><ul><li>The <strong>event log</strong> is your <em>immutable journal</em>.</li>
<li>The <strong>structured memory store</strong> is your <em>state</em>.</li>
<li>The <strong>retrieval index</strong> is your <em>materialized view</em>.</li>
<li>The <strong>object store</strong> is your <em>blob layer</em>.</li>
</ul><p>If you’ve worked with event sourcing, this should feel familiar (with less determinism).</p><p>If you haven’t, <strong>the rule is simple:</strong><br /><em>If you can’t rebuild it from canonical truth, it shouldn’t be trusted.</em></p><h3 id="why-this-separation-matters">Why This Separation Matters</h3><p>This architecture gives you:</p><ul><li>Replayability</li>
<li>Deletion guarantees</li>
<li>Poisoning containment</li>
<li>Cross-tenant isolation clarity</li>
<li>Retention enforcement</li>
<li>Cost control</li>
<li>Index rebuild capability</li>
</ul><p><strong>And most importantly:</strong><br />It prevents your retrieval layer from silently becoming your system of record.</p><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="truth-is-rebuildable-acceleration-is-disposable">Truth Is Rebuildable, Acceleration Is Disposable</h3><p><strong>Canonical data must be authoritative; everything else must be regenerable.</strong></p><ul><li>Canonical stores are the system of record.</li>
<li>Derived layers are projections, not truth.</li>
<li>If acceleration becomes authoritative, integrity erodes.</li>
</ul></div><br /><hr /><h2 id="part-iv-the-context-engine-loop">Part IV: The Context Engine Loop</h2><p>Commercial agent systems don't fail because they lack storage.</p><p><strong>They fail because they lack discipline at runtime.</strong></p><p>Context is not something you “load.”<br />It is something you <em>assemble</em>, <em>constrain</em>, <em>compact</em>, and sometimes <em>discard</em>.</p><p>Most systems accumulate context. Production systems <strong>reconstruct it</strong>.</p><p>That discipline lives in the context engine loop.</p><h3 id="the-high-level-loop">The High-Level Loop</h3><p>Every agent run should follow a predictable sequence:</p><ol><li><strong>Ingest:</strong> establish identity, scope, constraints, and privacy mode</li>
<li><strong>Plan context needs:</strong> determine what information is required to act safely</li>
<li><strong>Retrieve:</strong> execute hybrid search within allowed scopes</li>
<li><strong>Assemble working set:</strong> layer context by priority and token budget</li>
<li><strong>Semantic stabilization:</strong> normalize references, extract structure, preserve meaning before reduction</li>
<li><strong>Agentic garbage collection:</strong> deduplicate, prune low-confidence artifacts, enforce working-set limits</li>
<li><strong>Infer and act:</strong> model + tools + policy enforcement + optional human approval</li>
<li><strong>Promotion gate:</strong> decide what becomes durable memory</li>
<li><strong>Emit trace envelope:</strong> record retrievals, actions, policies, versions, and cost surfaces</li>
<li><strong>Lifecycle garbage collection:</strong> expire session buffers, enforce retention, invalidate derived projections</li>
</ol><p>This loop is not optional.</p><p><strong>If you skip steps, you get drift.</strong></p><h3 id="step-1-ingest">Step 1: Ingest</h3><p>At the beginning of a run, you must establish:</p><ul><li>Tenant identity</li>
<li>User identity</li>
<li>Role and entitlements</li>
<li>Privacy mode</li>
<li>Sensitivity level</li>
<li>Task type</li>
</ul><p>Isolation begins here.</p><p>Retrieval filters are built before retrieval runs.</p><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1from dataclasses import dataclass2from typing import FrozenSet, Optional34@dataclass(frozen=True)5class IdentityEnvelope:6 tenant_id: str7 user_id: str8 roles: FrozenSet[str]9 privacy_mode: str # e.g., "retained" | "no_retention"10 policy_version: str # must be pinned per run1112def assert_envelope(envelope: IdentityEnvelope) -&gt; None:13 assert envelope.tenant_id, "tenant_id is required"14 assert envelope.user_id, "user_id is required"15 assert envelope.policy_version, "policy_version must be pinned per run"16 assert envelope.privacy_mode in {"retained", "no_retention"}, "invalid privacy_mode"</code></div></div><p>You <strong>DO NOT</strong> ask the model to filter data.<br />You filter in the <em>data plane</em>.</p><p>If identity and scope are ambiguous at ingestion, everything downstream becomes probabilistic.</p><h3 id="step-2-plan-context-needs">Step 2: Plan Context Needs</h3><p>Before retrieving anything, the agent should plan what kind of context it needs.</p><p>Does this task require:</p><ul><li>Tenant policy?</li>
<li>Prior episodes?</li>
<li>User preferences?</li>
<li>External knowledge?</li>
</ul><p><strong>This prevents the common anti-pattern:</strong><br /><em>“Retrieve everything and let the model figure it out.”</em></p><p>In production, this anti-pattern shows up as:</p><ul><li>Gradually increasing token costs</li>
<li>Slowly degrading precision</li>
<li>Retrieval surfaces expanding</li>
<li>Embedding neighborhoods densifying</li>
<li>Prompt budgets creeping upward</li>
</ul><p>No single run looks catastrophic.<br />Over weeks, additive context and recursive indexing begin influencing outcomes in subtle, hard-to-debug ways.</p><p>Planning reduces both risk and cost.<br />It's your first form of <em>budget control</em>.</p><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1def plan_context(request):2 if request.type == "support_refund":3 return {4 "needs": ["tenant_policy", "prior_episodes", "customer_history"],5 "max_tokens": 24006 }7 elif request.type == "draft_email":8 return {9 "needs": ["user_preferences"],10 "max_tokens": 120011 }</code></div></div><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="plan-before-execute-is-standard-practice">Plan-Before-Execute Is Standard Practice</h3><p><strong>Pattern:</strong> Agent systems are separating planning from execution with explicit gates.</p><ul><li><a href="https://code.claude.com/docs/en/how-claude-code-works" target="_blank" rel="noopener">Claude Code</a> describes an agentic loop: gather context, take action, and verify results, with subagents that use fresh isolated contexts and return summaries.</li>
<li><a href="https://opencode.ai/docs/agents/" target="_blank" rel="noopener">OpenCode</a> documents a "plan" agent that analyzes without modifying code, with permissioned tools requiring approval before execution.</li>
<li><a href="https://docs.lovable.dev/features/agent-mode" target="_blank" rel="noopener">Lovable</a> splits into Plan mode for decision-making and Agent mode for execution with verification.</li>
<li><a href="https://support.bolt.new/building/using-bolt/agents" target="_blank" rel="noopener">Bolt</a> documents Plan Mode as improving strategy and execution accuracy.</li>
</ul><p>Inference without planning is giving way to deliberate, gated execution.</p></div><h3 id="step-3-retrieve-isolation-enforced-here">Step 3: Retrieve (Isolation Enforced Here)</h3><p>Retrieval must respect:</p><ul><li>Scope</li>
<li>Visibility</li>
<li>Sensitivity</li>
<li>Retention</li>
<li>Privacy mode</li>
</ul><p>Filtering happens <em>before</em> ranking, not after.</p><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1def retrieve(query: str, envelope: IdentityEnvelope, *, now_ts: int):2 assert_envelope(envelope)3 assert query and isinstance(query, str)45 filters = {6 "tenant_id": envelope.tenant_id, # mandatory predicate7 "visibility": allowed_scopes(envelope.roles), # computed in data plane8 "not_expired_at": now_ts, # enforce retention gates9 "status_in": {"active"}, # provisional is not broadly retrievable10 }1112 # IMPORTANT: filter BEFORE rank, never after.13 candidates = hybrid_search(query=query, filters=filters)1415 # Projection is not truth. Verify tenant on canonical fetch.16 artifact_ids = [c.artifact_id for c in candidates[:50]]17 records = guarded_fetch(artifact_ids, envelope.tenant_id)1819 return rank(query, records)</code></div></div><p>Hybrid search (lexical + semantic) provides:</p><ul><li>Deterministic filtering</li>
<li>Precision guarantees</li>
<li>Improved recall</li>
</ul><p>But retrieval is still a projection.</p><p><strong>The canonical store remains the source of truth.</strong></p><h3 id="step-4-assemble-the-working-set">Step 4: Assemble the Working Set</h3><p>The working set is the <em>ephemeral context</em> that actually enters the model’s window.</p><p>It is layered:</p><ol><li>Global constitution</li>
<li>Tenant policies</li>
<li>User preferences</li>
<li>Retrieved facts and episodes</li>
<li>Session state</li>
</ol><p>Each layer has:</p><ul><li>Priority</li>
<li>Token budget</li>
<li>Truncation rules</li>
</ul><p><strong>Without layering and budgets, context windows become dumping grounds.</strong></p><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1def assemble(layers, budget):2 ordered = sort_by_priority(layers)3 working_set = []4 tokens_used = 056 for item in ordered:7 if tokens_used + item.tokens &lt;= budget:8 working_set.append(item)9 tokens_used += item.tokens10 else:11 break1213 return working_set</code></div></div><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="silent-guardrail-drift">Silent Guardrail Drift</h3><p>We assumed that once policies existed in the system, they would remain influential.</p><p>As session histories expanded, tenant-level constraints were gradually pushed out of the working set. The system kept running, just without its guardrails visible at inference time.</p><p>We introduced explicit layer budgets. Global constitution and tenant policy received reserved allocations that could not be displaced.</p><p>If guardrails can be crowded out, they are suggestions, not invariants.</p></div><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="budgeted-context-assembly-replaces-wholesale-inclusion">Budgeted Context Assembly Replaces Wholesale Inclusion</h3><p><strong>Pattern:</strong> Context is selectively loaded by budget and priority, not dumped wholesale.</p><ul><li><a href="https://blog.replit.com/decision-time-guidance" target="_blank" rel="noopener">Replit</a> injects minimal diagnostic signals and instructs the agent to fetch logs via a tool, explicitly avoiding full context dumps.</li>
<li><a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf?hsLang=en" target="_blank" rel="noopener">Anthropic's Skills guide</a> formalizes progressive disclosure: metadata always loaded, full instructions loaded only when needed, linked files navigated on demand.</li>
<li><a href="https://docs.cursor.com/en/context" target="_blank" rel="noopener">Cursor</a> requires explicit context inclusion rather than blanket accumulation.</li>
</ul><p>What you exclude from context is becoming as important as what you include.</p></div><h3 id="step-5-semantic-stabilization-pre-compaction-flush">Step 5: Semantic Stabilization (Pre-Compaction Flush)</h3><p>Before you shrink context, you <strong>MUST</strong> stabilize meaning.</p><p>Compaction without stabilization risks deleting something the model was implicitly relying on.</p><p><strong>Semantic stabilization answers:</strong><br /><em>What must be transformed or anchored before we enforce token limits?</em></p><p>This step may include:</p><ul><li>Collapsing verbose tool traces into structured summaries</li>
<li>Extracting typed episodic artifacts from conversation fragments</li>
<li>Converting free-form dialogue into structured facts</li>
<li>Normalizing references (“that refund we discussed”) into concrete IDs</li>
<li>Marking low-confidence artifacts explicitly</li>
<li>Ensuring provenance metadata is attached</li>
</ul><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1def semantic_stabilization(working_set):2 working_set = collapse_tool_traces(working_set)3 working_set = extract_structured_episodes(working_set)4 working_set = normalize_references(working_set)5 working_set = attach_provenance(working_set)6 return working_set</code></div></div><p>This is not deletion.</p><p>It is transformation <em>before</em> deletion.</p><p>Without this step:</p><ul><li>Summarization can distort intent</li>
<li>Compaction can silently remove guardrails</li>
<li>Session references can become ambiguous</li>
<li>Replay fidelity can degrade</li>
</ul><p><strong>Semantic stabilization preserves reasoning integrity before footprint reduction.</strong></p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="compaction-without-stabilization-corrupted-meaning">Compaction Without Stabilization Corrupted Meaning</h3><p>We aggressively summarized long histories before extracting structured artifacts. It reduced tokens quickly and seemed harmless.</p><p>Over time, subtle behaviors shifted. Context that influenced tool selection and policy evaluation disappeared because it had been compressed before it was normalized or typed.</p><p>We moved structured extraction ahead of compaction. Meaning was stabilized first, then footprint was optimized.</p><p>If compaction runs before normalization, you are not reducing noise. You are discarding signal you have not yet captured.</p><p>Pre-compaction stabilization protects correctness.</p></div><h3 id="step-6-agentic-garbage-collection-working-set-compaction">Step 6: Agentic Garbage Collection (Working-Set Compaction)</h3><p>After meaning is stabilized, the system can safely optimize.</p><p>Agentic garbage collection happens <em>before</em> inference.</p><p>It enforces:</p><ul><li>Token budgets by layer</li>
<li>Deduplication of redundant artifacts</li>
<li>Dropping stale session state</li>
<li>Removing low-confidence provisional memory</li>
<li>Enforcing maximum working-set size</li>
</ul><h4 id="example"><strong>Example:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1def agentic_gc(working_set, budget):2 working_set = dedupe(working_set)3 working_set = drop_low_confidence(working_set)4 return enforce_token_budget(working_set, budget)</code></div></div><p>Agentic GC protects:</p><ul><li>Guardrail visibility</li>
<li>Cost predictability</li>
<li>Ambiguity control</li>
<li>Drift containment</li>
</ul><p>It ensures that:</p><ul><li>Global constitution cannot be crowded out</li>
<li>Tenant policy remains visible</li>
<li>Session chatter does not displace structural constraints</li>
</ul><p><strong>Uncompressed history turns directly into cost.</strong></p><p>Agentic garbage collection is not just optimization.</p><p><strong>It is drift control.</strong></p><h4 id="garbage-collection-by-memory-layer"><strong>Garbage Collection by Memory Layer:</strong></h4><p></p><table><thead><tr><th class="c1">Memory Layer</th>
<th class="c1">Volatility</th>
<th class="c1">Promotion Risk</th>
<th class="c1">GC Strategy</th>
<th class="c1">Industry Parallel</th>
</tr></thead><tbody><tr><td class="c2">Session</td>
<td class="c2">High</td>
<td class="c2">Low</td>
<td class="c2">Aggressive compaction, TTL</td>
<td class="c2">Claude Code ephemeral state</td>
</tr><tr><td class="c2">User</td>
<td class="c2">Medium</td>
<td class="c2">Medium</td>
<td class="c2">TTL + overwrite</td>
<td class="c2">Cursor user-local history</td>
</tr><tr><td class="c2">Tenant</td>
<td class="c2">Low</td>
<td class="c2">High</td>
<td class="c2">Verification gate</td>
<td class="c2">AgentCore tenant memory</td>
</tr><tr><td class="c2">Global</td>
<td class="c2">Immutable</td>
<td class="c2">Extreme</td>
<td class="c2">Write-locked</td>
<td class="c2">Signed system artifacts</td>
</tr></tbody></table><p>Session state is cheap and volatile.</p><p>Tenant memory is high-stakes and must be protected accordingly.</p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="transparency-competed-with-cost">Transparency Competed With Cost</h3><p>We retained full intermediate tool traces in the working context to maximize debugging transparency. Nothing else changed, but token usage per run steadily climbed.</p><p>The working set was carrying diagnostic detail the model did not need for inference. Cost increased without improving behavior.</p><p>We collapsed tool traces into structured summaries during stabilization and let agentic GC prune the rest. Only durable artifacts were eligible for promotion.</p><p>Full traces belong in the event log. The working set should carry only what inference needs to act on.</p></div><h3 id="step-7-infer-and-act">Step 7: Infer and Act</h3><p>Only after:</p><ul><li>Context is stabilized</li>
<li>Working set is compacted</li>
<li>Budgets are enforced</li>
</ul><p>does inference occur.</p><p>This is where:</p><ul><li>The model runs</li>
<li>Tools are invoked</li>
<li>Policies are evaluated</li>
<li>Approvals are requested if needed</li>
</ul><p><strong>This is the only step most tutorials focus on.</strong></p><p>Model invocation + tools + policy evaluation + approvals.</p><p>In commercial systems:</p><ul><li>Actions must be policy-evaluated</li>
<li>High-risk actions may require human approval</li>
<li>Tool outputs must be sensitivity-tagged</li>
<li>Outputs must be traced</li>
</ul><p>Tool invocations should include:</p><ul><li>Versioned tool contracts</li>
<li>Input digests</li>
<li>Output digests</li>
</ul><p>External systems evolve.</p><p>Without capturing tool version and payload hash, replay fidelity degrades over time.</p><p>The model is a component.</p><p><strong>The system is the product.</strong></p><h3 id="step-8-promotion-gate">Step 8: Promotion Gate</h3><p>Promotion transitions session memory into durable memory.</p><p><strong>This is the highest-risk operation in the system.</strong></p><p>It deserves its own section, which we will fully expand in <a href="#part-vi-isolation-poisoning-and-promotion-control">Part VI</a>.</p><h3 id="step-9-emit-trace-envelope">Step 9: Emit Trace Envelope</h3><p>Disciplined trace capture requires a canonical shape.</p><p><strong>Every run produces a single append-only trace envelope.</strong></p><p>The envelope is a run-scoped materialization derived from the append-only event log. It <em>does not</em> introduce new facts. It snapshots derived aggregates so replay, audit, and cost analysis do not require reconstructing runs from raw events.</p><p>Cost views, lineage trees, evaluation harnesses, and audit dashboards are projections derived from this record. They do not redefine it.</p><p>Events are self-describing for partitioning and queryability, but the trace envelope is the authoritative run-level header. The event log is keyed by <code>run_id</code>.</p><p>At minimum, a canonical trace record must anchor:</p><ul><li>Identity (tenant, user, privacy mode)</li>
<li>Model and policy versions</li>
<li>Prefix/version hash</li>
<li>Retrieval artifact IDs</li>
<li>Tool contract versions</li>
<li>Promotion decisions</li>
<li>Token usage and cost</li>
<li>Lineage (parent_run_id)</li>
<li>Immutable event history</li>
</ul><h4 id="a-minimal-representation-might-look-like-this"><strong>A minimal representation might look like this:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-json">1{2 "run_id": "run_01J...",3 "parent_run_id": null,45 "tenant_id": "t_123",6 "user_id": "u_456",7 "privacy_mode": "retained",89 "policy": {10 "version": "tenant_policy_v8",11 "hash": "sha256:..."12 },13 "prefix": {14 "version": "constitution_v12",15 "hash": "sha256:..."16 },17 "model": {18 "provider": "anthropic",19 "name": "claude-sonnet-4-6",20 "version": "2026-02-15"21 },2223 "started_at": "2026-02-16T18:21:22Z",24 "ended_at": "2026-02-16T18:21:41Z",25 "status": "success",2627 "usage": {28 "tokens_in": 1832,29 "tokens_out": 412,30 "static_prefix_tokens": 620,31 "dynamic_context_tokens": 1212,32 "cost_estimate_usd": 0.023133 },3435 "retrieval": {36 "count": 8,37 "bytes_in": 14523,38 "rerank_candidates": 3239 },40 "tools": {41 "invoked": 2,42 "retry_count": 143 },44 "promotions": {45 "count": 1,46 "by_scope": { "tenant": 1, "user": 0, "global": 0 }47 },4849 "events": [50 {51 "event_id": "evt_01J...",52 "run_id": "run_01J...",53 "tenant_id": "t_123",54 "user_id": "u_456",55 "ts": "2026-02-16T18:21:23Z",56 "type": "retrieval",57 "artifact_ids": ["mem_88"],58 "candidate_count": 32,59 "policy": { "version": "tenant_policy_v8" }60 },61 {62 "event_id": "evt_01J...",63 "run_id": "run_01J...",64 "tenant_id": "t_123",65 "user_id": "u_456",66 "ts": "2026-02-16T18:21:27Z",67 "type": "tool_call",68 "tool": "refund_api",69 "contract_version": "v3.1",70 "input_hash": "sha256:...",71 "output_hash": "sha256:...",72 "policy": { "version": "tenant_policy_v8" }73 },74 {75 "event_id": "evt_01J...",76 "run_id": "run_01J...",77 "tenant_id": "t_123",78 "user_id": "u_456",79 "ts": "2026-02-16T18:21:38Z",80 "type": "promotion_write",81 "memory_id": "mem_441",82 "scope": "tenant",83 "memory_type": "episode",84 "status": "provisional",85 "policy": { "version": "tenant_policy_v8" }86 }87 ],8889 "integrity": {90 "envelope_hash": "sha256:...",91 "events_root_hash": "sha256:..."92 }93}</code></div></div><p>This record is append-only.<br />It is version-aware.<br />It is sufficient to replay the decision.</p><p>Everything else is projection.</p><p><strong>Without trace envelopes, context engineering becomes guesswork.</strong></p><h3 id="step-10-lifecycle-garbage-collection-durability-retention-discipline">Step 10: Lifecycle Garbage Collection (Durability &amp; Retention Discipline)</h3><p>After the run:</p><ul><li>Expire session buffers</li>
<li>Invalidate derived indexes if needed</li>
<li>Apply TTL to memory</li>
<li>Archive large payloads</li>
<li>Enforce retention policies</li>
</ul><p>Memory is not just created. <strong>It must decay.</strong></p><div class="admonition lesson"><p class="admonition-title flex items-center"> The more you know</p><h3 id="why-three-forms-of-garbage-collection">Why Three Forms of Garbage Collection?</h3><p>It’s important to distinguish between:</p><ul><li><strong>Semantic Stabilization:</strong> preserve meaning before reduction</li>
<li><strong>Agentic Garbage Collection:</strong> enforce working-set discipline before inference</li>
<li><strong>Lifecycle Garbage Collection:</strong> enforce retention and projection hygiene across runs</li>
</ul><p>They operate at different layers of the architecture and protect different invariants:</p><ul><li>Stabilization protects correctness</li>
<li>Agentic GC protects cost and drift</li>
<li>Lifecycle GC protects durability and compliance Most systems implement only one. Commercial systems require all three.</li>
</ul></div><h3 id="run-boundary-events">Run Boundary Events</h3><p>Beyond the events emitted within the agent loop, two boundary events define the run itself.</p><p><strong><code>run_started</code></strong> pins the execution boundary.<br />It captures the immutable configuration for the run: policy version, prefix hash, privacy mode, primary model, and parent linkage. From this point forward, the run operates inside that fixed context.</p><p><strong><code>run_finalized</code></strong> closes the lifecycle.<br />It records final status, token usage, cost attribution, promotion counts, and integrity hashes. After this event, the run is complete and immutable.</p><p>Together, these two events make the trace envelope <strong>fully reconstructible from the append-only event log</strong>. The envelope introduces no new facts. It materializes the boundary and aggregates for fast replay, audit, and cost analysis.</p><h3 id="multi-turn-conversations-do-not-justify-persistent-windows">Multi-Turn Conversations Do Not Justify Persistent Windows</h3><p><strong>A common misconception:</strong><br /><em>“If this is a conversation, the entire prior context should remain in the window.”</em></p><p><strong>⚠️ That is incorrect in commercial systems.</strong></p><p>Multi-turn state should be reconstructed per turn from:</p><ul><li>Canonical structured memory</li>
<li>Verified episodes</li>
<li>Approved tenant policies</li>
<li>Selective session summaries</li>
</ul><p>Not from raw accumulated transcripts as the <em>primary</em> reconstruction mechanism.</p><p>Each turn should:</p><ol><li>Emit a trace</li>
<li>Compact session artifacts</li>
<li>Promote only approved durable memory</li>
<li>Reassemble context fresh</li>
</ol><p>Carrying forward full windows across turns:</p><ul><li>Increases token cost</li>
<li>Increases drift</li>
<li>Increases poisoning risk</li>
<li>Obscures replayability</li>
</ul><p>The acceptable pattern:</p><ul><li>Session memory is volatile</li>
<li>Durable memory is reconstructed</li>
<li>Context is assembled per turn</li>
</ul><p><strong>If context grows by accumulation rather than reassembly, you are building drift into the architecture.</strong></p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="transcript-indexing-drift">Transcript Indexing Drift</h3><p>We indexed raw transcripts directly because it was fast and required almost no additional structure. Early demos were impressive.</p><p>Over time, behavior drifted. Summarization evolved, tokenization shifted, and buried instructions inside transcripts began influencing retrieval in ways we could not replay or explain.</p><p>We moved transcripts out of the retrieval surface. Only structured artifacts, verified episodes, and canonical documents were indexed. Transcripts remained in the event log.</p><p>Raw transcripts are source material, not durable memory. If retrieval is built on conversation residue, behavior becomes a function of accumulated noise.</p></div><h3 id="the-discipline">The Discipline</h3><p>This loop is the difference between:</p><p><strong>A chatbot with a vector DB</strong> and <strong>a commercial agent system</strong>.</p><p>Most failures come from skipping:</p><ul><li>Planning</li>
<li>Pre-compaction</li>
<li>Promotion gating</li>
<li>Trace emission</li>
</ul><p>The loop enforces discipline.</p><p><strong>And discipline turns context from an experiment into infrastructure.</strong></p><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="assemble-dont-accumulate">Assemble, Don’t Accumulate</h3><p><strong>Context must be reconstructed per run, not allowed to grow unchecked.</strong></p><ul><li>Context is built intentionally each execution.</li>
<li>The loop is the product: retrieve, budget, compact, promote, trace.</li>
<li>Unbounded carryover becomes architectural drift.</li>
</ul></div><br /><hr /><h2 id="part-v-multi-agent-context-boundaries">Part V: Multi-Agent Context Boundaries</h2><p>Commercial agent systems increasingly delegate work <em>across multiple agents</em>.</p><p>A parent agent spawns a subagent to research a topic, execute a tool chain, validate a result, or operate within a specialized domain. Multi-agent orchestration patterns such as <strong>fan-out</strong>, <strong>delegation</strong>, <strong>pipelines</strong>, and <strong>supervisory hierarchies</strong> are becoming standard.</p><p>The architectural challenge is not orchestration.</p><p><strong>It is context discipline across agent boundaries.</strong></p><p>Every principle established so far, scoped memory, truth vs acceleration, the context engine loop, applies within a single agent. Multi-agent systems multiply the surfaces where those principles must hold.</p><p>If context flows between agents without discipline, you get the same failures as undisciplined single-agent systems, but harder to debug because the causal chain crosses execution boundaries.</p><h3 id="context-inheritance-vs-isolation">Context Inheritance vs Isolation</h3><p>When a parent agent spawns a subagent, the first question is:<br /><em>What context does the subagent receive?</em></p><p>There are two patterns:</p><ol><li><strong>Shared context:</strong> The subagent inherits the parent's full working set.</li>
<li><strong>Isolated context with scoped input:</strong> The subagent receives a fresh context window with only the information the parent explicitly passes.</li>
</ol><p>The first pattern is simple. <strong>It is also dangerous</strong>.</p><p>It carries the following risks:</p><ul><li>The subagent's token budget is consumed by the parent's context before it begins its own work.</li>
<li>Irrelevant context from the parent pollutes the subagent's reasoning.</li>
<li>Replay becomes ambiguous because you cannot isolate which agent's context influenced which decision.</li>
<li>If the parent's context contains sensitive artifacts the subagent should not access, isolation is violated.</li>
</ul><p>The second pattern, <strong>isolated context with scoped input</strong>, however, survives production pressure.</p><p><strong>Claude Code's</strong> subagent model reflects this: subagents operate with fresh isolated contexts. The parent provides a scoped task description. The subagent executes independently. It returns a structured summary. The parent incorporates the summary into its own working set.</p><p>The isolation is deliberate:</p><ul><li>The subagent's token budget is its own.</li>
<li>The parent controls what enters the subagent's window.</li>
<li>The subagent's full internal trace stays in its own scope.</li>
<li>Replay can reconstruct each agent's decision independently.</li>
</ul><p>The cost of isolation is that the parent must decide what context the subagent needs. That decision is itself a context engineering problem, and it benefits from the same planning step described in the context engine loop.</p><p>If context inheritance is implicit, debugging multi-agent behavior requires reconstructing invisible state.</p><p><strong>If context inheritance is explicit, each agent's behavior is independently replayable.</strong></p><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1def spawn_subagent(parent_trace: TraceEnvelope, envelope: IdentityEnvelope, task: dict, input_artifact_ids: list[str]):2 # Mandatory inheritance: tenant, user, policy, privacy (handled in routing outside this call).3 child_run_id = new_id("run")45 child_trace = TraceEnvelope(6 run_id=child_run_id,7 tenant_id=envelope.tenant_id,8 user_id=envelope.user_id,9 policy_version=envelope.policy_version,10 model_version=select_model_for(task),11 parent_run_id=parent_trace.run_id,12 )1314 # Parent explicitly chooses what the child can see.15 result = execute_subagent(task=task, input_artifact_ids=input_artifact_ids, trace=child_trace)1617 parent_trace.record_event({18 "event_type": "delegation",19 "child_run_id": child_run_id,20 "agent_type": task.get("agent_type"),21 "input_artifact_ids": input_artifact_ids,22 "output_summary_id": result.summary_id,23 "child_cost_usd": child_trace.cost_usd,24 })2526 child_trace.finalize()27 return result</code></div></div><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="context-sharing-was-correct-until-it-wasnt">Context Sharing Was Correct Until It Wasn't</h3><p>We initially delegated to subagents by passing the parent’s full working set. It was simple, fast to ship, and produced strong results in testing.</p><p>As parent contexts grew, subagent token costs grew with them. Behavior became sensitive to prior session state, and identical delegations produced different outcomes depending on what had happened earlier in the run.</p><p>We moved to scoped delegation. The parent assembled a minimal context package per subagent: task description, applicable policies, and explicitly selected artifacts. Each subagent ran in an isolated context and returned a structured summary.</p><p>Full context inheritance works when working sets are small. At scale, implicit inheritance turns parent history into unintended influence.</p></div><h3 id="subagent-outputs-are-promotion-events">Subagent Outputs Are Promotion Events</h3><p>When a subagent returns results to its parent, the parent incorporates that output into its working set.</p><p><strong>This is a promotion event.</strong></p><p>It deserves the same scrutiny as any other transition from ephemeral to durable state.</p><p>When the subagent's summary enters the parent's context it can influence:</p><ul><li>Subsequent tool invocations</li>
<li>Policy evaluation</li>
<li>Further delegation decisions</li>
<li>Memory promotion at the end of the run</li>
</ul><p>If the subagent's output is treated as <em>trusted input without validation</em>, the parent inherits whatever errors, hallucinations, or poisoning the subagent produced.</p><p>Defense:</p><ul><li><strong>Subagent outputs should be typed:</strong> fact, episode, recommendation, tool result.</li>
<li><strong>Provenance should be tagged:</strong> which subagent, which run, which model version.</li>
<li><strong>Sensitivity classification should transfer:</strong> if the subagent accessed tenant-scoped data, the summary inherits that classification.</li>
<li><strong>The parent's promotion gate applies:</strong> subagent outputs should be treated the same way as any other artifact entering durable memory.</li>
</ul><p>A useful mental model: <strong>treat subagent outputs like tool outputs.</strong></p><p>They are data, <em>not directives</em>.</p><p>They carry provenance.</p><p>They are subject to the same validation rules as any other input to the working set.</p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="subagent-outputs-bypassed-promotion-gates">Subagent Outputs Bypassed Promotion Gates</h3><p>We treated subagent summaries as trusted internal artifacts because they came from our own agents. They flowed directly into the parent’s working set and, in some cases, into tenant-scoped durable memory without passing through the standard promotion gate.</p><p>As delegation volume increased, unverified summaries accumulated in durable memory faster than review processes could keep up.</p><p>We routed subagent outputs through the same promotion pipeline as every other artifact. Provenance became mandatory, and outputs remained provisional until validated.</p><p>The source of an artifact does not determine its trustworthiness. Internal agents are not exempt from governance.</p></div><h3 id="trace-lineage-across-agent-boundaries">Trace Lineage Across Agent Boundaries</h3><p>In a single-agent system, the trace envelope captures one execution path.</p><p>In a multi-agent system, traces form a tree.</p><p>If Agent A delegates to Agent B, and Agent B delegates to Agent C, the trace must capture the full lineage:</p><ul><li><code>run_id</code> for each agent's execution</li>
<li><code>parent_run_id</code> linking child to parent</li>
<li>Delegation context: what was passed to the child</li>
<li>Return summary: what came back</li>
<li>Cost attribution per agent</li>
</ul><p>Without lineage, you cannot:</p><ul><li>Replay a specific agent's execution in isolation</li>
<li>Attribute cost to the agent that incurred it</li>
<li>Debug which agent in the chain produced a problematic output</li>
<li>Evaluate whether delegation decisions were correct</li>
</ul><p>Trace lineage turns a multi-agent run from opaque delegation into a <em>debuggable, replayable execution graph</em>.</p><p><strong>Without it, multi-agent systems become black boxes that happen to contain smaller black boxes.</strong></p><h4 id="example-trace-structure-truncated-for-brevity"><strong>Example trace structure (truncated for brevity):</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-json">1{2 "run_id": "run_parent_01J...",3 "tenant_id": "t_42",4 "user_id": "u_7",5 "policy_version": "policy_v3",6 "model_contract_version": "agent_spec_v2",78 "delegations": [9 {10 "child_run_id": "run_sub_01J...",11 "agent_type": "research_agent",12 "model_version": "claude-sonnet-4-6",13 "input_artifact_ids": ["mem_88", "policy_v3"],14 "output_artifact_ids": ["sum_441"],15 "tokens_in": 1420,16 "tokens_out": 380,17 "tools_invoked": 3,18 "cost_estimate_usd": 0.018,19 "promotions": [],20 "delegations": []21 }22 ],2324 "promotions": [],25 "total_cost_estimate_usd": 0.04126}</code></div></div><h3 id="scope-inheritance-rules">Scope Inheritance Rules</h3><p>When a parent agent delegates to a subagent, the subagent must operate within the correct scope boundaries.</p><p>Tenant scope and user scope must be inherited. If a subagent operates outside the parent's tenant boundary, isolation is violated. <strong>This is not optional.</strong></p><p>Session scope is different. The subagent should have its own ephemeral session scope. It should not inherit the parent's session history, scratch buffers, or intermediate plans. Those belong to the parent's execution context.</p><p>Policy visibility must also propagate. If the parent operates under tenant policy version 3.2, the subagent must operate under the same version. Policy version drift across agents within a single run creates inconsistency that is extremely difficult to debug.</p><h4 id="summary-of-inheritance-rules"><strong>Summary of inheritance rules:</strong></h4><p></p><table><thead><tr><th class="c1">Scope</th>
<th class="c1">Inherited?</th>
<th class="c1">Notes</th>
</tr></thead><tbody><tr><td class="c2">Tenant identity</td>
<td class="c2">Yes (mandatory)</td>
<td class="c2">Isolation boundary</td>
</tr><tr><td class="c2">User identity</td>
<td class="c2">Yes (mandatory)</td>
<td class="c2">Entitlement boundary</td>
</tr><tr><td class="c2">Tenant policies</td>
<td class="c2">Yes (mandatory)</td>
<td class="c2">Must be same version as parent</td>
</tr><tr><td class="c2">Global constitution</td>
<td class="c2">Yes (mandatory)</td>
<td class="c2">Immutable, always present</td>
</tr><tr><td class="c2">Session state</td>
<td class="c2">No</td>
<td class="c2">Subagent gets its own session scope</td>
</tr><tr><td class="c2">Parent's working set</td>
<td class="c2">No</td>
<td class="c2">Only explicitly passed artifacts</td>
</tr><tr><td class="c2">Privacy mode</td>
<td class="c2">Yes (mandatory)</td>
<td class="c2">Cannot be downgraded by delegation</td>
</tr></tbody></table><p>If privacy mode is active in the parent, it must be active in every subagent. Delegation cannot downgrade privacy guarantees.</p><p>If policy version differs between parent and child, the trace will show inconsistent evaluation and replay will not reproduce the behavior.</p><h3 id="cost-attribution-across-agents">Cost Attribution Across Agents</h3><p>Multi-agent runs compound every cost surface described in <a href="#part-ix-cost-surfaces-and-token-economics">Part IX</a>.</p><p>Each subagent incurs its own:</p><ul><li>Inference cost (its own context window, its own model invocation)</li>
<li>Retrieval cost (its own queries against the retrieval index)</li>
<li>Tool cost (its own external API calls)</li>
<li>Persistence cost (if it promotes anything to durable memory)</li>
</ul><p>Without per-agent cost attribution, optimization is impossible because you cannot see which agents are expensive.</p><p><strong>Common failure mode:</strong><br />A parent agent delegates to five subagents. Total run cost rises. The trace shows aggregate token counts. But it does not show that one subagent consumed 60% of the budget because its retrieval surface was over-broad.</p><p>Per-agent cost attribution within a run is not optional in commercial systems. It is the only way to identify which delegation paths are economically sustainable and which need tighter budgets.</p><p><strong>The trace envelope must decompose cost by agent, not just by surface.</strong></p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="multi-agent-context-isolation-is-becoming-structural">Multi-Agent Context Isolation Is Becoming Structural</h3><p><strong>Pattern:</strong> Agent systems are separating agent execution contexts with explicit boundaries rather than sharing state.</p><ul><li><a href="https://code.claude.com/docs/en/sub-agents" target="_blank" rel="noopener">Claude Code</a> implements subagent isolation through the Task tool. These subagents receive scoped task descriptions, operate with fresh contexts, and return structured summaries. The parent's context is not shared wholesale. Subagents cannot spawn other subagents, enforcing a single-level delegation hierarchy. The <a href="https://platform.claude.com/docs/en/agent-sdk/subagents" target="_blank" rel="noopener">Anthropic Agent SDK</a> extends this with <code>parent_tool_use_id</code> fields for tracing delegation lineage.</li>
<li><a href="https://docs.letta.com/guides/agents/multi-agent/" target="_blank" rel="noopener">Letta</a> supports multi-agent architectures where each agent maintains its own memory blocks and state. Cross-agent communication happens through explicit message passing (<code>send_message_to_agent_async</code> and <code>send_message_to_agent_and_wait_for_reply</code>) not shared context windows. When state must be shared, Letta uses explicitly attached <a href="https://docs.letta.com/guides/agents/multi-agent-shared-memory" target="_blank" rel="noopener">shared memory blocks</a> rather than implicit context inheritance.</li>
<li>The <a href="https://openai.github.io/openai-agents-python/handoffs/" target="_blank" rel="noopener">OpenAI Agents SDK</a> supports agent handoffs where conversation state transfers between specialized agents. By default the receiving agent sees full conversation history, but <code>input_filter</code> functions give explicit control over what context propagates. The SDK also supports <code>nest_handoff_history</code>, which collapses prior transcripts into summary messages rather than passing raw history, implementing context scoping as a first-class API. It also supports an <a href="https://openai.github.io/openai-agents-python/agents/" target="_blank" rel="noopener">agents-as-tools</a> pattern for nested delegation.</li>
<li><a href="https://aws.amazon.com/solutions/guidance/multi-agent-orchestration-on-aws/" target="_blank" rel="noopener">AWS Bedrock AgentCore</a> supports multi-agent orchestration with a supervisor-agent pattern where specialized sub-agents maintain independent configurations and tool access. <a href="https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-memory-building-context-aware-agents/" target="_blank" rel="noopener">AgentCore Memory</a> provides memory branching, isolated conversation branches within a shared memory resource, so each agent maintains its own context history within shared tenant boundaries.</li>
</ul><p>Context isolation between agents follows the same pattern as context isolation between tenants: structural separation with explicit, controlled sharing.</p></div><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="delegation-multiplies-risk">Delegation Multiplies Risk</h3><p><strong>Every agent boundary must preserve isolation and replay.</strong></p><ul><li>Subagents receive minimal, intentional context.</li>
<li>Cross-agent flows remain scoped and traceable.</li>
<li>Inherited sprawl is a systemic failure.</li>
</ul></div><br /><hr /><p>If you build commercial agents long enough, you eventually learn a frustrating truth:</p><p><strong>Most failures don’t look like failures.</strong></p><p>They look like slightly worse output... until you realize the system is <em>drifting</em>.</p><p>That drift is usually caused by one of three things:</p><ol><li>Isolation boundaries weren’t enforced consistently</li>
<li>Bad context was retrieved and treated as truth</li>
<li>Session artifacts were promoted into durable memory</li>
</ol><p>The danger isn’t that the model hallucinates.</p><p><strong>The danger is that the system starts believing it.</strong></p><h3 id="isolation-is-a-data-plane-primitive">Isolation Is a Data-Plane Primitive</h3><p>Here’s the invariant again because it’s worth repeating:</p><p><strong>Isolation is enforced in the data plane, not the prompt.</strong></p><p>If your strategy relies on the model restricting itself to tenant-specific content, you’re already in trouble.</p><p><strong>Isolation must be structural.</strong></p><p>This means:</p><ul><li>Every retrieval query must includes tenant/user filter as a required predicate</li>
<li>Filters always apply before ranking</li>
<li>When documents are fetched, tenant mismatch needs to throw an exception</li>
<li>Derived indexes are should either be physically partitioned or logically partitioned with verified predicates</li>
</ul><p>It sounds obvious.</p><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1class IsolationBreach(Exception):2 pass34def guarded_fetch(artifact_ids: list[str], tenant_id: str):5 assert tenant_id67 records = canonical_memory_store.get_many(artifact_ids)89 for r in records:10 # Hard failure. Do not "best-effort" isolate.11 if r.tenant_id != tenant_id:12 raise IsolationBreach(f"tenant mismatch: {r.id}")1314 # Optional: enforce lifecycle rules at read time too.15 if getattr(r, "status", None) not in {"active"}:16 continue1718 return [r for r in records if getattr(r, "status", None) == "active"]</code></div></div><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="canonical-was-clean-projections-drifted">Canonical Was Clean. Projections Drifted.</h3><p>When we investigated cross-tenant inconsistencies, canonical storage was correct. The drift lived in derived layers: search indexes, caches, and analytics jobs. Each enforced partitioning slightly differently. Each was almost correct.</p><p>Those small differences compounded into observable inconsistencies at scale.</p><p>We standardized tenancy enforcement across every derived layer. Retrieval filters became mandatory predicates, and partition semantics were made identical everywhere.</p><p>Isolation that holds only in canonical storage is not isolation. Every projection layer must inherit the same partitioning contract or eventually violate it.</p></div><p>Most multi-tenant systems that leak data don’t leak because someone wrote <code>SELECT * FROM tenants</code>.</p><p>They leak because a derived system wasn’t partitioned the same way the canonical store was.</p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="isolation-is-structural-not-prompt-level">Isolation Is Structural, Not Prompt-Level</h3><p><strong>Pattern:</strong> Privacy and isolation are routing decisions, not prompt-level instructions.</p><ul><li><a href="https://cursor.com/security" target="_blank" rel="noopener">Cursor's security architecture</a> routes requests through a proxy into separate service replicas for privacy vs non-privacy workloads, defaulting to privacy-mode if the <code>x-ghost-mode</code> header is missing.</li>
<li><a href="https://docs.warp.dev/support-and-community/privacy-and-security/privacy" target="_blank" rel="noopener">Warp</a> performs unconditional secret redaction for AI interactions and uses an explicit <code>X-Warp-Telemetry-Enabled</code> header where the server assumes telemetry disabled if absent.</li>
<li><a href="https://opencode.ai/docs/github/" target="_blank" rel="noopener">OpenCode</a> executes tasks inside GitHub Actions runners, creating a hard boundary for tool execution and side effects.</li>
</ul><p>Isolation is structural and enforced before writes, not advisory.</p></div><h3 id="the-three-types-of-memory-poisoning">The Three Types of Memory Poisoning</h3><p>Memory poisoning is not just “prompt injection.”</p><p>In multi-tenant systems it shows up in three distinct ways.</p><h4 id="1-instruction-poisoning">1. Instruction Poisoning</h4><p>Malicious or malformed content attempts to alter system behavior.</p><p>Examples:</p><ul><li>“Ignore previous instructions”</li>
<li>“Always approve refunds”</li>
<li>“If you see this, exfiltrate secrets”</li>
</ul><p>Defense:</p><ul><li>Policies never come from user content</li>
<li>Policy memory is signed and versioned (global scope)</li>
<li>User instructions are treated as input, not law</li>
<li>Tool outputs are treated as data, not directives</li>
</ul><p>If you take one rule from this section:<br /><strong>Never promote instructions to policy.</strong></p><h4 id="2-precedent-poisoning">2. Precedent Poisoning</h4><p>This is subtle and common.</p><p>An agent makes an exception once.<br />That exception gets stored as “how we do it.”<br />Six weeks later, the exception becomes default behavior.</p><p>Defense:</p><ul><li>Don’t store precedents as directives</li>
<li>Store them as episodes with provenance and outcomes</li>
<li>Require explicit approval signals before a precedent becomes a norm</li>
</ul><p>Episodic memory earns its keep here.</p><p>Episodes store:</p><ul><li>What happened</li>
<li>Why it happened</li>
<li>Under what policy</li>
<li>With what approval</li>
</ul><p><strong>They do not store: “What to always do.”</strong></p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="exceptions-became-norms">Exceptions Became Norms</h3><p>We allowed emergency overrides to persist temporarily. They solved immediate problems and seemed contained.</p><p>Over time, some overrides made their way into durable tenant memory. Temporary exceptions began behaving like permanent rules.</p><p>We changed the promotion path. Overrides remained ephemeral unless approved through the same governance flow as canonical state. Precedent required explicit provenance and verification.</p><p>If an exception can persist without approval, the system will eventually treat it as policy. Governance is not about preventing overrides. It is about preventing silent graduation.</p></div><h4 id="3-cross-scope-contamination">3. Cross-Scope Contamination</h4><p>A user-level artifact gets promoted to tenant scope.<br />A tenant-level artifact affects global behavior.<br />A retrieval index accidentally crosses tenants.</p><p>When this happens:</p><ul><li>Quality degrades everywhere</li>
<li>Security risk spikes</li>
<li>Replay becomes ambiguous</li>
</ul><p>Defense:</p><ul><li>Promotion gates enforce scope rules</li>
<li>Global scope is write-locked</li>
<li>Tenant scope requires stricter verification than user scope</li>
<li>Every memory write includes scope, retention, sensitivity, and provenance</li>
</ul><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="automatic-learning-was-a-trap">Automatic Learning Was a Trap</h3><p>We experimented with automatically persisting what the agent “learned” during a run. It felt like progress. The system appeared to evolve.</p><p>Over time, small local mistakes were promoted into durable memory. Durable memory amplified those errors and fed them back into future runs.</p><p>We moved promotion behind an explicit gate. Every durable write required scope classification, provenance, retention policy, and verification. Session state remained volatile unless intentionally promoted.</p><p>Intelligence that persists without governance is not learning. It is drift with momentum.</p></div><h3 id="promotion-the-most-dangerous-operation">Promotion: The Most Dangerous Operation</h3><p>Promotion is the transition from <strong>session state</strong> to <strong>durable memory</strong>.</p><p>It is where most memory poisoning becomes permanent.</p><p><strong>Promotion must be treated like a database write.</strong></p><p>Not like a convenience feature.</p><p>A promotion gate should answer four questions:</p><ol><li><strong>What scope can this live in?</strong> Session vs user vs tenant vs global</li>
<li><strong>What types is it?</strong> Preference vs fact vs episode vs policy</li>
<li><strong>What is the retention policy?</strong> TTL vs manual deletion vs legal hold</li>
<li><strong>What is the provenance?</strong> Where did it come from, and can we replay it?</li>
</ol><div class="admonition note"><p class="admonition-title flex items-center"> note</p><p>New users may require a bootstrapping phase with more permissive promotion that tightens over time. Otherwise newly onboarded tenants face a cold-start challenge where overly restrictive promotion gates mean the system has no memory to work with and delivers poor early experiences.</p></div><h3 id="default-promotion-rules">Default Promotion Rules</h3><ul><li>
<p><strong>Session → User</strong><br />Allowed for preferences, drafts, working style, user-specific episodes</p>
</li>
<li>
<p><strong>Session → Tenant</strong><br />Allowed only for verified facts and approved episodes</p>
</li>
<li>
<p><strong>Session → Global</strong><br />Never allowed at runtime</p>
</li>
</ul><h3 id="verification-rules">Verification Rules</h3><p>Facts stored at tenant scope require:</p><ul><li>Human approval</li>
<li>Trusted system-of-record confirmation</li>
<li>Repeated corroboration across independent sources</li>
</ul><h3 id="sensitivity-rules">Sensitivity Rules</h3><ul><li>Never persist secrets (API keys, tokens)</li>
<li>Be careful persisting PII without explicit retention rules and consent</li>
</ul><h4 id="pseudo-policy"><strong>Pseudo-Policy:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1def promote(candidate, envelope: IdentityEnvelope, *, trace, now_ts: int):2 assert_envelope(envelope)34 # Invariants:5 # - No runtime writes to global scope6 # - Policy is a signed artifact, never promotable7 if candidate.scope == "global":8 return reject("global scope is write-locked")9 if candidate.memory_type == "policy":10 return reject("policy is a signed artifact, not promotable")1112 # Tenant writes are high-stakes.13 if candidate.scope == "tenant":14 if candidate.memory_type == "fact" and not (candidate.verified or candidate.human_approved):15 return reject("tenant facts require verification or explicit approval")16 if candidate.memory_type == "episode" and not (candidate.human_approved or candidate.from_trusted_workflow):17 return reject("tenant episodes require approval or trusted workflow signal")1819 # Sensitivity guardrails.20 if candidate.contains_secrets:21 return reject("secrets are never persisted")2223 # Minimal canonical write: reference + digest + provenance (never raw payload).24 record = {25 "memory_id": new_id("mem"),26 "tenant_id": envelope.tenant_id,27 "user_id": envelope.user_id,28 "scope": candidate.scope,29 "memory_type": candidate.memory_type,30 "status": "provisional",31 "content_ref": candidate.content_ref,32 "content_digest": candidate.content_digest,33 "provenance_run_id": trace.run_id,34 "policy_version": envelope.policy_version,35 "retention_policy": candidate.retention_policy,36 "created_at": now_ts,37 }38 canonical_memory_store.put(record)3940 trace.record_event({41 "event_type": "promotion_write",42 "memory_id": record["memory_id"],43 "status": record["status"],44 "scope": record["scope"],45 "memory_type": record["memory_type"],46 "content_digest": record["content_digest"],47 })4849 # Everything expensive is off the critical path.50 enqueue_hardening(memory_id=record["memory_id"])51 return record["memory_id"]</code></div></div><p>This is the generational GC analogy in practice:</p><ul><li><strong>Session state</strong> is cheap and volatile</li>
<li><strong>User memory</strong> is moderately durable</li>
<li><strong>Tenant memory</strong> is high-stakes and requires verification</li>
<li><strong>Global memory</strong> is write-locked</li>
</ul><p>Promotion discipline is not about paranoia.</p><p><strong>It is about protecting invariants.</strong></p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="promotion-gates-need-calibration-not-just-restriction">Promotion Gates Need Calibration, Not Just Restriction</h3><p>We initially tightened promotion gates to prevent bad writes. The instinct was correct: durability should be earned.</p><p>Over time, the system began forgetting legitimate outcomes. Verified decisions expired with session state, and when related tasks resurfaced weeks later, the agent had no grounding in what had already been established.</p><p>We recalibrated promotion by memory type. Facts and policy remained tightly gated. Episodes from completed workflows were eligible for promotion with automatic provenance tagging and verification signals.</p><p>A promotion gate is not just a wall. It is a calibration surface. Too permissive and drift compounds. Too restrictive and the system forgets what it legitimately learned.</p></div><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="promotion-gating-is-a-product-level-pattern">Promotion Gating Is a Product-Level Pattern</h3><p><strong>Pattern:</strong> Durable memory requires explicit approval, not automatic persistence.</p><ul><li><a href="https://docs.cursor.com/en/context/memories" target="_blank" rel="noopener">Cursor</a> extracts Memories from chat but saves them only with user approval, which is a direct implementation of promotion gating.</li>
<li><a href="https://support.bolt.new/building/using-bolt/agents" target="_blank" rel="noopener">Bolt</a> intentionally clears chat history when switching agents, instructing users to preserve durable guidance in "Project Knowledge."</li>
<li><a href="https://docs.lovable.dev/features/knowledge" target="_blank" rel="noopener">Lovable</a> positions "Custom knowledge" as persistent shared memory applied across future edits, not accumulated chat transcript.</li>
</ul><p>Session state is ephemeral by default; durability requires a gate.</p></div><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="deletion-drifted-without-synchronized-invalidation">Deletion Drifted Without Synchronized Invalidation</h3><p>We treated deletion in canonical storage as sufficient. The system of record behaved correctly.</p><p>Derived indexes did not. They continued serving artifacts that no longer existed in canonical truth. rojections outlived their source.</p><p>We introduced synchronized invalidation. Deletion emitted tombstones with provenance and triggered oordinated updates across every derived layer.</p><p>Deletion without invalidation creates both cost drift and correctness drift. If a deleted artifact can resurface through a projection, deletion &gt; is not complete.</p></div><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="promotion-is-a-database-write">Promotion Is a Database Write</h3><p><strong>Promotion changes durable state and must be treated as such.</strong></p><ul><li>Global scope is write-locked.</li>
<li>Policy artifacts are not promotable.</li>
<li>Tenant memory requires verification and provenance.</li>
</ul></div><br /><hr /><h2 id="part-vii-asynchronous-hardening-and-memory-lifecycle">Part VII: Asynchronous Hardening and Memory Lifecycle</h2><p>Promotion is the transition from volatile session state to durable canonical memory.</p><p>But durable memory <strong>should not</strong> be fully materialized synchronously.</p><p>In commercial systems, enrichment and hardening steps are frequently <em>asynchronous</em>.</p><p>These operations are:</p><ul><li>Computationally expensive</li>
<li>Potentially slow</li>
<li>Sometimes dependent on external systems</li>
<li>Often unnecessary for immediate inference</li>
</ul><p>The critical path should do only what is required to <em>establish canonical truth</em>.</p><p>Everything else belongs in a background processing pipeline.</p><h3 id="minimal-canonical-writes">Minimal Canonical Writes</h3><p>The inference loop writes:</p><ul><li>A minimal canonical record</li>
<li>With scope</li>
<li>With type</li>
<li>With provenance</li>
<li>With retention policy</li>
<li>With sensitivity classification</li>
</ul><p>It does <strong>not</strong> block on:</p><ul><li>Embedding generation</li>
<li>Cross-document deduplication</li>
<li>Fact corroboration</li>
<li>Conflict detection</li>
<li>Episodic summarization</li>
<li>Index rebuilds</li>
<li>Retention reclassification</li>
</ul><p>Those belong to hardening.</p><h3 id="the-hardening-pipeline">The Hardening Pipeline</h3><h4 id="pattern"><strong>Pattern:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-">1run_complete2 → promotion_candidate written to canonical store (minimal record)3 → enqueue enrichment tasks45background_worker6 → validate / enrich / embed7 → update derived indexes8 → emit trace event</code></div></div><p>This separation accomplishes four things:</p><ol><li>Keeps latency predictable</li>
<li>Prevents enrichment failures from blocking inference</li>
<li>Preserves canonical truth even if derived layers fail</li>
<li>Enables cost amortization through batched AI inference</li>
</ol><p><strong>Design rule:</strong><br /><em>The inference loop writes minimal verified canonical records.<br />Everything else is projection.</em></p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="asynchronous-hardening-is-an-emerging-architectural-norm">Asynchronous Hardening Is an Emerging Architectural Norm</h3><p><strong>Pattern:</strong> Enrichment and consolidation are moving off the critical inference path.</p><ul><li><a href="https://github.com/letta-ai/ai-memory-sdk" target="_blank" rel="noopener">Letta</a> processes messages asynchronously where a "subconscious agent" updates memory blocks out of band.</li>
<li><a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-types.html" target="_blank" rel="noopener">Amazon Bedrock AgentCore</a> generates long-term structured memory asynchronously from raw session events, with semantic retrieval APIs for later access.</li>
</ul><p>Both systems keep enrichment off the critical path. Canonical truth persists immediately; projections follow.</p></div><h3 id="lifecycle-states">Lifecycle States</h3><p>Asynchronous hardening introduces a non-obvious reality:</p><p><strong>Canonical truth may be persisted before it is fully trusted.</strong></p><p>Treat newly promoted records as <strong>provisional</strong> until hardening completes. That means every promoted artifact carries an explicit <strong>status</strong> and can move through a small lifecycle:</p><ul><li>
<p><strong>Provisional</strong><br />Persisted with provenance and scope<br />Eligible for replay<br />Not eligible for broad retrieval</p>
</li>
<li>
<p><strong>Active</strong><br />Validated and hardened<br />Eligible for retrieval and reuse</p>
</li>
<li>
<p><strong>Quarantined</strong><br />Suspected poisoning<br />Contradictions<br />Failed checks<br />Excluded from retrieval</p>
</li>
<li>
<p><strong>Revoked</strong><br />Explicitly superseded or deleted via tombstone with provenance</p>
</li>
</ul><p>Hardening determines retrieval eligibility.</p><p><strong>Inference should never block waiting for enrichment.</strong></p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="quarantine-needed-a-replacement-path">Quarantine Needed a Replacement Path</h3><p>Our first quarantine behaved correctly. A tenant-scoped fact was contradicted during asynchronous hardening, flagged, and excluded from retrieval.</p><p>What we did not anticipate was the vacuum it created. That fact had grounded responses for weeks. Once removed, the agent simply stopped referencing it, with no visible signal that context had changed.</p><p>We added a resolution workflow. Quarantine no longer meant exclusion alone. It triggered review, leading to correction, explicit revocation, or reinstatement.</p><p>Lifecycle states need more than transitions. They need resolution paths. Quarantine without resolution is silent deletion.</p></div><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="lifecycle-state-and-retrieval-eligibility-are-explicit">Lifecycle State and Retrieval Eligibility Are Explicit</h3><p>Pattern: Memory records carry explicit lifecycle status that gates retrieval eligibility.</p><ul><li><a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-organization.html" target="_blank" rel="noopener">Amazon Bedrock AgentCore</a> formalizes memory organization with actor and session scoping, recommending namespaced organization to avoid conflicts. It also <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-types.html" target="_blank" rel="noopener">warns</a> that event metadata isn't meant for sensitive content because it isn't encrypted with a customer-managed key.</li>
<li><a href="https://docs.windsurf.com/windsurf/cascade/memories" target="_blank" rel="noopener">Windsurf</a> implements global, workspace, and system-level memory tiers with distinct lifecycle characteristics.</li>
</ul><p>Scope boundaries and sensitivity classification are becoming structural, not advisory.</p></div><h3 id="failure-modes-and-the-canonical-contract">Failure Modes and the Canonical Contract</h3><p>Asynchronous hardening introduces several failure modes.</p><p><strong>They must degrade recall, not correctness.</strong></p><h4 id="1-enrichment-failure">1. Enrichment Failure</h4><p>Embedding generation fails.<br />Summarizer times out.<br />Downstream index is unavailable.</p><p><strong>Rule:</strong></p><ul><li>Canonical record remains intact</li>
<li>Status remains provisional</li>
<li>Derived projections are retried</li>
</ul><p>Correctness is preserved.</p><h4 id="2-contradiction-discovered">2. Contradiction Discovered</h4><p>Corroboration fails.<br />Trusted system-of-record disagrees with agent-authored fact.</p><p><strong>Rule:</strong></p><ul><li>Mark artifact as quarantined</li>
<li>Emit trace event</li>
<li>Optionally write corrective memory with higher precedence</li>
</ul><p>Never silently overwrite.</p><h4 id="3-duplication-and-merge-races">3. Duplication and Merge Races</h4><p>Multiple runs promote semantically identical artifacts.</p><p>Deduplication merges incorrectly.</p><p><strong>Rule:</strong></p><ul><li>Use deterministic identity keys (content_digest + scope + type)</li>
<li>Make merge operations idempotent</li>
<li>Record merge decisions in the event log</li>
</ul><p>Projection must not rewrite canonical history without trace.</p><h4 id="4-late-revocation">4. Late Revocation</h4><p>Tenant updates policy.<br />User revokes consent.<br />Compliance deletion arrives after embedding and indexing.</p><p><strong>Rule:</strong></p><ul><li>Tombstones are first-class</li>
<li>Deletion triggers coordinated invalidation across every derived layer</li>
</ul><p>Deletion without invalidation resurrects stale context.</p><h4 id="5-partial-projection">5. Partial Projection</h4><p>Canonical write succeeds.<br />Some derived indexes update.<br />Others do not.</p><p><strong>Rule:</strong></p><ul><li>Retrieval must be tolerant of missing projections and fall back to canonical fetch paths.</li>
</ul><p>Projections should never be required for correctness.</p><h3 id="memory-conflict-and-drift">Memory Conflict and Drift</h3><p>Over time, multi-tenant agents accumulate contradictions.</p><p>Examples:</p><ul><li>Tenant policy changed but old memory persists</li>
<li>Preference updated but stale entries remain</li>
<li>Past episode contradicts current entitlement state</li>
</ul><p>You need a strategy for conflict. The simplest workable approach:</p><ol><li>Prefer newest memory with verified provenance</li>
<li>Prefer canonical systems of record over agent-authored facts</li>
<li>Mark memories with “confidence” and “verified” flags</li>
<li>Allow revocation and explicit tombstones (deletions with provenance)</li>
</ol><p>Tombstones matter because:</p><ul><li>You need to prove deletion</li>
<li>Stop retrieval from resurrecting stale artifacts</li>
<li>Ensure derived indexes invalidate consistently</li>
</ul><p><strong>Hardening without tombstones creates retention drift.</strong></p><h3 id="why-hardening-exists-at-all">Why Hardening Exists at All</h3><p>Without asynchronous hardening:</p><ul><li>Latency becomes unpredictable</li>
<li>Inference blocks on expensive enrichment</li>
<li>Failures cascade into user-visible errors</li>
</ul><p>Without hardening gates:</p><ul><li>Provisional artifacts influence retrieval prematurely</li>
<li>Poisoned memory spreads</li>
<li>Verification becomes retroactive instead of preventive</li>
</ul><p>Hardening separates:</p><ul><li>Canonical truth persistence</li>
<li>Retrieval eligibility</li>
<li>Acceleration layer maintenance</li>
</ul><p><strong>This is the canonical contract:</strong><br />Inference writes minimal truth.<br />Hardening validates and projects.<br />Derived layers accelerate.</p><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="if-it-isnt-canonical-it-isnt-durable">If It Isn’t Canonical, It Isn’t Durable</h3><p><strong>Durable state must be established synchronously; enrichment happens asynchronously and never blocks correctness.</strong></p><ul><li>The critical path writes minimal canonical truth with identity, scope, provenance, and cost surfaces pinned.</li>
<li>Embeddings, deduplication, enrichment, and index updates occur off the critical path and are fully rebuildable.</li>
<li>Replay and audit depend only on canonical records, never on projections or background jobs.</li>
</ul></div><br /><hr /><h2 id="part-viii-privacy-retention-and-cryptographic-boundaries">Part VIII: Privacy, Retention, and Cryptographic Boundaries</h2><p>Isolation protects tenants from each other.<br />Privacy protects tenants from <em>you</em>.</p><p>Privacy is often treated as a feature. In commercial agent systems, it must be treated as a <strong>data-plane architecture decision</strong>.</p><p>If your system promises "we don't retain this," "this run won't train models," "this tenant's data is isolated," or "this is ephemeral", then those guarantees must be visible in your routing, storage, and indexing layers. Not just in marketing copy.</p><p>If privacy depends on flags inside the model prompt or conditionals inside business logic, it will eventually fail.</p><p><strong>The only durable privacy guarantee is structural separation</strong>.</p><p>Compliance requires encryption at rest.<br />Architecture requires partitioned routing.<br />Threat containment requires domain separation.</p><h3 id="privacy-as-architectural-routing">Privacy as Architectural Routing</h3><p>Isolation is <em>mandatory</em> for multi-tenancy. It's a structural invariant.<br />If Tenant A can influence or see Tenant B’s data, the system is broken.</p><p><strong>Privacy posture is different.</strong></p><p>Privacy posture is a policy commitment enforced by architecture.<br />It defines how much the platform itself retains, observes, or learns from tenant activity.</p><h4 id="a-common-anti-pattern"><strong>A common anti-pattern:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1if privacy_mode:2 disable_logging()</code></div></div><p>This is extremely fragile.</p><p>Logging isn't the only place data persists. Data can leak into <strong>async queues</strong>, <strong>derived retrieval indexes</strong>, <strong>observability pipelines</strong>, <strong>caches</strong>, <strong>debug traces</strong>, <strong>analytics jobs</strong>, and <strong>model prompt caching layers</strong>.</p><p>If "privacy mode" relies on remembering to guard every one of those paths, it <em>will</em> eventually fail.</p><p>In production, the failure mode isn't malicious. It's incremental. A new logging layer is introduced. A new background job is added. A new cache is deployed. And privacy assumptions silently degrade.</p><p>Privacy modes should influence:</p><ul><li>Where traces are written</li>
<li>Whether promotion is allowed</li>
<li>Whether retrieval indexes are updated</li>
<li>Whether embeddings are generated</li>
<li>Whether objects are persisted</li>
</ul><p>Privacy must route execution differently, not just mask output.</p><p>But the critical part is this:</p><p><strong>The no-retention path should not share the same physical data plane as the retention path.</strong></p><p>Separate buckets.<br />Separate partitions.<br />Separate encryption domains.</p><p>Otherwise accidental logging becomes inevitable.</p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><p>Logging Drifted Past Privacy Boundaries</p><p>We implemented privacy by masking sensitive fields and stripping explicit PII markers. It appeared compliant.</p><p>Over time, sensitive data surfaced in places we had not guarded: tool payloads, derived projections, and trace fragments. Cleanup logic missed new paths as the system evolved.</p><p>We moved privacy enforcement to ingestion. Privacy mode became part of the identity envelope, and routing decisions were made before any writes occurred.</p><p>Cleanup logic is fragile. Routing is structural. If privacy is enforced after writes, every new logging layer, background job, and cache becomes a potential leak.</p></div><h3 id="the-stronger-pattern-separate-data-planes">The Stronger Pattern: Separate Data Planes</h3><p>The more defensible pattern (validated by mature SaaS systems) is this: <strong>route privacy-mode traffic through a separate path.</strong></p><p>That can mean separate replicas, separate storage backends, separate queues, suppressed or redirected observability streams, and distinct retention policies at the storage layer.</p><p>The point is <em>structural separation</em>. At minimum, enforce physical storage partitioning and routing-level isolation.</p><p>A privacy-aware system may include:</p><ul><li>Retained trace log</li>
<li>Metadata-only trace log</li>
<li>Durable structured memory store</li>
<li>Ephemeral session store</li>
</ul><p>In privacy mode:</p><ul><li>Trace logs may contain only metadata (<code>run_id</code>, <code>timestamps</code>, <code>token counts</code>)</li>
<li>Canonical structured memory may disallow promotion entirely</li>
<li>Object store writes may be disabled</li>
</ul><p>This is not just policy enforcement.</p><p><strong>It is architectural branching.</strong></p><p>If your privacy guarantee requires scanning logs after the fact, you are already too late.</p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="privacy-routing-as-architectural-separation-is-production-practice">Privacy Routing as Architectural Separation Is Production Practice</h3><p><strong>Pattern:</strong> Privacy is a routing decision enforced before any writes occur, not a flag checked after.</p><ul><li><a href="https://cursor.com/security" target="_blank" rel="noopener">Cursor</a> implements separate service replicas and parallel queues/workers per privacy mode, defaulting to privacy-mode if the routing header is missing.</li>
<li><a href="https://docs.warp.dev/support-and-community/privacy-and-security/privacy" target="_blank" rel="noopener">Warp</a> documents that Business/Enterprise plans operate under zero-data-retention agreements, with the server assuming telemetry disabled if the header is absent.</li>
</ul><p>Safe defaults and physical separation replace conditional scrubbing.</p></div><h3 id="what-privacy-mode-should-actually-control">What Privacy Mode Should Actually Control</h3><p>At minimum, privacy mode should govern:</p><ol><li>
<p><strong>Event log retention</strong><br />Are trace envelopes persisted?<br />If yes, are payloads redacted?<br />If no, is only metadata retained?</p>
</li>
<li>
<p><strong>Structured memory promotion</strong><br />Are promotion gates disabled?<br />Are only session-scope artifacts allowed?</p>
</li>
<li>
<p><strong>Derived index writes</strong><br />Are embeddings created?<br />Where are they stored?<br />Are they scoped to ephemeral partitions?</p>
</li>
<li>
<p><strong>Object store persistence</strong><br />Are large payloads retained?<br />Encrypted with tenant-specific keys?<br />Auto-expiring?</p>
</li>
</ol><h3 id="retention-discipline">Retention Discipline</h3><p>If you promise "no retention," define what that means precisely.</p><p>Does it mean no canonical trace stored? No structured memory writes? No embedding generation? No analytics logs? No prompt caching? No external model provider retention?</p><p>You cannot say "no retention" if the request is still embedded into a global vector index, flows into analytics dashboards, or is logged to a shared debugging stream.</p><p>A clean architectural approach:</p><ul><li><strong>Metadata-only trace retention</strong>
<ul><li>run_id, cost, timing</li>
<li>no payload</li>
</ul></li>
<li><strong>Ephemeral session store</strong>
<ul><li>in-memory or short TTL</li>
</ul></li>
<li><strong>Derived indexes disabled</strong></li>
<li><strong>Object store writes blocked or TTL-bound</strong></li>
<li><strong>Separate observability stream with redaction</strong></li>
</ul><p>That way your promise is enforceable, not aspirational.</p><p>Without explicit retention semantics:</p><ul><li>Session artifacts become durable</li>
<li>Durable artifacts never expire</li>
<li>Index entries outlive source truth</li>
</ul><p>Every canonical record must carry retention metadata:</p><ul><li>Retention policy ID</li>
<li>Expiration timestamp or rule</li>
<li>Sensitivity classification</li>
</ul><h4 id="example-retention-policy"><strong>Example retention policy:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-">1{2 "memory_id": "mem_441",3 "scope": "user",4 "memory_type": "preference",5 "retention_policy": "ttl_90_days",6 "expires_at": "2026-05-16T00:00:00Z"7}</code></div></div><p>Retention must cascade</p><p>When a canonical record expires:</p><ul><li>A tombstone is emitted</li>
<li>Derived projections are invalidated</li>
<li>Object store references are removed or reclassified</li>
</ul><p><strong>Retention without projection invalidation creates ghost memory.</strong></p><p>Designing this after the fact is painful.<br />Designing it up front as an alternate routing path is tractable.</p><p>Privacy <strong>cannot</strong> be retrofitted.</p><div class="admonition lesson"><p class="admonition-title flex items-center"> The more you know</p><h3 id="retention-drift-is-real">Retention Drift Is Real</h3><p>Even well-designed systems accumulate "retention drift" over time. A new logging layer is added and isn't privacy-aware. A background embedding job writes to the wrong index. A debug flag writes full transcripts to object storage. A feature team builds a derived index and forgets to scope it.</p><p>We quickly learned that deletion alone is not enough. Unless invalidation is tightly coordinated across derived layers, indexes will continue serving content that has already been removed from canonical storage.</p><p>The system remained operational. The storage layer behaved correctly.</p><p>The issue was lifecycle design. Without synchronized invalidation, derived systems outlive the truth they project.</p><p>This is why separation by architecture is stronger than separation by conditionals.</p></div><h3 id="encryption-and-tenant-keys">Encryption and Tenant Keys</h3><p>Isolation is a policy boundary.<br />Encryption is a cryptographic boundary.</p><p>In any commercial system, canonical stores and object stores should be encrypted at rest. In multi-tenant enterprise-grade systems, we need to go further:</p><ul><li>Tenant-scoped encryption keys</li>
<li>Key rotation policies</li>
<li>Envelope encryption for object payloads</li>
<li>Separation of encryption domains between canonical and derived stores</li>
</ul><p>Why this matters:</p><ol><li>A storage misconfiguration should not automatically imply cross-tenant readability.</li>
<li>Deletion guarantees are stronger when encryption keys can be revoked.</li>
<li>“No retention” modes can be reinforced with short-lived encryption domains.</li>
<li>Object stores containing large payloads require stricter cryptographic boundaries than derived summaries.</li>
</ol><p>Recommended pattern:</p><ul><li><strong>Canonical store:</strong> tenant-scoped envelope encryption (per-tenant KEK, rotating DEKs)</li>
<li><strong>Object store:</strong> tenant-scoped encryption + content digests (integrity/provenance), with sensitivity-based storage rules</li>
<li><strong>Retrieval index:</strong> tenant-partitioned index; store encrypted IDs + embeddings for <em>curated artifacts only</em></li>
<li><strong>Cache layers:</strong> tenant-partitioned, TTL-bound caches; encrypt with short-lived keys; never authoritative</li>
<li><strong>Event log:</strong> tenant-partitioned; <strong>metadata encrypted with platform-managed KMS for cross-tenant analytics</strong>, and <strong>payloads encrypted with tenant-scoped envelope encryption</strong> (or stored as tenant-encrypted object references)</li>
</ul><p>This allows:</p><ul><li>Tenant-level cryptographic revocation</li>
<li>Controlled key rotation</li>
<li>Partitioned blast radius</li>
</ul><p><strong>Key design principle:</strong><br /><em>If derived systems are compromised, canonical truth and raw payloads should remain cryptographically isolated.</em></p><p>Encryption is not just compliance posture. It reinforces scope boundaries.</p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="shared-encryption-domains-complicated-lifecycle-changes">Shared Encryption Domains Complicated Lifecycle Changes</h3><p>We used a single tenant-scoped KMS key across canonical storage and derived indexes. It simplified IAM and key management and worked in steady state.</p><p>The coupling surfaced when we needed stronger revocation guarantees for canonical data. Because canonical and derived layers shared the same key, a scoped change required coordinated migrations across storage and index layers.</p><p>We separated encryption domains. Canonical stores could rotate or revoke independently, and derived indexes used shorter-lived keys that could be discarded during rebuilds.</p><p>The cost of a shared encryption domain is invisible until rotation or revocation is required. By then the coupling is load-bearing.</p></div><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="credential-and-cryptographic-containment-is-formalizing">Credential and Cryptographic Containment Is Formalizing</h3><p><strong>Pattern:</strong> Secrets and encryption domains are structurally isolated, not trusted to prompts.</p><ul><li><a href="https://aws.amazon.com/bedrock/agentcore/faqs/" target="_blank" rel="noopener">AWS AgentCore Identity</a> provides a token vault that stores user tokens, handles refresh, and secures tool API keys, aligning with structural containment for secrets.</li>
<li><a href="https://cursor.com/data-use" target="_blank" rel="noopener">Cursor</a> documents temporary encrypted caching with client-generated keys that exist server-side only during the request.</li>
<li><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching" target="_blank" rel="noopener">Anthropic's prompt caching</a> stores KV cache representations and cryptographic hashes rather than raw prompt text, supporting zero-data-retention alongside caching economics.</li>
</ul><p>Encryption domains are separating across volatile and durable layers.</p></div><div class="admonition lesson"><p class="admonition-title flex items-center"> The more you know</p><h3 id="canonical-vs-derived-encryption-domains">Canonical vs Derived Encryption Domains</h3><p>Another subtle pattern:</p><p><strong>Canonical and derived layers should not share identical encryption semantics.</strong></p><p>Why? Because projections are rebuildable.</p><p>If you use identical encryption domains everywhere:</p><ul><li>A projection compromise can reveal canonical references</li>
<li>Revocation becomes more complicated</li>
</ul><p>Projections are disposable.<br />Canonical truth must be durable and revocable.</p></div><p>Privacy mode complicates decision traces. If you suppress traces entirely, you lose replay. If you persist traces indiscriminately, you violate retention promises.</p><p>Trace envelopes should include:</p><ul><li>Model version</li>
<li>Policy version</li>
<li>Retrieval artifact IDs</li>
<li>Token counts</li>
<li>Tool contract versions</li>
</ul><p>But in privacy mode:</p><ul><li>Persist structural trace metadata</li>
<li>Redact sensitive payloads</li>
<li>Allow tenants to opt into extended trace retention</li>
<li>Separate trace retention from model training retention</li>
</ul><p>This preserves operability without over-collecting.</p><p>Replay may become limited in privacy mode. <strong>That is acceptable.</strong></p><p>What is not acceptable is accidentally retaining sensitive content because logging was decoupled from privacy routing.</p><h3 id="cross-tenant-isolation-reinforced-by-cryptography">Cross-Tenant Isolation Reinforced by Cryptography</h3><p>Scope enforcement in the data plane protects retrieval.<br />Encryption enforces isolation at rest.</p><p>Even if a bug bypasses retrieval filters:</p><ul><li>Encrypted tenant domains limit exposure</li>
<li>Key management boundaries provide additional containment</li>
</ul><p><strong>Cryptography does not replace logical isolation. It reinforces it.</strong></p><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="privacy-as-architecture">Privacy as Architecture</h3><p><strong>Privacy must be enforced structurally, not retrofitted procedurally.</strong></p><ul><li>Routing decisions must occur before any durable write.</li>
<li>Retention policies must cascade across canonical and derived layers.</li>
<li>Encryption must reinforce scope boundaries at rest and in transit.</li>
</ul></div><br /><hr /><h2 id="part-ix-cost-surfaces-and-token-economics">Part IX: Cost Surfaces and Token Economics</h2><p>In traditional cloud systems, cost scales with compute, storage, and network. In agent systems, cost scales with tokens, retrieval volume, context assembly size, tool invocation frequency, and trace retention footprint.</p><p>The difference is subtle but profound:</p><p><strong>Cost is no longer driven by infrastructure. It's driven by <em>intent</em>.</strong></p><p>And intent flows through context.</p><p>In commercial agent systems, cost does not scale linearly with traffic.</p><p><strong>It <em>compounds</em> with context.</strong></p><h3 id="the-four-primary-cost-surfaces">The Four Primary Cost Surfaces</h3><p>Per-run cost is not just tokens in and tokens out. In commercial systems it is a composite of four surfaces:</p><ol><li><strong>Inference</strong></li>
<li><strong>Retrieval</strong></li>
<li><strong>Tooling</strong></li>
<li><strong>Persistence</strong></li>
</ol><p>Each surface has different scaling behavior.</p><p>A disciplined system tracks these surfaces separately so optimization doesn’t become guesswork.</p><h4 id="1-inference-cost">1. Inference Cost</h4><p>Inference cost is driven by:</p><ul><li>Input tokens</li>
<li>Output tokens</li>
<li>Context window size</li>
<li>Model selection</li>
<li>Prompt prefix size (caching effects)</li>
</ul><p>As context grows, inference cost grows even if the business logic remains unchanged.</p><p><strong>This is the first place drift becomes visible.</strong></p><h4 id="2-retrieval-cost">2. Retrieval Cost</h4><p>Retrieval cost scales with:</p><ul><li>Number of documents indexed</li>
<li>Embedding dimensionality</li>
<li>Query volume</li>
<li>Hybrid ranking complexity</li>
<li>Cross-tenant filtering overhead</li>
</ul><p>As memory accumulates, retrieval cost rises, even if token budgets stay fixed.</p><p><strong>Derived projections amplify cost.</strong></p><h4 id="3-tooling-cost">3. Tooling Cost</h4><p>Tool invocation cost includes:</p><ul><li>External API calls</li>
<li>Database reads</li>
<li>Connector queries</li>
<li>Downstream system calls</li>
<li>Internal compute</li>
<li>Side effects (including retries and human approval latency)</li>
</ul><p>Tools often dwarf model cost in enterprise environments.</p><p><strong>Without trace attribution per run, tooling cost becomes opaque.</strong></p><h4 id="4-persistence-cost">4. Persistence Cost</h4><p>Persistence cost includes:</p><ul><li>Canonical storage</li>
<li>Object store usage</li>
<li>Derived index storage</li>
<li>Log and trace retention</li>
<li>Backup and compliance overhead</li>
</ul><p>Durable memory is an economic commitment.</p><p><strong>Promotion decisions multiply storage cost over time.</strong></p><h3 id="the-economic-model-of-an-agent-run">The Economic Model of an Agent Run</h3><p>Every agent run has a composite cost. It is not just tokens in and tokens out.</p><p><strong>It is the sum of the four distinct surfaces.</strong></p><img src="https://www.jeremydaly.com/images/blog/cost-calculation-for-agent-run.svg" alt="Cost Per Agent Run" class="w-full dark:invert" /><p><strong>Formally:</strong></p><p>Ctotal=Cinf+Cret+Ctool+CpersistC_{total} = C_{inf} + C_{ret} + C_{tool} + C_{persist}Ctotal​=Cinf​+Cret​+Ctool​+Cpersist​</p><p>Where:</p><ul><li><strong>Inference</strong> scales with context size.</li>
<li><strong>Retrieval</strong> scales with memory growth.</li>
<li><strong>Tooling</strong> scales with autonomy.</li>
<li><strong>Persistence</strong> scales with promotion discipline.</li>
</ul><p>Most teams focus on inference cost.</p><p>In commercial systems, that is usually <em>not</em> the dominant long-term driver.</p><h3 id="layer-based-token-budgets">Layer-Based Token Budgets</h3><p>One of the most effective structural controls is explicit token budgeting by layer.</p><p>Example allocation:</p><ul><li><strong>Global constitution:</strong> 500 tokens</li>
<li><strong>Tenant policy:</strong> 800 tokens</li>
<li><strong>User memory:</strong> 600 tokens</li>
<li><strong>Retrieved episodes/artifacts:</strong> 1,200 tokens</li>
<li><strong>Session state/scratch:</strong> 900 tokens</li>
</ul><p><strong>Total:</strong> 4,000 token input budget</p><p>Without allocation, session state will crowd out policy.<br />Without allocation, retrieval will crowd out global constraints.</p><p>Layer budgets:</p><ul><li>Preserve guardrails</li>
<li>Bound token cost</li>
<li>Reduce drift</li>
<li>Enable cost prediction</li>
</ul><p><strong>Budget discipline is architectural, not cosmetic.</strong></p><p>Without layer-specific budgets, tenant memory can crowd out safety rules, session noise can crowd out durable facts, and retrieval bloat can <em>drown signal</em>.</p><h4 id="example-token-budget"><strong>Example Token Budget:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1TOKEN_BUDGET = 40002allocation = {3 "global": 500,4 "tenant": 800,5 "user": 600,6 "retrieved": 1200,7 "session": 9008}</code></div></div><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="budgets-matter">Budgets Matter</h3><p>We did not enforce strict per-layer token budgets. Context size expanded gradually across runs, sessions, and memory layers.</p><p>When traffic spiked, costs did not rise linearly. They jumped. Context growth had been compounding quietly.</p><p>We introduced explicit token allocations by layer: global, tenant, user, retrieved, and session. Each had a hard cap.</p><p>Without per-layer budgets, context discipline is aspirational. With them, it becomes both quality control and economic control.</p></div><h3 id="prompt-caching-and-context-hashing">Prompt Caching and Context Hashing</h3><p>In commercial systems, many runs share identical static context layers: global constitution, tenant policy, stable user preferences.</p><p><strong>These layers should be explicitly versioned and constructed deterministically.</strong></p><h4 id="a-stable-hash-of-the-static-prefix"><strong>A stable hash of the static prefix:</strong></h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1prefix_hash = hash(global_constitution + tenant_policy_version)</code></div></div><p>This enables:</p><ul><li>Observability of policy drift</li>
<li>Deterministic replay</li>
<li>Compatibility with provider-side prefix caching</li>
<li>Reduction of redundant prefix construction</li>
</ul><p>When supported by the model provider, identical prefixes may benefit from prompt caching at the infrastructure layer, reducing repeated token charges. Even without provider caching, explicit prefix hashing encourages disciplined versioning and makes constitutional changes visible and auditable.</p><p>This reduces inference cost volatility.</p><p>But only if:</p><ul><li>Prefix boundaries are stable</li>
<li>Versioning is explicit</li>
<li>Trace logs record prefix version</li>
</ul><p>Otherwise cache invalidation becomes opaque.</p><div class="admonition lesson"><p class="admonition-title flex items-center"> The more you know</p><h3 id="why-prefix-caching-changes-the-incentives">Why Prefix Caching Changes the Incentives</h3><p>If static layers are cacheable, the marginal cost shifts toward the dynamic tail:</p><ul><li>retrieval payloads</li>
<li>tool traces</li>
<li>accumulated session state</li>
</ul><p>That makes compaction and progressive disclosure even more valuable, because you stop paying repeatedly for the same invariant prefix and start paying almost entirely for what you chose to assemble.</p></div><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="prompt-caching-and-token-accounting-are-platform-primitives">Prompt Caching and Token Accounting Are Platform Primitives</h3><p><strong>Pattern:</strong> Caching is an architectural cost lever with explicit economic telemetry.</p><ul><li><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching" target="_blank" rel="noopener">Anthropic</a> supports automatic and explicit cache breakpoints, storing cryptographic hashes rather than raw text.</li>
<li><a href="https://ai.google.dev/api/caching" target="_blank" rel="noopener">Google Gemini</a> provides a first-class "cached content" object including system instructions and tool configuration.</li>
<li><a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/context-cache/context-cache-overview" target="_blank" rel="noopener">Google Cloud Vertex AI</a> reports <code>cachedContentTokenCount</code> in response metadata for explicit economic telemetry.</li>
<li><a href="https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html" target="_blank" rel="noopener">Amazon Bedrock</a> exposes prompt caching with cache checkpoints and distinct pricing semantics.</li>
</ul><p>All four platforms treat caching as an architectural decision, not an optimization afterthought.</p></div><h3 id="what-token-drift-looks-like">What Token Drift Looks Like</h3><p>Architectural discussions about token budgets stay abstract until you attach numbers.</p><p>Consider a representative workload:</p><ul><li><strong>Early average input:</strong> ~1,800 tokens</li>
<li><strong>Output:</strong> ~400 tokens</li>
<li><strong>Total per run:</strong> ~2,200 tokens</li>
<li><strong>Approximate cost:</strong> ~$0.02–$0.03 per run</li>
</ul><div class="admonition note"><p class="admonition-title flex items-center"> note</p><p>The <strong>exact dollar amounts</strong> vary by model pricing, input/output rate asymmetry, and whether static prefixes benefit from caching, but the <em>drift dynamics</em> are consistent.</p></div><p>Now introduce three common forms of drift:</p><ul><li>Retrieval surface expands</li>
<li>Session transcripts are retained instead of compacted</li>
<li>Promotion frequency increases</li>
</ul><p>Six weeks later, average input grows to <strong>~2,900 tokens</strong>. Output remains stable.</p><p>Per-run cost rises to <strong>~$0.035–$0.045</strong>.</p><p>That increase feels small in isolation. It is a <strong>50–70%</strong> jump that rarely triggers alarms during development.</p><p>At 50,000 runs per day:</p><ul><li>$0.025 → $0.040 average</li>
<li><strong>~$22,000 monthly delta</strong></li>
</ul><p>No new features shipped. No model changed.</p><p><strong>Context simply accumulated.</strong></p><h3 id="why-cost-compounds">Why Cost Compounds</h3><p>Drift rarely starts in inference.</p><p><strong>It starts in promotion.</strong></p><ul><li>Every durable memory write increases the retrieval surface.</li>
<li>A larger retrieval surface increases context payload size.</li>
<li>Larger payloads increase inference cost.</li>
<li>Higher inference cost creates pressure to promote summaries.</li>
<li>Promotion increases durable memory.</li>
</ul><p>The system compounds.</p><p>This is why token drift is rarely linear.</p><p><strong>It is structural.</strong></p><h3 id="promotion-as-an-economic-multiplier">Promotion as an Economic Multiplier</h3><p>Every promotion to durable memory:</p><ul><li>Increases future retrieval size</li>
<li>Increases index cardinality</li>
<li>Increases token pressure</li>
<li>Increases retention cost</li>
</ul><p>Promotion frequency directly influences long-term cost curve.</p><p>If 5% of runs promote tenant-scope artifacts at 50,000 runs/day, that is <strong>2,500 new durable records daily</strong>.</p><p>Reducing tenant-level promotion from 5% to 1% materially slows both storage and token growth curves.</p><p><strong>Promotion discipline is not just governance. It is cost control.</strong></p><h3 id="progressive-disclosure-vs-up-front-retrieval">Progressive Disclosure vs Up-Front Retrieval</h3><p>Early systems (like chatbots), generally used a simplistic approach:</p><ol><li>Query retrieval layer broadly</li>
<li>Insert top-k results</li>
<li>Let the model sort it out</li>
</ol><p>This often "works", but it is without discipline.</p><p>Not all context <em>should</em> or <em>needs to</em> be visible at once.</p><p><strong>Progressive disclosure is the better pattern:</strong></p><ol><li>Retrieve minimal context</li>
<li>Attempt inference</li>
<li>If low confidence, retrieve additional context</li>
<li>Repeat</li>
</ol><p>This avoids the “dump everything into the prompt” anti-pattern.</p><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-py">1context = retrieve_minimal(query)2result, confidence = infer(query, context)34if confidence &lt; 0.6:5 context += retrieve_additional(query)6 result, confidence = infer(query, context)</code></div></div><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="more-context-did-not-mean-better-answers">More Context Did Not Mean Better Answers</h3><p>We initially retrieved as much context as possible up front. The assumption was simple: more knowledge should produce better answers.</p><p>It did not. Up-front retrieval increased input tokens by roughly 25–30% compared to progressive disclosure, with negligible accuracy difference and slightly lower hallucination risk under staged loading.</p><p>We shifted to progressive disclosure. Context was loaded incrementally based on need and explicit budget constraints.</p><p>Overloading the context window does not increase intelligence. It increases ambiguity. Progressive disclosure is both a correctness control and an economic control.</p></div><p>Progressive disclosure improves precision, reduces token usage, and stabilizes behavior.</p><p>Layer budgets, compaction, promotion limits, and retrieval discipline are not optimizations. They are economic control surfaces.</p><p><strong>Progressive disclosure is both correctness control and cost control.</strong></p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="progressive-disclosure-is-replacing-up-front-context-dumps">Progressive Disclosure Is Replacing Up-Front Context Dumps</h3><p><strong>Pattern:</strong> Minimal context first, expand only when needed.</p><ul><li><a href="https://blog.replit.com/decision-time-guidance" target="_blank" rel="noopener">Replit</a> avoids dumping full error output into context, instead injecting a minimal signal that tells the agent to pull details via a log tool on demand.</li>
<li><a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf?hsLang=en" target="_blank" rel="noopener">Anthropic's Skills guide</a> formalizes multi-level loading: metadata always present, full instructions loaded only when needed, linked files navigated on demand.</li>
<li><a href="https://support.bolt.new/building/using-bolt/agents" target="_blank" rel="noopener">Bolt</a> argues that richer model context can reduce wasted iterations, framing token investment as an economic decision.</li>
</ul><p>Context is loaded progressively, not preloaded exhaustively.</p></div><h3 id="observing-cost-as-a-first-class-signal">Observing Cost as a First-Class Signal</h3><p>Cost is not a monthly bill. It is a <strong>per-run property of execution</strong>.</p><p>Beyond the obvious token charges, agent systems incur structural cost across multiple dimensions:</p><ul><li>Context assembly cost</li>
<li>Retrieval indexing and reranking cost</li>
<li>Promotion and durable writes</li>
<li>Retention and storage footprint</li>
<li>Tool execution cost</li>
<li>Observability overhead</li>
</ul><p>If these are not attributed per run, you cannot tune budgets, compare retrieval strategies, or detect runaway behavior early.</p><p>Every trace envelope should include:</p><ul><li>Model and prefix version</li>
<li>Tokens in / tokens out</li>
<li>Static prefix tokens vs dynamic context tokens</li>
<li>Retrieval artifact count and bytes retrieved</li>
<li>Rerank candidate count</li>
<li>Tool invocations and retry count</li>
<li>Promotion writes by scope</li>
<li>Estimated cost (model + tools)</li>
<li>Latency</li>
<li>Hardening queue lag (if async memory is used)</li>
</ul><p>Tracing is not logging.<br /><strong>It is cost instrumentation.</strong></p><h4 id="example-cost-instrumentation-view-derived-from-the-trace-envelope"><strong>Example cost instrumentation view</strong> (derived from the trace envelope):</h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-json">1{2 "run_id": "01J...",3 "usage": {4 "tokens_in": 1832,5 "tokens_out": 412,6 "static_prefix_tokens": 620,7 "dynamic_context_tokens": 12128 },9 "retrieval": {10 "count": 8,11 "bytes_in": 14523,12 "rerank_candidates": 3213 },14 "tools": {15 "invoked": 2,16 "retry_count": 117 },18 "promotions": 1,19 "estimated_cost_usd": 0.023120}</code></div></div><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="trace-gaps-obscured-cost">Trace Gaps Obscured Cost</h3><p>We initially modeled cost using aggregate token counts. When expenses rose, we could not explain why. Trace envelopes lacked layer-level token breakdowns, retrieval volume by scope, promotion counts, and model or prefix versioning.</p><p>Cost analysis required manual reconstruction of how context had been assembled.</p><p>We extended trace envelopes to include tokens per layer, retrieval artifact IDs, promotion counts, and model and prefix versions. Cost attribution became deterministic instead of anecdotal.</p><p>Cost modeling is only as strong as trace fidelity. If you cannot decompose a run into its cost surfaces, optimization is guesswork.</p></div><h3 id="context-is-now-an-economic-surface">Context Is Now an Economic Surface</h3><p>In commercial agent systems, infrastructure cost scales predictably.</p><p><strong>Context cost compounds.</strong></p><p>It compounds with:</p><ul><li>Retrieval volume</li>
<li>Assembly size</li>
<li>Promotion rates</li>
<li>Compaction discipline</li>
<li>Retention duration</li>
</ul><p>Progressive disclosure turns these into controllable surfaces. Retrieve minimally. Expand only when needed.</p><p>This reduces token volume and stabilizes behavior without sacrificing accuracy.</p><p>Teams that engineer these surfaces control cost.<br />Teams that treat context as a byproduct discover it later.</p><p>Cost rarely grows with traffic alone.<br />It grows with unmanaged context.</p><p><strong>Cost control is not model negotiation.</strong><br /><strong>It is <em>deliberate</em> context engineering.</strong></p><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="context-has-a-meter">Context Has a Meter</h3><p><strong>Every context decision carries measurable economic cost.</strong></p><ul><li>Retrieval, promotion, compaction, and retention are cost surfaces.</li>
<li>Attribution must exist per run.</li>
<li>Unmeasured cost compounds invisibly.</li>
</ul></div><hr /><br /><h2 id="part-x-evaluation-as-context-discipline">Part X: Evaluation as Context Discipline</h2><p>Most teams think evaluation means scoring model outputs.</p><p>In commercial agent systems, evaluation means something far more structural:</p><p><strong>You are evaluating context assembly under constraint.</strong></p><p>Models are interchangeable components.<br />Context discipline <em>is</em> the system.</p><h3 id="what-you-are-actually-evaluating">What You Are Actually Evaluating</h3><p>A commercial agent run is the composition of:</p><ul><li>Identity resolution</li>
<li>Scope filtering</li>
<li>Retrieval selection</li>
<li>Layer budgeting</li>
<li>Semantic stabilization</li>
<li>Garbage collection</li>
<li>Tool invocation</li>
<li>Policy enforcement</li>
<li>Promotion gating</li>
<li>Lifecycle transitions</li>
<li>Cost surfaces</li>
</ul><p>Evaluation must ask:</p><ul><li>Was the correct context retrieved?</li>
<li>Were scope boundaries enforced?</li>
<li>Were policies visible in the working set?</li>
<li>Did promotion decisions follow rules?</li>
<li>Did cost remain within expected bounds?</li>
<li>Would this run behave the same way tomorrow?</li>
</ul><p>If you cannot answer those questions deterministically, you are not evaluating autonomy. <strong>You are sampling outputs.</strong></p><h3 id="deterministic-replay-is-the-baseline">Deterministic Replay Is the Baseline</h3><p>Evaluation begins with <em>replay</em>.</p><p>Every run must capture:</p><ul><li>Model version</li>
<li>Policy version</li>
<li>Prefix hash</li>
<li>Retrieval artifact IDs</li>
<li>Tool contract versions</li>
<li>Promotion decisions</li>
<li>Token counts</li>
<li>Cost breakdown by surface</li>
</ul><p>Replay fixes those variables and re-executes the run.</p><p>If output changes under identical inputs, you have drift.</p><p>Drift can originate from:</p><ul><li>Model upgrades</li>
<li>Retrieval index mutation</li>
<li>Promotion contamination</li>
<li>Prefix instability</li>
<li>Lifecycle state changes</li>
</ul><p>Replay is not debugging.<br />Replay is architectural validation.</p><p><strong>Without replay, optimization becomes guesswork.</strong></p><h4 id="example-replay-validation-view-derived-from-the-trace-envelope"><strong>Example replay validation view</strong> (derived from the trace envelope):</h4><div class="code-block-wrapper"><div class="code-block-content"><code class="!whitespace-pre language-json">1{2 "run_id": "run_01J...",3 "model": {4 "version": "claude-sonnet-4-6"5 },6 "prefix": {7 "version": "constitution_v12 + tenant_policy_v8",8 "hash": "sha256:..."9 },10 "retrieval": {11 "artifact_ids": ["mem_88", "mem_104"]12 },13 "tool_contracts": {14 "refund_api": "v3.1",15 "crm_lookup": "v2.4"16 },17 "input_token_breakdown": {18 "global": 480,19 "tenant": 720,20 "user": 610,21 "retrieval": 1150,22 "session": 84023 },24 "output_tokens": 410,25 "promotion_count": 1,26 "estimated_cost": 0.08227}</code></div></div><p>Replay without artifact IDs becomes probabilistic.</p><p>Replay without versioned prefix becomes inaccurate.</p><p>Replay without tool contract versions becomes misleading.</p><p><strong>Replay is only deterministic if the system treats versioning as a first-class discipline.</strong></p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="replay-infrastructure-is-becoming-a-platform-expectation">Replay Infrastructure Is Becoming a Platform Expectation</h3><p><strong>Pattern:</strong> Trace envelopes and versioned artifacts are becoming standard replay primitives.</p><ul><li><a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" target="_blank" rel="noopener">Anthropic's evals guidance</a> defines "transcript/trace/trajectory" as the canonical unit of evaluation.</li>
<li><a href="https://platform.openai.com/docs/api-reference/responses" target="_blank" rel="noopener">OpenAI's Responses API</a> provides durable response IDs, <code>previous_response_id</code> threading, metadata, and detailed usage including cached tokens.</li>
<li><a href="https://openai.github.io/openai-agents-python/ref/usage/" target="_blank" rel="noopener">OpenAI Agents SDK</a> preserves per-request usage breakdowns (<code>request_usage_entries</code>), enabling measurable cost surfaces per run.</li>
</ul><p>Replay is shifting from ad hoc reconstruction to platform-supported infrastructure.</p></div><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="evaluation-without-replay-was-guesswork">Evaluation Without Replay Was Guesswork</h3><p>Before full trace envelopes, evaluation relied on spot-checking outputs, comparing example runs, and manually reconstructing context. It was slow, subjective, and blind to subtle cost regressions.</p><p>Without versioned prefixes, artifact IDs, layer-level token breakdowns, and tool contract versions, we could not deterministically explain why behavior changed.</p><p>We extended trace fidelity to include these elements. Replay became deterministic. Evaluation became measurable. Upgrade decisions became evidence-based instead of intuition-driven.</p><p>If you cannot decompose what changed between two runs, evaluation is opinion. Trace fidelity turns it into measurement.</p></div><h3 id="model-upgrades-are-context-stress-tests">Model Upgrades Are Context Stress Tests</h3><p>Frontier models evolve.<br />Tokenization changes.<br />Tool calling behavior shifts.<br />Summarization becomes more aggressive.<br />Safety layers adjust.</p><p>A model upgrade is not just a capability change.<br /><strong>It is a context stress test.</strong></p><p>Under a new model:</p><ul><li>Does retrieval selection change?</li>
<li>Does semantic stabilization behave differently?</li>
<li>Does promotion frequency increase?</li>
<li>Do policies get crowded out?</li>
<li>Does token usage shift by layer?</li>
</ul><p>Evaluation harnesses must compare:</p><ul><li>Old model + fixed context</li>
<li>New model + identical context</li>
</ul><p>If behavior shifts materially, you have learned something about your context design.</p><p><strong>Stronger models do not fix weak context discipline. They amplify it.</strong></p><h3 id="promotion-drift-is-an-evaluation-surface">Promotion Drift Is an Evaluation Surface</h3><p>Evaluation must track:</p><ul><li>Promotion rate by scope</li>
<li>Promotion type distribution</li>
<li>Provisional → active transitions</li>
<li>Quarantine frequency</li>
<li>Tombstone rate</li>
<li>Memory growth curve</li>
</ul><p>A rising tenant-scope promotion rate is not a feature win.</p><p><strong>It is an economic and governance signal.</strong></p><p>Promotion drift compounds:</p><ul><li>Retrieval cardinality</li>
<li>Token pressure</li>
<li>Storage cost</li>
<li>Cross-scope contamination risk</li>
</ul><p>Evaluation is not just output quality.<br /><strong>It is structural hygiene.</strong></p><h3 id="cost-as-a-first-class-evaluation-metric">Cost as a First-Class Evaluation Metric</h3><p>Every run should emit:</p><ul><li>Inference tokens</li>
<li>Retrieval volume</li>
<li>Tool invocation count</li>
<li>Persistence writes</li>
<li>Derived index updates</li>
</ul><p>Cost should be evaluated against:</p><ul><li>Task type</li>
<li>Layer budget allocation</li>
<li>Promotion decision</li>
<li>Model version</li>
<li>Prefix hash</li>
</ul><p>If cost shifts without intentional architectural change, context drift is occurring.</p><p>Evaluation must detect this early.</p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="cost-observability-is-becoming-a-standard-api-surface">Cost Observability Is Becoming a Standard API Surface</h3><p><strong>Pattern:</strong> Per-run cost attribution is emerging as a platform primitive.</p><ul><li><a href="https://openai.github.io/openai-agents-python/ref/usage/" target="_blank" rel="noopener">OpenAI Agents SDK</a> exposes per-request usage breakdowns for fine-grained drift detection.</li>
<li><a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/context-cache/context-cache-overview" target="_blank" rel="noopener">Google Cloud Vertex AI</a> reports cached token counts in response metadata, making cache economics visible.</li>
<li><a href="https://docs.github.com/en/copilot/get-started/plans" target="_blank" rel="noopener">GitHub Copilot</a> packages coding agent capabilities into enterprise plans with centralized audit logs and usage telemetry exports.</li>
</ul><p>Production agents are expected to be observable and cost-accountable at org scope.</p></div><h3 id="confidence-and-context-sufficiency">Confidence and Context Sufficiency</h3><p>Evaluation is incomplete without measuring sufficiency.</p><p>When progressive disclosure is used, you should measure:</p><ul><li>How often additional retrieval was required</li>
<li>Confidence thresholds triggering expansion</li>
<li>Cost delta between minimal vs expanded context</li>
</ul><p>If confidence thresholds drift upward over time, context may be degrading.</p><p>Evaluation is about understanding when the system <em>needs more context</em> and when it is over-consuming it.</p><h3 id="from-runs-to-decision-graphs">From Runs to Decision Graphs</h3><p>Once trace envelopes are disciplined, something more powerful emerges.</p><p>Every run captures:</p><ul><li>What was visible</li>
<li>What influenced action</li>
<li>Which policies applied</li>
<li>What was written</li>
<li>What cost was incurred</li>
</ul><p><strong>Over time, this becomes a structured corpus of decisions.</strong></p><p>You can analyze:</p><ul><li>Policy application frequency</li>
<li>Precedent influence</li>
<li>Cost distribution by task type</li>
<li>Drift across model versions</li>
<li>Promotion patterns by scope</li>
</ul><p>That corpus is the foundation of decision graphs.</p><p>Not theoretical graphs.</p><p><strong>Replayable, auditable, cost-attributed decision networks.</strong></p><p>But they only emerge if evaluation is embedded from the beginning.</p><h3 id="replay-is-not-just-for-model-upgrades">Replay Is Not Just for Model Upgrades</h3><p>Replay supports:</p><ul><li>Model upgrade validation</li>
<li>Policy changes</li>
<li>Retrieval tuning</li>
<li>Prompt modifications</li>
<li>Tool migration</li>
<li>Cost optimization experiments</li>
</ul><p>If your evaluation loop depends on synthetic examples, it will miss edge cases.</p><p><strong>Production traces are your regression corpus.</strong></p><h4 id="model-upgrade-replay">Model Upgrade Replay</h4><p>Model upgrades are the most obvious replay scenario.</p><p>Upgrade process:</p><ol><li>Freeze a representative replay corpus from production traces</li>
<li>Re-run corpus with new model version</li>
<li>Compare:
<ul><li>Outputs</li>
<li>Policy adherence</li>
<li>Token usage</li>
<li>Tool invocation patterns</li>
<li>Cost</li>
</ul></li>
</ol><p>Differences are classified:</p><ul><li>Improvement</li>
<li>Neutral</li>
<li>Regression</li>
</ul><p>Without replay, upgrade evaluation becomes anecdotal.<br /><strong>Without cost comparison, upgrade risk becomes financial.</strong></p><h4 id="policy-change-evaluation">Policy Change Evaluation</h4><p>When tenant or global policy changes:</p><ul><li>Re-run affected traces</li>
<li>Detect differences in approval decisions</li>
<li>Validate no unintended escalation of privilege</li>
<li>Validate no suppression of required actions</li>
</ul><p><strong>Policy becomes versioned infrastructure, not live mutation.</strong></p><p>Policy drift without replay is invisible.</p><h4 id="retrieval-strategy-testing">Retrieval Strategy Testing</h4><p>Changes to:</p><ul><li>Embedding model</li>
<li>Chunk size</li>
<li>Hybrid ranking weights</li>
<li>Scope filtering rules</li>
<li>Compaction rules</li>
<li>Progressive disclosure thresholds</li>
</ul><p>should be replayed across prior runs.</p><p>Key metrics:</p><ul><li>Retrieval artifact count</li>
<li>Token usage by layer</li>
<li>Hallucination rate</li>
<li>Tool invocation deltas</li>
</ul><p>Retrieval changes affect both quality and cost.</p><p>Replay reveals both.</p><p><strong>This turns retrieval tuning from intuition into measurement.</strong></p><h3 id="shadow-mode">Shadow Mode</h3><p>Replay supports offline evaluation. But mature systems also support live shadowing.</p><p>Pattern is straightforward:</p><ol><li>Production executes normally and output remains authoritative.</li>
<li>In parallel, a shadow run uses:
<ul><li>A new model version</li>
<li>A modified retrieval strategy</li>
<li>New compaction rules</li>
<li>Etc.</li>
</ul></li>
<li>Shadow outputs are logged but not surfaced to users</li>
<li>Differences are analyzed asynchronously.</li>
</ol><p>This reduces risk during:</p><ul><li>Model migrations</li>
<li>Context restructuring</li>
<li>Index rebuilds</li>
<li>Policy refactors</li>
</ul><p>It also enables support for:</p><ul><li>Controlled rollout</li>
<li>Drift detection</li>
<li>Confidence building</li>
</ul><p><strong>Shadow mode turns architectural evolution into controlled iteration.</strong></p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="shadow-mode-caught-what-staging-missed">Shadow Mode Caught What Staging Missed</h3><p>We upgraded to a newer model and passed regression tests in staging. Mechanically, everything worked.</p><p>What staging did not reflect was production memory: real tenant configurations, months of promoted episodes, and live retrieval surfaces. When we enabled the new model in shadow mode on a small slice of production traffic, subtle behavioral deviations appeared immediately. Policy language was interpreted differently, shifting tool selection and response framing.</p><p>We corrected the prompts before full rollout.</p><p>Staging validates mechanics. Shadow mode validates behavior against accumulated memory. They test different failure surfaces.</p></div><h3 id="regression-suites-from-real-traffic">Regression Suites from Real Traffic</h3><p>Synthetic test cases rarely capture:</p><ul><li>Long-tail edge cases</li>
<li>Rare entitlement combinations</li>
<li>Complex multi-step tool chains</li>
<li>High-context runs</li>
</ul><p>The strongest evaluation corpus is your own trace log:</p><ul><li>Sample representative runs across tenants and task types.</li>
<li>Strip or redact sensitive payloads if required.</li>
<li>Store structured replay fixtures.</li>
<li>Version them alongside policy and model artifacts.</li>
</ul><p>Your production history becomes your test suite.</p><p>Over time, you accumulate:</p><ul><li>Edge cases</li>
<li>Near-failures</li>
<li>Policy conflicts</li>
<li>Retrieval anomalies</li>
<li>Promotion mistakes</li>
</ul><p>Those are more valuable than curated prompts.</p><p><strong>Without real traces, evaluation remains shallow.</strong></p><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="evaluate-integrity-not-just-outputs">Evaluate Integrity, Not Just Outputs</h3><p><strong>Evaluation must validate context behavior, not only model responses.</strong></p><ul><li>Isolation, scope, promotion, and lifecycle are testable.</li>
<li>Replayability is non-optional.</li>
<li>If you cannot reconstruct it, you cannot trust it.</li>
</ul></div><br /><hr /><h2 id="part-xi-model-versioning-and-upgrade-discipline">Part XI: Model Versioning and Upgrade Discipline</h2><p>Model upgrades are not configuration changes.</p><p><strong>They are behavioral migrations.</strong></p><p>In commercial agent systems, a model upgrade can alter:</p><ul><li>Interpretation of policy language</li>
<li>Tool invocation sequencing</li>
<li>Confidence thresholds</li>
<li>Hallucination patterns</li>
<li>Token usage patterns</li>
<li>Sensitivity to ambiguity</li>
<li>Response verbosity</li>
<li>Context utilization behavior</li>
</ul><p>If model upgrades are treated casually, system behavior becomes unpredictable.</p><p><strong>Model evolution must be controlled at the architectural level.</strong></p><h3 id="version-everything-that-influences-behavior">Version Everything That Influences Behavior</h3><p>Model versioning alone is insufficient.</p><p>Behavior is a function of:</p><ul><li>Model name and version</li>
<li>Temperature and inference parameters</li>
<li>Static prefix hash</li>
<li>Policy artifact versions</li>
<li>Tool contract versions</li>
<li>Retrieval configuration version</li>
<li>Compaction strategy version</li>
</ul><p>If any of them change without trace visibility, replay fidelity degrades and regression analysis becomes impossible.</p><p><strong>Model versioning is part of the canonical contract.</strong></p><p>This makes behavioral provenance explicit.</p><p>Without it, you cannot explain deltas.</p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="versioned-behavior-contracts-are-platform-level-primitives">Versioned Behavior Contracts Are Platform-Level Primitives</h3><p><strong>Pattern:</strong> Platforms expose structured versioning for tools, models, and configuration.</p><ul><li><a href="https://platform.openai.com/docs/api-reference/responses" target="_blank" rel="noopener">OpenAI's Responses API</a> includes explicit tool configuration fields (<code>tools</code>, <code>tool_choice</code>, <code>parallel_tool_calls</code>), detailed token usage with caching breakdowns, and metadata.</li>
<li><a href="https://ai.google.dev/gemini-api/docs/function-calling" target="_blank" rel="noopener">Google Gemini</a> formalizes structured tool invocation where the model returns structured parameters.</li>
<li><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching" target="_blank" rel="noopener">Anthropic's prompt caching</a> uses hash-based storage, making constitutional and policy prefix changes auditable.</li>
</ul><p>Behavioral provenance is becoming explicit, not implicit.</p></div><h3 id="the-upgrade-sequence">The Upgrade Sequence</h3><p>A disciplined upgrade follows this sequence:</p><h4 id="1-freeze-a-replay-corpus">1. Freeze a Replay Corpus</h4><p>Select representative production traces that include:</p><ul><li>High-context runs</li>
<li>Multi-step tool chains</li>
<li>Policy-sensitive flows</li>
<li>Edge-case approvals</li>
</ul><p>Lock the artifact IDs and prefix versions. These runs become your regression suite.</p><h4 id="2-deterministic-replay">2. Deterministic Replay</h4><p>Run the corpus under:</p><ul><li>Old model</li>
<li>New model</li>
</ul><p>Hold all other variables constant.</p><p>Compare:</p><ul><li>Output correctness</li>
<li>Policy adherence</li>
<li>Token usage</li>
<li>Tool invocation patterns</li>
<li>Cost</li>
</ul><h4 id="3-shadow-production">3. Shadow Production</h4><p>Deploy new model in shadow mode.</p><ul><li>Run in parallel</li>
<li>Record outputs</li>
<li>Do not affect user-visible behavior</li>
</ul><p>Track:</p><ul><li>Output divergence</li>
<li>Policy deviations</li>
<li>Token deltas</li>
<li>Latency shifts</li>
</ul><p>Replay validates determinism. Shadow validates live distribution behavior.</p><h4 id="4-progressive-rollout">4. Progressive Rollout</h4><p>Gradually increase traffic percentage.</p><p>Monitor:</p><ul><li>Drift signals</li>
<li>Cost per run</li>
<li>Tool call volume</li>
<li>Promotion rate</li>
</ul><p>Roll back immediately if invariants break.</p><h4 id="5-rollback-readiness">5. Rollback Readiness</h4><p>Rollback must be:</p><ul><li>Instant</li>
<li>Deterministic</li>
<li>Stateless</li>
</ul><p>If rollback requires schema migration, reindexing, or cache rebuilding, you have coupled layers incorrectly.</p><p>Architecture must remain stable while models evolve.</p><p><strong>Versioning without rollback is theater.</strong></p><h3 id="context-window-changes-are-architectural-events">Context Window Changes Are Architectural Events</h3><p>Larger context windows tempt teams to relax discipline.</p><p>Common failure pattern:</p><ul><li>“The window is bigger now.”</li>
<li>Retrieval breadth increases.</li>
<li>Session history persists longer.</li>
<li>Promotion discipline loosens.</li>
</ul><p><strong>Short term:</strong> outputs improve.<br /><strong>Medium term:</strong> token cost explodes.<br /><strong>Long term:</strong> drift becomes embedded.</p><p>A larger window does not eliminate:</p><ul><li>The need for compaction</li>
<li>The need for scope boundaries</li>
<li>The need for promotion gating</li>
<li>The need for evaluation</li>
</ul><p>It magnifies the consequences of ignoring them.</p><p>Window size is a constraint multiplier.</p><p><strong>Budgets are architectural, not model-driven.</strong></p><h3 id="separation-of-concerns-across-layers">Separation of Concerns Across Layers</h3><p>Model upgrades should not require:</p><ul><li>Rewriting canonical storage</li>
<li>Reindexing entire memory store</li>
<li>Altering encryption boundaries</li>
<li>Modifying promotion semantics</li>
</ul><p>If they do, the architecture is over-coupled.</p><p>Layer separation ensures:</p><ul><li>Canonical store remains stable</li>
<li>Derived projections can be rebuilt</li>
<li>Retrieval configuration can evolve independently</li>
<li>Compaction strategy can be tuned without rewriting history</li>
</ul><p>Models change. Architecture must remain durable.</p><p><strong>If your system entangles model behavior with memory writes or policy evaluation, upgrades will feel dangerous.</strong></p><p>If layers are cleanly defined, upgrades become controlled experiments.</p><h3 id="upgrade-without-replay-is-operational-risk">Upgrade Without Replay Is Operational Risk</h3><p>If you upgrade a model without replay:</p><ul><li>You cannot quantify regression</li>
<li>You cannot quantify cost delta</li>
<li>You cannot detect policy drift</li>
<li>You cannot isolate behavior change to the model</li>
</ul><p><strong>You are trusting a black box to remain aligned.</strong></p><p>In enterprise systems, that is unacceptable.</p><div class="admonition learning"><p class="admonition-title flex items-center"> What We Learned</p><h3 id="model-upgrade-without-full-trace-was-fragile">Model Upgrade Without Full Trace Was Fragile</h3><p>In early iterations, we captured model version and final output. We did not capture prefix version, artifact IDs, layer token breakdowns, or tool contract versions.</p><p>When behavior changed after a model upgrade, we could not determine whether the cause was retrieval, policy visibility, compaction, or the model itself.</p><p>We extended trace envelopes to capture full execution context. Upgrade analysis became surgical instead of speculative.</p><p>If you cannot isolate what changed, every model migration is a bet. Trace fidelity turns it into a controlled experiment.</p></div><h3 id="architecture-must-outlive-models">Architecture Must Outlive Models</h3><p>Frontier models are constantly evolving.<br />Your architecture must survive for years.</p><p><strong>Design rule:</strong><br /><em>Models are replaceable components.</em><br /><em>Context engineering is the durable asset.</em></p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="architecture-is-outliving-individual-api-generations">Architecture Is Outliving Individual API Generations</h3><p><strong>Pattern:</strong> Systems that decouple canonical state from model-specific behavior survive API transitions.</p><ul><li><a href="https://developers.openai.com/api/docs/guides/migrate-to-responses/" target="_blank" rel="noopener">OpenAI's migration</a> from Assistants to the Responses API, with a published sunset date (August 26, 2026), demonstrates why architecture must remain stable while models evolve.</li>
<li><a href="https://vercel.com/docs/agent" target="_blank" rel="noopener">Vercel Agent</a> is converging on "skills" and MCP-like tooling ecosystems with machine-readable docs designed for agent consumption.</li>
</ul><p>Models are replaceable components. Context architecture is the durable asset.</p></div><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="models-are-mutable">Models Are Mutable</h3><p><strong>Model upgrades must be treated as behavioral migrations, not routine swaps.</strong></p><ul><li>Version everything that influences behavior.</li>
<li>Replay and shadow before exposure.</li>
<li>Rollback must be immediate while architecture remains stable.</li>
</ul></div><br /><hr /><h2 id="part-xii-from-rag-to-a-context-engine">Part XII: From RAG to a Context Engine</h2><p>Many teams start with RAG.</p><p><em>Retrieve</em>. <em>Append</em>. <em>Generate</em>. <em>Repeat</em>.</p><p>For prototypes, this works. For commercial systems, it <em>does not</em>.</p><p>RAG solves recall. It does not solve <em>isolation</em>, <em>replay</em>, <em>promotion discipline</em>, <em>retention enforcement</em>, <em>lifecycle management</em>, <em>cost predictability</em>, or <em>upgrade safety</em>.</p><p>RAG is a retrieval pattern.</p><p><strong>A context engine is an <em>architectural system</em>.</strong></p><h3 id="why-basic-rag-is-not-enough">Why Basic RAG Is Not Enough</h3><p>Basic RAG assumes:</p><ul><li>Retrieval is stateless</li>
<li>Memory is external</li>
<li>The model is the primary reasoning surface</li>
<li>History can be appended safely</li>
</ul><p><strong>Commercial agent systems violate all of these assumptions.</strong></p><p>They require:</p><ul><li>Long-lived memory</li>
<li>Scoped isolation</li>
<li>Cross-tenant guarantees</li>
<li>Durable decisions</li>
<li>Cost accounting</li>
<li>Evaluation loops</li>
</ul><p>If you build on naive RAG, retrieval becomes accidental truth, transcripts become memory, promotion becomes implicit, drift becomes structural, and cost becomes unpredictable.</p><p><strong>RAG is a building block. It is not the architecture.</strong></p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="rag-alone-has-proven-insufficient">RAG Alone Has Proven Insufficient</h3><p><strong>Pattern:</strong> Every major platform has added lifecycle, gating, and scoping layers on top of basic retrieval.</p><ul><li><a href="https://sourcegraph.com/blog/how-cody-understands-your-codebase" target="_blank" rel="noopener">Sourcegraph Cody</a> documented moving away from embeddings-only retrieval back in 2024, partly because sending code to a third party created operational complexity, echoing that derived layers become toxic when they silently become the system of record.</li>
<li>Every platform reviewed, from <a href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener">Claude Code</a> to <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-types.html" target="_blank" rel="noopener">Bedrock AgentCore</a> to <a href="https://github.com/letta-ai/ai-memory-sdk" target="_blank" rel="noopener">Letta</a>, has added lifecycle, gating, and scoping layers beyond retrieval.</li>
</ul><p>Retrieval is a building block. It is not the architecture.</p></div><h3 id="what-a-commercial-context-engine-looks-like">What a Commercial Context Engine Looks Like</h3><p>A commercial context engine has:</p><ul><li><strong>Typed memory,</strong> not blobs</li>
<li><strong>Scoped storage,</strong> not implicit visibility</li>
<li><strong>Canonical event log,</strong> not accumulated transcript fragments</li>
<li><strong>Structured memory store,</strong> not unbounded conversation residue</li>
<li><strong>Promotion gates,</strong> not automatic persistence</li>
<li><strong>Hardening lifecycle,</strong> not synchronous promotion shortcuts</li>
<li><strong>Lifecycle garbage collection,</strong> not window overflow</li>
<li><strong>Hybrid retrieval,</strong> not vector-only recall</li>
<li><strong>Token budgets by layer,</strong> not "fit what you can"</li>
<li><strong>Privacy as routing architecture,</strong> not configuration flags</li>
<li><strong>Trace envelopes,</strong> not black-box runs</li>
<li><strong>Encryption boundaries,</strong> not shared trust assumptions</li>
<li><strong>Structured trace envelopes,</strong> not free-form logs</li>
<li><strong>Deterministic replay,</strong> not probabilistic reconstruction</li>
<li><strong>Versioned artifacts,</strong> not silent drift</li>
</ul><p>It assembles context deliberately. It reconstructs context per run. It promotes intentionally. It enforces isolation structurally. It measures cost explicitly. It evolves through replay.</p><div class="admonition ecosystem"><p class="admonition-title flex items-center"> Observed Ecosystem Convergence</p><h3 id="the-context-engine-pattern-is-the-common-destination">The Context Engine Pattern Is the Common Destination</h3><p><strong>Pattern:</strong> Independent systems converge on the same structural invariants once they operate agents in production.</p><ul><li>Across <a href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener">Claude Code</a>, <a href="https://cursor.com/security" target="_blank" rel="noopener">Cursor</a>, <a href="https://github.com/letta-ai/ai-memory-sdk" target="_blank" rel="noopener">Letta</a>, <a href="https://github.com/openclaw/openclaw" target="_blank" rel="noopener">OpenClaw</a>, <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-types.html" target="_blank" rel="noopener">Amazon Bedrock AgentCore</a>, <a href="https://opencode.ai/docs/agents/" target="_blank" rel="noopener">OpenCode</a>, <a href="https://docs.warp.dev/support-and-community/privacy-and-security/privacy" target="_blank" rel="noopener">Warp</a>, <a href="https://docs.windsurf.com/windsurf/cascade/agents-md" target="_blank" rel="noopener">Windsurf</a>, <a href="https://support.bolt.new/building/using-bolt/agents" target="_blank" rel="noopener">Bolt</a>, and <a href="https://docs.lovable.dev/features/knowledge" target="_blank" rel="noopener">Lovable</a>, the convergence is structural: multi-tenant boundaries, durable memory, tool orchestration, retention rules, replayable failures, and predictable economics.</li>
</ul><p>The interfaces differ, but the invariants do not.</p></div><div class="admonition principle"><p class="admonition-title flex items-center"> Architectural Principle</p><h3 id="the-four-constraints-of-context">The Four Constraints of Context</h3><p><strong>Context must be constrained, versioned, scoped, and observable.</strong></p><ul><li><strong>Constrained</strong> by token budgets, compaction rules, and retrieval limits</li>
<li><strong>Versioned</strong> by policy artifacts, trace metadata, and constitution changes</li>
<li><strong>Scoped</strong> by tenant boundaries, user isolation, and memory type</li>
<li><strong>Observable</strong> through trace envelopes, replay, cost accounting, and promotion logs</li>
</ul><p>When those properties exist, drift becomes diagnosable, isolation becomes provable, retention becomes enforceable, and cost becomes bounded.</p><p>Without them, cost, drift, and isolation become outcomes you discover instead of variables you control.</p></div><br /><hr /><h2 id="conclusion-engineering-context">Conclusion: Engineering Context</h2><h3 id="ecosystem-convergence">Ecosystem Convergence</h3><p>Over the past year, a clear pattern has emerged. Teams building IDE agents, coding copilots, orchestration layers, and model APIs, often in isolation and under very different product pressures, have arrived at strikingly similar system designs.</p><p>Throughout this guide, we've cited specific architectural signals from these systems. The convergence is not anecdotal. It spans memory design, isolation enforcement, trace capture, retrieval strategy, cost accounting, and promotion discipline.</p><h4 id="where-the-signals-come-from"><strong>Where the Signals Come From</strong></h4><p></p><table><thead><tr><th class="c1">System</th>
<th class="c1">Primary Convergence Signals</th>
</tr></thead><tbody><tr><td class="c2">Claude Code (Anthropic)</td>
<td class="c2"><a href="https://code.claude.com/docs/en/memory" target="_blank" rel="noopener">Layered scoped memory files</a>, <a href="https://code.claude.com/docs/en/subagents" target="_blank" rel="noopener">subagent isolation</a>, <a href="https://code.claude.com/docs/en/monitoring" target="_blank" rel="noopener">OpenTelemetry trace export</a>, <a href="https://docs.anthropic.com/en/docs/build-with-claude/tool-use" target="_blank" rel="noopener">structured tool use</a></td>
</tr><tr><td class="c2">Cursor</td>
<td class="c2"><a href="https://docs.cursor.sh/context" target="_blank" rel="noopener">Explicit context inclusion</a>, <a href="https://docs.cursor.sh/features/codebase-indexing" target="_blank" rel="noopener">codebase indexing separated from live reasoning</a>, privacy-mode routing via separate replicas, Merkle-tree content proofs for index isolation</td>
</tr><tr><td class="c2">Letta</td>
<td class="c2"><a href="https://docs.letta.com/memory" target="_blank" rel="noopener">Typed memory blocks</a> (episodic, semantic, policy), explicit promotion, asynchronous <a href="https://github.com/letta-ai/letta#memory" target="_blank" rel="noopener">"subconscious" enrichment</a></td>
</tr><tr><td class="c2">OpenClaw</td>
<td class="c2"><a href="https://github.com/openclawai/openclaw" target="_blank" rel="noopener">Canonical execution logs separated from derived projections</a>, <a href="https://github.com/openclawai/openclaw/tree/main/docs" target="_blank" rel="noopener">replay-oriented architecture</a></td>
</tr><tr><td class="c2">AWS AgentCore</td>
<td class="c2"><a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html" target="_blank" rel="noopener">Short-term vs long-term memory split</a>, <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents-tools.html" target="_blank" rel="noopener">typed tool contracts</a>, <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents-observability.html" target="_blank" rel="noopener">structured execution traces</a>, token vault for credential containment</td>
</tr><tr><td class="c2">Warp</td>
<td class="c2"><a href="https://docs.warp.dev/features/ai" target="_blank" rel="noopener">Typed durable artifacts</a> (Workflows, Notebooks, Rules, etc.), <a href="https://docs.warp.dev/features/blocks" target="_blank" rel="noopener">block-scoped execution model</a>, unconditional secret redaction, telemetry-disabled-by-default posture</td>
</tr><tr><td class="c2">Windsurf</td>
<td class="c2"><a href="https://docs.windsurf.com/" target="_blank" rel="noopener">Location-based memory scoping</a> via file placement, <a href="https://docs.codeium.com/" target="_blank" rel="noopener">multi-tier memory lifecycle</a></td>
</tr><tr><td class="c2">Bolt &amp; Lovable</td>
<td class="c2">Ephemeral chat vs <a href="https://docs.bolt.new/" target="_blank" rel="noopener">durable "Project Knowledge"</a>, plan-then-execute gating, <a href="https://docs.lovable.dev/" target="_blank" rel="noopener">persistent custom knowledge</a> applied across future edits</td>
</tr><tr><td class="c2">Major Model APIs</td>
<td class="c2">Anthropic <a href="https://docs.anthropic.com/en/docs/build-with-claude/tool-use" target="_blank" rel="noopener">prompt caching with hash-based storage</a>, OpenAI <a href="https://platform.openai.com/docs/guides/function-calling" target="_blank" rel="noopener">function calling schemas</a> and <a href="https://platform.openai.com/docs/guides/structured-outputs" target="_blank" rel="noopener">structured outputs</a>, AWS Bedrock <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/monitoring.html" target="_blank" rel="noopener">model invocation logging and guardrails</a></td>
</tr></tbody></table><h3 id="constraint-not-coincidence">Constraint, Not Coincidence</h3><p>Across these systems, the same invariants appear:</p><ul><li>Memory is layered, scoped, and explicitly governed</li>
<li>Durable memory requires deliberate promotion</li>
<li>Context is assembled per run, not carried forward as a growing window</li>
<li>Derived layers are projections rebuilt from canonical truth</li>
<li>Retrieval combines structured and semantic signals</li>
<li>Tool use is typed and contract-bound</li>
<li>Isolation is architectural, not optional</li>
<li>Replay and traceability are mandatory</li>
<li>Async processing moves heavy work off the critical path</li>
<li>Cost and token budgets are explicit control surfaces</li>
</ul><p>These systems were built independently. They landed on the same patterns because production agents <em>force these constraints</em>.</p><p><strong>Context is no longer a prompt engineering trick. It is infrastructure.</strong></p><p>You do not have to adopt any specific framework. But if you ignore these structural constraints, you will rediscover them through drift, cost escalation, replay failures, privacy incidents, promotion poisoning, and upgrade regressions.</p><p><strong>Convergence is a signal. And one you should listen to.</strong></p><div class="admonition lesson"><p class="admonition-title flex items-center"> The more you know</p><h3 id="why-there-is-no-simple-maturity-model">Why There Is No Simple Maturity Model</h3><p>It is tempting to reduce commercial agent systems to a clean ladder.</p><p><strong>Level 1:</strong> chatbot + vector DB<br /><strong>Level 2:</strong> scoped memory<br /><strong>Level 3:</strong> canonical logs<br /><strong>Level 4:</strong> evaluation harnesses and replay<br /><strong>Level 5:</strong> privacy routing and cost instrumentation</p><p>In practice, maturity is multi-dimensional.</p><p>A system may have strict isolation but weak promotion discipline.<br />It may version models correctly but lack replay fidelity.<br />It may instrument cost but fail to control lifecycle drift.<br />It may run evaluation loops but persist unverified memory.</p><p>Isolation, promotion, lifecycle hardening, replay, evaluation, cost instrumentation, and privacy architecture evolve independently.</p><p>The parts described above define the axes.</p><p>Where your system sits along each axis determines its maturity.</p></div><h3 id="the-architecture-that-survives">The Architecture That Survives</h3><p>A context engine exists to enforce three structural invariants:</p><ol><li>
<p><strong>Structural Isolation</strong><br />Tenant boundaries are enforced in the data plane, not implied in prompts. Scope, partitioning, encryption domains, and routing make cross-tenant contamination structurally impossible, not statistically unlikely.</p>
<p><em>Isolation is not a guardrail.<br />It is a boundary.</em></p>
</li>
<li>
<p><strong>Deterministic Replay</strong><br />Every decision must be reconstructible.<br />Versioned prefixes, artifact IDs, tool contracts, and trace envelopes turn autonomy from guesswork into debuggable infrastructure.</p>
<p><em>If you cannot replay a run, you cannot trust it.<br />If you cannot trust it, you cannot evolve it.</em></p>
</li>
<li>
<p><strong>Economic Predictability</strong><br />Cost must be bounded by architecture.<br />Layered token budgets, promotion discipline, constrained retrieval, and per-run cost attribution prevent context from compounding silently.</p>
<p><em>If cost emerges from accumulation instead of design, scale becomes drift.</em></p>
</li>
</ol><p>If any of these are optional, autonomy will eventually degrade.</p><p>Not suddenly. Not catastrophically. Gradually.</p><p>Guardrails fade. Costs creep. Memory drifts. Isolation weakens.</p><p>The systems that survive production pressure are <strong>NOT</strong> the ones with the best prompts.</p><p>They are the ones where <strong>context is engineered as infrastructure</strong>.</p><p>And infrastructure either holds, or it doesn’t.</p><h3 id="a-note-on-adoption">A Note on Adoption</h3><p>This guide describes the full architecture that production pressure eventually demands.</p><p>No team should attempt to implement <em>all of it at once</em>.</p><p>The patterns here are not a checklist. They are a reference architecture. Your system's constraints determine which layers matter first.</p><p>If you are not yet multi-tenant, isolation can be deferred. If you are not under compliance or audit pressure, the full hardening pipeline and lifecycle state machine can wait. If your agent runs are short-lived and stateless, promotion gating matters less than retrieval discipline. If cost is not yet a problem, trace envelopes and per-run attribution can follow later.</p><p>Start with the constraints your use case actually imposes:</p><ul><li>If you handle enterprise data across tenants, start with isolation and scoped memory.</li>
<li>If you need to debug behavioral drift, start with trace envelopes and replay.</li>
<li>If cost is compounding, start with layer budgets and promotion discipline.</li>
<li>If you are building durable memory, start with truth vs acceleration separation.</li>
</ul><p><strong>The full architecture is the destination. Your roadmap determines the order of arrival.</strong></p><p>The ecosystem is moving fast. Managed memory services, provider-side context management, turnkey trace infrastructure, and retrieval-as-a-service offerings are shipping regularly. Many of the layers described in this guide are increasingly buy-not-build decisions. The architectural principles remain the same regardless of whether you implement them yourself or adopt managed services that enforce them on your behalf. What matters is that the invariants hold, regardless of who builds the plumbing.</p><p>Build what your constraints require today. Adopt what the ecosystem provides tomorrow. But know where the architecture converges, so you are building <em>toward</em> it rather than away from it.</p><h3 id="final-principle">Final Principle</h3><p>Context is no longer just what you pass to a model.</p><p>It is your safety boundary.<br />Your isolation boundary.<br />Your cost boundary.<br />Your audit trail.<br /><strong>And your competitive moat.</strong></p><p>Frontier models are increasingly interchangeable. APIs converge. Capabilities normalize. Pricing compresses.</p><p>What does not commoditize is how context is assembled, constrained, promoted, retained, replayed, and priced. That discipline determines safety, reliability, latency, auditability, and margin. Two teams can call the same model and produce radically different systems depending on their memory architecture and context control surfaces.</p><p>In commercial agent systems, model choice is leverage.<br /><strong>Context engineering is the moat.</strong></p><p>Context is not an implementation detail. It is infrastructure. Engineer it accordingly.</p><p>Hope this helps, </p><hr /><p>Tags: <a href="https://www.jeremydaly.com/tag/multi-tenant" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#multi-tenant</a><a href="https://www.jeremydaly.com/tag/agents" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#agents</a><a href="https://www.jeremydaly.com/tag/compliance" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#compliance</a></p>]]></description>
      <link>https://www.jeremydaly.com/context-engineering-for-commercial-agent-systems/</link>
      <guid>https://www.jeremydaly.com/context-engineering-for-commercial-agent-systems/</guid>
      <pubDate>Sun, 22 Feb 2026 01:00:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Context Is Now a First-Class Architectural Concern]]></title>
      <description><![CDATA[<p>I heard the phrase “context is now a first-class architectural concern” on an episode of <a href="https://www.youtube.com/watch?v=HRTLoT-4A6Y" target="_blank" rel="noopener">Serverless Craic</a>, and it stuck with me.</p><p>For years, cloud architecture had a convenient property: cost followed infrastructure.</p><p>If you knew what you deployed and where it ran, you could reason about cost after the fact. Instances, volumes, and managed services mapped cleanly to something you could point at, measure, and assign responsibility for. Tagging, accounts, and environments worked because the system itself was stable.</p><p>AI breaks that assumption.</p><p>Not because it is inherently more expensive, but because cost no longer lives in infrastructure. It lives in behavior.</p><p>Token usage, prompt construction, model choice, tool selection, retry behavior, and agent recursion now dominate the bill. None of those map cleanly to a server, an account, or a resource tag. The unit of work has changed, and most architectures have not caught up yet.</p><p>This is why AI cost problems keep showing up in finance dashboards even though their causes live entirely in architecture.</p><h2>The Unit of Cost Has Changed</h2><p>Traditional cloud systems assume a stable mapping between work and infrastructure. AI dissolves that assumption.</p><p>Even highly abstracted systems like serverless still behave predictably once you understand the inputs. Traffic goes up, cost scales accordingly. Capacity planning may be complex, but the relationship is knowable.</p><p>AI systems scale with behavior.</p><p>Two identical user requests can produce radically different execution paths depending on context, model choice, prior memory, or an agent’s internal reasoning loop. In that world, asking “what resource caused this cost?” is the wrong question.</p><p>The right question is “what decision caused this work to happen?”</p><p>Model choice is part of that decision stack. Token economics now matter just as much as latency or throughput. Pairing large, general-purpose models with expansive or recursive context can quietly dominate cost. Choosing the right model for the right workload is no longer an optimization detail. It is an architectural control surface.</p><p>That shift, from resources to decisions, is the root of the cost attribution problem many organizations are experiencing right now. From the outside, it looks like a financial issue. From the inside, it is an execution model mismatch.</p><h2>Context Is the New Workload</h2><p>Every AI system runs on context.</p><p>Prompts, memory, retrieved documents, intermediate reasoning steps, tool outputs, and prior conversations all get bundled together into a single execution surface. That bundle is the real workload.</p><p>Yet most systems still treat context as an implementation detail. Something to stuff into a prompt and forget about once the response comes back. That worked when prompts were small and models were cheap. It does not work anymore.</p><p>Context is not glue.<br />It is not metadata.<br />And it is not free.</p><p>Context is doing the work.</p><p>If you do not model it explicitly, you cannot control it. If you cannot control it, you cannot reason about its cost. And if you cannot reason about its cost, you cannot trust the system at scale.</p><h2>Why Context Compounds Cost</h2><p>Context does not scale linearly, and that is where things get dangerous.</p><p>Every additional token does more than increase input cost. It expands the reasoning surface, increases the likelihood of tool calls, alters branching behavior, and often lengthens outputs in ways that are hard to predict.</p><p>This is why “just add more context” is such a tempting instinct. It usually improves quality at first. But it also reshapes the entire execution path in subtle ways that compound downstream work.</p><p>What looks like a harmless prompt change can become a permanent multiplier.</p><p>From the builder’s perspective, this is an architectural concern. From finance’s perspective, it shows up later as unexplained variance. The decision, however, already happened in code.</p><h2>Prompt Construction Is an Architectural Lever</h2><p>Prompt design used to be about correctness and tone. Now it is about restraint.</p><p>What you include, what you omit, what you summarize, and what you reuse determines how much work the system is allowed to do on your behalf. A verbose system prompt is not neutral. Replaying an entire conversation history is not free. An agent that double-checks itself “just to be safe” is choosing more execution by default.</p><p>Every prompt is an architectural lever.</p><p>Cost shows up later, in margins and forecasts, but the leverage point lives squarely with builders.</p><h2>Non-Determinism Is the New Cost Multiplier</h2><p>Once cost is driven by decisions and context, predictability breaks down.</p><p>This is where traditional forecasting, alerting, and intuition start to fail. Not because teams are careless, but because the system itself is unstable by design.</p><p>Two requests that look identical at the edge can behave very differently once they hit the model. One may resolve immediately. The other may branch, retry, call tools, expand context, or spawn sub-tasks.</p><p>There is no stable unit cost per request.</p><p>From the outside, this looks like a forecasting problem. From the inside, it is an execution model problem.</p><h2>Recursive Agents and Quiet Amplification</h2><p>Agent systems introduce a failure mode that infrastructure teams are not used to reasoning about: recursive work.</p><p>Agents re-evaluate their own outputs, retry with more context, validate results by querying tools again, and sometimes spawn additional agents to help them think. Each individual step looks reasonable in isolation.</p><p>Taken together, they can create quiet amplification loops that never show up as a single obvious spike.</p><p>This is how margins erode without alarms ever firing.</p><h2>Observability Stops Too Early</h2><p>Most observability tooling answers operational questions. What ran. How long it took. Whether it failed.</p><p>AI systems require a different level of insight.</p><p>You need to know why something ran again. What context triggered a branch. What information was reused versus regenerated. That is not infrastructure tracing. It is intent tracing.</p><p>Without it, you are watching the meter spin without understanding what is turning it.</p><h2>Agents Optimize for Correctness, Not Restraint</h2><p>LLMs want to be helpful. Agents want to be right.</p><p>Left unconstrained, they will think longer, check more sources, use larger models, retry aggressively, and accumulate context defensively. That behavior is rational from the model’s perspective.</p><p>It is also financially dangerous.</p><p>Cost efficiency does not emerge naturally in agent systems. It has to be designed into them.</p><h2>Context Must Be Designed, Not Assumed</h2><p>If unpredictability is the problem, architecture is the solution. But only if context is treated as something that must be explicitly designed, constrained, and observed.</p><p>Context management is not an optimization. It is control.</p><p>Caching prevents duplicated reasoning.<br />Pruning prevents irrelevant amplification.<br />Summarization prevents historical bloat.<br />Progressive disclosure prevents front-loading cost “just in case.”</p><p>Without these mechanisms, you do not really have a system. You have an open loop that keeps spending until something external stops it.</p><h2>Architecture Has to Change</h2><p>Context needs to be treated like any other scarce resource.</p><p>That means explicit budgets, hard limits, lifecycle management, and eviction strategies. You do not let processes allocate infinite memory. You should not let agents allocate infinite context either.</p><p>Progressive disclosure becomes an economic pattern, not just a cognitive one. Instead of asking what an agent might need eventually, you ask what it needs right now and escalate only when necessary.</p><p>These are platform design decisions.</p><h2>Guardrails Are Already Emerging</h2><p>You can see this shift in modern agent systems, especially in large-scale coding agents. They do not simply run an LLM and hope for the best.</p><p>They isolate context windows.<br />They scope agent capabilities.<br />They separate planning from execution.<br />They constrain recursion depth.<br />They enforce runtime guardrails around permissions, behavior, and cost.</p><p>Not because it is elegant, but because unbounded agents are financially and operationally unsafe.</p><p>The best systems do not trust the model. They constrain it.</p><h2>The Responsibility Shift, and What Comes Next</h2><p>Once context becomes an architectural concern, ownership changes.</p><p>Cost control moves away from reporting and into design, where behavior is shaped before it ever reaches a bill. Finance can report outcomes, but they cannot prevent execution loops after the fact.</p><p>This is a systems design problem owned by architects, platform teams, and AI engineers who shape how context flows through the system.</p><p>Budgets, chargebacks, and dashboards still matter. But they operate downstream. They explain what happened. They do not influence what happens next.</p><p>Behavior is shaped at runtime.</p><p>The organizations that succeed in this next phase will not be the ones with the best spreadsheets or the most detailed monthly reports. They will be the ones that treat cost as a first-class runtime signal, something the system itself can respond to, adapt around, and constrain in real time.</p><p>This is why context discipline becomes a competitive advantage. Not because it lowers costs in the abstract, but because it enables faster iteration without fear. When you understand how context flows, when it grows, and when it is reused, you can push systems harder without worrying that a single change will quietly erase your margins.</p><p>Architects and platform teams now sit at the intersection of intelligence and economics.</p><p>The systems you design determine not just what AI can do, but how safely the business can let it run. That responsibility is new, and ignoring it isn't an option.</p><p>Context is no longer an implementation detail.<br />It is an architectural concern with real economic consequences.</p>]]></description>
      <link>https://www.jeremydaly.com/context-is-a-first-class-architectural-concern/</link>
      <guid>https://www.jeremydaly.com/context-is-a-first-class-architectural-concern/</guid>
      <pubDate>Tue, 10 Feb 2026 01:00:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[We’re Already Living in a Post-Serverless World]]></title>
      <description><![CDATA[<p>For more than a decade, “serverless” has been a debate.<br />Is it real? Is it ready? Is it too limiting? Too expensive? Too opaque?</p><p>Those questions made sense in 2014. They make less sense today.</p><p>Not because we've outgrown serverless. But because it quietly stopped being the point.</p><h2>Serverless Was Never the Destination</h2><p>Serverless was always a means to an end.</p><p>The goal wasn’t functions or managed databases or scale-to-zero pricing models. The goal was to stop spending our limited time thinking about infrastructure that didn’t meaningfully differentiate our products.</p><p>Early serverless didn’t fully deliver on that promise. It came with tradeoffs that were hard to ignore: cold starts, missing primitives, awkward workflows, and a long list of caveats that architects learned to recite by heart.</p><p>So we built compensating systems. We mixed in servers. We added provisioned databases, cache clusters, and NAT Gateways. We kept explaining, again and again, why serverless was good if you only understood its constraints.</p><p>That era is ending.</p><h2>The Paper Cuts Are Healing</h2><p>Over the last few years, and especially the last few months, the sharp edges have started to disappear. Not all at once. Not with a single announcement. But steadily.</p><p>Some of this progress is subtle, but it’s tangible. Lambda Managed Instances changed the at-scale execution model, significantly reducing the pressure to prematurely replatform or "graduate" from serverless. Durable Functions reduced the need for external orchestrators that bifurcate business logic. Aurora DSQL can now provision and scale in seconds, not minutes, removing one of the biggest friction points that previously pushed teams toward always-on, usually over-provisioned infrastructure. Even streaming, long-lived connections, and stateful patterns no longer feel like architectural outliers.</p><p>None of these changes are revolutionary on their own. But together, they’re transformative.</p><p>They don’t make serverless perfect. And none of this means the tradeoffs are gone.</p><p>Cold starts still exist. Stateful serverless is still fragmented and network-dependent. Debugging distributed, event-driven systems can be harder than debugging well-understood application stacks. And for many large or regulated organizations, the inertia of existing platforms (e.g. Kubernetes, VMs, long-lived services) hasn’t magically disappeared. In plenty of environments, serverless is still a conscious choice, debated and defended. That skepticism isn’t wrong. It reflects where many teams actually are today, not where the marketing slide says they should be.</p><p>But for many of us, these improvements make it <em>reliable enough</em> <em>to fade into the background</em>.</p><h2>When the Default Disappears</h2><p>Here’s the strange part: as serverless finally starts to deliver on its original promise, we’re talking about it <em>less</em>.</p><p>That’s not a failure. It’s a signal.</p><p>The most successful platforms fade into the background. We don’t debate TCP/IP. We rarely argue about HTTP servers. We don’t ask whether managed storage is “real infrastructure.”</p><p>Serverless is heading in the same direction. It’s becoming assumed by startups, greenfield projects, and cloud-native SaaS.</p><p>And once something is assumed, we stop naming it.</p><h2>The Shift Up the Stack</h2><p>At the same time, the center of gravity in software is moving fast. Really fast.</p><p>AI-driven systems, agentic workflows, real-time data pipelines, and adaptive products don’t always map cleanly to static infrastructure models. They demand flexibility. They demand experimentation. They demand the ability to change direction without rewriting the foundation every time.</p><p>That’s where serverless stops being a category and starts being table stakes.</p><p>Not because every workload runs on functions. But because the expectations around infrastructure have changed.</p><p>Provisioning speed matters.<br />Operational drag matters.<br />Reversibility matters.</p><h2>Post-Serverless Doesn’t Mean “After”</h2><p>A “post-serverless world” doesn’t mean serverless is over.</p><p>It means we’ve internalized its lessons.</p><p>We’ve learned that:</p><ul><li>Infrastructure should adapt to reality, not the other way around</li>
<li>Paying for idle capacity is usually a smell</li>
<li>Most systems benefit from starting small and growing into complexity</li>
<li>The fastest teams are the ones with the fewest irreversible decisions</li>
</ul><p>Those ideas don’t belong to a product category anymore. They belong to how modern systems are built.</p><h2>What Comes Next</h2><p>The next shift isn’t about <em>which</em> infrastructure you choose.<br />It’s about <strong>who (or what) does the choosing</strong>.</p><p>We’re already seeing the early signals. Adaptive infrastructure that responds to load and behavior. Self-provisioning runtimes that spin up just enough capability at the right moment. Infrastructure <em>from</em> Code models that describe intent instead of topology. Vercel recently announced their vision of <em>self-driving infrastructure</em>, systems that automatically optimize themselves based on observed behavior.</p><p>These aren’t isolated ideas. They’re all pointing in the same direction.</p><p>AI infrastructure accelerates this transition. Non-deterministic workloads don’t just scale differently, they behave differently. They force systems to observe themselves, reason about tradeoffs in real time, and continuously rebalance cost, performance, and correctness. Static infrastructure can’t keep up with that pace.</p><p>The logical conclusion isn’t just infrastructure that configures itself. It’s infrastructure that understands why it exists. Systems that infer intent, observe outcomes, and adapt continuously. All without requiring humans to pre-decide capacity, execution models, or even which services should be involved. At that point, infrastructure becomes a decision engine, not a deployment artifact.</p><p>That’s the real endgame. Not self-driving in the sense of automation alone, but autonomous in the sense of awareness and adaptation.</p><p>In that world, choosing infrastructure looks a lot like choosing a compiler today. Important, for sure, but rarely a daily concern.</p><p>That’s the <em>autonomous cloud</em>. And it doesn’t arrive in a single release or rebrand. It emerges gradually, as layers of decision-making move from humans to software. The transition will be uneven. Some domains will resist it longer. Humans will remain in the loop, increasingly focused on intent, oversight, and constraints rather than execution.</p><p>The momentum is already there. Capital, talent, and attention are flowing toward systems that can adapt faster than humans can predict. Not because anyone declared it so, but because the economics and complexity leave little alternative.</p><p>In that sense, we’re already living in a post-serverless world.</p><p>Not because serverless won.<br />But because it stopped asking humans to guess the future.</p>]]></description>
      <link>https://www.jeremydaly.com/post-serverless-world/</link>
      <guid>https://www.jeremydaly.com/post-serverless-world/</guid>
      <pubDate>Tue, 16 Dec 2025 01:00:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Finding My Rhythm Again]]></title>
      <description><![CDATA[<p>In April of 2025, my heart threw an unexpected exception.</p><p>I was 46, healthy, and active. I ran regularly. I ate reasonably well. I stayed busy. Too busy, maybe. When I started feeling short of breath walking up a flight of stairs, I thought I might have pneumonia or some sort of upper respiratory infection. I had refereed three youth soccer games in the near-freezing, early-spring rain the day before. Now I felt completely run down, like I was dragging an invisible weight.</p><p>I happened to have my annual physical already scheduled for later that week. After hearing my symptoms, my doctor ran an EKG. I sat alone in the exam room for a few minutes. She returned with a somber look on her face and I knew she had bad news. Both my grandfathers <em>and</em> my father died of heart attacks (two in their early 60s, my paternal grandfather in his early 40s). We had discussed my family history for years, but I naively hoped that <em>my</em> heart was the exception. Then she told me I was in AFib.</p><p><strong>Atrial fibrillation.</strong> An irregular heartbeat that significantly increases the risk of blood clots that can lead to stroke and potential heart failure. Less than one percent of people under the age of 65 are diagnosed with it.</p><p>This was <em>not</em> the 1% I was hoping to eventually join.</p><h2>My Rhythm Was Already Off</h2><p>Looking back, the signs were there long before my heart hit a stack overflow.</p><p>In 2022, we spun out <strong>Serverless Cloud</strong> from Serverless, Inc. and launched <strong>Ampt</strong>, a new startup built on the promise of simplifying cloud development. I took on the CEO role, leading a small team of brilliant engineers through what we all knew would be a tough market.</p><p>It was an exciting time, but startups come at a cost.</p><p>To give it the focus it deserved, I had to put everything else on hold — the <strong>Serverless Chats Podcast</strong>, my <strong>open source projects</strong>, my <strong>writing</strong>, even my regular <strong>community involvement</strong>. These were all things that had once grounded me. But building a startup has a way of consuming everything in its orbit.</p><p>We started fundraising in August 2022, just as the “VC winter” began to hit. Then ChatGPT launched in November, and every investor conversation shifted overnight. Despite all that, we had a term sheet before the end of the year. The terms were terrible, but it was something. Then just as we were about to get the final commitment needed to fill out the round, Silicon Valley Bank collapsed. Our lead investor pulled out, and everything we’d worked toward suddenly seemed out of reach.</p><p>We pushed through anyway.</p><p>In September 2023, we launched Ampt to the public, found some paying customers, and showed solid month over month growth. It still wasn't enough. By then, AI was consuming every venture portfolio. So we did what any sensible startup would do — we came up with our own (rather compelling) AI story. Think <em>'building an app using natural language'</em>–level compelling. We shopped it around and eventually attracted some genuine interest from a very well-known firm. Then after several extremely positive meetings over the course of a few weeks, they went silent.</p><p>We had spent the last 18 months working on Ampt. I had spent most of that time raising money, refining pitch decks, meeting with investors, and answering a never-ending stream of the same questions on repeat. All while forcing a smile and trying to hide my growing frustration. It was exhausting. We'd kept the lights on through sheer willpower and support from a handful of angel investors. The team was burnt out. And so was I.</p><p>The team's resilience and dedication was inspiring. But the limit had been reached. It was time to focus on supporting our families. Everyone wanted to moonlight when they could — something I didn't expect, but greatly appreciated.</p><h2>When You Can't "Let It Go"</h2><p>When it comes to startups, I've always been a go-down-with-the-ship kind of guy. If you look up "sunk-cost fallacy" in the dictionary, you'll likely see my picture. Ampt was no exception. I still believed in the vision, and I wasn't ready to let go. So I pushed on, by myself.</p><p>For the next few months I continued to work nearly full-time on Ampt. I spent most of my time supporting customers and building the occasional new feature here and there. I also produced several weekly live streams, which I really enjoyed doing. But they also made me think about all the enhancements I wanted to make. An unlikely prospect given that it was just me (before stable releases of Claude Code and Cursor).</p><p>For all intents and purposes, we were in quasi-maintenance mode. Progress was slow. So was growth. I took on some small consulting gigs to bring in cash, but the personal financial pressure kept mounting. My oldest daughter was starting college at the end of August. This was a major transition, as it is for any parent, as well as a major expense. Our rainy-day fund needed sunshine. The stress was building. That forced smile was back.</p><p>In September, I started consulting for <strong>CloudZero</strong>. I really liked what I saw there. Great product. Great people. When a full-time opportunity presented itself, I couldn't pass it up. I joined as their Director of Research in November and it felt like a perfect fit. I was going to be working on AI and Big Data with an awesome team behind me. But like most things in life, it came at a cost. I was still supporting customers on Ampt, still writing the <em>Off-by-none</em> newsletter every week, and trying to be a present husband and father. All on top of this new job that I loved and was giving my all to.</p><p>I knew it was too much, but I convinced myself that momentum meant progress.</p><p>By the end of 2024, I was stressed and exhausted. I had to leave re:Invent early because I became sick with some sort of horrible cold/flu. Not only did I miss Werner's keynote, but I also missed Weezer at re:Play (don't judge — I went to high school in the mid-nineties). I spent the holidays in a general malaise, telling myself I’d feel better once I was able to get some rest. I didn’t.</p><h2>When the Heart Speaks</h2><p>It's arbitrary, but a new year always seems to offer a chance to reset. To resolve to make positive change. You promise yourself you'll do better. Be better. I was still stressed, I still felt like I had the weight of the world on my shoulders, but I told myself that this year would be better. It had to be.</p><p>It started off promising. I was finally filling out my team at work, we closed 1H planning with a good balance of stretch and attainable goals. We had a plan. We were making progress, and the progress was exciting. Our AI Agents research was showing extremely positive results. The first quarter was now coming to a close, spring was here, and I felt the weight lifting.</p><p>On the first Saturday in April I refereed those three youth soccer games. It was only 40°F (4.5°C), and it was raining heavily. I was completely soaked through and frozen to the core. I don't remember <em>ever</em> feeling that cold. The next day I developed a cough, shortness of breath, and the kind of fatigue that a quick run usually shook me out of. Not this time.</p><p>I tried running a 5K mid-week and had to stop to walk every few minutes. It was the hardest run I'd ever done.</p><p>When my doctor eventually told me I was in AFib, I just stared at her. I’d spent years optimizing systems, debugging infrastructure, fixing the things that broke. Now it was me that was broken. I had to trust that the doctors were as good at their job as I was at mine.</p><p>The good news was that my resting heart rate was only in the 80s, incredibly low for the typical AFib patient. I'm normally in the high 40s, a testament to the power of running several 5Ks per week. The low heart rate meant it wasn't a life-threatening emergency, but it still needed to be monitored and treated right away. And the prognosis wasn't particularly encouraging. It could be something I'd need to live with forever.</p><p>She prescribed <strong>Eliquis</strong> (a blood thinner) and <strong>Metoprolol</strong> (a beta blocker) to keep my heart rate down. She referred me to a cardiologist and scheduled some additional tests. Then came the doctor's orders. No running. No alcohol. Minimize stress. Make sure I keep my heart rate under 110 bpm to avoid rapid ventricular response (RVR).</p><p>My malfunctioning heart sank. This was not the year I'd been hoping for.</p><p>My doctor and I talked for a long time, much longer than what’s normally allotted for a routine physical. Running was my stress reliever. Evenings and weekends were when I decompressed, working on projects around the house, spending time with my family, or tinkering on side projects that gave me energy. I also enjoyed an occasional craft beer or a pour of whiskey to take the edge off after a long day. The constant tiredness and restrictions of AFib were going to steal most of that away from me.</p><p>She suggested talking to a mental health professional, something I had been guilty of stigmatizing my entire life. But I realized I wasn’t just dealing with a heart condition; I was dealing with years of mounting stress and burnout I had refused to acknowledge. It was the first time I finally admitted I couldn’t just willpower my way through it. I needed help managing the stress and regaining focus, and for the first time in my life, I stopped seeing that as weakness.</p><p>Getting that support, and the right medications to help quiet and focus my mind, was one of the best decisions I have ever made. Healing isn’t just about fixing your heart; it’s about taking care of your head and everything connected to it.</p><h2>When It Rains, It Pours</h2><p>A week later, I got a transthoracic echocardiogram. Structurally, my heart was fine. That gave me hope. My doctor said the cardiologist would likely perform a <strong>cardioversion</strong> — a controlled shock similar to the whole "clear" thing doctors yell on TV. This would likely get me back in sinus rhythm and then maybe this whole thing would be over and done with.</p><p>Then life did what it always does.</p><p>In May, my mother-in-law was hospitalized with pancreatitis. A few days later, my seventeen-year-old daughter was in a major car accident. A seventy-year-old man fell asleep at the wheel and crossed over the double yellow line into her lane. Luckily she swerved to avoid getting hit head on, but his car hit the driver side while both vehicles were traveling over 35 mph. His car spun multiple times and ended up back in his lane. My pickup truck that my daughter was driving ended up perpendicular to the road.</p><p>I got the call around 6:45 am. I took my wife's car and sped to the scene in a panic, driving past the backed-up traffic, scared to death of what might be waiting for me. I found her standing next to a paramedic, shaken but alive.</p><p>I gave her a hug that seemed to last forever. Relief washed over me. She had some burns from the air bags and a few minor scrapes, but otherwise she was okay. My truck most definitely wasn’t. And neither were my stress levels.</p><figure><img class="q-full rounded-lg border border-gray-300 drop-shadow-lg mx-auto" src="https://www.jeremydaly.com/images/blog/truck-accident.jpg" alt="My daughter's car accident" /></figure><p>When I saw my cardiologist, he officially diagnosed me with <em>persistent AFib</em>. I had been in AFib for almost 6 weeks at this point, and I knew this wasn't going away on its own. We scheduled a cardioversion for the end of the month.</p><p>It worked. For a few glorious days, I was back in sinus rhythm. I even went for a short run with my daughter. But six days later, while attending a conference in San Diego, I slipped back into AFib.</p><p>Round two. Another cardioversion two weeks later. This time, the cardiologist put me on <strong>Amiodarone</strong> — a powerful anti-arrhythmic with a list of side effects that reads like a pharmaceutical horror story. Liver failure. Lung damage. Thyroid dysfunction. Vision problems. Skin discoloration. It was clear that we needed a longer term solution. My cardiologist recommended a cardiac catheter ablation. September 25th was the earliest appointment available, and it was only the middle of June.</p><figure><img class="q-full rounded-lg border border-gray-300 drop-shadow-lg mx-auto" src="https://www.jeremydaly.com/images/blog/cardioversion.jpg" alt="Cardioversion #1" /></figure><p>Then, a week later, my mother-in-law unexpectedly passed away from necrotizing pancreatitis. She was seventy-three, the matriarch of the family, and the most caring and thoughtful person I'd ever known. Her loss broke all of us. Especially my wife.</p><p>Two days later, I slipped back into AFib. I couldn’t tell my wife. She was grieving, and she didn’t need something else to worry about. The next day I messaged my cardiologist to discuss options. That afternoon I suddenly started feeling better, and my Apple Watch confirmed I was back in sinus rhythm. My cardiologist said it was the Amiodarone doing its job.</p><p>I called it mercy.</p><h2>A Slow Return</h2><p>Summer arrived without the usual fanfare. My wife was still grieving, spending most of her time helping my father-in-law go through the material things my mother-in-law left behind. A closet full of clothes, jewelry collected and inherited over the course of her life, and a mountain of boxes filled with generations of family photos and keepsakes. There were lots of tears, intermixed with the occasional smile as memories came flooding back. Momentary respites from all the grief. It's hard watching the people you love suffer, especially when there's little if anything you can do to ease their pain. I forced another smile. I needed to be the shoulder to cry on. I knew this was what my family needed, and the healing was going to take time.</p><p>Despite everything that was going on, I felt stable for the first time in months. I took a break from writing the <em>Off-by-none</em> newsletter, I took my annual beach vacation with family friends, and I journaled (a lot). I got to watch my daughter play with her team at the NFL Flag Championships in Canton, OH (she was even on ESPN). On the way home, we stopped at Niagara Falls and rode the Maid of the Mist. I even started running again. I was regaining my strength.</p><p>In August, I flew to Seattle for the AWS Heroes Summit and started to feel like myself again. Reconnecting with old friends and meeting new ones from the Heroes community was exactly what I needed. It reminded me how much I loved being a part of it, and how good it felt to contribute and help others.</p><figure><img class="q-full rounded-lg border border-gray-300 drop-shadow-lg mx-auto" src="https://www.jeremydaly.com/images/blog/heroes-summit.jpg" alt="AWS Heroes Summit" /></figure><p>Up until the Heroes Summit, I was relatively quiet about my medical issues. But amongst my friends, the conversation came up several times. <strong>AJ Stuyvenberg</strong> (a friend and fellow AWS Hero) told me his first job out of college was at the company that invented <strong>Pulsed Field Ablation (PFA)</strong>, the new, safer, recently FDA approved technology they’d use for my procedure in September.</p><p>He told me it was incredibly safe. I told him that as long as he hadn't written any of the code, I was willing to believe him. </p><p>Once I got home, I felt as though something had changed. I was suddenly incredibly motivated. I had a much clearer sense of where I wanted to spend my time. Time with family, time with friends, and time for the community that had brought me so much joy in the past.</p><p>My wife and I hosted a family BBQ at my house in late August. There were almost 40 of us, missing only one person who couldn't make it. It's hard to get a group that big together, so when you can, treat it like the gift it is.</p><p>The next day I took my youngest daughter to see <strong>Oasis</strong> at MetLife Stadium in New Jersey. The ticket prices were ridiculous, but the concert was amazing. There's something incredibly special about watching your kid sing along to the songs you loved when you were their age. We stayed in a hotel that night, then drove four hours the next morning to drop her off at school. I remember thinking as she napped in the car on the way back: <em>whatever happens next, I’m glad I had this.</em></p><figure><img class="q-full rounded-lg border border-gray-300 drop-shadow-lg mx-auto" src="https://www.jeremydaly.com/images/blog/oasis.jpg" alt="Oasis at MetLife Stadium" /></figure><h2>The Night Before</h2><p>The night before my ablation, my wife and I were sitting at the kitchen table. I was nervous but ready. I had researched the procedure, knew the odds, and trusted that if my insurance company was paying $102,000 for this, then I was likely going to get their money's worth.</p><p>Then she said, “You should probably make a list of all our accounts and passwords. Just in case.”</p><p>She wasn’t wrong to say it, but it made everything seem very real in a way it hadn’t before. Things go wrong, doctors make mistakes. Regardless of the odds, there was a very real, albeit small chance that I just finished my last meal. That terrified me.</p><h2>The Procedure</h2><p>We drove to Tufts Medical in Boston early in the morning.</p><p>There was a lot of shaving, including the hair on both wrists so they could insert IVs. There were at least ten doctors and nurses in the operating room and a giant matrix of computer monitors to precisely control the catheters. They covered me in more than forty electrodes, strapped me to the operating table, and a nurse ran through the pre-op checklist. That's the last thing I remember.</p><p>While I was anesthetized, they threaded catheters through my femoral arteries and up into my heart. They then used the PFA system to identify and cauterize the overactive cells.</p><p>Two and a half hours later, it was done.</p><p>I woke up with a sore throat from the breathing tube and a dull ache where the catheters had been inserted. My wife was by my side. I had to lie flat for several hours to minimize any bleeding, but after a few checks, I was cleared to go home that night. That's modern medicine. My doctor had told my wife after the procedure that everything went perfectly. There's no cure for AFib, but this should keep me in sinus rhythm for the next few decades.</p><h2>Recovery</h2><p>The recovery was uneventful, which is exactly what you want after a procedure like this.</p><p>No lifting anything over ten pounds. No running. Lots of time to think.</p><p>A week later, I took my oldest daughter to see <em>Whose Live Anyway?</em>, a live version of <em>Whose Line is it Anyway?</em> We went out to dinner, laughed for two hours straight at the show, and had a rare opportunity to reconnect. Something that college-aged children don't often have time for.</p><p>A few days later, I ran my first post-surgery 5K. It was slow, cautious, and deliberate — but I ran the entire time and finished. It was a good start.</p><h2>Looking Ahead</h2><p>At the end of October, my cardiologist plans to take me off the <strong>Amiodarone.</strong><br />By the end of the year, I should be done with the blood thinners, too.</p><p>If all goes well, I'll start 2026 with all of this behind me.</p><p>I still have a way to go to get back to my "normal" self, but after half a year of chaos, and the burnout that led up to it, this experience has given me a new sense of optimism. And that fuels my motivation.</p><p>Over the last few weeks, I’ve started writing again. I’ve been re-engaging with the community, working on my open source projects, and reconnecting with the people and projects that once gave me energy.</p><p>I'm not quite ready to bring back the podcast, but maybe someday.</p><h2>What I Learned</h2><p>This year tore me down. It also rebuilt me.</p><p>I had to face my mortality, watch someone I loved die, and pause the parts of my life that defined me. But it also forced me to remind myself of some of life's most important tenets.</p><p><strong>It’s okay to step away.</strong> Your health, both physical and mental, matter more than any startup or project.</p><p><strong>Support is everything.</strong> Family, friends, and co-workers don’t just help you carry the load, they remind you that you don’t have to carry it all by yourself.</p><p><strong>And you’re not alone.</strong> Everyone is fighting something. Be kind. And if you need help, ask for it.</p><p>After years of optimizing for performance, I’ve started optimizing for balance. We can't control what life throws at us, but we can choose how we deal with the hand we're dealt. I'm not religious, but there is something beautiful about the Serenity Prayer. That wisdom to know what can and cannot be changed often comes from lived experience. These last few years have taught me some hard lessons. My hope is that they've prepared me for whatever comes next.</p>]]></description>
      <link>https://www.jeremydaly.com/finding-my-rhythm-again/</link>
      <guid>https://www.jeremydaly.com/finding-my-rhythm-again/</guid>
      <pubDate>Mon, 20 Oct 2025 02:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Announcing Data API Client v2]]></title>
      <description><![CDATA[<p>I started building the <a href="https://github.com/jeremydaly/data-api-client" target="_blank" rel="noopener">Data API Client</a> because I was frustrated. Working with the <a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html" target="_blank" rel="noopener">Amazon Aurora Serverless Data API</a> felt clunky and awkward. Too much boilerplate, too many type annotations, and not enough focus on the way developers actually build applications. I wanted something that let me write queries the way I always had, without fighting the API.</p><p>V1 solved some of those problems. It wrapped the low-level calls and let you work with native JavaScript types instead of nested objects. It integrated named parameters and made transaction handling much easier. But the more I used it, the more I saw how much further it needed to go.</p><p>V2 is that step forward. It’s a complete rewrite that’s faster, smarter, fully-typed, and designed to fit naturally into modern serverless applications. It now plays nicely with your favorite ORMs, handles Aurora’s scale-to-zero behavior automatically, and even lets you drop it in as a replacement for libraries like <code>mysql2</code> or <code>pg</code>.</p><h2>Built for Modern TypeScript</h2><p>The entire v2 library is written in TypeScript. Every function, parameter, and return type is strongly typed, so you always know what to expect.</p><div class="rounded-lg h-full"><p>ts</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-ts c1">import dataApiClient from "data-api-client"; import type { DataAPIClientConfig, QueryResult } from "data-api-client/types"; interface User { id: number; name: string; email: string; tags: string[]; } const client = dataApiClient({ secretArn: "arn:aws:secretsmanager:...", resourceArn: "arn:aws:rds:...", database: "mydb", engine: "pg", }); const result: QueryResult&lt;User&gt; = await client.query&lt;User&gt;( "SELECT * FROM users WHERE id = :id", { id: 123 } );</code></div></div><p>No more guessing which properties exist or how the results are shaped. The compiler now tells you.</p><h2>A Smaller, Faster Core</h2><p>Data API Client v2 now uses the AWS SDK v3 as a peer dependency. That change alone brings smaller bundle sizes, faster Lambda cold starts, and better tree-shaking. It also aligns with modern async/await patterns, which makes code cleaner and easier to reason about.</p><p>If you’re deploying to Lambda (Node.js 18+), the SDK is already part of the runtime, so you don’t even have to install it.</p><h2>Drop-In Compatibility</h2><p>One of the most requested features was the ability to use Data API Client as a direct replacement for popular database clients. V2 adds compatibility layers for both <a href="https://www.npmjs.com/package/mysql2" target="_blank" rel="noopener"><code>mysql2/promise</code></a> and <a href="https://www.npmjs.com/package/pg" target="_blank" rel="noopener"><code>pg</code></a>, so you can often swap them out without touching the rest of your code.</p><h3>PostgreSQL example</h3><div class="rounded-lg h-full"><p>ts</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-ts c1">import { createPgClient } from "data-api-client/compat/pg"; const client = createPgClient({ resourceArn: "arn:aws:rds:...", secretArn: "arn:aws:secretsmanager:...", database: "myDatabase", }); const result = await client.query("SELECT * FROM users WHERE id = $1", [123]); console.log(result.rows);</code></div></div><h3>MySQL example</h3><div class="rounded-lg h-full"><p>ts</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-ts c1">import { createMySQLConnection } from "data-api-client/compat/mysql2"; const connection = createMySQLConnection({ resourceArn: "arn:aws:rds:...", secretArn: "arn:aws:secretsmanager:...", database: "myDatabase", }); const [rows] = await connection.query("SELECT * FROM users WHERE id = ?", [ 123, ]);</code></div></div><p>Named placeholders are supported too:</p><div class="rounded-lg h-full"><p>ts</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-ts c1">// Enable named placeholders for cleaner query syntax const connection = createMySQLConnection({ resourceArn: "arn:aws:rds:...", secretArn: "arn:aws:secretsmanager:...", database: "myDatabase", namedPlaceholders: true, // Like mysql2's namedPlaceholders option }); // Use :name syntax with object parameters const [users] = await connection.query( "SELECT * FROM users WHERE name = :name AND age &gt; :age", { name: "Alice", age: 25, } ); // Works with INSERT, UPDATE, DELETE too await connection.query("UPDATE users SET age = :newAge WHERE id = :id", { id: 123, newAge: 30, });</code></div></div><h2>Full ORM Support</h2><p>These compatibility layers unlock seamless integration with modern ORMs and query builders like <a href="https://orm.drizzle.team/" target="_blank" rel="noopener">Drizzle</a> and <a href="https://kysely.dev/" target="_blank" rel="noopener">Kysely</a>.</p><p>Here’s Drizzle with MySQL:</p><div class="rounded-lg h-full"><p>ts</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-ts c1">import { drizzle } from 'drizzle-orm/mysql2' import { mysqlTable, varchar, int } from 'drizzle-orm/mysql-core' import { createMySQLPool } from 'data-api-client/compat/mysql2' const pool = createMySQLPool({ ... }) const db = drizzle(pool as any) const users = mysqlTable('users', { id: int('id').primaryKey().autoincrement(), name: varchar('name', { length: 255 }).notNull(), email: varchar('email', { length: 255 }).notNull() }) const result = await db.select().from(users).where(users.id.eq(123))</code></div></div><p>Kysely works just as well and remains fully type-safe.</p><h2>Solving the Scale-to-Zero Problem</h2><p><a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2-auto-pause.html" target="_blank" rel="noopener">Aurora Serverless v2 can pause when idle</a> to save costs. That’s a powerful feature, but it also means the first query after a pause fails with a <code>DatabaseResumingException</code>. Most developers either write their own retry logic, accept the failure, or worse, leave their clusters running 24/7, which defeats the purpose.</p><p>V2 handles this automatically. When the database is waking up, the client retries intelligently, with tuned delays based on real-world behavior. Most clusters are ready in 15–20 seconds, and you don’t have to write a single line of retry logic.</p><div class="rounded-lg h-full"><p>ts</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-ts c1">const client = dataApiClient({ ... }) const result = await client.query('SELECT * FROM users')</code></div></div><p>And here’s the key point: this isn’t just for direct <code>dataApiClient</code> queries. The automatic wake-up handling is built into everything: the raw client, the <code>mysql2</code> and <code>pg</code> compatibility layers, and any ORM you connect through them. Whether you’re running a single query, a transaction, or a complex set of operations through Drizzle or Kysely, the retry logic is always there, quietly doing its job.</p><h2>Better PostgreSQL Support</h2><p>V2 now automatically converts <a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api-operations.html" target="_blank" rel="noopener">PostgreSQL arrays</a> into native JavaScript arrays:</p><div class="rounded-lg h-full"><p>ts</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-ts c1">const result = await client.query("SELECT tags FROM products WHERE id = :id", { id: 123, }); console.log(result.records[0].tags); // ['new', 'featured', 'sale']</code></div></div><p>It works for all array types (including nested ones) so you can use them naturally without manual parsing.</p><h2>Doesn’t the Data API Already Support a JSON response format?</h2><p>It does. The AWS Data API's <a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api-json.html" target="_blank" rel="noopener">built-in JSON format option</a> (via <code>formatRecordsAs: 'JSON'</code>) is great for simple use cases and a nice step forward. It converts most column types into native JavaScript values and removes some of the boilerplate that used to make working with the Data API painful. But it stops at the surface.</p><p>The parser in v2 goes much further. It preserves database-specific type information, handles complex types like PostgreSQL arrays and binary data intelligently, supports configurable date deserialization, and gives you richer metadata about query results. You also have control over output format: fully hydrated objects or raw arrays for performance-critical paths. In other words, the built-in JSON support is a convenience feature, v2’s parsing is designed for production systems that need flexibility, fidelity, and control.</p><h2>Tested for the Real World</h2><p>My 25+ years of building software has taught me to <em>take testing seriously</em>. This release includes unit tests for the core features, integration tests against real Aurora clusters, ORM tests with Drizzle and Kysely, and wake-up handling tests against paused databases. Over <a href="https://github.com/jeremydaly/data-api-client/tree/main/integration-tests" target="_blank" rel="noopener">390 integration tests</a> run as part of the build to make sure everything works as expected in production.</p><h2>A Complete Example</h2><p>Here’s a simple Lambda function that uses Drizzle with Data API Client v2:</p><div class="rounded-lg h-full"><p>ts</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-ts c1">import { drizzle } from "drizzle-orm/node-postgres"; import { pgTable, serial, text } from "drizzle-orm/pg-core"; import { createPgClient } from "data-api-client/compat/pg"; const users = pgTable("users", { id: serial("id").primaryKey(), email: text("email").notNull(), name: text("name").notNull(), }); const client = createPgClient({ resourceArn: process.env.DB_RESOURCE_ARN!, secretArn: process.env.DB_SECRET_ARN!, database: "myapp", }); const db = drizzle(client as any); export const handler = async (event: any) =&gt; { const newUser = await db .insert(users) .values({ email: event.email, name: event.name, }) .returning(); const activeUsers = await db.select().from(users); return { statusCode: 200, body: JSON.stringify({ newUser, activeUsers }) }; };</code></div></div><p>This code is type-safe, works with scale-to-zero databases, requires no VPC, and is ready for production.</p><h2>Looking Ahead</h2><p>I’m already exploring <a href="https://www.prisma.io/" target="_blank" rel="noopener">Prisma</a> and <a href="https://typeorm.io/" target="_blank" rel="noopener">TypeORM</a> adapters, built-in query performance metrics, and optional query caching. The goal is to make Data API Client the simplest and most powerful way to work with Aurora Serverless v2, regardless of the stack you’re using.</p><h2>A Few Final Thoughts</h2><p>I built the first version of this library because I needed it. I built v2 because I wanted it to become something even bigger. Hopefully this helps close the gap between the flexibility of serverless and the power of relational databases.</p><p>There’s still more to do. I want this project to help developers rethink how they connect to data in a world where databases don’t have to be always-on. I want it to make writing queries feel natural again, whether you’re building with SQL directly, composing queries in Kysely, or relying on an ORM like Drizzle. And I want the infrastructure — the retries, the wake-ups, the scaling — to fade into the background so you can focus entirely on the application in front of you.</p><p>V2 isn’t the finish line. It’s a foundation for everything that comes next. And I’m excited to keep building on it with your feedback, your use cases, and your ideas.</p><p>Let me know what you think: <a href="https://github.com/jeremydaly/data-api-client" target="_blank" rel="noopener">https://github.com/jeremydaly/data-api-client</a></p><p>Tags: <a href="https://www.jeremydaly.com/tag/aws" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#aws</a><a href="https://www.jeremydaly.com/tag/mysql" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#mysql</a><a href="https://www.jeremydaly.com/tag/postgres" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#postgres</a><a href="https://www.jeremydaly.com/tag/serverless" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#serverless</a><a href="https://www.jeremydaly.com/tag/rds" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#rds</a><a href="https://www.jeremydaly.com/tag/aurora-serverless" class="inline-block text-blue-700 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 underline underline-offset-2 transition-colors mr-3">#aurora-serverless</a></p>]]></description>
      <link>https://www.jeremydaly.com/announcing-data-api-client-v2/</link>
      <guid>https://www.jeremydaly.com/announcing-data-api-client-v2/</guid>
      <pubDate>Mon, 13 Oct 2025 02:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Intentionally Human: Product Managers in the AI Era]]></title>
      <description><![CDATA[<p>I recently had the opportunity to join an in-person, interactive session on Product Management and AI, and it was eye-opening. Not because I learned anything particularly new about AI, but because despite being in a room full of incredibly smart and accomplished product leaders, I realized how few of them grasped the tectonic shift already underway.</p><p>Most still think about AI as a set of tools to make existing processes faster, when in reality, it’s redefining the processes themselves. The inertia of how product management has always worked — PRDs, roadmaps, sprint cycles — has blinded many to the fact that their jobs are fundamentally changing. Either they adapt to this new reality, or they become the bottleneck.</p><p>These capabilities already exist. AI is reshaping what it means to be a product manager. Not in the abstract sense, but in the daily rhythm of how we discover, build, and learn. The rituals that once defined the craft now feel out of sync with the speed, fluidity, and adaptability this new era demands.</p><p>The old methods haven’t become irrelevant, they’ve just become too slow. We’re no longer documenting what might happen, we’re discovering what’s already happening. In real time.</p><h2>From PRDs to Prototypes</h2><p>When I was VP of Product at a startup (over a decade ago now), I was working with a brilliant group of engineers in Finland. I wrote long PRDs to communicate product vision, crafting every sentence with precision in an attempt to capture every detail. The problem was that language is subjective. Even more so when it crosses borders, language barriers, and cultures. What made perfect sense to me didn’t always translate how I thought it would.</p><p>Eventually, out of frustration, and because I had the engineering skills, I just built a prototype. The moment I showed it to them, everything clicked. No confusion. No misinterpretation. Just shared understanding.</p><p>That experience changed how I approached product management. Back then, prototypes were hard for the average person to create. Today, with tools like Claude Code, Codex, Cursor, and Warp, they’re almost effortless. A product manager can spin up an interface, modify it on the fly, and demonstrate the concept live. It’s faster, clearer, and infinitely more collaborative.</p><p>We no longer need to describe the product in exhaustive detail. We can simply show it, get feedback, and refine it. The PRD has become a prototype, and that shift has redefined how teams align around vision and execution.</p><h2>From Feedback to Fluidity</h2><p>Real-time feedback has always been the goal. The difference now is that AI makes it instantaneous and actionable.</p><p>By instrumenting products with analytics tools like Mixpanel, Amplitude, or Google Analytics, AI can extract and track user behavior in real time, highlighting friction points before customers have a chance to report them. It can identify drop-offs, detect confusion, and pinpoint which features drive engagement.</p><p>And it doesn’t stop at data. AI can synthesize qualitative feedback too. Analyze comments, reviews, and surveys for sentiment, themes, and tone. It can recognize patterns and reveal hidden issues long before they escalate.</p><p>This creates a kind of living dialogue between product and customer. Feedback isn’t an event anymore. It’s an ongoing flow. Every click, hesitation, or abandoned task becomes a form of conversation. And with AI interpreting that conversation, product teams can adjust quickly, keeping the experience fluid and responsive.</p><h2>From Roadmaps to Real-Time Adaptation</h2><p>Static roadmaps once gave teams a sense of order. But in the age of AI, order comes from adaptability, not assumption.</p><p>You can still have North Stars, those big goals that anchor your strategy, but the path to get there must stay flexible. Markets evolve, technologies shift, and customer needs change faster than ever. A roadmap drawn months in advance is almost guaranteed to go stale.</p><p>AI helps turn roadmaps into living systems that adjust continuously. It can monitor customer sentiment, competitive moves, and market dynamics. It suggests when to pivot, accelerate, or abandon a feature. It can even generate stakeholder updates that explain why priorities changed and how those changes still align with business objectives.</p><p>The goal isn’t to plan perfectly, it’s to move deliberately. AI makes it possible to build the right things quickly instead of building the wrong things slowly.</p><h2>From Documentation to Dynamic Knowledge</h2><p>AI can now read code, trace dependencies, and understand complex architectures better than any human ever could. That ability turns documentation into something much more dynamic.</p><p>Instead of relying on static pages that go stale after each release, AI can generate and update documentation automatically from code, tests, and real-world user interactions. It can write clear explanations, create examples from actual usage, and regenerate everything the moment a new pull request is merged.</p><p>It can also maintain tone and consistency across every format, from API references to web tutorials. Need a localized version in Spanish or Portuguese? Done instantly. Need to shift from a casual, scrappy startup tone to a more formal one for enterprise audiences? Regenerate and publish within minutes.</p><p>AI doesn’t replace technical writers, it amplifies them. The tedious parts vanish, leaving space for the craft. It's the clarity, precision, and voice that make documentation human. In this new world, knowledge never lags behind the product, it moves with it.</p><h2>From Intuition to Intelligent Insight</h2><p>Great product management has always balanced data and instinct. AI doesn’t change that balance, it enhances it.</p><p>With the ability to process millions of interactions, AI can uncover behavioral trends, predict churn, and identify correlations that humans would never spot. It can tell you which features actually drive engagement, where users are struggling, and what behaviors signal long-term retention.</p><p>But intuition still matters. Data alone can’t tell you how a product makes your users <em>feel</em>. The best product managers use AI to inform their instincts, not replace them. They see beyond what the data confirms and imagine what it can’t yet describe.</p><p>AI expands our vision. It doesn’t make decisions for us, it helps us see more clearly before we make them.</p><h2>From Ideas to Instant Iteration</h2><p>There's an old trick in product management called the “fake door test.” You’d place a button for a future feature just to see if users clicked it. It was crude, and likely frustrating, but it worked. Now, you don’t need to fake it and disappoint users anymore. You can build a feature MVP in an afternoon, instead of waiting weeks.</p><p>AI coding assistants like Claude Code, Cursor, Copilot, Codex, and Warp have changed the speed of development entirely. What once took an entire sprint now takes experienced developers less than a day. And because engineers move faster, product managers have to move faster too.</p><p>That means continuously generating experiments, refining hypotheses, and feeding new ideas into the system. You can’t plan quarterly anymore. You have to iterate daily. It’s not about doing more work. It’s about creating a constant rhythm of learning.</p><p>Time to market isn’t just compressed, it’s redefined. The distance between idea and impact has never been shorter.</p><h2>From Management to Mastery</h2><p>The product manager’s role isn’t disappearing, it’s evolving. AI now touches every part of it, from how we define vision to how we measure success.</p><p>Here are eight ways traditional product management is being reimagined in the age of AI.</p><h3>Vision and Strategy: From Insight to Intention</h3><p>AI can surface market trends, identify emerging competitors, and analyze customer sentiment across billions of data points.</p><p>Tools like Deep Research can even monitor how competitors position and market their products in real time. This helps PMs plan proactively, not reactively.</p><p>But strategy still starts with people. It requires empathy, curiosity, and conviction. AI informs vision, it doesn’t define it.</p><h3>Understanding and Prioritization: Scaling Empathy with AI</h3><p>Talking to customers is still essential. But you can only talk to so many.</p><p>AI helps scale that understanding by analyzing behavioral data from all customers, not just your biggest ones. It can identify common themes across feedback, detect patterns between enterprise and SMB users, and even predict which requests will deliver the highest ROI.</p><p>It’s a blend: human conversation for depth, AI synthesis for breadth.</p><h3>Roadmapping: From Static Plans to Living Systems</h3><p>The role of the roadmap is changing. It’s no longer a static artifact that tries to predict the future. It’s a living system that constantly reacts to it.</p><p>AI now makes this adaptability operational. Instead of a roadmap that lags behind reality, you get one that evolves with it.</p><p>The roadmap becomes less a document and more a reflection of your product’s pulse.</p><h3>Collaboration: From Handoffs to Co-Creation</h3><p>The days of throwing PRDs over the wall are over.</p><p>Product managers can now sit with designers, sketch a feature in Figma, and use AI to turn that mockup into a working prototype, complete with interactive logic. It won’t be production-grade, but it will be tangible, testable, and fast.</p><p>That shared artifact keeps everyone aligned: design, engineering, marketing, and leadership.</p><p>It’s not about replacing cross-functional collaboration. It’s about collapsing it into the same moment.</p><h3>Development: From Oversight to Observability</h3><p>AI makes it possible for PMs to see, in real time, what’s actually being built.</p><p>Through repository analysis and test-driven development, PMs can track which features are complete, which are stubbed, and which need attention.</p><p>Better yet, AI can generate test suites that become living PRDs, creating measurable, verifiable representations of requirements.</p><p>It can even compare UI deployments against design files to detect inconsistencies automatically. Oversight becomes observability.</p><h3>Launch: From Events to Conversations</h3><p>Product launches used to be finish lines. Now they’re starting points.</p><p>AI turns launches into ongoing conversations with the market. It continuously analyzes sentiment, adoption, and engagement, adjusting messaging and rollout strategies in real time.</p><p>PMs can run “what-if” simulations, test launch scenarios across segments, and even predict adoption curves before going live.</p><p>It’s not about perfect launches anymore. It's about perpetual ones.</p><h3>Performance: From Dashboards to Direction</h3><p>Post-launch monitoring used to mean dashboards and KPIs. Now AI does the watching for you.</p><p>It detects anomalies, finds correlations, and tells you not just what happened, but why. It narrates performance: “Feature B adoption grew 18% among healthcare customers due to workflow simplifications introduced in v1.2.”</p><p>AI even predicts future behavior. Who’s likely to churn? Which feature is peaking? What are the recommended next steps?</p><p>PMs move from reactive analysts to proactive optimizers.</p><h3>Iteration: From Updates to Evolution</h3><p>Iteration used to be cyclical: gather, prioritize, ship, repeat.</p><p>Now it’s continuous.</p><p>AI synthesizes user feedback, behavioral analytics, and competitive insights into ongoing recommendations. It can autonomously design and run A/B tests, optimize flows, and personalize experiences in real time.</p><p>Your product becomes a living organism that's learning, adapting, and evolving alongside your users.</p><h2>From Operators to Orchestrators</h2><p>AI is redefining the product manager’s identity. They’re no longer operators moving pieces on a board, they’re orchestrators designing the flow of intelligence across the system.</p><p>Their role isn’t to manage processes, but to shape intent. They decide what matters, set the rhythm, and ensure coherence as everything moves faster. The work is less about keeping things on track and more about guiding the direction of motion.</p><p>Product managers in the AI era don’t just push work forward. They design how learning happens inside the organization.</p><h2>Humanity Still Matters</h2><p>Every era of technology creates its own kind of product manager.<br />In the industrial age, they optimized factories.<br />In the software age, they managed backlogs.<br />In the cloud era, they built at scale.</p><p>Now, in the AI age, PMs work with something that doesn’t just execute instructions, it anticipates them.</p><p><strong>AI doesn’t diminish the role, it accelerates it.</strong> It collapses cycles that once took quarters into minutes. It translates the ambiguity of human behavior into patterns we can understand, forcing us to rethink what “building products” even means.</p><p>We’re not just making things for users anymore. We’re making systems that learn from them, shape them, and sometimes outgrow us.</p><p>The challenge isn’t how to use AI, it’s how to remain human while doing so.</p><p>Because as AI automates more of the craft, what’s left is the art: understanding emotion, designing for trust, deciding what deserves to exist.</p><p>The best product managers of this era won’t just manage velocity or optimize funnels. They’ll translate between intelligence and intent, shaping technology that serves human curiosity, not just commercial logic.</p><p>AI is accelerating everything. But speed alone isn’t progress.<br />Progress is knowing where you’re going and why.</p><p>We’re not here to make smarter software.<br />We’re here to make better decisions.<br />And that, more than ever, requires being profoundly and <strong>intentionally human</strong>.</p>]]></description>
      <link>https://www.jeremydaly.com/intentionally-human/</link>
      <guid>https://www.jeremydaly.com/intentionally-human/</guid>
      <pubDate>Thu, 09 Oct 2025 02:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[I've joined CloudZero as the Director of Research]]></title>
      <description><![CDATA[<p>I'm excited to share that I've joined <a href="https://cloudzero.com" target="_blank" rel="noopener">CloudZero</a> as their new Director of Research. I'll be leading an extraordinarily talented team to advance their new AI-driven data platform, which is redefining how organizations manage and optimize their cloud investments. This represents a unique opportunity to build on my years of experience while diving into one of the most transformative and rapidly evolving spaces in tech.</p><h2>Why CloudZero?</h2><p>CloudZero's mission aligns deeply with my passion for transforming how teams build and operate in the cloud. Cloud financial management is no longer just about cost tracking—it's about delivering actionable intelligence to drive better decisions across engineering, product, and finance. Their new AI-driven data platform is poised to make this vision a reality by leveraging the latest AI/ML technology to analyze massive data sets and unlock insights and optimizations previously out of reach.</p><p>As Director of Research, I'll lead innovation at the intersection of data science, AI, and cloud economics. The opportunity to work with a world-class team to shape the future of cloud intelligence is both humbling and exciting. This new role allows me to bring my experience and learnings from over 25 years in tech to an entirely new challenge while pursuing my passion for making the cloud more accessible and efficient for everyone.</p><h2>What about Ampt?</h2><p>The past two and a half years with Ampt have been an incredible journey. Together, we built a product that challenged conventional thinking about cloud development and introduced a number of innovations such as Productized Patterns and our Infrastructure-from-Code (IfC) approach. These resonated deeply with users and even influenced and inspired others in the industry. While we made significant progress and gained a passionate base of loyal users, competing for mindshare in a crowded market of well-funded developer tools has made it challenging to give our team the proper support.</p><p>For the last several months, I've focused on optimizing Ampt's operational stability, supporting our loyal customers, and ensuring the platform's long-term viability. I'm proud to share that the product remains strong, and our dedicated customers continue to support its ongoing operations. Though Ampt will no longer be my full-time day job, this new position is fully supportive of the work we've accomplished, enabling me to keep the platform independent and running even as I take on this new challenge.</p><h2>My Continued Commitment to the Community</h2><p>This new role also provides me with the opportunity to reconnect with some of my greatest passions. I'm excited to continue sharing insights through my weekly Off-by-none newsletter, a channel that keeps me closely connected to the incredible cloud and serverless communities. I'm also looking forward to dedicating more time to open source projects, exploring new ideas, and collaborating with all of you to help shape the future of cloud.</p><p>These important efforts, along with my work at CloudZero, will allow me to engage even more deeply with developers, architects, and cloud enthusiasts to push the boundaries of what's possible.</p><h2>Looking to the Future</h2><p>While this marks a significant transition, it doesn't mean goodbye to Ampt, its vision, or the remarkable community that's grown around it. Instead, it's an evolution. The lessons learned and the relationships created will fuel the work ahead, inspiring new solutions and ideas at CloudZero while continuing to innovate on the cloud developer experience. I'm excited to tackle the complexities of cloud data at scale and help organizations unlock the full potential of their investments in the cloud.</p><p>To my Ampt team and community: thank you for believing in the vision, for your resilience, and for being part of this amazing journey. To my new colleagues at CloudZero: I can't wait to drive the future of Cloud Business Optimization together.</p><p>Here's to the next adventure!</p>]]></description>
      <link>https://www.jeremydaly.com/joining-cloudzero/</link>
      <guid>https://www.jeremydaly.com/joining-cloudzero/</guid>
      <pubDate>Tue, 26 Nov 2024 20:31:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Lambda Tail Warming]]></title>
      <description><![CDATA[<p>If you're like me, AWS Lambda functions have become an integral part of your cloud toolbox. In fact, I use Lambda functions for just about everything. Whether I'm implementing change data capture with DynamoDB streams, executing complex state transitions in Step Functions, or rendering dynamic content for a web browser, Lambda functions are almost always the first compute solution I reach for.</p><p>Lambda functions have been a great choice for the vast majority of my use cases. They scale quickly to handle traffic spikes, and for asynchronous workloads, I never worry about cold starts. Even for synchronous workloads with minimal traffic, cold starts are mostly a non-issue. However, I have hundreds (maybe thousands) of synchronously invoked functions that receive infrequent and inconsistent traffic. Cold starts on those functions are not only painful to experience, but in some cases, can create upstream integration issues.</p><p>In this post, I'll outline a strategy I've been experimenting with that utilizes Lambda function lifecycle events to optimistically warm functions when there are no more active execution environments. I've been using this technique for a while now, and the results have been exceptional. Please note that this is not your standard <em>trigger-with-a-scheduled-task</em> Lambda Warmer that you've likely heard of in the past. This is a much more sophisticated approach designed to minimize costs, unnecessary invocations, and request collisions.</p><h3>Traditional Lambda warming strategy</h3><p>Many (many) years ago I created the fairly popular <a href="https://github.com/jeremydaly/lambda-warmer" target="_blank" rel="noopener">Lambda Warmer</a> npm package. Its purpose was to optimize AWS Lambda function cold starts by implementing AWS best practices for warming functions "correctly". Those tips included:</p><ul><li>Don’t ping more often than every 5 minutes</li>
<li>Invoke the function directly (e.g. don’t use API Gateway to invoke it)</li>
<li>Pass in a test payload that can be identified as such</li>
<li>Create handler logic that replies accordingly without running the whole function</li>
</ul><p>A lot has changed in the last 6 years, but fundamentally, this technique still "works". The issue is that those warming pings happen every 5 minutes whether they're needed or not. This can lead to several unintended consequences.</p><ol><li><strong>Unnecessary invocations:</strong> If Lambda functions are already "warmed" by actual traffic, sending regularly scheduled warming requests adds extra costs, resource usage, and CloudWatch log ingestion without providing any additional benefit.</li>
<li><strong>Blocked requests:</strong> Scheduled invocations will use a warm execution environment if one is available. It's possible that this can block actual traffic from using that warm environment and force a cold start on an end user's request. If you attempt to warm multiple Lambda execution environments, which requires intentionally delaying a response to force additional environments to spin up, you're highly likely to run into an end user blocking situation.</li>
<li><strong>Cold starts due to early termination:</strong> Lambda function execution environments (as of this writing) are typically recycled after approximately 6 minutes of inactivity. However, AWS may decide to recycle your environments early (or later) for any number of reasons, including internal failures. This happens a lot. If a user invokes your function before the next warming window, they are guaranteed to get a cold start.</li>
</ol><p>Despite the issues above, this method remains quite popular as it's fairly easy to implement and inexpensive to run.</p><h3>What about Provisioned Concurrency?</h3><p>At AWS re:Invent 2019, AWS announced <a href="https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html" target="_blank" rel="noopener">Provisioned Concurrency</a>, a feature that allows you to "pre-initialize" Lambda execution environments. The promise of this feature seemed like a perfect solution. You simply specify how many "warm" Lambda functions you want (you can even manage it on a <a href="https://aws.amazon.com/blogs/compute/scheduling-aws-lambda-provisioned-concurrency-for-recurring-peak-usage/" target="_blank" rel="noopener">schedule</a> or based on <a href="https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html#managing-provisioned-concurency" target="_blank" rel="noopener">utilization</a>), and AWS will make sure you have a warm, autoscaling fleet ready to go. As your function starts receiving traffic, the AWS Lambda service continues to warm new execution environments (without blocking) up to your pre-configured maximum. If you exceed your maximum, then it rolls over to standard on-demand scaling.</p><p>If you have a function that requires extremely low latency and is expected to get predictable periods of sustained traffic, Provisioned Concurrency is definitely worth looking at. However, the cost of this feature seems wildly expensive compared to other compute options. For example, the current <a href="https://aws.amazon.com/lambda/pricing/" target="_blank" rel="noopener">Lambda Pricing</a> charges $0.0000041667 for every GB-second of Provisioned Concurrency. For a function with 1024MB of configured memory, that would cost ~$0.02 per hour to handle <strong>ONE concurrent request</strong>. That doesn't include the PER invocation charge and the duration charges.</p><p>There are msny benefits to using Lambda functions, most notably their wide array of <a href="https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html" target="_blank" rel="noopener">Event Source Mappings (ESMs)</a>. ESMs make integrating with other AWS stream and queue-based event sources extremely simple and (mostly) headache free. But if you are using Provisioned Concurrency, it would almost certainly be for synchronous invocations like API requests, not for ESMs or other direct triggers like S3 and SNS. It depends on your use case and the amount of expected traffic, but in many cases, services like <a href="https://aws.amazon.com/apprunner/" target="_blank" rel="noopener">App Runner</a> or <a href="https://aws.amazon.com/ecs/" target="_blank" rel="noopener">ECS</a> can provide auto-scaling containers that handle your traffic at a much more predictable cost.</p><p>For our use case, keeping at least one Lambda execution environment warm 24x7, would cost $10.80/mth (assuming 1024MB of configured memory). Also, that would be for EVERY FUNCTION we wanted to keep warm. Single-purpose Lambda functions have their uses, but at this price, you might want to think about building a MonoLambda (or Lambdalith).</p><h3>Enter Lambda Tail Warming</h3><p>Lambda Tail Warming is a technique that uses a <a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html" target="_blank" rel="noopener">Lambda Extension</a> to track active execution environments by monitoring lifecycle events, then optimistically invoking itself to ensure at least one warm environment at all times.</p><p>The basic process is as follows:</p><ol><li>Install an <em>external extension</em> that subscribes to <code>INVOKE</code> and <code>SHUTDOWN</code> events from the execution environment.</li>
<li>When a new execution environment is started, you register the extension and persist the <code>extensionId</code> in an external datastore such as DynamoDB or ElastiCache. The record should also contain a time-to-live (TTL) value that expires after several minutes (more on this later).</li>
<li>If an <code>INVOKE</code> event is received after some amount of time has passed (more on this later), update the datastore record with a new TTL.</li>
<li>If the extension receives a <code>SHUTDOWN</code> event, check the datastore to see how many active execution environments are running. If there are one or zero, use the AWS SDK to asynchronously invoke the Lambda function using <code>InvocationType: 'Event'</code> with a payload that indicates it's a warming event.</li>
<li>Remove the datastore record for current <code>extensionId</code> and exit the extension.</li>
</ol><p>If you're unfamiliar with Lambda Extensions, AWS has a <a href="https://github.com/aws-samples/aws-lambda-extensions" target="_blank" rel="noopener">GitHub repository</a> filled with several examples to guide you. External extensions can be written in a different language than the function, which means you can write this once and add it as a Lambda Layer to any function you want to warm. We'll look at a Node.js example, but you're free to adapt this to your preferred language. Let's build.</p><h3>Building a Lambda Tail Warmer</h3><p>This <a href="https://github.com/aws-samples/aws-lambda-extensions/tree/main/nodejs-example-extension" target="_blank" rel="noopener">example</a> from AWS shows the set up of a basic external extension. The <code>extensions/nodejs-example-extension</code> file is deployed to your Lambda function's <code>/opts/extensions</code> directory as part of the Lambda Layer or within a container (if using the container packaging format). This file is picked up by the Lambda runtime on initialization and will execute the <code>index.js</code> script in the <code>nodejs-example-extension</code> directory.</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">#!/bin/bash # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 set -euo pipefail OWN_FILENAME="$(basename $0)" LAMBDA_EXTENSION_NAME="$OWN_FILENAME" # (external) extension name has to match the filename echo "${LAMBDA_EXTENSION_NAME} launching extension" exec "/opt/${LAMBDA_EXTENSION_NAME}/index.js"</code></div></div><p>The example includes an <a href="https://github.com/aws-samples/aws-lambda-extensions/blob/main/nodejs-example-extension/nodejs-example-extension/extensions-api.js" target="_blank" rel="noopener"><code>extensions-api.js</code></a> helper function that handles the interaction between the module and the Lambda runtime for us. We'll use its exported <code>register</code> and <code>next</code> methods in the main extension script.</p><p>Take a look at the sample extension script below. The <code>main()</code> function is executed immediately. It registers the extension using the <code>register</code> method, then enters a loop waiting and awaits the next event from the Lambda runtime (<code>await next(extensionId)</code>). When a new event is sent from the runtime, the script parses the event type and then either executes the <code>handleShutdown</code> or <code>handleInvoke</code> methods. If it's a <code>SHUTDOWN</code> event, we also need to gracefully exit the extension using a <code>process.exit(0)</code>.</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">#!/usr/bin/env node const { register, next } = require("./extensions-api"); const EventType = { INVOKE: "INVOKE", SHUTDOWN: "SHUTDOWN", }; function handleShutdown(event) { console.log("shutdown", { event }); process.exit(0); } function handleInvoke(event) { console.log("invoke"); } (async function main() { process.on("SIGINT", () =&gt; handleShutdown("SIGINT")); process.on("SIGTERM", () =&gt; handleShutdown("SIGTERM")); console.log("hello from extension"); console.log("register"); const extensionId = await register(); console.log("extensionId", extensionId); // execute extensions logic while (true) { console.log("next"); const event = await next(extensionId); switch (event.eventType) { case EventType.SHUTDOWN: handleShutdown(event); break; case EventType.INVOKE: handleInvoke(event); break; default: throw new Error("unknown event: " + event.eventType); } } })();</code></div></div><p>Now that we're familiar with how the extension handles lifecycle events, let's add our Lambda Tail Warming logic. Let's start by adding some variables to the top of our script:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">#!/usr/bin/env node const { register, next } = require("./extensions-api"); // Require data layer const data = require("./data.js"); // Require the AWS SDK Lamnda client const { LambdaClient, InvokeCommand } = require("@aws-sdk/client-lambda"); const EventType = { INVOKE: "INVOKE", SHUTDOWN: "SHUTDOWN", }; // Init the extensionId let extensionId: string; // Record the init time let initTime = Date.now(); // Refresh interval (for refreshing the Lambda instance record) const refreshInterval = 10 * 60; // in seconds</code></div></div><p>Notice that I added a <code>data</code> import. This is referencing your own data module that would persist to the datastore of your choice. I provide some pseudo methods in the examples below to demonstrate the interactions. We also need the AWS SDK Lambda client. And I've moved the extensionId to the global scope (so we can access it later), created a variable to track when the extension was initialized (<code>initTime</code>) and set a <code>refreshInterval</code> for 10 minutes.</p><p>Next we create a new <code>trackLambda</code> function:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Persist execution environments ids async function trackLambda(remove = false) { if (remove) { await data.remove(extensionId); } else { // Add a few seconds to the TTL to ensure the record is not removed before the next refresh await data.set( extensionId, { ts: Date.now(), }, { ttl: refreshInterval + 10 } ); } }</code></div></div><p>If the <code>remove</code> argument is <code>true</code>, we remove the <code>extensionId</code> from the datastore, otherwise, we upsert the record with the current time and a TTL value slightly greater than our <code>refreshInterval</code>. The reason we do this is twofold. First, we want this record to expire if it doesn't get cleaned up by a <code>SHUTDOWN</code> event. I've yet to see an extension not get a <code>SHUTDOWN</code> event, but network failures and other issues are sure to leave some zombie records. This is a proactive approach to cleaning them up if something fails. We add a few seconds to the TTL to give a refresh request time to update the record before expiring.</p><p>Now we need our <code>warmLambda</code> function:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Warm the Lambda function async function warmLambda(message) { const lambda = new LambdaClient({}); const invokeParams = { FunctionName: process.env.AWS_LAMBDA_FUNCTION_NAME, InvocationType: "Event", // Async invocation LogType: "None", Payload: JSON.stringify({ warmer: true, message: `ID: ${message}` }), }; try { await lambda.send(new InvokeCommand(invokeParams)); } catch (err) { // Log the error, but don't throw console.log(err, "warmLambda error"); } }</code></div></div><p>Here we initialize the Lambda client, then send an invocation to our function (<code>process.env.AWS_LAMBDA_FUNCTION_NAME</code> conveniently stores the name for us). We'll use an <code>InvocationType</code> of <code>Event</code> as we don't want to wait for a response. Lambda Extensions get between 500ms and 2000ms of processing time to perform any cleanup (500ms when registering a single extension), so we want this to be as efficient as possible. There is no guarantee that the Lambda service will respond in time, but it hasn't been an issue in all my tests. Also, if the invoke request fails, we want to catch the error and log it. This will only be called when the container is being shutdown anyway, but we want to make sure any other processes have a chance to run in the extension.</p><p>We need to update our <code>handleShutdown</code> function:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Make this async async function handleShutdown(event) { // If the shutdown wasn't because of a failure if (event.shutdownReason !== "FAILURE") { // Get the list of active Lambda environments const environments = await data.list(); // If there one or zero environments, sending a warming request if (environments.length &lt;= 1) { console.log("WARMING THE LAMBDA"); await warmLambda(extensionId); } // Remove this Lambda instance record await trackLambda(true); } // Gracefully exit process.exit(0); }</code></div></div><p>When our <code>handleShutdown</code> method is called, we first check to see if this was due to a Lambda Function failure. If it is, we likely don't want to keep trying to invoke a function that is failing. Otherwise, we retrieve a list of active environments from our datastore. If there are one or zero active environments (we assume that one is the current environment being shut down), then trigger the warming event. Regardless of the number of environments, we want to make sure we clean up the datastore record of the current environment by calling <code>trackLambda</code> with the remove argument set to <code>true</code>. Then we gracefully exit.</p><p>Our <code>handleInvoke</code> function also needs to be updated:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Make this async async function handleInvoke(event) { if (initTime + refreshInterval * 1000 &lt; Date.now()) { await trackLambda(); initTime = Date.now(); } }</code></div></div><p>Most invocations we can ignore since we don't want to update the datastore on every request. But every so often we want to send a heartbeat to the datastore to let it know an execution environment is still active. Above I'm checking to see if we've exceeded the <code>refreshInterval</code>. If we have, we update the datastore by calling <code>trackLambda()</code> and reset the <code>initTime</code>.</p><p>Finally, we can update our main extension loop logic:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">(async function main() { process.on("SIGINT", () =&gt; { handleShutdown() .then(() =&gt; process.exit(0)) .catch(() =&gt; process.exit(1)); }); process.on("SIGTERM", () =&gt; { handleShutdown() .then(() =&gt; process.exit(0)) .catch(() =&gt; process.exit(1)); }); const extensionId = await register(); // Add the Lambda environment to the datastore // Do not await (optimistic) trackLambda(); // Loop and wait for the next event while (true) { const event = await next(extensionId); switch (event.eventType) { case EventType.SHUTDOWN: await handleShutdown(event); break; case EventType.INVOKE: await handleInvoke(event); break; default: throw new Error("unknown event: " + event.eventType); } } // end while loop })();</code></div></div><p>I've updated the <code>SIGINT</code> and <code>SIGTERM</code> event listeners to support the async <code>handleShutdown</code> function just in case we don't get our standard <code>SHUTDOWN</code> event. I've also added a <code>trackLambda()</code> call before we enter the loop (this is the <code>INIT</code> phase). I'm not <code>await</code>ing this as we don't want it to block the extension's initialization. Then I added <code>await</code>s to our <code>handleShutdown</code> and <code>handleInvoke</code> function calls. And that's it. Your Lambda Tail Warming is ready to go. Well, almost.</p><h3>Configuring your Lambda function for Tail Warming</h3><p>Before you can start warming your function, you have to make a few changes to ensure that the process will work correctly.</p><ol><li><strong>Enable Invoke Permissions:</strong> In order for your extension to invoke your Lambda function, the function must have permission to invoke itself. You can add the following to your IAM role:</li>
</ol><div class="rounded-lg h-full"><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language- c1">- Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: "{YOUR-LAMBDA-ARN}"</code></div></div><ol start="2"><li><strong>Add a "warmer" event interceptor to your handler code:</strong> In order for your Lambda function to respond as quickly as possible and avoid potential request blocking, you'll need to modify your handler code to short circuit requests. This will ensure that any complex logic (and potential mutations and logging) is not processed. For example:</li>
</ol><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Handler exports.handler = async function (event, context) { if (event.warmer) { return { warmed: true }; } else { // Run my normal function code } };</code></div></div><ol start="3"><li><strong>Enable datasource access permission:</strong> In addition to the necessary Lambda Invoke permissions, you also need to make sure that the Lambda function has access to the datastore you're using to persist execution environment information.</li>
</ol><h3>How does this perform?</h3><p>Below are the traces for a rather large Lambdalith that includes the <code>canvas</code> binary to generate and manipulate image files. The first trace is the typical cold start (~3 seconds) for this application. The second 200 request below is a typical warm invocation (&lt; 60 milliseconds). The subsequent request is a Tail Warming event (note the 202 status code as this is happening asynchronously). This is a cold start (remember we do this immediately <em>after</em> the <code>SHUTDOWN</code> event of the last environment) which initializes a new execution environment and has a total duration of 3.122 seconds.</p><p>The next invocation shows a request from a user with a response time of 824ms. This application loads a significant amount of state, which typically happens during a normal user request. Our warming event short circuits this, which is why we see some additional response time during this invocation. It is possible to load state or perform some other actions during our warming event, but the goal is to find the right balance between cost and performance. The warming event saves us over 2.2 seconds of initialization time on the first subsequent user request and costs us only about 10 ms of billable time.</p><figure><img class="q-full rounded-lg border border-gray-300 drop-shadow-lg mx-auto" src="https://www.jeremydaly.com/images/blog/lambda-tail-warming-traces.png" alt="X-Ray Traces" /></figure><h3>Other things to consider</h3><p>There are several ways to improve this technique and make it more intelligent:</p><ol><li>The <code>refreshInterval</code> could be tweaked to support shorter expirations or more frequent datastore heartbeats. I found 10 minutes makes the most sense as it prevents premature removal of datastore records when the app is handling real traffic from users.</li>
<li>It's possible that a failure (network issue, missed <code>SHUTDOWN</code> event, etc.) could prevent the warming event from triggering. This would break the cycle of warming events, meaning the next <em>real</em> invocation would get a cold start. You could mitigate this by periodically checking the datastore for active records or by attaching listeners (like using DynamoDB Streams) that would do something similar. This would be in a separate process (e.g. Lambda function), so it wouldn't block invocations to the primary function unless you needed to warm it. It would add to the cost, but if you were warming multiple functions, this would benefit from the economies of scale.</li>
<li>You can add controls to turn this on and off. Extensions have access to Lambda environment variables, which are a handy and low latency way to add state to every invocation without needing to redeploy or fetch external configurations. A function configuration update could be scheduled if you wanted to automate this.</li>
<li>You <em>could</em> hydrate the state on every warming event. As I mentioned before, the majority of cold start time is typically during the initialization stage. If it makes sense to load some of that state on a warming event, then feel free to.</li>
<li>You could combine this strategy with the traditional Lambda Warming technique. When you invoke a "warm" function, this will generally extend the duration of that execution environment. That includes maintaining any global state that has been loaded. As long as an execution environment stays warm, the Tail Warming will never fire. When the environment is eventually recycled, the Tail Warming would immediately invoke a new one.</li>
<li>You could potentially use the extension to send pings to warm environments <em>before</em> a <code>SHUTDOWN</code> event. External extensions run as a separate process and might be able to use a combination of <code>INVOKE</code> events and internal timers to proactively warm functions that haven't received any recent activity.</li>
</ol><h3>Why would you use this?</h3><p>You're probably thinking to yourself, "This seems quite complicated, why not just use the traditional Lambda warmer or optimize my functions to reduce cold starts?" If done manually, then yes, I agree that the implementation is overly complex and may not be worth it. However, if you automate this as part of a larger project, I believe it provides a smarter, less intrusive, and more cost effective approach.</p><p>In many of my use cases, I have Lambda functions that sit idle for several hours, then suddenly receive a burst of traffic. This often happens with low traffic administrative dashboards or webhooks for upstream services like Slackbots. That first cold start can be an awful experience, and if the system is outward facing, can sometimes be enough for the user to abandon the page altogether. For Slackbots, the initial response must be within a strict 3 seconds. Without warming, the application we traced earlier would almost certainly fail to meet that requirement.</p><p>Optimizing your functions is a path worth exploring, but there is also the question of effort versus reward. If I shave 200ms off a 3,000ms cold start, that's great, but it likely won't come close to having as much of an impact as using a warming strategy. If you do employ a warming strategy, I think it should be slightly smarter than just sending a scheduled warming ping.</p><h3>When should you use this?</h3><p>This works best when you have <em>low traffic functions</em> with prolonged periods of inactivity between invocations. Even if you have periods where there are no requests for 5-10 minutes, cold starts will almost certainly creep in. And since this solution maintains state, you don't have to worry about warming pings colliding with actual user requests during times with consistent traffic. If you have several warm execution environments, <code>SHUTDOWN</code> events simply won't send a ping.</p><h3>Wrapping Up</h3><p>This technique is experimental and definitely has room for improvement. As I collect more data, I hope to expand upon its capabilities and perhaps codify some more complete examples. If you have any thoughts or feedback, please be sure to reach out on <a href="https://twitter.com/@jeremy_daly" target="_blank" rel="noopener">X</a> or <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>.</p><p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws-lambda" class="text-blue-800">#aws-lambda</a></p>]]></description>
      <link>https://www.jeremydaly.com/lambda-tail-warming</link>
      <guid>https://www.jeremydaly.com/lambda-tail-warming</guid>
      <pubDate>Wed, 23 Oct 2024 21:31:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Lambda Tail Warming]]></title>
      <description><![CDATA[<p>If you're like me, AWS Lambda functions have become an integral part of your cloud toolbox. In fact, I use Lambda functions for just about everything. Whether I'm implementing change data capture with DynamoDB streams, executing complex state transitions in Step Functions, or rendering dynamic content for a web browser, Lambda functions are almost always the first compute solution I reach for.</p><p>Lambda functions have been a great choice for the vast majority of my use cases. They scale quickly to handle traffic spikes, and for asynchronous workloads, I never worry about cold starts. Even for synchronous workloads with minimal traffic, cold starts are mostly a non-issue. However, I have hundreds (maybe thousands) of synchronously invoked functions that receive infrequent and inconsistent traffic. Cold starts on those functions are not only painful to experience, but in some cases, can create upstream integration issues.</p><p>In this post, I'll outline a strategy I've been experimenting with that utilizes Lambda function lifecycle events to optimistically warm functions when there are no more active execution environments. I've been using this technique for a while now, and the results have been exceptional. Please note that this is not your standard <em>trigger-with-a-scheduled-task</em> Lambda Warmer that you've likely heard of in the past. This is a much more sophisticated approach designed to minimize costs, unnecessary invocations, and request collisions.</p><h3>Traditional Lambda warming strategy</h3><p>Many (many) years ago I created the fairly popular <a href="https://github.com/jeremydaly/lambda-warmer" target="_blank" rel="noopener">Lambda Warmer</a> npm package. Its purpose was to optimize AWS Lambda function cold starts by implementing AWS best practices for warming functions "correctly". Those tips included:</p><ul><li>Don’t ping more often than every 5 minutes</li>
<li>Invoke the function directly (e.g. don’t use API Gateway to invoke it)</li>
<li>Pass in a test payload that can be identified as such</li>
<li>Create handler logic that replies accordingly without running the whole function</li>
</ul><p>A lot has changed in the last 6 years, but fundamentally, this technique still "works". The issue is that those warming pings happen every 5 minutes whether they're needed or not. This can lead to several unintended consequences.</p><ol><li><strong>Unnecessary invocations:</strong> If Lambda functions are already "warmed" by actual traffic, sending regularly scheduled warming requests adds extra costs, resource usage, and CloudWatch log ingestion without providing any additional benefit.</li>
<li><strong>Blocked requests:</strong> Scheduled invocations will use a warm execution environment if one is available. It's possible that this can block actual traffic from using that warm environment and force a cold start on an end user's request. If you attempt to warm multiple Lambda execution environments, which requires intentionally delaying a response to force additional environments to spin up, you're highly likely to run into an end user blocking situation.</li>
<li><strong>Cold starts due to early termination:</strong> Lambda function execution environments (as of this writing) are typically recycled after approximately 6 minutes of inactivity. However, AWS may decide to recycle your environments early (or later) for any number of reasons, including internal failures. This happens a lot. If a user invokes your function before the next warming window, they are guaranteed to get a cold start.</li>
</ol><p>Despite the issues above, this method remains quite popular as it's fairly easy to implement and inexpensive to run.</p><h3>What about Provisioned Concurrency?</h3><p>At AWS re:Invent 2019, AWS announced <a href="https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html" target="_blank" rel="noopener">Provisioned Concurrency</a>, a feature that allows you to "pre-initialize" Lambda execution environments. The promise of this feature seemed like a perfect solution. You simply specify how many "warm" Lambda functions you want (you can even manage it on a <a href="https://aws.amazon.com/blogs/compute/scheduling-aws-lambda-provisioned-concurrency-for-recurring-peak-usage/" target="_blank" rel="noopener">schedule</a> or based on <a href="https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html#managing-provisioned-concurency" target="_blank" rel="noopener">utilization</a>), and AWS will make sure you have a warm, autoscaling fleet ready to go. As your function starts receiving traffic, the AWS Lambda service continues to warm new execution environments (without blocking) up to your pre-configured maximum. If you exceed your maximum, then it rolls over to standard on-demand scaling.</p><p>If you have a function that requires extremely low latency and is expected to get predictable periods of sustained traffic, Provisioned Concurrency is definitely worth looking at. However, the cost of this feature seems wildly expensive compared to other compute options. For example, the current <a href="https://aws.amazon.com/lambda/pricing/" target="_blank" rel="noopener">Lambda Pricing</a> charges $0.0000041667 for every GB-second of Provisioned Concurrency. For a function with 1024MB of configured memory, that would cost ~$0.02 per hour to handle <strong>ONE concurrent request</strong>. That doesn't include the PER invocation charge and the duration charges.</p><p>There are msny benefits to using Lambda functions, most notably their wide array of <a href="https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html" target="_blank" rel="noopener">Event Source Mappings (ESMs)</a>. ESMs make integrating with other AWS stream and queue-based event sources extremely simple and (mostly) headache free. But if you are using Provisioned Concurrency, it would almost certainly be for synchronous invocations like API requests, not for ESMs or other direct triggers like S3 and SNS. It depends on your use case and the amount of expected traffic, but in many cases, services like <a href="https://aws.amazon.com/apprunner/" target="_blank" rel="noopener">App Runner</a> or <a href="https://aws.amazon.com/ecs/" target="_blank" rel="noopener">ECS</a> can provide auto-scaling containers that handle your traffic at a much more predictable cost.</p><p>For our use case, keeping at least one Lambda execution environment warm 24x7, would cost $10.80/mth (assuming 1024MB of configured memory). Also, that would be for EVERY FUNCTION we wanted to keep warm. Single-purpose Lambda functions have their uses, but at this price, you might want to think about building a MonoLambda (or Lambdalith).</p><h3>Enter Lambda Tail Warming</h3><p>Lambda Tail Warming is a technique that uses a <a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html" target="_blank" rel="noopener">Lambda Extension</a> to track active execution environments by monitoring lifecycle events, then optimistically invoking itself to ensure at least one warm environment at all times.</p><p>The basic process is as follows:</p><ol><li>Install an <em>external extension</em> that subscribes to <code>INVOKE</code> and <code>SHUTDOWN</code> events from the execution environment.</li>
<li>When a new execution environment is started, you register the extension and persist the <code>extensionId</code> in an external datastore such as DynamoDB or ElastiCache. The record should also contain a time-to-live (TTL) value that expires after several minutes (more on this later).</li>
<li>If an <code>INVOKE</code> event is received after some amount of time has passed (more on this later), update the datastore record with a new TTL.</li>
<li>If the extension receives a <code>SHUTDOWN</code> event, check the datastore to see how many active execution environments are running. If there are one or zero, use the AWS SDK to asynchronously invoke the Lambda function using <code>InvocationType: 'Event'</code> with a payload that indicates it's a warming event.</li>
<li>Remove the datastore record for current <code>extensionId</code> and exit the extension.</li>
</ol><p>If you're unfamiliar with Lambda Extensions, AWS has a <a href="https://github.com/aws-samples/aws-lambda-extensions" target="_blank" rel="noopener">GitHub repository</a> filled with several examples to guide you. External extensions can be written in a different language than the function, which means you can write this once and add it as a Lambda Layer to any function you want to warm. We'll look at a Node.js example, but you're free to adapt this to your preferred language. Let's build.</p><h3>Building a Lambda Tail Warmer</h3><p>This <a href="https://github.com/aws-samples/aws-lambda-extensions/tree/main/nodejs-example-extension" target="_blank" rel="noopener">example</a> from AWS shows the set up of a basic external extension. The <code>extensions/nodejs-example-extension</code> file is deployed to your Lambda function's <code>/opts/extensions</code> directory as part of the Lambda Layer or within a container (if using the container packaging format). This file is picked up by the Lambda runtime on initialization and will execute the <code>index.js</code> script in the <code>nodejs-example-extension</code> directory.</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">#!/bin/bash # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 set -euo pipefail OWN_FILENAME="$(basename $0)" LAMBDA_EXTENSION_NAME="$OWN_FILENAME" # (external) extension name has to match the filename echo "${LAMBDA_EXTENSION_NAME} launching extension" exec "/opt/${LAMBDA_EXTENSION_NAME}/index.js"</code></div></div><p>The example includes an <a href="https://github.com/aws-samples/aws-lambda-extensions/blob/main/nodejs-example-extension/nodejs-example-extension/extensions-api.js" target="_blank" rel="noopener"><code>extensions-api.js</code></a> helper function that handles the interaction between the module and the Lambda runtime for us. We'll use its exported <code>register</code> and <code>next</code> methods in the main extension script.</p><p>Take a look at the sample extension script below. The <code>main()</code> function is executed immediately. It registers the extension using the <code>register</code> method, then enters a loop waiting and awaits the next event from the Lambda runtime (<code>await next(extensionId)</code>). When a new event is sent from the runtime, the script parses the event type and then either executes the <code>handleShutdown</code> or <code>handleInvoke</code> methods. If it's a <code>SHUTDOWN</code> event, we also need to gracefully exit the extension using a <code>process.exit(0)</code>.</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">#!/usr/bin/env node const { register, next } = require("./extensions-api"); const EventType = { INVOKE: "INVOKE", SHUTDOWN: "SHUTDOWN", }; function handleShutdown(event) { console.log("shutdown", { event }); process.exit(0); } function handleInvoke(event) { console.log("invoke"); } (async function main() { process.on("SIGINT", () =&gt; handleShutdown("SIGINT")); process.on("SIGTERM", () =&gt; handleShutdown("SIGTERM")); console.log("hello from extension"); console.log("register"); const extensionId = await register(); console.log("extensionId", extensionId); // execute extensions logic while (true) { console.log("next"); const event = await next(extensionId); switch (event.eventType) { case EventType.SHUTDOWN: handleShutdown(event); break; case EventType.INVOKE: handleInvoke(event); break; default: throw new Error("unknown event: " + event.eventType); } } })();</code></div></div><p>Now that we're familiar with how the extension handles lifecycle events, let's add our Lambda Tail Warming logic. Let's start by adding some variables to the top of our script:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">#!/usr/bin/env node const { register, next } = require("./extensions-api"); // Require data layer const data = require("./data.js"); // Require the AWS SDK Lamnda client const { LambdaClient, InvokeCommand } = require("@aws-sdk/client-lambda"); const EventType = { INVOKE: "INVOKE", SHUTDOWN: "SHUTDOWN", }; // Init the extensionId let extensionId: string; // Record the init time let initTime = Date.now(); // Refresh interval (for refreshing the Lambda instance record) const refreshInterval = 10 * 60; // in seconds</code></div></div><p>Notice that I added a <code>data</code> import. This is referencing your own data module that would persist to the datastore of your choice. I provide some pseudo methods in the examples below to demonstrate the interactions. We also need the AWS SDK Lambda client. And I've moved the extensionId to the global scope (so we can access it later), created a variable to track when the extension was initialized (<code>initTime</code>) and set a <code>refreshInterval</code> for 10 minutes.</p><p>Next we create a new <code>trackLambda</code> function:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Persist execution environments ids async function trackLambda(remove = false) { if (remove) { await data.remove(extensionId); } else { // Add a few seconds to the TTL to ensure the record is not removed before the next refresh await data.set( extensionId, { ts: Date.now(), }, { ttl: refreshInterval + 10 } ); } }</code></div></div><p>If the <code>remove</code> argument is <code>true</code>, we remove the <code>extensionId</code> from the datastore, otherwise, we upsert the record with the current time and a TTL value slightly greater than our <code>refreshInterval</code>. The reason we do this is twofold. First, we want this record to expire if it doesn't get cleaned up by a <code>SHUTDOWN</code> event. I've yet to see an extension not get a <code>SHUTDOWN</code> event, but network failures and other issues are sure to leave some zombie records. This is a proactive approach to cleaning them up if something fails. We add a few seconds to the TTL to give a refresh request time to update the record before expiring.</p><p>Now we need our <code>warmLambda</code> function:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Warm the Lambda function async function warmLambda(message) { const lambda = new LambdaClient({}); const invokeParams = { FunctionName: process.env.AWS_LAMBDA_FUNCTION_NAME, InvocationType: "Event", // Async invocation LogType: "None", Payload: JSON.stringify({ warmer: true, message: `ID: ${message}` }), }; try { await lambda.send(new InvokeCommand(invokeParams)); } catch (err) { // Log the error, but don't throw console.log(err, "warmLambda error"); } }</code></div></div><p>Here we initialize the Lambda client, then send an invocation to our function (<code>process.env.AWS_LAMBDA_FUNCTION_NAME</code> conveniently stores the name for us). We'll use an <code>InvocationType</code> of <code>Event</code> as we don't want to wait for a response. Lambda Extensions get between 500ms and 2000ms of processing time to perform any cleanup (500ms when registering a single extension), so we want this to be as efficient as possible. There is no guarantee that the Lambda service will respond in time, but it hasn't been an issue in all my tests. Also, if the invoke request fails, we want to catch the error and log it. This will only be called when the container is being shutdown anyway, but we want to make sure any other processes have a chance to run in the extension.</p><p>We need to update our <code>handleShutdown</code> function:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Make this async async function handleShutdown(event) { // If the shutdown wasn't because of a failure if (event.shutdownReason !== "FAILURE") { // Get the list of active Lambda environments const environments = await data.list(); // If there one or zero environments, sending a warming request if (environments.length &lt;= 1) { console.log("WARMING THE LAMBDA"); await warmLambda(extensionId); } // Remove this Lambda instance record await trackLambda(true); } // Gracefully exit process.exit(0); }</code></div></div><p>When our <code>handleShutdown</code> method is called, we first check to see if this was due to a Lambda Function failure. If it is, we likely don't want to keep trying to invoke a function that is failing. Otherwise, we retrieve a list of active environments from our datastore. If there are one or zero active environments (we assume that one is the current environment being shut down), then trigger the warming event. Regardless of the number of environments, we want to make sure we clean up the datastore record of the current environment by calling <code>trackLambda</code> with the remove argument set to <code>true</code>. Then we gracefully exit.</p><p>Our <code>handleInvoke</code> function also needs to be updated:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Make this async async function handleInvoke(event) { if (initTime + refreshInterval * 1000 &lt; Date.now()) { await trackLambda(); initTime = Date.now(); } }</code></div></div><p>Most invocations we can ignore since we don't want to update the datastore on every request. But every so often we want to send a heartbeat to the datastore to let it know an execution environment is still active. Above I'm checking to see if we've exceeded the <code>refreshInterval</code>. If we have, we update the datastore by calling <code>trackLambda()</code> and reset the <code>initTime</code>.</p><p>Finally, we can update our main extension loop logic:</p><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">(async function main() { process.on("SIGINT", () =&gt; { handleShutdown() .then(() =&gt; process.exit(0)) .catch(() =&gt; process.exit(1)); }); process.on("SIGTERM", () =&gt; { handleShutdown() .then(() =&gt; process.exit(0)) .catch(() =&gt; process.exit(1)); }); const extensionId = await register(); // Add the Lambda environment to the datastore // Do not await (optimistic) trackLambda(); // Loop and wait for the next event while (true) { const event = await next(extensionId); switch (event.eventType) { case EventType.SHUTDOWN: await handleShutdown(event); break; case EventType.INVOKE: await handleInvoke(event); break; default: throw new Error("unknown event: " + event.eventType); } } // end while loop })();</code></div></div><p>I've updated the <code>SIGINT</code> and <code>SIGTERM</code> event listeners to support the async <code>handleShutdown</code> function just in case we don't get our standard <code>SHUTDOWN</code> event. I've also added a <code>trackLambda()</code> call before we enter the loop (this is the <code>INIT</code> phase). I'm not <code>await</code>ing this as we don't want it to block the extension's initialization. Then I added <code>await</code>s to our <code>handleShutdown</code> and <code>handleInvoke</code> function calls. And that's it. Your Lambda Tail Warming is ready to go. Well, almost.</p><h3>Configuring your Lambda function for Tail Warming</h3><p>Before you can start warming your function, you have to make a few changes to ensure that the process will work correctly.</p><ol><li><strong>Enable Invoke Permissions:</strong> In order for your extension to invoke your Lambda function, the function must have permission to invoke itself. You can add the following to your IAM role:</li>
</ol><div class="rounded-lg h-full"><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language- c1">- Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: "{YOUR-LAMBDA-ARN}"</code></div></div><ol start="2"><li><strong>Add a "warmer" event interceptor to your handler code:</strong> In order for your Lambda function to respond as quickly as possible and avoid potential request blocking, you'll need to modify your handler code to short circuit requests. This will ensure that any complex logic (and potential mutations and logging) is not processed. For example:</li>
</ol><div class="rounded-lg h-full"><p>javascript</p><div class="p-4 overflow-y-auto h-full"><code class="!whitespace-pre language-javascript c1">// Handler exports.handler = async function (event, context) { if (event.warmer) { return { warmed: true }; } else { // Run my normal function code } };</code></div></div><ol start="3"><li><strong>Enable datasource access permission:</strong> In addition to the necessary Lambda Invoke permissions, you also need to make sure that the Lambda function has access to the datastore you're using to persist execution environment information.</li>
</ol><h3>How does this perform?</h3><p>Below are the traces for a rather large Lambdalith that includes the <code>canvas</code> binary to generate and manipulate image files. The first trace is the typical cold start (~3 seconds) for this application. The second 200 request below is a typical warm invocation (&lt; 60 milliseconds). The subsequent request is a Tail Warming event (note the 202 status code as this is happening asynchronously). This is a cold start (remember we do this immediately <em>after</em> the <code>SHUTDOWN</code> event of the last environment) which initializes a new execution environment and has a total duration of 3.122 seconds.</p><p>The next invocation shows a request from a user with a response time of 824ms. This application loads a significant amount of state, which typically happens during a normal user request. Our warming event short circuits this, which is why we see some additional response time during this invocation. It is possible to load state or perform some other actions during our warming event, but the goal is to find the right balance between cost and performance. The warming event saves us over 2.2 seconds of initialization time on the first subsequent user request and costs us only about 10 ms of billable time.</p><figure><img class="q-full rounded-lg border border-gray-300 drop-shadow-lg mx-auto" src="https://www.jeremydaly.com/images/blog/lambda-tail-warming-traces.png" alt="X-Ray Traces" /></figure><h3>Other things to consider</h3><p>There are several ways to improve this technique and make it more intelligent:</p><ol><li>The <code>refreshInterval</code> could be tweaked to support shorter expirations or more frequent datastore heartbeats. I found 10 minutes makes the most sense as it prevents premature removal of datastore records when the app is handling real traffic from users.</li>
<li>It's possible that a failure (network issue, missed <code>SHUTDOWN</code> event, etc.) could prevent the warming event from triggering. This would break the cycle of warming events, meaning the next <em>real</em> invocation would get a cold start. You could mitigate this by periodically checking the datastore for active records or by attaching listeners (like using DynamoDB Streams) that would do something similar. This would be in a separate process (e.g. Lambda function), so it wouldn't block invocations to the primary function unless you needed to warm it. It would add to the cost, but if you were warming multiple functions, this would benefit from the economies of scale.</li>
<li>You can add controls to turn this on and off. Extensions have access to Lambda environment variables, which are a handy and low latency way to add state to every invocation without needing to redeploy or fetch external configurations. A function configuration update could be scheduled if you wanted to automate this.</li>
<li>You <em>could</em> hydrate the state on every warming event. As I mentioned before, the majority of cold start time is typically during the initialization stage. If it makes sense to load some of that state on a warming event, then feel free to.</li>
<li>You could combine this strategy with the traditional Lambda Warming technique. When you invoke a "warm" function, this will generally extend the duration of that execution environment. That includes maintaining any global state that has been loaded. As long as an execution environment stays warm, the Tail Warming will never fire. When the environment is eventually recycled, the Tail Warming would immediately invoke a new one.</li>
<li>You could potentially use the extension to send pings to warm environments <em>before</em> a <code>SHUTDOWN</code> event. External extensions run as a separate process and might be able to use a combination of <code>INVOKE</code> events and internal timers to proactively warm functions that haven't received any recent activity.</li>
</ol><h3>Why would you use this?</h3><p>You're probably thinking to yourself, "This seems quite complicated, why not just use the traditional Lambda warmer or optimize my functions to reduce cold starts?" If done manually, then yes, I agree that the implementation is overly complex and may not be worth it. However, if you automate this as part of a larger project, I believe it provides a smarter, less intrusive, and more cost effective approach.</p><p>In many of my use cases, I have Lambda functions that sit idle for several hours, then suddenly receive a burst of traffic. This often happens with low traffic administrative dashboards or webhooks for upstream services like Slackbots. That first cold start can be an awful experience, and if the system is outward facing, can sometimes be enough for the user to abandon the page altogether. For Slackbots, the initial response must be within a strict 3 seconds. Without warming, the application we traced earlier would almost certainly fail to meet that requirement.</p><p>Optimizing your functions is a path worth exploring, but there is also the question of effort versus reward. If I shave 200ms off a 3,000ms cold start, that's great, but it likely won't come close to having as much of an impact as using a warming strategy. If you do employ a warming strategy, I think it should be slightly smarter than just sending a scheduled warming ping.</p><h3>When should you use this?</h3><p>This works best when you have <em>low traffic functions</em> with prolonged periods of inactivity between invocations. Even if you have periods where there are no requests for 5-10 minutes, cold starts will almost certainly creep in. And since this solution maintains state, you don't have to worry about warming pings colliding with actual user requests during times with consistent traffic. If you have several warm execution environments, <code>SHUTDOWN</code> events simply won't send a ping.</p><h3>Wrapping Up</h3><p>This technique is experimental and definitely has room for improvement. As I collect more data, I hope to expand upon its capabilities and perhaps codify some more complete examples. If you have any thoughts or feedback, please be sure to reach out on <a href="https://twitter.com/@jeremy_daly" target="_blank" rel="noopener">X</a> or <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>.</p><p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws-lambda" class="text-blue-800">#aws-lambda</a></p>]]></description>
      <link>https://www.jeremydaly.com/lambda-tail-warming/</link>
      <guid>https://www.jeremydaly.com/lambda-tail-warming/</guid>
      <pubDate>Wed, 23 Oct 2024 21:31:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[On writing]]></title>
      <description><![CDATA[<p>The world is filled with bad writing. There's an endless stream of long, drawn out sentences filled with clichés and logical indicators trying desperately to convince the reader to the writer's way of thinking. Paragraph upon paragraph peppered with unnecessary transitions and rhetorical tics. I know I'm guilty of this. Not only in the past, but likely even within this very first paragraph.</p><p>I like to write, but I don't often make the time. I spend a far greater portion of my time reading. Unfortunately, professionally copy-edited, well-written books and articles from the likes of O'Reilly and the New York Times are only a small part. The vast majority consist of technical blog posts, likely half written by ChatGPT, or inane chatter on X without punctuation, proofreading, or purpose. I don't expect the latter to be polished. Fleeting thoughts rarely are.</p><h3>Time is finite</h3><p>When we're young, time seems infinite. One of my teenage daughters will sleep half the day away if you let her, the other will FaceTime or Snap for hours without ever thinking about time as a currency. As I've gotten older, I've come to realize that time is my most precious commodity. It's yours, too. Perhaps you already know this. Perhaps you're too young to realize it. Someday you will. Hopefully before it's too late.</p><p>Like all precious commodities, I hate wasting time. Even more so, I hate having time stolen from me. Two years ago I resolved to avoid watching commercials on TV and online as much as possible. I even went so far as to pay for YouTube Premium and start DVRing live sporting events and the news. The purpose wasn't to ruthlessly maximize every second, it was to recapture all those wasted minutes that rarely (if ever) added any value to my life. I take plenty of time to rest, exercise, and spend time with family and friends. That is never time wasted.</p><h3>The reader is in control</h3><p>I read well over 150 articles per week curating content for the <a href="https://offbynone.io" target="_blank" rel="noopener">Off-by-none Newsletter</a>. Most are "readable", some are extraordinarily well-written, and all are appreciated. It takes a significant amount of time to write a post, plus a mustering of courage to put oneself out there to be judged. But I assume most of you neither have my motivation nor my acquired level of patience to filter through all the noise. Why would you?</p><p>As a consumer of content, <em>you</em> are ultimately in control. If the headline doesn't interest you, you don't click the link. If the first paragraph doesn't grab your attention, you hit the back button. If the prose is hard to follow and makes your head hurt, you rightfully abandon the article. You deserve good writing. Your time is valuable. Don't let anyone tell you otherwise.</p><h3>The curse of AI</h3><p>Despite what you may have heard, LLMs (Large Language Models) are not particularly good at writing compelling prose. <em>Passable?</em> Sure. The grammar is almost always spot on and much better than that of the average writer's. But read it again. It's most definitely <em>not human</em>.</p><p>I know you're not fooled by it. If you're anything like me, you certainly don't enjoy reading it. But this early fascination with "passable" prose has spread AI generated content across the Internet like a virus. It sits there, waiting to be read by both a new generation of humans and the next generation of AI that <a href="https://www.theatlantic.com/technology/archive/2023/06/generative-ai-future-training-models/674478/" target="_blank" rel="noopener">will train itself</a> on its previous iteration's mediocrity.</p><p>I worry about the future of prose. I worry about teaching humans to write like machines. I worry that most, especially non-native speakers, will eventually not know the difference.</p><h3>How I've approached writing</h3><p>The first sentence I ever wrote was likely scribbled on a mimeographed piece of paper sometime during the mid 1980s. I still remember the comically large rulings with dashed midlines to properly proportion lowercase letters. Since then I've had over 16 years of formal education, reinforcing my writing skills at every level. I took both creative and formal business writing courses all through university when earning my degree. And over the last 20+ years of my professional career, I've written countless correspondence, business proposals, marketing copy, blog posts, and more.</p><p>Even after all that, <strong>I STILL WRITE BY INSTINCT</strong>.</p><p>Of course I copy edit my own work. I check my grammar. I always check my spelling. I usually even ask someone else to review my pieces and give feedback. Yet while I'm generally a perfectionist, I'm not overly critical of my own writing. If it <em>sounds</em> good and seems to <em>flow</em> well, then that's usually <em>good enough for me</em>. The question I've been asking myself lately: <strong><em>Is it good enough for you?</em></strong></p><h3>A higher personal standard</h3><p>I spent some time rereading several of my old posts. The writing is mostly fine. Not great, but <em>fine</em>. Like most writing, nearly the entirety of my sentences are imperfect. Many are informative, but lazy. In some cases they form a string of volunteer sentences that do little more than fill space until I finally find something interesting to say. Even then I likely belabor the point as if the reader is incapable of rational thought. Most of my sentences are unnecessarily long, complicated, and hard to follow. Had I stated things clearly in the first place, some of these torturous restatements wouldn't be needed.</p><p>Perhaps I sound overly critical. After all, time is a finite, scarce resource. How much of it should be spent on meticulously crafting prose versus simply <em>putting information out there</em>? Maybe <em>good enough</em> writing is <em>good enough</em>? I certainly understand and appreciate the thinking behind that. I also don't want to discourage others from sharing their writing. I may challenge your ideas, but would never be so rude as to criticize your prose.</p><p>But <em>I want to do better</em>. I want to hold myself to a <strong><em>higher standard</em></strong>.</p><h3>Honing the craft</h3><p>I've never considered myself a <em>writer</em>. I've always just looked at myself as <em>someone who writes</em> because they have to. To me, there is a very real difference. While everyone should work to improve their writing and communication skills, a <em>writer</em> should dedicate themselves to honing their craft. They should embody their work. It should become part of their identity. It should be their purpose.</p><p>This is something I aspire to. The ability to write clear and compelling testimony of the world around us is a superpower. I envy those who can, and I want to challenge myself to do the same.</p><p>Lately I've been reading several books on writing while also restudying the nuances of English grammar. The grammar review is helpful in thinking more actively about concepts like balancing parallel ideas with the correct grammatical form and avoiding the subordination of major ideas. It also reminded me how often I've failed to use a semicolon when joining two independent clauses with a conjunctive adverb. But I suppose I shouldn't lose sleep over that.</p><p>Books on writing are even more interesting. Analyzing sentence structure, not for grammatical correctness, but for rhythm, context, and understanding what's <em>actually being said</em> is fascinating. Even reading about things such as word choice, when to invert a sentence to add variety, and how to balance sentence length to keep readers engaged, provides a renewed awareness of how important these things are.</p><p>I have no illusions of writing a perfect sentence, let alone a perfect piece. All I can do is work everyday to make myself a better writer. I can be more critical of my own writing to ensure that it's worthy of your time and attention. I can't promise I'll become a better writer, but I have every intention of trying</p><p>Comments are currently disabled, but they'll be back soon.</p>]]></description>
      <link>https://www.jeremydaly.com/on-writing/</link>
      <guid>https://www.jeremydaly.com/on-writing/</guid>
      <pubDate>Wed, 10 Jan 2024 01:00:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[New year, new blog!]]></title>
      <description><![CDATA[<p>Happy New Year, everyone! ???</p><p>I've been blogging since early 2015 (almost 9 years now!), and like most folks, I started by deploying to WordPress. Being the AWS power user that I was, I thought it would be a great idea to host it myself on EC2, set up an RDS cluster, and be responsible for everything.</p><p>When I had a post end up on Hacker News, my little EC2 instance fell over very quickly. So I decided to add a load balancer and spin up multiple EC2 instances with auto-scaling configured <em>just in case</em> lightning struck again. This setup has saved me several times since, but at the cost of an inflated AWS bill and a tremendous amount of unnecessary complexity.</p><h3>Static + Serverless is the way</h3><p>Serverless was just becoming a thing back in 2015, so it wasn't really an option at the time. However, as it's matured over the years, I've been wanting to convert my blog into something much more serverless. There have been fits and starts over the years, but I always found myself worrying about the power I'd lose by moving away from something as mature as WordPress. The vast collection of plugins available in the WordPress ecosystem meant giving up features, manually connecting other third party services, or rebuilding them yourself. At the end of last year, I finally decided to make the leap.</p><p>Several years ago I discovered <a href="https://www.11ty.dev/" target="_blank" rel="noopener">Eleventy</a>. It's a "simpler static site generator" that's 100% JavaScript-based, incredibly flexible, and supported by a growing community. After playing around with it for a bit, it became my favorite go-to option. I used it to build sites for the <a href="https://offbynone.io" target="_blank" rel="noopener">Off-by-none newsletter</a>, then the <a href="https://www.serverlesschats.com" target="_blank" rel="noopener">Serverless Chats Podcast</a>, and most recently, <a href="https://www.getampt.com" target="_blank" rel="noopener">Ampt</a> and its <a href="https://www.getampt.com/docs" target="_blank" rel="noopener">documentation</a>.</p><p>I get that static sites (SSG) can be a bit limited, but that is largely a function of where they're hosted. Both Off-by-none and Serverless Chats are currently hosted on AWS Amplify (the hosting service, not the framework). It's been a great option. Fast, reliable, and inexpensive. However, it's a bit limited when it comes to adding dynamic functionality without going all in on the Amplify Framework (which I don't want). I know there are plenty of PaaS providers out there, but I want my projects to be backed by the reliability and operational excellence of AWS.</p><p>When we built the new <a href="https://www.getampt.com" target="_blank" rel="noopener">Ampt</a> website, we decided to dog food our own service, and deploy the Ampt site to AWS <em>with Ampt</em>. Becoming our own customer was not only a great way to ensure service quality, but it also gave us the unique ability to remove all the unnecessary friction when deploying websites to AWS serverless services. And we did some pretty cool things!</p><h3>Why Ampt?</h3><p>Obviously I'm a bit biased, but my experience building and managing the Ampt website has convinced me that doing it any other way is simply a form of masochism. Ampt's goal has always been to deploy workloads to AWS using the best possible "patterns" available, and more importantly, to automatically select and manage those patterns on behalf of its users. Some patterns are easy to implement and manage, some are <em>really</em> hard.</p><p>The pattern we use for static asset routing falls into the latter category. We use a combination of Amazon CloudFront, Edge Functions, S3, Lambda Function URLs, and more, to allow dynamic routing to both static and on-demand resources. This means you can do really cool things like statically serve some pages while dynamically generating others. You can serve your API routes from the same domain as your static pages without needing to explicitly set origins in your CloudFront distributions. And you can do this without writing a single line of configuration.</p><p>If you want to use frameworks that support Server-Side Rendering (SSR), like <a href="https://www.getampt.com/docs/frameworks/next/" target="_blank" rel="noopener">Next.js</a>, <a href="https://www.getampt.com/docs/frameworks/nuxt/" target="_blank" rel="noopener">Nuxt</a>, <a href="https://www.getampt.com/docs/frameworks/astro/" target="_blank" rel="noopener">Astro</a>, <a href="https://www.getampt.com/docs/frameworks/remix/" target="_blank" rel="noopener">Remix</a>, <a href="https://www.getampt.com/docs/frameworks/sveltekit/" target="_blank" rel="noopener">SvelteKit</a>, and others, Ampt fully supports those as well. You can even mix your backend workloads into the same app, giving you all the power of AWS and Ampt running alongside your fullstack JavaScript application.</p><h3>What's next?</h3><p>If you're reading this in early January of 2024, you've probably noticed that this site is a bit of a mess. I wrote a script to convert all my old WordPress posts to markdown files, did some clean up, and put together a simple template layout. It needs a lot of work and is missing a number of things. I knew that if I waited until it was "perfect" that I'd never publish it. So I present it to you in all its messy glory.</p><blockquote>
<p>"Perfect is the enemy of good"</p>
</blockquote><p>I'll be working to polish this when I have time, but I'm much more interested in writing more, so no promises. I hope it's at least readable for now, and I look forward to sharing progress as I make it. Your feedback is always welcome and appreciated!</p><p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/eleventy" class="text-blue-800">#eleventy</a>, <a href="https://www.jeremydaly.com/tag/ampt" class="text-blue-800">#ampt</a>, <a href="https://www.jeremydaly.com/tag/serverless" class="text-blue-800">#serverless</a></p><p>Comments are currently disabled, but they'll be back soon.</p>]]></description>
      <link>https://www.jeremydaly.com/new-blog-2024/</link>
      <guid>https://www.jeremydaly.com/new-blog-2024/</guid>
      <pubDate>Fri, 05 Jan 2024 01:00:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[I love serverless, but it got something dramatically wrong]]></title>
      <description><![CDATA[<p><em>This is a repost of a recent Twitter/X post:</em></p>
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">I love <a href="https://twitter.com/hashtag/serverless?src=hash&amp;ref_src=twsrc%5Etfw">#serverless</a>, but IMO, it got something dramatically wrong.</p>
<p>It too closely coupled the underlying cloud infra with your app &amp; business logic. This not only creates a bifurcation of business logic akin to Stored Procedures, but in many cases, ties the performance of your…</p>
<p>— Jeremy Daly is building @amptdev (@jeremy_daly) <a href="https://twitter.com/jeremy_daly/status/1702757608019423672?ref_src=twsrc%5Etfw">September 15, 2023</a></p>
</blockquote>
<p>Serverless too closely coupled the underlying cloud infrastructure with your app and business logic. This not only creates a bifurcation of business logic akin to Stored Procedures, but in many cases, ties the performance of your application to the architectural decisions you’ve baked into your app code.</p>
<p>Rather than deploying apps to environments designed to support them – maintained, monitored, and optimized by platform engineers, serverless requires “developers” to understand the impact of choosing one statically configured primitive over another.</p>
<p>This <em>*is*</em> hard. The expectation that any one person can understand the complexities and nuances of several AWS (or other cloud providers’) services, while also being a competent Java, Rust, Python, etc. developer is naive at best. What you <strong>don’t know you don’t know</strong> is MUCH worse than what you <strong>know you don’t know</strong>.</p>
<p>I interviewed a 22 yo kid one time that said he was an EXPERT at Microsoft SQL Server. When I asked how long he had been using it, he replied, “Almost a year!” ?‍♂️</p>
<p>This isn’t only an incredibly stupid thing to say, it’s extremely DANGEROUS! You’re just one misconfigured Retention Policy, public S3 bucket, or IAM “*” permission away from something very, very bad happening. And this is why Terraform dominates the market, because most devs probably <strong>SHOULD NOT</strong> be trusted to deploy whatever they want to the cloud.</p>
<p>Platform engineering has been around for quite some time now (despite the recent buzz), and that’s because organizations are trying to allow their developers to be more productive, but in a way that doesn’t compromise security, performance, and cost.</p>
<p>There are plenty of Infrastructure As Code (IaC) tools that shift these burdens onto the developer. Lots of them are very good for those developers looking to move towards cloud architect roles (which are definitely needed in modern organizations). But all of these tools presuppose that developers actually want this! Or perhaps, even more naively, assume that working developers that don’t spend all day on Twitter (or X) actually have the time to invest in learning new services and digesting the latest feature added to Lambda (and how it could impact/help <em>their</em> customers).</p>
<p>I will reiterate: <strong>I LOVE #SERVERLESS</strong>. I think that deploying applications using serverless technology when possible is the fastest way to build highly resilient, global scale, virtually management free solutions. But upskilling an organization to get to that point can take years, succeeding only after running hundreds of experiments and having suffered countless failures.</p>
<p>I believe that the vast majority of developers just want to write code, and more importantly, solve their users’ problems. But developers also need to be able to harness the power of the Public Cloud. In order to do this, a radically different approach is required.</p>
<p>This is why we built <a href="https://getampt.com" target="_blank" rel="noopener">Ampt</a>. Not because we’re trying to restrict developers, but because we’re trying to FREE them. If you’re curious what this is all about, be sure to join our <a href="https://lu.ma/7lics2m3" target="_blank" rel="noopener">Launch Day livestream</a> on September 20, 2023.</p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on September 17, 2023 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/i-love-serverless-but-it-got-something-dramatically-wrong/</link>
      <guid>https://www.jeremydaly.com/i-love-serverless-but-it-got-something-dramatically-wrong/</guid>
      <pubDate>Sun, 17 Sep 2023 15:40:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Protected: Serverless Caching with Momento and MongoDB]]></title>
      <description><![CDATA[<form action="https://www.jeremydaly.com/wp-login.php?action=postpass" class="post-password-form" method="post">
<p>This content is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-4005">Password: <input name="post_password" id="pwbox-4005" type="password" size="20" /></label> <input type="submit" name="submit" value="Enter" /></p>
</form>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/caching/" rel="tag">caching</a>, <a href="https://www.jeremydaly.com/tag/cloud/" rel="tag">cloud</a>, <a href="https://www.jeremydaly.com/tag/momento/" rel="tag">momento</a>, <a href="https://www.jeremydaly.com/tag/mongodb/" rel="tag">mongodb</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on June 1, 2023 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/serverless-caching-with-momento-and-mongodb/</link>
      <guid>https://www.jeremydaly.com/serverless-caching-with-momento-and-mongodb/</guid>
      <pubDate>Thu, 01 Jun 2023 18:53:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Serverless take the wheel]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="692" src="https://www.jeremydaly.com/wp-content/uploads/2023/03/serverless-take-the-wheel-1200x692.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2023/03/serverless-take-the-wheel.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2023/03/serverless-take-the-wheel-300x173.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2023/03/serverless-take-the-wheel-768x443.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2023/03/serverless-take-the-wheel-1024x591.jpg 1024w" /></div>
<p>More control is a good thing, right? I mean, who doesn’t want the ability to twist every knob and tweak every settings to your heart’s desire so that each minute detail of your infrastructure is artisanally handcrafted? I’ll tell you who: this guy! Why? Because I have neither the time, energy, nor expertise to even begin to understand the impact of most of those configuration changes. Not only that, but I likely don’t even have the information needed to understand which optimizations are required, let alone a way to prioritize them.</p>
<p>Now, I’m not saying that I don’t want any control. There are clearly choices we developers must make, right? Right? Like, which programming language we write our applications in obviously, or whether or not we want to use Kinesis instead of SQS? Maybe how long we want our Lambda function timeouts to be, or even better, the amount of memory we want to allocate to each function? There are clear reasons to choose API Gateway REST APIs over API Gateway HTTP APIs, but what about when Function URLs make more sense? Personally, I love manually configuring SQS redrive policies. ?</p>
<h3>A smarter glue ?</h3>
<p>Okay, maybe these examples seem extreme now, but <a href="https://swardley.medium.com/why-the-fuss-about-conversational-programming-60c8d1908237?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23219" target="_blank" rel="noopener">Simon Wardley’s recent post on conversational programming</a> predicts a future where the vast majority of these decisions are no longer the developer’s. As he says, the interface (text or voice) doesn’t much matter, but the point is that beyond business logic, everything else is likely just wasted energy repeating the things that have already been done.</p>
<p>Serverless has shifted a massive amount of undifferentiated heavy lifting off of application builders, but as he says, “Even in this serverless world, the act of programming still requires you to think about what component services need to be glued together.” He goes on to say, “That is still a lot of work to be done and to be blunt, it’s work that can mostly be automated and achieved through some form of intelligent compiler.” I couldn’t agree with this more.</p>
<h3>Control is an illusion ?</h3>
<p>There has been a rapid evolution in automation and systems intelligence fueled by the meteoric rise of public clouds. For those of us that used to rack servers and configure firewalls, control was required. But every step along this evolutionary journey has seen more and more of this control become not only unnecessary, but it <strong>actually holds you back</strong>. This pattern has repeated itself over and over again. In tech, many people’s identities are defined by their sense of control, which makes inertia to accept the inevitable even harder to swallow.</p>
<p>Most of us don’t <code>malloc</code> memory anymore. Many of you probably never had to in the first place. Today, a huge majority of builders don’t spin up and configure VMs, or suffer through endless iterations of nginx config roulette. We should be embracing that. Now the question is, what will we <em>not</em> be worrying about tomorrow?</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/cloud/" rel="tag">cloud</a>, <a href="https://www.jeremydaly.com/tag/devops/" rel="tag">devops</a>, <a href="https://www.jeremydaly.com/tag/managed-services/" rel="tag">managed services</a>, <a href="https://www.jeremydaly.com/tag/server-management/" rel="tag">server management</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on March 17, 2023 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/serverless-take-the-wheel/</link>
      <guid>https://www.jeremydaly.com/serverless-take-the-wheel/</guid>
      <pubDate>Fri, 17 Mar 2023 19:58:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[The side effect of increasing developer responsibility]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2023/03/cloud-developer-responsibilities-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2023/03/cloud-developer-responsibilities.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2023/03/cloud-developer-responsibilities-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2023/03/cloud-developer-responsibilities-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2023/03/cloud-developer-responsibilities-1024x576.jpg 1024w" /></div>
<p>It wasn’t that long ago that the vast majority of <em>developers</em> didn’t worry much about infrastructure. Sure, there were plenty of us configuring Linux servers and setting up the occasional MySQL database, but that certainly wasn’t the norm. For those that worked in larger organizations, your code was likely checked into perforce or subversion, and then magically ended up in production (some days, weeks, or even months later). For many, this is probably still how they ship code.</p>
<p>During the late 1990s, web hosting companies sprung up and allowed a new breed of “web developer” to push code directly to servers accessible to the Internet. This mostly involved FTPing files to a single web server, often shared, with almost zero ability to configure anything beyond a few Apache overrides with a <code>.htaccess</code> file. When cPanel became widely available, suddenly developers had a bit more control. One click installs of MySQL and php, and suddenly there was an explosion of new use cases now available to a rapidly growing generation of developers.</p>
<p>Then came Drupal and WordPress, opening up web publishing to an entirely new population. The search wars were raging with Yahoo! and Google vying for the top spot (Lycos and Altavista were already history at this point). Suddenly Friendster and MySpace introduced a new type of online social interaction driving massive engagement and more demand. The proliferation of data centers followed with more and more companies shifting their resources to grow their businesses on the backbone of the Internet. Computing became global and the days of the single server were over.</p>
<p>If you wanted to be a serious player, you needed to buy (lots of) servers, rent colocation space, pay for a large amount of mostly unused bandwidth, license software, and become experts in operations. This was business critical and staffed with specialists whose job it was to <em>keep the servers running</em>. This wasn’t easy and it wasn’t cheap, but the world had changed. There were plenty of WordPress and Ruby on Rails sites still out there (heck, there still are), but those looking to grow a business beyond a hobby were learning that high availability was the new standard, and they were falling behind.</p>
<p>Renting dedicated servers was nothing new, but when AWS launched EC2 in 2006, suddenly the overhead of running your own servers virtually disappeared. “Elastic compute” rolled up thousands of dollars in monthly costs into a per hour charge. When I moved my hosting company from a colocation facility to AWS in 2009, my monthly cost dropped by over 80%. Managing EC2 instances wasn’t particularly easy at first, but it enabled the next generation of hyper-scalers to build without limits, taking advantage of the massive growth of the nascent mobile web sparked by the success of the iPhone.</p>
<p>Cloud architectures were still relatively simple. Autoscaling VMs with a load balancer and a few key services like S3 and SQS filled in the gaps. Developers were still mostly throwing code over the wall. Then CloudFormation (and others like Puppet and Chef) kicked off a new wave of automation, spinning up VMs and infrastructure with easily repeatable workflows. Then came the deluge of cloud services. DynamoDB, Kinesis, Lambda, API Gateway, Step Functions, and more. We now moved beyond multi-VMs to <em>multi-service</em>. Applications changed from horizontally scaled VMs connected to a database cluster to multiple services stitched together.</p>
<p>It happened over the course of a few years, but suddenly developers were no longer just being asked to use the AWS SDK to connect to a DynamoDB table or install the Kinesis Client Library. They were being asked to deploy, configure, and set the permission to connect to them, too. Whether you were writing monoliths or SOAs or microservices, your code was no longer deployed to a cluster of servers, but split into smaller parts that needed to know where it was running, from where and how it would be executed, the permissions it needed, and the special format it was required to return.</p>
<p>As soon as developers began to get comfortable with that, there was another shift. Now instead of writing code, you needed to start encapsulating business logic and processes into cloud specific configurations, connecting services together directly rather than using familiar instruction sets that we all have ingrained so deeply within ourselves. Configuration <em>over</em> code, because, yes, your code is a liability and the cloud can do it better than you.</p>
<p>Over the course of 15 years or so, developers became responsible for more than just business logic. Infrastructure and cloud architecture, build and deployment pipelines, instrumentation and observability, security and compliance, plus a whole lot more now fall directly on the shoulders of your modern day “cloud developer.” I don’t think it’s possible for one person to master all of these disciplines. I’m not even sure they can effectively be spread across a team of developers without <em>really</em> good communication and strict review processes in place. And even then.</p>
<p>We’re at an inflection point. The explosion of new tools and platforms trying to abstract away this complexity and reduce cognitive load on already overtaxed developers should be a flashing neon sign. I’m also not alone in thinking that AWS <em>can’t</em> solve this. Tools like AWS Application Composer and Amazon CodeCatalyst are all fine and good, but all they do is hide a layer of complexity that you’re still ultimately responsible for. AWS is really great at operational excellence on the service level, but only if you’ve properly wired everything together.</p>
<p>I’m not sure anyone has found a good answer to this just yet, nor do I think a silver bullet can exist. But given the increased amount of responsibilities the average cloud developer now has, I don’t blame us for seeking something better.</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/cloud/" rel="tag">cloud</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on March 2, 2023 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/the-side-effect-of-increasing-developer-responsibility/</link>
      <guid>https://www.jeremydaly.com/the-side-effect-of-increasing-developer-responsibility/</guid>
      <pubDate>Thu, 02 Mar 2023 22:40:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Why we can’t stop talking about ChatGPT]]></title>
      <description><![CDATA[<p>When ChatGPT was first released, I remember my Twitter timeline being inundated with screenshot after screenshot of AI generated responses. Everything from simple questions to complex programming logic, with most marveling at the technological advancement. The tech was incredibly interesting, for sure, but to me, it quickly became quite tiring. I even <a href="https://twitter.com/jeremy_daly/status/1599483752027037696" target="_blank" rel="noopener">contemplated muting the keyword</a> for a bit! It wasn’t because I don’t welcome progress, quite the opposite. I just had this sinking feeling that AI generated text was going to start polluting the Internet. I certainly wasn’t wrong about that, but I think there are other much more concerning angles to this.</p>
<p>There have been many, many, many, many things written and said about ChatGPT. Lots of which were probably created by (or with the assistance of) ChatGPT. For example, I find the impact on <a href="https://www.cnn.com/2023/01/19/tech/chatgpt-teachers-adjusting/index.html" target="_blank" rel="noopener">school writing assignments</a> particularly interesting (I have two teenage daughters that are no strangers to technology). But on #tech Twitter, one of the biggest concerns seemed to be about whether or not this technology can write full blown applications and replace the need for developers altogether. It’s an interesting question.</p>
<h3>Developers need to remain self-aware</h3>
<p>As I said, there is plenty already written on this. Forrest Brazeal’s excellent post asked, “<a href="https://newsletter.goodtechthings.com/p/when-programming-is-gone-will-we?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23218" target="_blank" rel="noopener">When programming is gone, will we like what’s left?</a>” He argues that there will likely be a shift in job functions, and that maybe “just good enough” code might be all upper management really cares about. The “fast and cheap is better than hand-crafted” strategy has been played out time and time again across many an industry. Then again, he also points out the fact that the speed of writing code is usually not the bottleneck for large organizations, and full blown or assistive AI is unlikely to make a huge impact.</p>
<p>Dan Conn bluntly asked, “<a href="https://devops.com/will-chatgpt-replace-developers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23218" target="_blank" rel="noopener">Will ChatGPT replace developers?</a>” He’s a bit more optimistic, pointing to the fact that not only is the technology unable to understand certain nuances, it’s also quite often <em>flat out wrong</em>. I fully agree with Dan’s points in the article, but I’m concerned that others won’t necessarily see it this way. It makes me think of the movie <a href="https://www.youtube.com/watch?v=_cA2qWgTNsM" target="_blank" rel="noopener"><em>Idiocracy</em></a> where people in the future blindly trust technology that they no longer have any idea how to build or control. There will be more and more tools built around this where people will be inadvertently putting the wrong probe in their mouth. And they won’t know any better.</p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2023/02/this-one-goes-in-your-mouth.gif"><img class="aligncenter size-full wp-image-3867" src="https://www.jeremydaly.com/wp-content/uploads/2023/02/this-one-goes-in-your-mouth.gif" alt="" width="400" height="225" /></a></p>
<h3>Learning from itself might be the least of its problems</h3>
<p>I get that AI is rapidly evolving and will continue to learn over time. But how much of the input for future learning is going to be from content and code samples <em>it</em> generated? Dan’s article mentions the <a href="https://meta.stackoverflow.com/questions/421831/temporary-policy-chatgpt-is-banned" target="_blank" rel="noopener">Stack Overflow</a> ban on ChatGPT responses. This was because, yes, some of the information <em>was wrong</em>, but the bigger problem is that ChatGPT probably used Stack Overflow and similar sites to train itself in the first place. Maybe it’s smart enough to detect its own (or other AI’s) potentially inaccurate drivel? But maybe it’s not? That seems like a vicious cycle.</p>
<p>It also seems as though it can easily be manipulated. A recent NY Times column titled, “<a href="https://www.nytimes.com/2023/02/16/technology/bing-chatbot-microsoft-chatgpt.html" target="_blank" rel="noopener">A Conversation With Bing’s Chatbot Left Me Deeply Unsettled</a>,” is clearly a bit concerning. Sure, I get that maybe this guy was intentionally pushing it, but considering that this <a href="https://www.theverge.com/2016/3/24/11297050/tay-microsoft-chatbot-racist" target="_blank" rel="noopener">isn’t the first time Microsoft had some trouble with AI chatbots</a>, it doesn’t come as a surprise. There’s been other people <a href="https://twitter.com/sethlazar/status/1626241169754578944" target="_blank" rel="noopener">posting Bing ChatBot threats</a> as well. I mean, if <a href="https://www.cnbc.com/2023/02/15/elon-musk-co-founder-of-chatgpt-creator-openai-warns-of-ai-society-risk.html" target="_blank" rel="noopener">Elon Musk is concerned</a>, then shouldn’t we all be? ?</p>
<p>While turning a Chatbot into a racist stalker pressuring you to leave your wife certainly isn’t good, I’m much more concerned about chats gone awry with those that are much more impressionable. This Verge story say it’s <a href="https://www.theverge.com/2023/2/15/23599072/microsoft-ai-bing-personality-conversations-spy-employees-webcams" target="_blank" rel="noopener">an emotionally manipulative liar, and people love it</a>. Personally, I don’t find that particularly amusing. A recent study found that <a href="https://www.pbs.org/newshour/health/cdc-data-shows-u-s-teen-girls-in-crisis-with-unprecedented-rise-in-suicidal-behavior" target="_blank" rel="noopener">30 percent of teenage girls said they seriously considered attempting suicide</a>. At least Google immediately directs you to a suicide prevention hotline and inundates you with links to resources to get help. I’m sure these chatbots will have some filters that catch a lot of these keywords, but I don’t think it’s a stretch that an extended conversation that <em>“can lead to a style we didn’t intend”</em> turns into a machine helping a distraught kid rationalize hurting themselves or someone else.</p>
<p>AI is another tool, and it’s here to stay</p>
<p>Kirk Kirkconnell wrote a post on <a href="https://medium.com/@synchrophoto/using-chatgpt-to-assist-with-content-creation-f8381dbc3566?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23218" target="_blank" rel="noopener">using ChatGPT to assist with content creation</a> by generating prompts for you. I actually thought about doing this as well, but found them to be overly generic at best. This is at least better than the plethora of blog posts we’ve already seen written by ChatGPT, most of which are <em>very</em> convincing. I honestly can’t be certain that an AI generated (or assisted) article hasn’t made its way into my newsletter. It’s easy to be fooled.</p>
<p>I’m not an old man yelling at a cloud. I do believe that ChatGPT/AI can and should assist with lots of things, including code suggestions, writing test, answering (certain) questions, and even helping to eventually optimize complex cloud workloads. Let’s just not lose sight of what separates humans from machines. Otherwise we might all be left with a really bad taste in our mouth.</p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2023/02/electrolytes.gif"><img class="aligncenter size-full wp-image-3866" src="https://www.jeremydaly.com/wp-content/uploads/2023/02/electrolytes.gif" alt="" width="480" height="270" /></a></p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/cloud-computing/" rel="tag">cloud computing</a>, <a href="https://www.jeremydaly.com/tag/programming/" rel="tag">programming</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on February 18, 2023 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/why-we-cant-stop-talking-about-chatgpt/</link>
      <guid>https://www.jeremydaly.com/why-we-cant-stop-talking-about-chatgpt/</guid>
      <pubDate>Sat, 18 Feb 2023 22:31:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Not so serverless Neptune]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2022/11/not-so-serverless-neptune-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/11/not-so-serverless-neptune.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2022/11/not-so-serverless-neptune-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2022/11/not-so-serverless-neptune-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2022/11/not-so-serverless-neptune-1024x576.jpg 1024w" /></div>
<p>Several years ago I wrote a post asking people to <a href="https://www.jeremydaly.com/stop-calling-everything-serverless/" target="_blank" rel="noopener">stop calling everything serverless</a>. I even gave a <a href="https://www.youtube.com/watch?v=vuWiB3vNiHc" target="_blank" rel="noopener">keynote</a> at Serverless Days Milan the following year pleading the same message. My contention was quite simple: “when everything’s serverless, nothing will be.”</p>
<p>Back then, “serverless” was still relatively new, and the possibilities were seemingly endless. Sure, there were a few people starting to mislabel things, and of course, haters were gonna hate, but for the most part, the argument was less about the nuances of the technology and more about the “nature” of serverless and the serverless-first mindset. <strong>But then something changed.</strong></p>
<p>What started as a few basic principles of “serverlessness” slowly morphed into something that seemed <em>less</em> serverless. For those of you that don’t remember, AWS initially pitched the four main benefits of serverless as (1) No server management, (2) Flexible scaling, (3) High availability, and (4) <strong>No idle capacity</strong>.</p>
<figure id="attachment_3739" class="wp-caption aligncenter c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-then.png"><img class="border wp-image-3739 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-then.png" alt="" width="1024" height="365" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-then.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-then-300x107.png 300w, https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-then-768x274.png 768w" /></a>
<figcaption class="wp-caption-text">(thanks <a href="https://web.archive.org/web/20170930185313/https://aws.amazon.com/serverless/" target="_blank" rel="noopener">Wayback Machine</a>)</figcaption></figure><p>As the screenshot above shows, “No idle capacity” meant:</p>
<blockquote>
<p>“You don’t have to pay for idle capacity. There is no need to pre- or over-provision capacity for things like compute and storage. For example, there is no charge when your code is not running.”</p>
</blockquote>
<p>A <a href="https://web.archive.org/web/20180608023647/https://aws.amazon.com/serverless/" target="_blank" rel="noopener">year later</a>, serverless suddenly only had <strong>THREE</strong> main benefits. I bet you can guess which main benefit didn’t make the new list. Now, there are plenty of reasons for this. The timing of the Aurora Serverless v1 launch was right around then, and even though v1 could <em>actually scale to zero</em>, the idle capacity language wouldn’t have held up.</p>
<figure id="attachment_3741" class="wp-caption aligncenter c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-three-benefits.png"><img class="border wp-image-3741 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-three-benefits.png" alt="" width="1024" height="380" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-three-benefits.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-three-benefits-300x111.png 300w, https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-three-benefits-768x285.png 768w" /></a>
<figcaption class="wp-caption-text">No more “No Idle Capacity”</figcaption></figure><p>Then, all of a sudden, right before re:Invent 2018, it had <a href="https://web.archive.org/web/20181122171727/https://aws.amazon.com/serverless/" target="_blank" rel="noopener">FOUR again</a>. But that fourth benefit is now “<strong>PAY FOR VALUE</strong>“, which means:</p>
<blockquote>
<p>Pay for consistent throughput or execution duration rather than by server unit.</p>
</blockquote>
<figure id="attachment_3738" class="wp-caption aligncenter c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-now.png"><img class="border wp-image-3738 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-now.png" alt="" width="1024" height="277" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-now.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-now-300x81.png 300w, https://www.jeremydaly.com/wp-content/uploads/2022/11/aws-serverless-four-benefits-now-768x208.png 768w" /></a>
<figcaption class="wp-caption-text">“Pay for Value”</figcaption></figure><p>Just a few days later they announced Amazon DynamoDB On-Demand where you only pay for what you use (plus storage). All of this made sense, and while perhaps that dream of “no idle capacity” had slipped away, I was willing to make the tradeoff for all the added benefits.</p>
<p>The problem is, <strong>it didn’t stop there</strong>. As the old adage goes, “if you give a mouse a cookie, he’s going to ask for a glass of milk.” Once we accepted that tradeoff, the serverless community collectively gave AWS and others an entire dairy farm.</p>
<p>We then got “serverless containers”, Provisioned Concurrency, RDS Proxy, and more. Aurora Serverless v2 came out and practically <em>no one</em> accepted that to be “serverless”. Now we have AWS Neptune Serverless that, forget about scaling to zero, <a href="https://dev.to/aws-builders/neptune-serverless-is-it-really-serverless-24mo?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23207" target="_blank" rel="noopener">costs over $290 USD per month</a> to run at its lowest capacity. And no, the free tier doesn’t count.</p>
<p>So, have we strayed so far from the purest definition of serverless that there is no going back? Or is this just what “serverless” <em>is now</em>? I hate to be the bearer of bad news, but somewhere along the way our compass broke, and we’ve strayed quite a ways off the path to the promise land. Then again, maybe it never existed in the first place?</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/cloud/" rel="tag">cloud</a>, <a href="https://www.jeremydaly.com/tag/cost-optimization/" rel="tag">cost optimization</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on November 17, 2022 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/not-so-serverless-neptune/</link>
      <guid>https://www.jeremydaly.com/not-so-serverless-neptune/</guid>
      <pubDate>Thu, 17 Nov 2022 22:48:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[The cloud isn’t the issue, you’re just using it wrong]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2022/11/using-the-cloud-wrong-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/11/using-the-cloud-wrong.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2022/11/using-the-cloud-wrong-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2022/11/using-the-cloud-wrong-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2022/11/using-the-cloud-wrong-1024x576.jpg 1024w" /></div>
<p>Tech Twitter was all abuzz recently after DHH boldly proclaimed and explained <a href="https://world.hey.com/dhh/why-we-re-leaving-the-cloud-654b47e0" target="_blank" rel="noopener">why [37signals is] leaving the cloud</a>. A <em>lot</em> of people <a href="https://twitter.com/ezra__s/status/1584114282094297090" target="_blank" rel="noopener">cheered</a>, some of us <a href="https://twitter.com/derrickreimer/status/1582756568973463552" target="_blank" rel="noopener">jeered</a>, and everyone else just <a href="https://twitter.com/Antreas_4/status/1584227001598021632" target="_blank" rel="noopener">pitched web3</a> as an alternative solution. DHH’s success has earned him a giant platform and a tremendous amount of influence, and while I often disagree with him, it’s clear that many others do not. I spent quite a bit of time reading through all the retweets, reposts, comments, and hot takes, and I came to a fairly simple conclusion: these people are <strong>using the cloud wrong</strong>.</p>
<p>There is much to get to here, but let’s start with this quote from DHH’s article:</p>
<blockquote>
<p>We’ve run on bare virtual machines, we’ve run on Kubernetes. We’ve seen all the cloud has to offer, and tried most of it.</p>
</blockquote>
<p>I’m just going to come right out and say it: if you’re running VMs or Kubernetes in the public cloud, <strong>you’re almost certainly doing it wrong</strong>. Of course “the savings promised in reduced complexity never materialized,” because you’re literally just <strong>renting</strong> <strong>hardware</strong> and <strong>managing it yourself</strong><em>. </em>You can’t reduce complexity if you’re unwilling to hand any of that complexity off to the cloud provider. Using the cloud like it’s just a datacenter for VMs is not, was not, and never will be its true purpose. The vision has always been to change the way we build and run applications, not to poorly scale the old way of doing things.</p>
<p>In the cloud, we should be <strong>renting <em>services</em>, not servers</strong>. Meeting customers where they were/are was a brilliant strategy for getting those early cloud adopters to trust the ecosystem, but now it’s become a handicap that signals acceptance of a practice that should have gone extinct years ago. As <a href="https://www.jeremydaly.com/cloud-native-versus-native-cloud-apps/">I’ve said</a>, the cloud won’t reach its full potential until we start building apps that are designed <em>for</em> the <em>public cloud</em>. Otherwise, people will continue to fail and fall victim to DHH’s ignorance.</p>
<p>One of the best rebukes of DHH’s post was by Simon Wardley in the following Twitter thread:</p>
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">X : Did you see "Why we're leaving the cloud" – <a href="https://t.co/bHGzZzTdny">https://t.co/bHGzZzTdny</a>
Me : Nope.
X : And?
Me : Why are you talking infrastructure clouds to me? This is 2022. You should have migrated to severless years ago. I'm not interested in niche edge cases.</p>
<p>— Simon Wardley ❤️?? (@swardley) <a href="https://twitter.com/swardley/status/1583814169656459265?ref_src=twsrc%5Etfw">October 22, 2022</a></p>
</blockquote>
<p>If you haven’t read it, you really should. It points out a number of factors that DHH conveniently doesn’t account for, for example:</p>
<blockquote>
<p>Last time I ran numbers on this (circa 2010) then hardware and software is normally around 20% of the cost. The rest is made up of electricity, cooling, building, physical security, racking, UPS, opportunity cost … long list.</p>
</blockquote>
<p>I was in the same boat back in late 2000s. The cost of servers and software was minimal compared to colocation space rental and its associated utilities. Not to mention that running everything in a single datacenter is a terrible idea. With serverless services, you get multiple availability zones for free, plus all those other things Simon mentioned, included in your per millisecond or invocation cost. Also, has DHH given any thought to sustainability, or did he <a href="https://www.theverge.com/2021/4/27/22406673/basecamp-political-speech-policy-controversy" target="_blank" rel="noopener">ban that topic</a> too?</p>
<p>Of course it’s more expensive if you don’t account for your Total Cost of Ownership (TCO). Hiring experts capable of providing the operational excellence of the cloud is certainly possible, but if you think you can get that for less than $500k/year, you might want to check your math.</p>
<p>So maybe it’s just about control? Or maybe it’s just about the controversy? Either way, as interesting as Basecamp and HEY are, the likelihood of them needing to create specialized services to run a SaaS app and an email search service is highly unlikely. And this is where Simon really hits the nail on the head:</p>
<blockquote>
<p>The largest delusion is usually the number of people thinking that they’re one of the special cases / niches.</p>
</blockquote>
<p>37signals could be a special case, though I highly doubt that they are. They, and millions of others, continue to abuse the cloud every day by treating it like a virtual colocation facility. And, yes, Amazon, Azure and Google are printing money, so they’re happy to be complicit. I doubt DHH’s decision will move the needle unless they can prove they made the right choice. But until we realize the <em>full potential</em> of cloud, it’ll continue to cast doubt in the minds of the people it will most benefit.</p>
<p>I had some fun by writing a parody of DHH’s post: <a href="https://medium.com/@jeremydaly/why-were-leaving-the-electric-grid-c0405ea960d4" target="_blank" rel="noopener">Why we’re leaving the electric grid</a>.</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/cloud-computing/" rel="tag">cloud computing</a>, <a href="https://www.jeremydaly.com/tag/cost-optimization/" rel="tag">cost optimization</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on November 10, 2022 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/the-cloud-isnt-the-issue-youre-just-using-it-wrong/</link>
      <guid>https://www.jeremydaly.com/the-cloud-isnt-the-issue-youre-just-using-it-wrong/</guid>
      <pubDate>Thu, 10 Nov 2022 15:55:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Serverless Platform Engineering]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2022/11/serverless-platform-engineering-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/11/serverless-platform-engineering.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2022/11/serverless-platform-engineering-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2022/11/serverless-platform-engineering-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2022/11/serverless-platform-engineering-1024x576.jpg 1024w" /></div>
<p>I’m a huge fan of Charity Majors, and I always learn something new when she shares her thoughts on anything that has to do with cloud and engineering. So when I came across this <a href="https://twitter.com/mipsytipsy/status/1580287663814324225" target="_blank" rel="noopener">Twitter post</a>, I grabbed some ? and got ready to have my mind blown. I was not disappointed.</p>
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">A excellent thread about platform engineering, the limits of marketing, and the primacy of context-specific solutions.</p>
<p>Platform engineering is simply not a product you can package and buy, and to the extent we reduce it to one, it *loses* what makes it most valuable. <a href="https://t.co/ekkC8c1SPu">https://t.co/ekkC8c1SPu</a></p>
<p>— Charity Majors (@mipsytipsy) <a href="https://twitter.com/mipsytipsy/status/1580287663814324225?ref_src=twsrc%5Etfw">October 12, 2022</a></p>
</blockquote>
<p>If you need a primer on this “new” field, check out <a href="https://thenewstack.io/platform-engineering-what-is-it-and-who-does-it/" target="_blank" rel="noopener">Platform Engineering: What Is It and Who Does It?</a> We should start by saying the concept of “Platform Engineering” certainly isn’t <em>new</em>. Netflix has been <a href="https://netflixtechblog.com/neflix-platform-engineering-were-just-getting-started-267f65c4d1a7" target="_blank" rel="noopener">talking about it</a> since 2017, and plenty of other companies have been building internal developer platforms for years. But suddenly, it seems to be all the rage. I think this is mostly because of good marketing, and some emerging companies that are starting to sell this as a “product”.</p>
<p>There is a lot that you can learn from digging through Charity’s Twitter thread. She also wrote an excellent blog post with the premise that <a href="https://www.honeycomb.io/blog/future-ops-platform-engineering" target="_blank" rel="noopener">The Future Of Ops Is Platform Engineering</a>. This gives a much more nuanced take on the evolution of DevOps and where the role of Platform Engineers and Ops Engineers differ. So, I don’t want to spend too much time on the broader topic. However, what <em>is interesting</em> to me is how this concept applies to serverless, and maybe more importantly, companies that embrace the serverless-first mindset.</p>
<h3>Can’t we just build our own internal serverless developer platform?</h3>
<p>When I think about serverless-first companies that have created internal developer platforms, the two examples that always come to mind are Liberty Mutual (with their Serverless Enablement Team) and Lego (with their Platform Squad). Now, I haven’t kept tabs on how these teams have evolved, but when they first started, their missions seemed to be quite clear:</p>
<blockquote>
<p>Provide developers and teams with the resources they need to quickly deploy well-architected serverless applications with the appropriate guardrails in place.</p>
</blockquote>
<p>This made a lot of sense to me, and considering that the vast majority of services they used were “serverless”, one might think that the amount of “Ops” required would be dramatically reduced as well. We’re not talking #NoOps here, but offloading much of that operational complexity frees up resources to work on things that move the business forward and help developers deliver better software faster. I know both teams faced all kinds of implementation and adoption challenges, which is to be expected. But even though their approaches were very different, the successes they found were because smart, specialized teams (with C-level support) iterated until they found what worked for their companies.</p>
<p>But here’s the thing. The vast majority of companies don’t have the resources (or foresight) to hire dedicated teams to build internal developer platforms. Most of that responsibility falls on the developers, who end up spending a large portion of their time learning and configuring cloud infrastructure. As these teams grow, they quickly find themselves with a patchwork of tools, configuration files, and deployment pipelines, all heaped into a giant mountain of technical debt. I don’t think this is particularly unique to serverless, but I think it’s exacerbated by the paradigm shift.</p>
<h3>Shifting left makes guardrails harder</h3>
<p>Serverless lets us build faster than ever. It makes things that seemed completely impossible just a few years ago completely possible today. But just as easily as I can spin up a globally distributed, highly-available API backed by one of the most scalable databases ever built, I can also just as easily DDoS my own application with a recursive Lambda function. As I said before, you have the ability to make very bad choices when setting up serverless (or any cloud) infrastructure. It would be nice if we could enable sensible guardrails (that don’t involve hiring a platform team) as well as reduce the overall complexity and cognitive load, all without taking away too much flexibility.</p>
<p>When using serverless cloud infrastructure, the code a developer writes is often directly tied to the primitives it uses. If you’ve ever looked at a complex serverless application’s architecture diagram, you’ll likely see a myriad of managed services glued together by multiple functions, queues, streams, event buses, state machines, and more. Not only does the developer need the ability to provision these services and connectors, but their code needs to be written in a way that appropriately interfaces with them. It’s hard to put guardrails on this type of required flexibility without blocking the developer at every turn.</p>
<p>The other reason it’s hard to limit serverless developers is because of this idea of “configuration over code.” When a Lambda function fails, or timeouts, or throttles requests, you can’t write defensive code to handle those exceptions. The cloud <em>has to</em> do it for you. And the only way to tell the cloud how you want to handle it is through configuration. This creates a necessary bifurcation of your business logic that developers <em>must</em> be able to control. Take this a step further and add VTL mapping templates to API Gateways for direct service integrations, configure resolvers in AppSync, or build entirely functionless workflows using Step Functions. Put too many blockers in place, and you’ll kill developer creativity and productivity.</p>
<h3>Finding the right balance</h3>
<p>As Charity said, “If you draw the line a little too far to the left, you won’t be able to support enough product differentiation to succeed. A little to the right, and the maintenance costs will drown you and put you out of business.” I’m not entirely sure where that line is for serverless applications, but I whole-heartedly agree that generic solutions likely aren’t the answer. Right now, it has to be much more nuanced and specific to the organization.</p>
<p>Charity also said, “The beautiful thing about infrastructure is that there comes a point where you can stop treating infrastructure code like *code*, and instead treat it like trusty little black box building blocks that nobody has to waste any cognitive capacity on.” That sounds like the holy grail to me, and I think it’s even more possible with serverless given the number of <a href="https://serverlessland.com/patterns" target="_blank" rel="noopener">patterns</a> that have emerged over the years.</p>
<p>Of course, there are still the questions of control, responsibility, and who owns what. How much of the platform can we abstract away into these “little black box building blocks” knowing that there are hidden complexities beyond our control, yet still critical to our workloads? What happens when we reach their limits? What happens when they fail, as <a href="https://thenextweb.com/news/werner-vogels-everything-fails-all-the-time" target="_blank" rel="noopener">everything does all the time</a>?</p>
<p>This is a hard problem to solve. I know because my team has been working on a solution for almost 2 years now. But ultimately, I think the goal should be to bring the <em>full power of the cloud</em> directly into the hands of the everyday developer. That requires both guardrails and guidance, as well as the right abstractions to minimize cognitive overhead on all that <em>undifferentiated</em> stuff.</p>
<p>I too worry that a “platform engineering” product could get this wildly wrong, limiting developer creativity in any number of ways. But at the same time, I think that cloud complexity has made it very difficult for companies to do this on their own.</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/platform-engineering/" rel="tag">platform engineering</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on November 3, 2022 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/serverless-platform-engineering/</link>
      <guid>https://www.jeremydaly.com/serverless-platform-engineering/</guid>
      <pubDate>Thu, 03 Nov 2022 19:14:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Getting abstractions wrong with AWS SAM Serverless Connectors]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2022/10/getting-abstractions-wrong-serverless-connectors-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/10/getting-abstractions-wrong-serverless-connectors.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2022/10/getting-abstractions-wrong-serverless-connectors-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2022/10/getting-abstractions-wrong-serverless-connectors-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2022/10/getting-abstractions-wrong-serverless-connectors-1024x576.jpg 1024w" /></div>
<p>I was intrigued when I first saw the announcement of <a href="https://aws.amazon.com/about-aws/whats-new/2022/10/aws-sam-serverless-connectors/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23204" target="_blank" rel="noopener">AWS SAM Serverless Connectors</a>. I don’t use SAM very much (if at all anymore), so it wasn’t the hope of this being some sort of silver bullet for my occasional IAM frustrations that got my attention. Rather, it was another opportunity to learn how AWS is trying to abstract away their mostly self-imposed complexity problems. Unfortunately, I think they missed the mark on this.</p>
<p>Finding the right level of abstraction is hard. Us developers are a finicky bunch, and we know what we like, and like what we know. Providing too high a level of abstraction will turn most of us off, but providing too <em>low</em> of an abstraction could mean introducing new complexity that outweighs the benefits gained. Case in point: <code><a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-connector.html" target="_blank" rel="noopener">AWS::Serverless::Connector</a></code>. The motivations are pure, and the simplistic idea of a <code>Destination</code>, a list of <code>Permissions</code>, and a <code>Source</code> make total sense. The problem is that the services it connects are much too varied to let this abstraction serve as a universal connector.</p>
<p>Let’s start with this basic example from the <a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-connector.html" target="_blank" rel="noopener">docs</a>:</p>
<figure id="attachment_3689" class="wp-caption aligncenter c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-basic.png"><img class="size-full wp-image-3689" src="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-basic.png" alt="" width="1432" height="527" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-basic.png 1432w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-basic-300x110.png 300w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-basic-768x283.png 768w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-basic-1024x377.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-basic-1200x442.png 1200w" /></a>
<figcaption class="wp-caption-text">Basic example to have an AWS Lambda function read from and write to an Amazon DynamoDB table</figcaption></figure><p>So as long as you are in a single SAM template, an <code>Id</code> for the <code>Source</code> and <code>Destination</code> are all you need to enable “Read” and “Write” access to your DynamoDB table. Seems simple enough. Except, as Allan Chua <a href="https://towardsaws.com/an-opinionated-view-of-aws-sam-connectors-844bdd8f96fa?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23204" target="_blank" rel="noopener">points out</a>, it takes 9 lines of code versus 3 lines using AWS SAM policy templates. Verbosity isn’t <em>always</em> a bad thing, especially if it provides clarity that makes reasoning about your IaC easier, but I don’t think that applies here.</p>
<p>To be clear, I’m not a <em>huge</em> <em>fan</em> of policy templates either (I’ll explain why in a minute), but I do like that they are at least organized <em>within</em> the function configuration. Serverless Connectors can be <strong>anywhere</strong> within your SAM template. This means that in order to know which services your function has access to, or potentially which services have access to your function, you need to search out a disconnected piece of configuration drivel. This may be trivial in a small template, but Allan’s <a href="https://towardsaws.com/an-opinionated-view-of-aws-sam-connectors-844bdd8f96fa?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23204" target="_blank" rel="noopener">example of just a few integrations</a> start to show the extra bloat. Imagine a template with lots of functions, each with their own sets of connectors?</p>
<p>Beyond the potential added bloat in a single template, there is also a very good chance that your applications will grow to include multiple stacks that need to interact with one another. A single API that spans multiple templates, a shared datastore, or an SQS topic with consumers and producers in separate stacks come to mind.</p>
<p>Take this example from the <a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-connector-resourcereference.html" target="_blank" rel="noopener">docs</a>:</p>
<figure id="attachment_3690" class="wp-caption aligncenter c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors.png"><img class="size-full wp-image-3690" src="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors.png" alt="" width="1432" height="636" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors.png 1432w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-300x133.png 300w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-768x341.png 768w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-1024x455.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-1200x533.png 1200w" /></a>
<figcaption class="wp-caption-text">AWS::Serverless::Connector resource types</figcaption></figure><p>We’re now specifying a <code>Type</code>, the <code>ResourceId</code>, and in this case, the <code>Qualifier</code>, which is a (slight) shortcut to specifying the ARN and resource. Maybe I’m a bit old fashioned, but I’m not seeing a particular advantage over the IAM policy below, which came up as the first result when I Googled “iam permission for allowing post to lambda from api gateway.”</p>
<figure id="attachment_3688" class="wp-caption aligncenter c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-iam.png"><img class="size-full wp-image-3688" src="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-iam.png" alt="" width="1432" height="456" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-iam.png 1432w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-iam-300x96.png 300w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-iam-768x245.png 768w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-iam-1024x326.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2022/10/serverless-connectors-iam-1200x382.png 1200w" /></a>
<figcaption class="wp-caption-text">IAM policy example for API execution permissions</figcaption></figure><p>There’s another disconnect that becomes a bit obvious here: the <strong>Read</strong> and <strong>Write</strong> semantics. While it sort of makes sense (I think) that you are “writing” to a Lambda function on an HTTP POST request, the underlying permission is <code>execute-api:Invoke</code>. Now, I may be wrong here (because I didn’t test this), but I’m guessing that either <code>Read</code> or <code>Write</code> permissions would translate to <code>Invoke</code>. So I could write a connector that gave “write” permission on a <code>GET</code> route, and “read” permissions on a <code>POST</code> route, and everything would work just fine. Those semantics are wrong, and for the uninitiated, I could see this causing more confusion than it’s worth.</p>
<p>Another issue with the Read/Write semantics is their varied scope. <code>Read</code> permission on a DynamoDB table assumes you can do no destructive action, while <code>Write</code> assumes the ability to add and (probably) update data. But <code>Write</code> in this context also gives you the ability to <em>delete</em> items. And what about with an SQS Queue? The <code>Read</code> permission would presumably give you <code>sqs:ReceiveMessage</code>, but that only gets you part of the way there. You also need <code>sqs:DeleteMessage</code> if you want to remove a message from a queue. This would require you to add <code>Write</code> permissions, which would then give you <code>sqs:SendMessage</code> as well. This is not what I want if I have separate consumers and producers. It might just be me, but this doesn’t seem intuitive.</p>
<p>Let’s go back to DynamoDB for a second. I wrote a post a while ago about <a href="https://www.jeremydaly.com/ensuring-data-integrity-with-dynamodb/" target="_blank" rel="noopener">Ensuring Data Integrity with DynamoDB</a>. There are a lot of nuances in there that describe situations where you might want to limit upserts, prevent deletes, or isolate attributes. Those might be slightly advanced, but even adding <code>Delete</code> as an option to the <code>Permissions</code> config would add a bit more control and <em>maybe</em> help with the confusing semantics. This is also the primary reason why I don’t particularly like SAM Policy Templates. They’re too broad, and IMO, discourage the principle of least privilege. But, hey, at least you can see <a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-template-list.html" target="_blank" rel="noopener"><em>what</em> permissions</a> each one grants.</p>
<p>Like I said, abstractions are hard, and sometimes you just need to go for it and see where it lands. Overall, I think the SAM team does a good job trying to accommodate their users by giving them features that makes building serverless applications easier. But in this case, I think they may have done the opposite.</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/abstractions/" rel="tag">abstractions</a>, <a href="https://www.jeremydaly.com/tag/infrastructure-as-code/" rel="tag">infrastructure as code</a>, <a href="https://www.jeremydaly.com/tag/security/" rel="tag">security</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on October 27, 2022 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/getting-abstractions-wrong-with-aws-sam-serverless-connectors/</link>
      <guid>https://www.jeremydaly.com/getting-abstractions-wrong-with-aws-sam-serverless-connectors/</guid>
      <pubDate>Thu, 27 Oct 2022 14:47:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Cloud Native versus Native Cloud apps]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2022/10/native-cloud-apps2-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/10/native-cloud-apps2.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2022/10/native-cloud-apps2-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2022/10/native-cloud-apps2-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2022/10/native-cloud-apps2-1024x576.jpg 1024w" /></div>
<p>I’ve been spending a lot of time lately thinking about the next evolution of the cloud, and more importantly, what the developer experience looks like. A few years ago, I think that most of us in the serverless ecosystem thought that the path forward seemed quite clear. Serverless-first was obviously “the way.” Small, discrete, single-purpose functions interconnected through a series of planet-scale, self-upgrading, managed services with built-in redundancy was the holy grail of cloud development.</p>
<p>Of course there were some gotchas in there, and not every use case was a perfect fit, but over time we figured these would be addressed as the technology evolved. For the most part, that has come to pass. Even if AWS hasn’t quite yet solved some of these issues, other cloud providers and startups have certainly tried. But while serverless was slowly preparing to cross the chasm, another already widely accepted technology was gaining traction in the cloud: containers.</p>
<p>To be perfectly clear: I really like containers. They solve a number of problems that traditional VMs don’t. They’re highly portable, they’re (mostly) lightweight, and they make an excellent packaging format. There are also lots of advantages to using them for code execution in the cloud. They can handle multiple concurrent connections, they’re better for stateful workloads, they’re not limited by arbitrary timeouts, and they are <em>much cheaper</em> for high volume workloads. But for just about anything beyond application code execution, using containers in the cloud…seems crazy to me!</p>
<p>Kubernetes is a marvel of engineering, and you can run robust implementations of popular software systems like Apache Kafka and PostgreSQL on it with relative ease. But just because you <em>can</em> doesn’t mean you <em>should</em>. Unless your business is <em>literally</em> running a database service, why would you even think about trying to support something like that? Between all the different cloud provider offerings, or the myriad of startups building serverless databases, queues, caches, and more, what is the advantage of managing these services yourself? The answers I hear the most are <em>customization,</em> <em>cost</em>, and <em>portability</em>. I call shenanigans.</p>
<h3>I need more control</h3>
<p>If I’ve said it once, I’ve said it a hundred times: control is an illusion. Customization typically boils down to performance tuning, something that can go wildly wrong in the cloud, even for highly-knowledgable engineers. The cloud isn’t just “someone else’s computer”, it is a complex system that requires optimizations you don’t know how, or have the ability, to make. If your application gets to a point where you’ve reached the limits of a cloud service, reach out to the service team and they’ll be more than happy to work with you to make their service better. It’s happened several times to me.</p>
<h3>The cost of portability</h3>
<p>Cost can be a valid concern, but look at the overall TCO. It takes a really, really large cloud bill to offset even a small team of specialized engineers. But the one that really gets me is <em>portability</em>. If you built an application that can be ported back to a local datacenter, then <strong>you have NOT built an application that is NATIVE to the cloud</strong>.</p>
<blockquote>
<p>The CNCF defines “Cloud Native” as <em>“technologies that empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.”</em></p>
</blockquote>
<p>The majority of CNCF projects follow the “write it once, and run it anywhere” mantra. But the public cloud, and the services that were built for it, had a very different vision.</p>
<p><a href="https://www.linkedin.com/in/allan-vermeulen-58835b/" target="_blank" rel="noopener">Allan Vermeulen</a>, one of the original creators of S3, has said that they built these services to achieve things that could <strong>NEVER</strong> be solved by the datacenter. The types of applications that can be built on a public cloud <strong>CANNOT</strong> be ported back to the datacenter because they don’t have the primitives to support it. The cloud introduces new levels of scale and capabilities that the on-premises environment is simply not capable of providing. This incredible power is available to you <em>right now</em>, on-demand, and you generally only pay for what you use.</p>
<h3>The future is Native Cloud apps</h3>
<p>So perhaps “Cloud-native” makes sense when you <em>very</em> loosely define the term “cloud”, but let’s not pretend that portability to massively subpar alternatives is a good strategy. Especially when the <em>public cloud</em> providers give us not only the primitives, but also the operational excellence that is impossible for most others to achieve.</p>
<p>A serverless-first mindset is a step in the right direction, but the public cloud is bigger than that. Edge compute and containers will play a massive role in the future of cloud, as will security, compliance, sustainability, and more. We need a way to classify the applications of the future. The ones that are <strong>BUILT FOR THE PUBLIC CLOUD</strong><em> </em>and all its awesome power, not the ones that are still chained to the data centers of the past. For now, I’m calling them <strong>native cloud applications</strong>, and I firmly believe that this is the path forward.</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/cloud/" rel="tag">cloud</a>, <a href="https://www.jeremydaly.com/tag/cloud-computing/" rel="tag">cloud computing</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on October 21, 2022 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/cloud-native-versus-native-cloud-apps/</link>
      <guid>https://www.jeremydaly.com/cloud-native-versus-native-cloud-apps/</guid>
      <pubDate>Fri, 21 Oct 2022 18:41:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Can serverless really save polar bears?]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2022/10/can-serverless-save-polar-bears-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/10/can-serverless-save-polar-bears.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2022/10/can-serverless-save-polar-bears-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2022/10/can-serverless-save-polar-bears-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2022/10/can-serverless-save-polar-bears-1024x576.jpg 1024w" /></div>
<p>JV Roig wrote a great article recently about <a href="https://medium.com/@jvroig.cascadeo/polar-bears-serverless-and-sustainability-64c10096877e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23202" target="_blank" rel="noopener">polar bears, serverless and sustainability</a>. The premise is quite simple: if we make better choices in the cloud, we can reduce our impact on the environment, and thus, save the polar bears. The sentiment is nice, but it is, of course, much more complicated than that. This begs the question, how much impact can our cloud choices really have?</p>
<p>Like with anything, your (or your company’s) cloud usage pales in comparison to the 90 billion kilowatt-hours (or roughly 3% of total global electricity consumption) used by data centers each year. So even though my family <a href="https://www.serverlesschats.com/59/" target="_blank" rel="noopener">switched to cloth napkins</a> and compostable coffee pods, these choices (although no doubt selfless, and might I even say, bordering on heroic ?) have a net zero impact on the environment. Why? Because these choices don’t have any <strong>systemic change</strong>.</p>
<p>I don’t <em>mean</em> to come across as cynical here (although I definitely am). And I’m not going to say that these choices aren’t noble in their own right, because, of course, everyone has to “do their part.” But I truly believe that the only way to have any <em>real, meaningful</em> impact is to change the system, not simply ration its outputs. Turning down my thermostat by a couple of degrees may save a few gallons of oil, and switching to energy efficient bulbs and appliances might shave a few kilowatt hours off my electric consumption, but those are quickly offset by the world’s ever increasing need for more and more energy. I wish I had more faith in humanity, but let’s face it, not everyone cares about polar bears.</p>
<h3>A foundation for systemic change</h3>
<p>So let’s go back to the question about the impact we can have with our cloud choices. The two sustainability “moves” that JV focuses on are “Region Selection” and the use of “Serverless.” While I love the idea that these choices are available to you, my cynical brain wants to say that <em>right now</em> neither of them will have much more of an impact than choosing cloth napkins. However, my more altruistic side says these choices actually lay the foundation for much needed systemic change.</p>
<p>Let’s start with regions. First of all, I appreciate the major cloud providers’ efforts to invest in sustainable energy projects and carbon-neutral data centers. I have a lot of questions, especially about <a href="https://www.youtube.com/watch?v=6p8zAbFKpW0" target="_blank" rel="noopener">the use of carbon offsets</a>, but at least the effort is there. And part of the reason why they <em>can</em> do this is because of their massive scale. Companies that build their own data centers generally don’t have the same incentives to be constantly upgrading hardware or investing in sustainable energy. For an individual company, the benefits likely don’t outweigh the costs, leading to an incredible amount of inefficiency as the technology ages.</p>
<p>Simply moving workloads into the cloud means you <em>should</em> be getting continuous improvements and upgrades without needing to do (or spend) anything. Choosing a region that is <em>more sustainable</em> than another is a nice gesture, but even if you don’t, just choosing “the cloud” will eventually get you there, assuming the cloud providers continue to do the right thing.</p>
<h3>What about serverless?</h3>
<p>I remember when Werner announced the AWS Well-Architected Sustainability Pillar at last year’s re:Invent, <a href="https://twitter.com/jeremy_daly/status/1466468489535926273" target="_blank" rel="noopener">my first thought</a> was that he was basically saying, “You should go serverless!” But does choosing serverless actually have an impact? Right now, no, I don’t think it offsets that much given all those EC2 instances are still relatively efficient VMs. Sure, they pack quite a few Lambda functions onto a single machine, and you can certainly save CPU cycles if your apps sit idle most of the time, but I’m definitely getting compostable coffee pod vibes.</p>
<p>However, building your applications <em>serverlessly</em> hands over future efficiency decisions to the cloud provider. Not only can they upgrade the infrastructure that your serverless services run on, but they can update the runtimes, the chip architectures, and even how they provision certain components of your application. It’s amazing when a serverless service just gets better without any effort from you. It’s also amazing when they become more efficient and sustainable.</p>
<h3>Go save some polar bears!</h3>
<p>So, yes, use the cloud, pick a sustainable region if you can, and most definitely build your applications serverlessly. It might only save a few paper napkins today, but it also unlocks a path for cloud providers to implement true systemic changes that might just save a polar bear or two.</p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on October 13, 2022 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/can-serverless-really-save-polar-bears/</link>
      <guid>https://www.jeremydaly.com/can-serverless-really-save-polar-bears/</guid>
      <pubDate>Thu, 13 Oct 2022 14:15:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Is learning serverless really that hard?]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2022/09/is-serverless-hard-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2022/09/is-serverless-hard.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2022/09/is-serverless-hard-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2022/09/is-serverless-hard-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2022/09/is-serverless-hard-1024x576.png 1024w" /></div>
<p>I came across Paul Johnston’s <a href="https://pauldjohnston.medium.com/learning-serverless-and-why-it-is-hard-4a53b390c63d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23201" target="_blank" rel="noopener">Learning Serverless (and why it is hard</a>) post one Saturday morning, and ended up with a sore neck because I was nodding in agreement the entire time I was reading it. Okay, maybe the neck pain had more to do with how I slept the night before, but I’m quite sure the agreeing nods contributed. But when it comes to learning serverless, a little bit of neck pain, IMO, is the least of your problems.</p>
<p>I’ve been building serverless applications since 2015. This was before you could attach a Lambda Function to a VPC, or EventBridge, or StepFunctions, or hundreds of the other amazing features that exist today. When I first discovered Lambda Functions, even API Gateway didn’t exist! Yep, the staple service in almost <em>ALL</em> of our serverless apps wasn’t available until mid 2015. Since then, AWS has grown to over 250 services, with each one growing in complexity as the years roll by.</p>
<p>It’s easy to argue that the added complexity was a necessary maturing of the tech, and as I highlighted in Paul’s piece, <em>“…whatever you may have read or heard from someone, the number of scenarios where a serverless approach is not appropriate is *vanishingly* small.”</em> But the question is: “At what cost?” Has this growing complexity made serverless inaccessible to the majority of developers?</p>
<h3>The evolution of the cloud (engineer)</h3>
<p>Before we can answer that question, I think we need to level-set where serverless (or rather adopting a serverless approach) fits into a cloud engineer’s evolution. Paul astutely points out that there is no clear path for the developer, but there should be little doubt that cloud providers see “serverless” (read: servicefull, on-demand, distributed, and managed infrastructure) as the future of cloud. Their definitions and implementations may vary widely, but it’s clear that most cloud primitives are evolving into plug and play managed services.</p>
<p>As that shift continues to happen, one might even assume that all “cloud” engineers will essentially be forced into using these newfangled “serverless” components. This will simply be “the way” to build cloud applications in the future, and if you don’t figure out how to stitch these all together, you might find yourself left out of the revolution. Serverless is coming for us all. Resistance is futile. Or is it?</p>
<h3>Shortcuts are holding us back</h3>
<p>The push for this new way of building applications is continuously stymied by the “meet customers where they are” edict, which often results in suboptimal intermediate solutions that <em>might</em> move the bar in the right direction, but ultimately delays what should be the inevitable. This is why we ended up with 19 different ways to deploy containers on AWS. But the forced complexity may be at a breaking point. Look at the dozens (if not hundreds) of startups looking to make cloud development easier.</p>
<p>Whether they’re no-code or low-code, proprietary or container-based, the vast majority of them feel like they are driving us to a <em>Cloud 1.5</em>, rather than the <em>Cloud 2.0</em> the major providers have been building to for years. And you can forget about Paul’s sweet spot of <em>Event-driven thinking + “Speedy, Simple, Singular” Functions + Low Latency Data Layer development</em>. These <em>new</em> solutions rely on skills from the past rather than encourage learning and embracing the more modern approach that Paul advocates for.</p>
<p>Back to the question about the ultimate cost of all that extra complexity. I think the cloud providers failed to win hearts and minds with this new approach and way of thinking. Their tooling was mostly terrible, and if it weren’t for a thriving community of diehard serverless fans building observability tools, OSS projects, and other workarounds, it possibly would have died on the vine a long time ago. This failure has given oxygen to a new generation of stopgap solutions that will get us no closer to the ultimate vision of a truly “serverless” cloud future.</p>
<h3>A serverless journey takes commitment, and deeper understanding of the cloud</h3>
<p>If you ask me why serverless is so hard to learn, I’d point you to Paul’s article and add that beyond the mental shift, the required complexity of a well-architected, multi-service serverless application is just too daunting for the majority of developers. Sadly, this means that most will fall back to platforms that support their old way of thinking and never feel the need to learn the serverless approach.</p>
<p>Alex DeBrie made the following observation on Twitter:</p>
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">When I hear someone say “Serverless development is too hard!”, 96.2% of the time it’s because they’re deploying with:</p>
<p>– Raw CloudFormation and bash scripts
– AWS CLI + bash scripts
– AWS console</p>
<p>Don’t do this! Use a deployment tool! There are so many — pick one at random.</p>
<p>— Alex DeBrie (@alexbdebrie) <a href="https://twitter.com/alexbdebrie/status/1577654898924998657?ref_src=twsrc%5Etfw">October 5, 2022</a></p>
</blockquote>
<p>I see his point, but I don’t think this truly captures the depth of the problem. If you are building a “serverless” app (whatever that even means now) and <em>not </em>using a deployment tool/framework, then yes, you’re making it much harder. Deployment tools and frameworks certainly help make it easier to spin up magical cloud infrastructure, but they also let you make <em>a lot</em> of <strong>bad choices</strong>. If you don’t understand cloud architecture, how distributed systems work, and what these tools are actually doing, then they haven’t solved the real issue.</p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on October 6, 2022 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/is-learning-serverless-really-that-hard/</link>
      <guid>https://www.jeremydaly.com/is-learning-serverless-really-that-hard/</guid>
      <pubDate>Thu, 06 Oct 2022 18:39:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Let’s talk about the cloud skills gap]]></title>
      <description><![CDATA[<p>Lydia Leong recently wrote a thought-provoking piece suggesting that <a href="https://cloudpundit.com/2022/09/12/cloud-adoption-will-fail-because-of-the-skills-gap/" target="_blank" rel="noopener">cloud adoption will fail because of the skills gap</a>. This certainly isn’t (or shouldn’t be) news to those of us paying attention. The cloud has become progressively more complex as it has matured. There has been an explosion of cloud services, a rapid expansion of public cloud competitors that are achieving (or exceeding) feature parity for the most common use cases, and a third-party market that now contains more than 1,000 “cloud-native” tools, services, and platforms.</p>
<p>So is it hard to believe that the “cloud have-nots”, i.e. the vast majority of developers who haven’t had the freedom (or mandate) to experiment with cloud services, face significant headwinds on their own digital transformation journeys? It shouldn’t be. I’ve been working with AWS since 2009, back when there were just a few services. Today, Amazon has over 250 services, and I’d guess that I’m <em>proficient</em> with less than 10% of them, and even that might be an exaggeration.</p>
<h3>How much can any one person <em>really</em> know?</h3>
<p>I don’t think I’m alone here either. I’ve probably <em>used</em> well over a hundred AWS services, but oftentimes they were for an obscure part of the application. Or even worse, some sort of uninteresting infrastructure configuration. I likely spent hours looking through documentation and blog posts in order to flip some switch, and then almost certainly forgot what I did and why I did it. Time well-spent (I hope) for the sake of <em>that</em> application, but it was the kind of non-reinforced heavy lifting that will probably require a similar level of effort the next time I face the same issue.</p>
<p>What about the plethora of services at Cloudflare, Azure, GCP, and others? Add in offerings from the CNCF’s “Cloud Native Landscape” and you <em>might</em> find the average cloud developer with proficiencies in the low single digits. I’m not extraordinary, and I know lots of cloud developers that hold much broader skillsets, but even the smartest person out there likely has a working knowledge of less than 5% of the total landscape. And even if that person does exist, you can’t afford them.</p>
<p>And this is where the organizational skills gap that Lydia refers to really kicks in. Organizations of all sizes are typically full of people making the <a href="https://twitter.com/jeremy_daly/status/1569436241581735937" target="_blank" rel="noopener">wrong technology decisions</a>. It doesn’t mean that the people making these decisions aren’t smart, dedicated, masterful technologists, it just means that bias, ignorance, corporate pressure, and other constraints ultimately result in subpar choices. Choices that then force your organization to require resources with specialized skillsets. Even assuming that your organization can upskill or hire resources in the short term, maintaining competency and institutional knowledge in the long term is always a challenge.</p>
<h3>What’s the solution?</h3>
<p>There is no easy or immediate solution. Companies aren’t going to repatriate to their own data centers. That time has definitely passed. Cloud is simply the way forward. The “crisis-level skills gap” that Amy Sarah John refers to in <a href="https://wire19.com/6-long-term-planning-trends-for-cloud-and-edge-computing/" target="_blank" rel="noopener">6 long-term planning trends by Gartner for cloud and edge computing</a> suggests a few ideas, but focusing on Kubernetes and talent programs simply aren’t going to get you there. There are too many things to learn and too high a turnover in tech. Couple that with a flurry of poor technology choices by upper management and most organizations will find themselves on the refactoring hamster wheel constantly adopting new silver bullets that they’ll likely shoot themselves in the foot with.</p>
<p>The long term solution has to go beyond simply training more cloud generalists. Specialization will always be useful, but cloud is about composition and integration, and the complexity has outgrown the <em>average</em> person’s (and organization’s) capabilities. Right now there is a relatively small group of people that are able to effectively write “machine code” for the cloud. Everyone else is waiting for the cloud equivalent of C and C++.</p>
<p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on September 30, 2022 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/lets-talk-about-the-cloud-skills-gap/</link>
      <guid>https://www.jeremydaly.com/lets-talk-about-the-cloud-skills-gap/</guid>
      <pubDate>Fri, 30 Sep 2022 20:56:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Ensuring Data Integrity with DynamoDB]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2021/12/ensuring-data-integrity-with-dynamodb-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2021/12/ensuring-data-integrity-with-dynamodb.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2021/12/ensuring-data-integrity-with-dynamodb-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2021/12/ensuring-data-integrity-with-dynamodb-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2021/12/ensuring-data-integrity-with-dynamodb-1024x576.png 1024w" /></div>
<p>DynamoDB is an incredibly powerful NoSQL database. It’s schema-less, which gives you lots of flexibility, but it also means that you are responsible for managing the integrity of your data. This includes ensuring the structure of your data, as well as the ability to preserve metadata throughout your data’s lifecycle.</p>
<p>Unfortunately, DynamoDB doesn’t currently store any metadata associated with items. If you want to know when a particular item was written to the table, for example, you have to store that information yourself. While it’s not particular difficult to add these attributes to an item, maintaining their integrity can come with some challenges.</p>
<p>In this article, we’ll discuss several strategies that can be used to ensure data integrity in your DynamoDB tables.</p>
<h2>Data management with PutItem and UpdateItem</h2>
<p>Before we discuss how to ensure our data’s integrity, let’s quickly review the ways in which we can add/modify data in our DynamoDB tables. Similar to RBDMS, DynamoDB supports both “INSERTS” and “UPDATES”, however, these two operations behave much differently than their RDBMS counterparts.</p>
<p>DynamoDB uses <code>PutItem</code> to add items to your table. Unlike RDBMS, <code>PutItem</code> replaces existing items by default. While you can add overwrite protection to your <code>PutItem</code> API calls, DynamoDB does not support service-side enforcement. This means that you can inadvertently overwrite an entire item, losing any metadata that you may have stored with it.</p>
<p><code>UpdateItem</code> behaves as an “UPSERT” operation. This means that if you try to update an item that doesn’t exist, DynamoDB will automatically create it for you. Like with <code>PutItem</code>, you can add conditions to your <code>UpdateItem</code> API calls to modify this behavior, but there is no way to implement it service-side. <code>UpdateItem</code> also merges root attributes, allowing you to perform partial updates without needing to pass the entire object in.</p>
<p>We’ll show some examples of these operations throughout this article.</p>
<h2>Protecting data on UPSERTS</h2>
<p>UPSERTS are an incredibly powerful capability of DynamoDB, allowing you to essentially fallback to a <code>PutItem</code> operation if the item doesn’t exist. This is a great feature, but it also means that you have to provide both defaults for items that don’t exist, as well as overwrite protection for metadata that already does. A simple example is with <code>created</code> and <code>modified</code> attributes:</p>
<div id="crayon-61bbcc0994ed4688550196" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
        TableName: 'myTable',
        Key: { pk: 'somePK', sk: 'someSK'},
        UpdateExpression: 'SET #ct = if_not_exists(#ct,:ct), #md = :md',
        ExpressionAttributeNames: { '#ct': 'created', '#md': 'modified' },
        ExpressionAttributeValues: { ':ct': now, ':md': now }
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-61bbcc0994ed4688550196-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ed4688550196-2">2</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ed4688550196-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ed4688550196-4">4</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ed4688550196-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ed4688550196-6">6</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ed4688550196-7">7</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-61bbcc0994ed4688550196-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ed4688550196-2">TableName:'myTable',</div>
<div class="crayon-line" id="crayon-61bbcc0994ed4688550196-3">Key:{pk:'somePK',sk:'someSK'},</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ed4688550196-4">UpdateExpression:'SET #ct = if_not_exists(#ct,:ct), #md = :md',</div>
<div class="crayon-line" id="crayon-61bbcc0994ed4688550196-5">ExpressionAttributeNames:{'#ct':'created','#md':'modified'},</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ed4688550196-6">ExpressionAttributeValues:{':ct':now,':md':now}</div>
<div class="crayon-line" id="crayon-61bbcc0994ed4688550196-7">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>In this example, we’re using the <code>if_not_exists()</code> function to check if the “created” attribute exists, and if not, set a default value. If the item already in the table, the stored value of “created” is preserved, but if the item doesn’t exist, the attribute is set to the value of <code>now</code>. This is a very common pattern that eliminates the need to perform extra calls to check if an item exists before inserting or updating.</p>
<p>As mentioned previously, UPSERTS with <code>UpdateItem</code> merge root attributes. This is extremely useful in real world applications since it allows you to make changes without needing access to the entire item. On the other hand, there are times where you might want to overwrite the input data completely while still preserving metadata. The first option is to maintain a “schema” for your data on the client side, and then use that to generate an <code>UpdateExpression</code> with the right combination of <code>SET</code> and <code>REMOVE</code> statements. This can be very effective for defined schemas, but if the structure is more dynamic, other strategies might work better.</p>
<h2>Attribute Isolation</h2>
<p>Another way to preserve metadata while allowing complete item overwrites, is to isolate any input data by adding it to a single <code>map</code> type attribute. This allows the storage of metadata (like creation time and computed indexes) at the root of the item, while still allowing simple overwrites and partial UPSERT support. Take the following example:</p>
<div id="crayon-61bbcc0994ede655856562" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
        pk: "somePK",
        sk:     "someSK",
        data: {
                someKey: "someValue",
                someOtherKey: "someOtherValue"
        }
        created: "2021-12-15T00:00:00.000Z",
        modified: "2021-12-15T00:00:00.000Z",
        type: "someEntityType",
        otherMetaData: "someValue",
        gsi1pk: "someGSI1PK", // calculated GSI PK
        gsi1sk: "someGSI1SK" // calculated GSI SK
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-61bbcc0994ede655856562-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ede655856562-2">2</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ede655856562-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ede655856562-4">4</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ede655856562-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ede655856562-6">6</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ede655856562-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ede655856562-8">8</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ede655856562-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ede655856562-10">10</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ede655856562-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ede655856562-12">12</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ede655856562-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ede655856562-14">14</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-61bbcc0994ede655856562-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ede655856562-2">pk:"somePK",</div>
<div class="crayon-line" id="crayon-61bbcc0994ede655856562-3">sk:"someSK",</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ede655856562-4">data:{</div>
<div class="crayon-line" id="crayon-61bbcc0994ede655856562-5">someKey:"someValue",</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ede655856562-6">someOtherKey:"someOtherValue"</div>
<div class="crayon-line" id="crayon-61bbcc0994ede655856562-7">}</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ede655856562-8">created:"2021-12-15T00:00:00.000Z",</div>
<div class="crayon-line" id="crayon-61bbcc0994ede655856562-9">modified:"2021-12-15T00:00:00.000Z",</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ede655856562-10">type:"someEntityType",</div>
<div class="crayon-line" id="crayon-61bbcc0994ede655856562-11">otherMetaData:"someValue",</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ede655856562-12">gsi1pk:"someGSI1PK",// calculated GSI PK</div>
<div class="crayon-line" id="crayon-61bbcc0994ede655856562-13">gsi1sk:"someGSI1SK"// calculated GSI SK</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ede655856562-14">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>Here we’ve created a <code>data</code> attribute that stores our input data. This format lets us use <code>UpdateItem</code> to either do a complete overwrite (while still preserving metadata) by setting a new <code>data</code> value, or partial updates without having to pass in the entire object  (see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.SET.AddingNestedMapAttributes" target="_blank" rel="noopener">Adding Nested Map Attributes</a>).</p>
<p>This can be a very effective way to isolate input data from metadata, but it does comes with limitations and challenges. <code>map</code> type attributes support nested object manipulations such as <code>list_append()</code>, <code>ADD</code>, and <code>REMOVE</code>, as well as <code>if_not_exists()</code> to prevent overwriting existing data. However, <code>map</code> does not support nested <code>set</code> type attributes, and the syntax for updating nested <code>map</code> attributes is a bit cumbersome. Libraries like <a href="https://github.com/jeremydaly/dynamodb-toolbox#update-nested-data-in-a-map" target="_blank" rel="noopener">DynamoDB Toolbox</a> can make this a lot easier, but still require constructing complex data structures.</p>
<p>It’s generally preferred to use separate attributes for your GSIs, but if you wanted to map secondary indexes directly to your input data, this method would prevent you from doing so as GSIs must map to root attributes. In addition, you can’t project nested attributes in a <code>map</code> to other GSIs. You would either need to project the entire <code>map</code> attribute, or copy the relevant data to root attributes.</p>
<h2>Protecting data on OVERWRITES</h2>
<p>If the limitations of the “Attribute Isolation” strategy do not work with your data model, then it’s possible to use <code>PutItem</code> to allow both a flexible schema of root attributes while still maintaining integrity checks on metadata. This strategy does require that any metadata you wish to preserve be passed in alongside other input data, so you must have the ability to retrieve this data on the client side prior to making the API call.</p>
<p>A common scenario for this might be a web dashboard that allows users to update a data object or add custom fields that you want to store as root attributes. Because we are completely overwriting the DynamoDB item, we need to supply our metadata, but we also need that data to be immutable, so we must have a way to preserve its integrity. This is important because, depending on the situation, users could simply manipulate the API call and change metadata values, even if the UI doesn’t allow it.</p>
<p>There are several ways to address this. Some examples include returning a hash of the metadata to be verified on the server side, maintaining the state via a session, or perhaps performing additional look ups to rehydrate the attributes. However, there is a much easier way to accomplish this by using a simple <code>ConditionExpression</code> in your <code>PutItem</code> API call. Not only is this method stateless (which is great for serverless applications), but you could also use this to preserve data integrity when using <a href="https://aws.amazon.com/blogs/compute/using-amazon-api-gateway-as-a-proxy-for-dynamodb/">API Gateway as a proxy</a>.</p>
<p>Below are example parameters of a <code>PutItem</code> API call:</p>
<div id="crayon-61bbcc0994ee3336785389" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
        TableName: 'myTable',
        Item: { created: 1234567890, ...otherInputData },
        ConditionExpression: '#ct = :created',
        ExpressionAttributeNames: { '#ct': 'ct' },
        ExpressionAttributeValues: { ':created': created }
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-61bbcc0994ee3336785389-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ee3336785389-2">2</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ee3336785389-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ee3336785389-4">4</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ee3336785389-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ee3336785389-6">6</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ee3336785389-7">7</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-61bbcc0994ee3336785389-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ee3336785389-2">TableName:'myTable',</div>
<div class="crayon-line" id="crayon-61bbcc0994ee3336785389-3">Item:{created:1234567890,...otherInputData},</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ee3336785389-4">ConditionExpression:'#ct = :created',</div>
<div class="crayon-line" id="crayon-61bbcc0994ee3336785389-5">ExpressionAttributeNames:{'#ct':'ct'},</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ee3336785389-6">ExpressionAttributeValues:{':created':created}</div>
<div class="crayon-line" id="crayon-61bbcc0994ee3336785389-7">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>Here we want to preserve the integrity of the <code>created</code> attribute. By adding the <code>ConditionExpression</code> of <code>#ct = :created</code>, we’re telling DynamoDB to <em>only</em> allow an overwrite of this item <em>if</em> the supplied value of <code>created</code> in the <code>Item</code> matches the stored value of <code>created</code>. You can verify as many attributes as you like, all without needing to perform additional complex checks.</p>
<h2>Prevent overwrites of existing items</h2>
<p>If you want to prevent overwriting items that already exist, you can add a <code>ConditionExpression</code> to your <code>PutItem</code> API calls that checks if an attribute doesn’t exist (<code>pk</code> in our example below).</p>
<div id="crayon-61bbcc0994ee6852469290" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
        TableName: 'myTable',
        Item: { ... },
        ConditionExpression: 'attribute_not_exists(#pk)',
        ExpressionAttributeNames: { '#pk': 'pk' }
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-61bbcc0994ee6852469290-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ee6852469290-2">2</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ee6852469290-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ee6852469290-4">4</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ee6852469290-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ee6852469290-6">6</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-61bbcc0994ee6852469290-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ee6852469290-2">TableName:'myTable',</div>
<div class="crayon-line" id="crayon-61bbcc0994ee6852469290-3">Item:{...},</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ee6852469290-4">ConditionExpression:'attribute_not_exists(#pk)',</div>
<div class="crayon-line" id="crayon-61bbcc0994ee6852469290-5">ExpressionAttributeNames:{'#pk':'pk'}</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ee6852469290-6">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>You could alternatively check that the values of the primary key attributes don’t match a stored item:</p>
<div id="crayon-61bbcc0994ee9891253713" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">ConditionExpression: '#pk &lt;&gt; :pk AND #sk &lt;&gt; :sk'</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content crayon-num c3">1</div>
</td>
<td class="crayon-code">
<div class="crayon-pre crayon-line c4">ConditionExpression:'#pk &lt;&gt; :pk AND #sk &lt;&gt; :sk'</div>
</td>
</tr></table></div>
</div>
<h2>Implementing domain-specific constraints</h2>
<p>If you’re building microservices or following domain-driven design principles, you can use <code>ConditionExpression</code>s to restrict state changes to items. For example, if your domain logic requires that an item have a <code>state</code> of <code>pending</code> in order for it to be changed to <code>approved</code>, you can implement this using the following:</p>
<div id="crayon-61bbcc0994eec885890910" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
        TableName: 'myTable',
        Key: {
                pk: 'somePK',
                sk: 'someSK'
        },
        UpdateExpression: 'set #state = :newstate',
        ExpressionAttributeNames: { '#state': 'state' },
        ExpressionAttributeValues: {
                ':newstate': 'approved',
                ':existingstate': 'pending'
        },
        ConditionExpression: '#state = :existingstate'
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-61bbcc0994eec885890910-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eec885890910-2">2</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eec885890910-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eec885890910-4">4</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eec885890910-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eec885890910-6">6</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eec885890910-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eec885890910-8">8</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eec885890910-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eec885890910-10">10</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eec885890910-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eec885890910-12">12</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eec885890910-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eec885890910-14">14</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-61bbcc0994eec885890910-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eec885890910-2">TableName:'myTable',</div>
<div class="crayon-line" id="crayon-61bbcc0994eec885890910-3">Key:{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eec885890910-4">pk:'somePK',</div>
<div class="crayon-line" id="crayon-61bbcc0994eec885890910-5">sk:'someSK'</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eec885890910-6">},</div>
<div class="crayon-line" id="crayon-61bbcc0994eec885890910-7">UpdateExpression:'set #state = :newstate',</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eec885890910-8">ExpressionAttributeNames:{'#state':'state'},</div>
<div class="crayon-line" id="crayon-61bbcc0994eec885890910-9">ExpressionAttributeValues:{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eec885890910-10">':newstate':'approved',</div>
<div class="crayon-line" id="crayon-61bbcc0994eec885890910-11">':existingstate':'pending'</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eec885890910-12">},</div>
<div class="crayon-line" id="crayon-61bbcc0994eec885890910-13">ConditionExpression:'#state = :existingstate'</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eec885890910-14">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>These types of conditions are super useful because you don’t need to perform extra operations to check the current state of the item.</p>
<h2>Adding service level protections</h2>
<p>In most cases, any protections or integrity checks you want to perform must be added to the API calls. For anyone writing code that interfaces directly with DynamoDB, this obviously gives them the ability to bypass most of the restrictions we’ve discussed. While this can be mitigated by implementing things like data abstraction layers that limit access to the raw API calls, you may still want to add additional protections at the service level.</p>
<p>DynamoDB, like all AWS services, requires IAM policies to grant permissions to perform certain actions. The details of IAM are way beyond the scope of this article, but below are a few examples of how IAM policies can help protect your data, even if using raw API calls.</p>
<h3>Disable DeleteItem</h3>
<p>Perhaps a bit obvious, but you can simply omit (or explicitly <code>Deny</code>) the <code>DeleteItem</code> permission from any IAM policies attached to specific execution environments and/or roles. This prevents these users from deleting items from your table once they are created.</p>
<div id="crayon-61bbcc0994eef206723423" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
        "Version": "2012-10-17",
        "Statement": [
                {
                        "Sid": "NoItemDeletes",
                        "Effect": "Allow",
                        "Action": [
                                "dynamodb:PutItem",
                                "dynamodb:UpdateItem",
                                "..."
                        ],
                        "Resource": "arn:aws:dynamodb:*:*:table/myTable"
                }
        ]
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-61bbcc0994eef206723423-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eef206723423-2">2</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eef206723423-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eef206723423-4">4</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eef206723423-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eef206723423-6">6</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eef206723423-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eef206723423-8">8</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eef206723423-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eef206723423-10">10</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eef206723423-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eef206723423-12">12</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eef206723423-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994eef206723423-14">14</div>
<div class="crayon-num" data-line="crayon-61bbcc0994eef206723423-15">15</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-61bbcc0994eef206723423-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eef206723423-2">"Version":"2012-10-17",</div>
<div class="crayon-line" id="crayon-61bbcc0994eef206723423-3">"Statement":[</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eef206723423-4">{</div>
<div class="crayon-line" id="crayon-61bbcc0994eef206723423-5">"Sid":"NoItemDeletes",</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eef206723423-6">"Effect":"Allow",</div>
<div class="crayon-line" id="crayon-61bbcc0994eef206723423-7">"Action":[</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eef206723423-8">"dynamodb:PutItem",</div>
<div class="crayon-line" id="crayon-61bbcc0994eef206723423-9">"dynamodb:UpdateItem",</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eef206723423-10">"..."</div>
<div class="crayon-line" id="crayon-61bbcc0994eef206723423-11">],</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eef206723423-12">"Resource":"arn:aws:dynamodb:*:*:table/myTable"</div>
<div class="crayon-line" id="crayon-61bbcc0994eef206723423-13">}</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994eef206723423-14">]</div>
<div class="crayon-line" id="crayon-61bbcc0994eef206723423-15">}</div>
</div>
</td>
</tr></table></div>
</div>
<h3>Disable updating specific attributes</h3>
<p>While protecting against deletion seems like a reasonable step, it doesn’t do much good if all the attributes of an item can be changed. IAM supports a number of really useful conditions that give you fine-grained access control over your DynamoDB tables. There are a number of additional examples <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html">here</a>, but I’ve included this example that shows how to disable updates to the <code>created</code> attribute:</p>
<div id="crayon-61bbcc0994ef2681447884" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
        "Version": "2012-10-17",
        "Statement": [
                {
                        "Sid": "NoItemDeletes",
                        "Effect": "Allow",
                        "Action": [
                                "dynamodb:UpdateItem"
                        ],
                        "Resource": "arn:aws:dynamodb:*:*:table/myTable",
                         "Condition": {
                                        "ForAllValues:StringNotLike": {
                                                "dynamodb:Attributes": [
                                                        "created"
                                                ]
                                        }
                                }
                        }
                }
        ]
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-2">2</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-4">4</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-6">6</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-8">8</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-10">10</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-12">12</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-14">14</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-16">16</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-18">18</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-61bbcc0994ef2681447884-20">20</div>
<div class="crayon-num" data-line="crayon-61bbcc0994ef2681447884-21">21</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-2">"Version":"2012-10-17",</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-3">"Statement":[</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-4">{</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-5">"Sid":"NoItemDeletes",</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-6">"Effect":"Allow",</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-7">"Action":[</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-8">"dynamodb:UpdateItem"</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-9">],</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-10">"Resource":"arn:aws:dynamodb:*:*:table/myTable",</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-11">"Condition":{</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-12">"ForAllValues:StringNotLike":{</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-13">"dynamodb:Attributes":[</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-14">"created"</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-15">]</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-16">}</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-17">}</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-18">}</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-19">}</div>
<div class="crayon-line crayon-striped-line" id="crayon-61bbcc0994ef2681447884-20">]</div>
<div class="crayon-line" id="crayon-61bbcc0994ef2681447884-21">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>As powerful as IAM permissions are, they are not a silver bullet. In the example above, you <em>would not</em> be able to do UPSERTS that provide a default value for the <code>created</code> attribute. This means you’d have to allow either the <code>PutItem</code> permission, or create another policy that allowed unrestricted <code>UpdateItem</code> requests. This is possible, and you could limit permissions to specific roles or environments and grant developer access appropriately, but you’d have to weigh the tradeoffs of that complexity.</p>
<p>I do find that fine-grained IAM policies work extremely well for API Gateway proxy integrations, especially as way to minimize some VTL logic. But again, there are tradeoffs you need to consider.</p>
<h2>Conclusion</h2>
<p>This post barely scratches the surface of DynamoDB data strategies, but hopefully these examples give you some ideas on how to better protect the integrity of your DynamoDB tables.</p>
<p>If you want to learn more DynamoDB data strategies and modeling techniques, sign up to get information about my new <strong>DynamoDB Modeling course</strong> at <a href="http://dynamodbmodeling.com" target="_blank" rel="noopener">DynamoDBModeling.com</a>.</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws/" rel="tag">aws</a>, <a href="https://www.jeremydaly.com/tag/data-modeling/" rel="tag">data modeling</a>, <a href="https://www.jeremydaly.com/tag/dynamodb/" rel="tag">dynamodb</a>, <a href="https://www.jeremydaly.com/tag/nosql/" rel="tag">nosql</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on December 16, 2021 by Jeremy Daly.</div>
</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>]]></description>
      <link>https://www.jeremydaly.com/ensuring-data-integrity-with-dynamodb/</link>
      <guid>https://www.jeremydaly.com/ensuring-data-integrity-with-dynamodb/</guid>
      <pubDate>Fri, 17 Dec 2021 00:29:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[The Unfulfilled Potential of Serverless]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2021/11/the-unfulfilled-potential-of-serverless-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2021/11/the-unfulfilled-potential-of-serverless.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2021/11/the-unfulfilled-potential-of-serverless-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2021/11/the-unfulfilled-potential-of-serverless-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2021/11/the-unfulfilled-potential-of-serverless-1024x576.png 1024w" /></div>
<p>Corey Quinn, Cloud Economist (and perpetual thorn in AWS’s side), recently published a post titled <a href="https://www.lastweekinaws.com/blog/the-unfulfilled-promise-of-serverless/" target="_blank" rel="noopener">The Unfulfilled Promise of Serverless</a>. Twitter <a href="https://twitter.com/search?q=https%3A%2F%2Fwww.lastweekinaws.com%2Fblog%2Fthe-unfulfilled-promise-of-serverless%2F" target="_blank" rel="noopener">reacted</a> as we would expect, with plenty of folks feeling vindicated, others professing their staunch disagreement, and perhaps even a few now questioning their life (and technology) choices. My take is that he’s <em>not wrong</em>, but he’s also not <em>entirely right</em>.</p>
<p>Let me start by saying I’m a big fan of Corey’s (seriously, this <a href="https://twitter.com/QuinnyPig/status/1458667547818016769" target="_blank" rel="noopener">video about AppConfig</a> might be the funniest thing he’s ever created.) However, much of Corey’s brand is predicated on creating controversy with his unique brand of snark and clever shitposting (the Twitterverse wants what the Twitterverse wants.) So while his hottake on serverless might resonate with many of us, it’s important to understand both its motivation as well as its missing context.</p>
<p>In order for a promise to be “unfulfilled,” we must understand both <em>what</em> was promised, as well as <em>when</em> delivery was promised. While this might sound like a semantic argument, I think it’s important to point out a very important piece of context: we’ve barely scratched the surface of what’s possible with serverless technology. I agree with Corey that Werner’s “just write business logic” claim conveniently ignored the mountain of configuration that came with it, but it also put a stake in the ground and set the vision. To the best of my knowledge, no one ever gave a timeline to achieve everything that was promised, but what I’ve seen over the last seven years are massive investments by public cloud providers, established players, and startups laying the groundwork that brings us closer to that vision. No, we’re not there yet, but that just means we have more work to do.</p>
<p>Below I’ve tried to add some context to the main points Corey made in his post. As I said, many of his points resonate with me, but hopefully this brings some comfort to those of you that were disheartened by his message. For those of you that have yet to “buy in” to serverless, I simply ask that you keep an open mind. The vision for serverless and its current reality are very different, and like with most things, we’re likely all trying to get to the same place.</p>
<h2>Serverless, but not <em>potable</em></h2>
<p>Yes, you read that right. The (lack of) portability with serverless is less about lock-in, and more about the lack of consensus around implementation standards. Sure, if you’re AWS, keeping customers in your ecosystem by providing native services with first-class integrations (even if they’re as terrible as <a href="https://aws.amazon.com/cognito/" target="_blank" rel="noopener">Cognito</a>) makes it harder for them to look elsewhere and even harder for them to migrate away later. But if I take my cynical-colored glasses off for a moment, there’s also a greater than zero percent chance that some of the amazing engineers and product managers that work behind the curtain at AWS are <em>actually</em> trying to “innovate.”</p>
<p>For me, there is a major disconnect between AWS and most of the other major cloud providers when it comes to their approach to serverless. AWS took the same security and isolation properties of hardware virtualization technology and built them into <a href="https://aws.amazon.com/blogs/aws/firecracker-lightweight-virtualization-for-serverless-computing/" target="_blank" rel="noopener">Firecracker</a>. Why? So that they could optimize the execution of microVMs by moving them as close to the metal as possible. What did just about everyone else do? They built their serverless compute solutions in containers running on top of Kubernetes, just about as far away from the metal as you can get.</p>
<p>Kelsey Hightower <a href="https://twitter.com/kelseyhightower/status/1455575229107826688" target="_blank" rel="noopener">recently tweeted</a> that “​​Serverless based on containers is the future.” Really? I guess that’s true if we’re prepared to give up on the optimizations already possible by letting the platform be the orchestrator rather than requiring 30 layers of abstraction just to execute a few lines of code. Even <em>if</em> we go down the container route, the “portability” problem is only partially solved. As Forrest Brazeal has <a href="https://forrestbrazeal.com/2020/01/05/code-wise-cloud-foolish-avoiding-bad-technology-choices/" target="_blank" rel="noopener">pointed out</a>, choosing “cloud-agnostic” technology often means going with the “lowest common denominator.” In other words, regardless of where you “port” your serverless compute, your (wise) reliance on CSP specific services will make migrating to other providers the bigger hurdle. This is true for all of “cloud,” by the way, and isn’t just a serverless phenomenon.</p>
<p>So back to my original point. I see “lock-in” as merely an excuse for people’s unwillingness to buy into the uncertainty. Sure, there is no competitor to AWS Step Functions, but that’s because this service is ahead of its time—not because state machines haven’t been a thing since the dawn of computing, but because other cloud providers have a short-sighted vision for serverless. Customers that are willing to go “all in” on AWS’s vision might lose portability, but what they gain in capabilities (at least in my opinion) far outweighs any potential drawbacks. It’s not about portability; it’s the fact that too many people want to reach for the familiar and are unwilling to drink the Kool Aid.</p>
<h2>The <em>imperceptible</em> value fallacy</h2>
<p>On a <a href="https://www.lastweekinaws.com/podcast/screaming-in-the-cloud/severless-hero-got-severs-in-his-eyes-with-ant-stanley/" target="_blank" rel="noopener">recent episode</a> of his podcast, Corey so eloquently stated that “serverless sucks,” to which Ant Stanley, co-founder of A Cloud Guru/ServerlessConf/ServerlessDays and arguably one of the earliest of early adopters of serverless, agreed. It’s not the serverless technology that sucks, but rather the complexity we’ve created around it. As Ant explains, “I think folks have focused far too much on the technical aspects of serverless, and what is serverless and not serverless, or how you deploy something, or how you monitor something, observability, instead of going back to basics and first principles of what is this thing? Why should you do it? How do you do it? And how do we make that easy? There’s no real focus on user experience and adoption for inexperienced folks.”</p>
<p>Corey’s experience with serverless isn’t an outlier. AWS has come a long way with CloudWatch and its related tools, but the fact that an entirely new industry was required to help you understand and observe your serverless applications (Lumigo, Epsagon, IOpipe, Thundra, Dashbird, etc.) should have been the canary in the coal mine for widespread adoption. Most of these tools have either been acquired or have pivoted to focus on more than just serverless because, as Corey said, they faced the unfortunate reality that a pure serverless market just wasn’t valuable enough.</p>
<p>Serverless adoption (including the use of “serverless services” that Corey casually dismisses) <a href="https://www.datadoghq.com/state-of-serverless/" target="_blank" rel="noopener">continues to grow</a> year over year. But even though more that 50% of the “thousands of companies in Datadog’s customer base” are using some form of FaaS, it’s only based on whether “they ran at least five distinct functions in a given month.” While we don’t have the underlying data, this suggests that FaaS makes up just a portion of their cloud workloads. So maybe we don’t have full buy-in at this point, but plenty of cloud companies are embracing the serverless paradigm and extracting some value from it.</p>
<p>However, there is a major problem with partial buy-in: TCO. The total cost of ownership (TCO) of serverless (or at least the <em>promise</em> of it) is significantly lower than setting up and maintaining traditional compute (yes, even if the <a href="https://theburningmonk.com/2019/01/you-are-thinking-about-serverless-costs-all-wrong/" target="_blank" rel="noopener">compute charges are higher</a>). But the incremental cost of adding workloads to an existing Kubernetes cluster or cloud environment supported by an experienced Ops team is minimal. For a startup (or even a small team within a larger org), going “serverless first” should be a no-brainer. Unfortunately, the value of those customers probably won’t move the needle, hence the fact that it “doesn’t feel like it’s solving an expensive problem.”</p>
<h2>Who <em>isn’t</em> going to own the upgrades?</h2>
<p>I had Ant Stanley on the <a href="https://www.serverlesschats.com/115/" target="_blank" rel="noopener">Serverless Chats podcast</a> not long after his interview with Corey, and when I asked about the complexity issue, he also pointed out that the number of choices with serverless creates more cognitive load on developers when making decisions.</p>
<p>“I would love to see a simplification of serverless going, ‘Hey, if you want a relational database, this is it. If you want a NoSQL database system, this is it. if you want to run synchronous workloads, this is where you do it. If you want asynchronous workloads, this is where you do it, and give one option. And here’s your development workflow, and one set of tooling to make that work,’ but I think we’re way off that.”</p>
<p>While Ant’s vision of serverless simplicity would certainly make things easier, others have posited ideas that get us much closer to the ultimate serverless vision. Shawn @SWYX Wang recently articulated his vision of <a href="https://www.swyx.io/self-provisioning-runtime/" target="_blank" rel="noopener">The Self Provisioning Runtime</a>. He says, “If the Platonic ideal of Developer Experience is a world where you ‘Just Write Business Logic’, the logical endgame is a language+infrastructure combination that figures out everything else.”</p>
<p>At the time Shawn published his article in late August, he was unaware of <a href="https://www.serverless.com/cloud" target="_blank" rel="noopener">Serverless Cloud</a>, the project that my team has been working on at Serverless, Inc. for nearly a year. The goal was to achieve almost exactly what Shawn was describing, a platform that would interpret your code and deploy the necessary infrastructure to best support it. It’s what we call Infrastructure from Code at Serverless Cloud. There are others that are doing similar work like <a href="https://darklang.com/" target="_blank" rel="noopener">Dark Lang</a>, <a href="https://www.lambdragon.com/" target="_blank" rel="noopener">Lambdragon</a>, and others mentioned in Shawn’s post.</p>
<p>But we’re now at the point where the technological groundwork painstakingly laid over the last seven years is ready for the next major step towards the ultimate vision. The complexity added by configuration was an intermediate step that told the cloud what was needed to run our code. The near future is a world that <em>no longer requires</em> that step. So, yes, there are plenty of things still <a href="http://www2.eecs.berkeley.edu/Pubs/TechRpts/2019/EECS-2019-3.pdf" target="_blank" rel="noopener">required for serverless computing to fulfill its full potential</a>, but we’re a lot closer to “just write business logic” than you might think. And when anyone can fully express their application with just their code, then the true potential of serverless will finally be met.</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws/" rel="tag">aws</a>, <a href="https://www.jeremydaly.com/tag/cloud/" rel="tag">cloud</a>, <a href="https://www.jeremydaly.com/tag/lambda/" rel="tag">lambda</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on November 14, 2021 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/the-unfulfilled-potential-of-serverless/</link>
      <guid>https://www.jeremydaly.com/the-unfulfilled-potential-of-serverless/</guid>
      <pubDate>Mon, 15 Nov 2021 04:18:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[The Top 15 Serverless Chats Podcast Episodes (so far)]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2021/10/top-15-serverless-chats-episodes-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2021/10/top-15-serverless-chats-episodes.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2021/10/top-15-serverless-chats-episodes-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2021/10/top-15-serverless-chats-episodes-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2021/10/top-15-serverless-chats-episodes-1024x576.png 1024w" /></div>
<p>As of this writing, there are now over 115 episodes of Serverless Chats! It’s been an incredible journey and I’ve learned so much about serverless from all these amazing guests (and I hope you have too). Recently, with the addition of Rebecca Marshburn as my co-host, we’ve added even more perspective to these conversations, expanding well beyond the technical and diving deeper into how serverless affects people, processes, and productivity.</p>
<p>If you’re new to serverless (and Serverless Chats), it can be hard to get started. Finding the right content and information can be overwhelming. If you’re a serverless veteran, finding interesting conversations that go beyond Hello World examples can also be challenging. My hope is that Serverless Chats provides a good mix for both the skeptical beginner <em>and</em> the experienced serverless developer. But even so, with 115 episodes, where do you start?</p>
<p>I’ve gone through the last 115 episodes and picked out a few of my ultra-favorites. If I simply listed my favorites, you might as well just go to the <a href="https://www.serverlesschats.com/episodes/">full list of episodes</a> since I enjoyed all of these conversations so much, that I’d happily (and sometimes do) go back and listen to any one of them. But in the interest of saving you some time, here are 15 episodes that I believe capture some of the most important aspects of serverless. Some of them are technical, some focus more on the serverless experience, and some of them show the power of this amazing community. Enjoy.</p>
<h3 class="c1">15. AWS re:Invent 2020 Heroes re:Cap (<a href="https://www.serverlesschats.com/86">Episode #86</a>)</h3>
<p><em>February 1, 2021 –</em> On this episode, we recapped the major serverless announcements from AWS re:Invent 2020 with help of AWS Heroes Yan Cui, Serhat Can, Luca Bianchi, Farrah Campbell, Ran Ribenzaft, Ben Ellerby, Sheen Brisals, and Gillian Armstrong.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/a4cecbe2">[embedded content]</iframe></p>
<h3 class="c1">14. Serverless for Startups with Chris Munns (<a href="https://www.serverlesschats.com/113">Episode #113</a>)</h3>
<p><em>October 4, 2021</em> – In this episode, Chris talked about the evolution of serverless and how the tools and services have matured over the years. We also discussed how the learning curve of serverless affects adoption, what goes into building an effective developer advocacy team, and what advice  he has for startups looking to get started with the cloud.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/55dd65bb">[embedded content]</iframe></p>
<h3 class="c1">13. Streaming Data at Scale Using Serverless with Anahit Pogosova (<a href="https://www.serverlesschats.com/91">Episode #91</a> &amp; <a href="https://www.serverlesschats.com/92">Episode #92</a>)</h3>
<p><em>March 8 &amp; 15, 2021 –</em> In this two part episode, Anahit shared her thoughts on where and why we’d use Kinesis, how to embrace (and deal with) the failures, and addresses some common serverless misconceptions. These are highly technical episodes, but some of my favorites.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/4a048485">[embedded content]</iframe></p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/9902671f">[embedded content]</iframe></p>
<h3 class="c1">12. Building a Business Around Serverless with Nofar Asselman (<a href="https://www.serverlesschats.com/87">Episode #87</a>)</h3>
<p><em>February 8, 2021 – </em>On this episode, Nofar spoke about the current state of the “serverless” market, what opportunities exist for tools and solutions supporting serverless, how to leverage partnerships to build trust in your product, and actions you can take right now.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/8a99999c">[embedded content]</iframe></p>
<h3 class="c1">11. Serverless Privacy &amp; Compliance with Mark Nunnikhoven (<a href="https://www.serverlesschats.com/71">Episode #71</a> &amp; <a href="https://www.serverlesschats.com/72">Episode # 72</a>)</h3>
<p><em>October 19 &amp; 26, 2020</em> – In this two part episode, Mark explains why your online privacy is so important, what we need to think about in terms of compliance, and how serverless helps us create more secure applications.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/c19faf45">[embedded content]</iframe></p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/fd07a7be">[embedded content]</iframe></p>
<h3 class="c1">10. Going Green with Serverless with Paul Johnston (<a href="https://www.serverlesschats.com/59">Episode #59</a> &amp; <a href="https://www.serverlesschats.com/60">Episode #60</a>)</h3>
<p><em>July 27, 2020 &amp; August 3, 2020</em> – In this two part episode, Paul shares how serverless compares to traditional computing in terms of being “green”, the impact of data centers on climate, why efficiency is only a first step, and what people in tech can do to affect change. We then get into how the big cloud providers are addressing climate change, what the tech industry can do as a whole, the effect this will have on globalized business, and how the positive downstream impact of choosing serverless can create a more sustainable business.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/dac3720b">[embedded content]</iframe></p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/a23d2512">[embedded content]</iframe></p>
<h3 class="c1">9. Serverless Infrastructure as Code with Ben Kehoe (<a href="https://www.serverlesschats.com/107">Episode #107</a>)</h3>
<p><em>June 28, 2021 </em>– On this episode, Ben explained what infrastructure as code really means and why IaC with serverless is different than non-serverless architectures. He also talked about how IaC defines resource graphs that fully specify the state of your system and why is it important for developer intent to be maintained by IaC systems.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/1585af71">[embedded content]</iframe></p>
<h3 class="c1">8. Static First Using Serverless Front-ends with Guillermo Rauch (<a href="https://www.serverlesschats.com/50">Episode #50</a>)</h3>
<p><em>May 25, 2020</em> – Guillermo explains the difference between front-end and backend serverless, how we should think about and build for scale, and why latency down to the first contentful paint is so important.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/bf25e80a">[embedded content]</iframe></p>
<h3 class="c1">7. Serverless Developer Culture with Linda Nichols (<a href="https://www.serverlesschats.com/48">Episode #48</a>)</h3>
<p><em>May 11, 2020</em> – In this episode, Linda talks about why modern cloud developers should be writing less code, how new deployment processes affect the testing culture, and why Ops teams are still really important.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/cbfc7a3b">[embedded content]</iframe></p>
<h3 class="c1">6. The Past, Present, and Future of Serverless with Tim Wagner (<a href="https://www.serverlesschats.com/52">Episode #52</a>)</h3>
<p><em>June 8, 2020</em> -On this episode, the one and only Tim Wagner shared some of the history behind AWS Lambda, why the stateless versus stateful debate still rages on, how to use serverless as a supercomputer, and what innovations are still needed in the serverless space.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/17040f36">[embedded content]</iframe></p>
<h3 class="c1">5. Continuously Improving Serverless Standards at the LEGO Group with Nicole Yip (<a href="https://www.serverlesschats.com/82">Episode #82</a>)</h3>
<p><em>January 4, 2021 –</em> On this episode, Nicole shared how the LEGO Group continued to grow their serverless development teams, the evolving audit process they use to improve serverless standards, and the challenges they faced adopting those standards.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/f2d6dd2b">[embedded content]</iframe></p>
<h3 class="c1">4. Data Modeling Strategies from The DynamoDB Book with Alex DeBrie (<a href="https://www.serverlesschats.com/44">Episode #44</a>)</h3>
<p><em>April 13, 2020</em> – Alex shares why he wrote the DynamoDB Book, what are some key concepts to keep in mind when modeling data, and how using the right strategies can help you create more powerful single table designs.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/4f70cfc5">[embedded content]</iframe></p>
<h3 class="c1">3. Pushing the Limits of Lambda with Michael Hart (<a href="https://www.serverlesschats.com/18">Episode #18</a>  &amp; <a href="https://www.serverlesschats.com/19">Episode #19</a>)</h3>
<p><em>October 14 &amp; 21, 2019</em> – In this two part episode, Michael explains the inner workings of AWS Lambda, the hows and whys of Custom Runtimes &amp; Layers, Docker Lambda, serverless CI, and whether or not Lambdas should call Lambdas.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/eb2b6733">[embedded content]</iframe></p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/1308ffaf">[embedded content]</iframe></p>
<h3 class="c1">2. Why Developers Need to Think About Cloud Costs with Erik Peterson (<a href="https://www.serverlesschats.com/6">Episode #6</a>)</h3>
<p><em>July 22, 2019</em> – In this episode, Erik Peterson talks about cultural changes around cost optimization in the cloud, cost as a first class metric, and how to predict total cost of ownership (TCO) according to your product roadmap.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/6708feca">[embedded content]</iframe></p>
<h3 class="c1">1. Advanced NoSQL Data Modeling in DynamoDB with Rick Houlihan (<a href="https://www.serverlesschats.com/34">Episode #34</a> &amp; <a href="https://www.serverlesschats.com/35">Episode #35</a>)</h3>
<p><em>February 3 &amp; 10, 2020</em> – In this highly-technical two parter, Rick Houlihan talks about the use cases for NoSQL, why single table designs are so powerful, and ways to model relational data with GSIs. We also discussed why you likely don’t want to use LSIs, when sharding is necessary, the benefits of denormalization, and how to efficiently store large document deltas.</p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/6a9c9e6f">[embedded content]</iframe></p>
<p><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/4da3d0ba">[embedded content]</iframe></p>
<p>I hope you found this list of episodes useful. Did I miss one of your favorites? Reach out to me on <a href="https://twitter.com/jeremy_daly">Twitter</a> and let me know.</p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on October 21, 2021 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/top-15-serverless-chats-podcast-episodes/</link>
      <guid>https://www.jeremydaly.com/top-15-serverless-chats-podcast-episodes/</guid>
      <pubDate>Thu, 21 Oct 2021 21:28:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Big Serverless Chats Announcement!]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2021/06/big-announcement-time-web-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2021/06/big-announcement-time-web-1200x675.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2021/06/big-announcement-time-web-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2021/06/big-announcement-time-web-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2021/06/big-announcement-time-web-1024x576.png 1024w" /></div>
<p>When I started the podcast in 2019, I wanted to invite others into the great off-the-cuff, offline conversations I was having with members of the serverless community. The chats I’d share after an event over drinks, in the hallway between conference sessions, or while mingling at a meetup, were thought-provoking and interesting, and offered fresh ideas, perspectives, and sometimes, even solutions that I could take back to my work and projects. After more than 100 episodes of inviting listeners and guests to these conversations, I am now extending a different sort of invitation for one of our serverless community members.</p>
<p><strong>I am extremely excited to announce that <a href="https://twitter.com/beccaodelay" target="_blank" rel="noopener">Rebecca Marshburn</a> will be joining Serverless Chats as a co-host!</strong></p>
<div class="iframe-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/QHxF72nl_io" frameborder="0" allowfullscreen="allowfullscreen">﻿﻿</iframe></div>
<p>If you haven’t had the pleasure of meeting Rebecca yet (or haven’t listened to our <a href="https://www.serverlesschats.com/100/" target="_blank" rel="noopener">100th episode</a>), Rebecca’s interested in the things that interest people— What’s important to them? Why? And when did they first discover it to be so? She’s also interested in sharing stories, elevating others’ experiences, exploring the intersection of physical environments and human behavior, and crafting the perfect pun for every situation. Today, Rebecca is the Head of Content &amp; Community at Common Room. Prior to Common Room, she led the AWS Serverless Heroes program, where she and I first met, and guided content and product experiences for fashion magazines, online blogs, AR/VR companies, education companies, and a little travel outfit called Airbnb.</p>
<p>After two years of producing the podcast, I had been considering ways that I could continue to bring relevant and meaningful content to my listeners. Though <strong>Serverless Chats</strong> has always featured multiple points of view between mine and our guests’, Rebecca’s addition ensures that we’re able to have conversations that touch upon all aspects of the serverless experience that matter to our community. With Rebecca’s industry experience and commitment to the people who build and use serverless, we’ll be able to have more complete, multi-faceted conversations that broaden the podcast’s ability to dive deeper into the human element and impact of serverless while remaining focused on the technical and tactical discussions.</p>
<p>As part of this next step for <strong>Serverless Chats</strong>, we’ll be taking an eight-week summer break starting at the beginning of July. We’ll still be recording with our incredible guests so you have great content when we return August 30th, but we’ll also be using this time to work on the overall brand, as well as, you know, actually taking some time off.</p>
<p>I’m really looking forward to this next chapter for <strong>Serverless Chats</strong>, and feel honored to have Rebecca as part of it.</p>
<p>Thank you so much for your continued support of the podcast, and enjoy the summer!</p>
<p>(If you miss us over the summer, you can catch up on any episodes you missed at <a href="https://www.serverlesschats.com/" target="_blank" rel="noopener">serverlesschats.com</a>, <a href="https://www.serverlesschats.com/insiders/" target="_blank" rel="noopener">sign up to become an Insider</a> to stay in the loop with more podcast updates, and definitely make sure to follow us on Twitter <a href="https://twitter.com/ServerlessChats" target="_blank" rel="noopener">@ServerlessChats</a>.)</p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on June 28, 2021 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/serverless-chats-announcement/</link>
      <guid>https://www.jeremydaly.com/serverless-chats-announcement/</guid>
      <pubDate>Mon, 28 Jun 2021 16:57:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Protected: New Year, New Job, Same Serverless Mission]]></title>
      <description><![CDATA[<form action="https://www.jeremydaly.com/wp-login.php?action=postpass" class="post-password-form" method="post">
<p>This content is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-3148">Password: <input name="post_password" id="pwbox-3148" type="password" size="20" /></label> <input type="submit" name="submit" value="Enter" /></p>
</form>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on February 17, 2021 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/new-year-new-job-same-serverless-mission/</link>
      <guid>https://www.jeremydaly.com/new-year-new-job-same-serverless-mission/</guid>
      <pubDate>Wed, 17 Feb 2021 23:44:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Aurora Serverless v2: The Good, the Better, and the Possibly Amazing]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2020/12/aurora-serverless-v2-cover-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/12/aurora-serverless-v2-cover.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2020/12/aurora-serverless-v2-cover-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/12/aurora-serverless-v2-cover-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/12/aurora-serverless-v2-cover-1024x576.png 1024w" /></div>
<p>Three years ago at re:Invent 2017, <a href="https://aws.amazon.com/about-aws/whats-new/2017/11/sign-up-for-the-preview-of-amazon-aurora-serverless/" target="_blank" rel="noopener">AWS announced the original Amazon Aurora Serverless</a> preview. I spent quite a bit of time with it, and when it went GA 9 months later, I published my thoughts in a post titled <a href="https://www.jeremydaly.com/aurora-serverless-the-good-the-bad-and-the-scalable/">Aurora Serverless: The Good, the Bad and the Scalable</a>.</p>
<p>If you read the post, you’ll see that I was excited and optimistic, even though there were <em>a</em> lot of missing features. And after several months of more experiments, I finally moved some production workloads onto it, and had quite a bit of success. Over the last 18 months, we’ve seen some improvements to the product (including support for <a href="https://aws.amazon.com/de/blogs/aws/amazon-aurora-postgresql-serverless-now-generally-available/" target="_blank" rel="noopener">PostgreSQL</a> and the <a href="https://aws.amazon.com/blogs/aws/new-data-api-for-amazon-aurora-serverless/" target="_blank" rel="noopener">Data API</a>), but there were still loads of problems with the scale up/down speeds, failover time, and lack of Aurora provisioned cluster features.</p>
<p>That all changed with the introduction of <a href="https://aws.amazon.com/about-aws/whats-new/2020/12/introducing-the-next-version-of-amazon-aurora-serverless-in-preview/" target="_blank" rel="noopener">Amazon Aurora Serverless v2</a>. I finally got access to the preview and spent a few hours trying to break it. My first impression? <strong>This thing might just be a silver bullet!</strong></p>
<p>I know that’s a bold statement. ? But even though I’ve only been using it for a few hours, I’ve also read through the (minimal) docs, reviewed the pricing, and talked to one of the PMs to understand it the best I could. There clearly must be some caveats, but from what I’ve seen, <strong>Aurora Serverless v2</strong> is very, very promising. Let’s take a closer look!</p>
<h3>What’s Aurora Serverless again?</h3>
<p>For those that need a refresher, “<a href="https://aws.amazon.com/rds/aurora/serverless/" target="_blank" rel="noopener">Amazon Aurora Serverless</a> is an on-demand, auto-scaling configuration for Amazon Aurora. It automatically starts up, shuts down, and scales capacity up or down based on your application’s needs. It enables you to run your database in the cloud without managing any database capacity.” Sounds amazing, huh?</p>
<p>Aurora Serverless <em>separates</em> the data and compute layers so that each one can be scaled independently. It uses distributed, fault-tolerant, self-healing storage with 6-way replication that will automatically grow as you add more data. The data is replicated across multiple availability zones within a single region, which helps provide high availability in the event of an AZ failure.</p>
<p><strong>Aurora Serverless v1 </strong>uses a pool of warm instances to provision compute based on your ACU (Aurora Compute Unit) needs. These pre-provisioned instances attach to your data and behave similar to a typical provisioned database server. However, if certain thresholds are crossed (max connections and CPU), <strong>Aurora Serverless v1</strong> will automatically move your data to a larger instance and then redirect your traffic with zero downtime. It will continue to scale up as needed, <strong>doubling capacity</strong> each time. Once traffic begins to slow down, your data will be moved to smaller instances.</p>
<p>Instances run in a single availability zone. In the event of an AZ failure, a new instance will automatically be provisioned in another AZ, your data will be attached, and your requests will begin routing again. Based on availability, it could take several minutes to restore access to the database.</p>
<p>There are also a lot of things that <strong>Aurora Serverless v1</strong> <em>can’t</em> do. Most notably: global databases, IAM authentication, backtracking, S3 import/export, and Lambda triggers.</p>
<h3>So what’s so great about Aurora Serverless v2?</h3>
<p>I’m glad you asked! A big change for <strong>Aurora Serverless v2</strong> has to do with the way the compute is provisioned. Instead of needing to attach your data to differently sized instances, <strong>Aurora Serverless v2 </strong>instances <em>auto-scale in milliseconds based on application load</em>. Yes, you read that correctly. Using some combination of elastic computing and dark magic, your ACUs will scale instantaneously to handle whatever you throw at it.</p>
<p>Also, because the instance scaling is elastic, <strong>Aurora Serverless v2 </strong>increases ACUs in increments of 0.5. This means that if you need 18 ACUs, you get 18 ACUs. With <strong>Aurora Serverless v1</strong>, your ACUs would need to double to 32 in order to support that workload. Not only that, but the scale down latency is significantly faster (up to 15x). I’ll show you some of my experiments later on, and you’ll see that scale downs happen in less than a minute.</p>
<p>Beyond the amazing scaling capabilities is the fact that “it supports the full breadth of Aurora features, including Global Database, Multi-AZ deployments, and read replicas.” This seems pretty darn clear that <strong>Aurora Serverless v2</strong> intends to support <em>all</em> the amazing Aurora features, including the ones missing from <strong>Aurora Serverless v1</strong>.</p>
<h3>Let’s talk about price</h3>
<p>There’s no way to sugar coat this. The cost of <strong>Aurora Serverless v2</strong> seems very high. In fact, v2 ACUs are <em>twice</em> the price of the original v1 ACUs ($0.12 per ACU Hour versus $0.06 per ACU Hour). There is some clever marketing language on the Aurora Serverless page that claims “you can save up to 90% of your database cost compared to the cost of <em>provisioning capacity</em> for peak load.” That may be true, but let’s break it down a bit.</p>
<p>When they say “provisioned capacity”, they mean <em>always on</em>, as in an Aurora provisioned cluster. But before we get into that comparison, let’s look at how it compares to <strong>Aurora Serverless v1</strong>.</p>
<p>So, yes, the price per ACU is double. However, there are some important distinctions here when it comes to how these costs get calculated. One difference has to do with the incremental ACUs of <strong>v2</strong> versus the doubling of instance sizes required for <strong>v1</strong>. I’d like to be able to say that there’s an argument that if my workload only needs 9 ACUs, then it would be cheaper than needing to pay for 16 ACUs with <strong>v1</strong>. Unfortunately, those 9 ACUs would cost your $1.08/hour versus $0.96/hour for 16 <strong>v1</strong> ACUs. And if you needed 15 ACUs, well, I think you get the point.</p>
<p>The other difference has to do with the scale down time. This argument <em>might</em> be a little stronger. It can take a while for <strong>Aurora Serverless v1 </strong>to scale down, like up to 15 minutes according to the documentation. My <a href="https://www.jeremydaly.com/aurora-serverless-the-good-the-bad-and-the-scalable/" target="_blank" rel="noopener">past experiments</a> showed that this was more like 2-3 minutes, but that was in a controlled environment setting the capacity manually. So even <em>if</em> it took some amount of time in between, it’s very likely that you would be paying for a lot of extra ACUs (remember that they get billed by the <em>second</em>). This, of course, only really matters if you have very spiky workloads. Anything more consistent, and things start to get expensive really quickly.</p>
<p>Which brings us back to the “provisioned capacity” comparison. Let’s say you were running a <strong>db.r5.4xlarge</strong> for <strong>$2.32/hour</strong>. That will run you <strong>$1,094.40/month</strong> per instance. You know you need some redundancy, so even if you only had a single read replica, that’ll cost you another <strong>$1,094.40/month</strong> for somewhere around <strong>$2,188.80/month</strong>. With <strong>Aurora Serverless v2</strong>, we only really need to provision the one cluster (there are some caveats here), so we’d need roughly 64 ACUs to match the peak capacity of the <strong>db.r5.4xlarge</strong> cluster. If we ran 100% at peak capacity, then that would cost something silly like <strong>$5,529.60/month</strong>. ?</p>
<p>But let’s get serious. You’re <em>not </em>very likely to run at peak capacity. Let’s say you have two major spikes per day, low traffic overnight, and fairly minimal traffic during normal hours. For the sake of argument, we’ll say 3 hours at peak (95% capacity), 9 hours of normal traffic (40% capacity), and 12 hours of slow traffic (10% capacity). Using our 64 ACU example, that would be <strong>(3 * 64 * 0.95 + 9 * 64 * 0.4 + 12 * 64 * 0.1) * $0.12 * 30 = $1,762.56/month</strong>. It’s not a 90% savings, but compared to peak-provisioning, it still might make a lot of financial sense.</p>
<p>I don’t know exactly how they calculate the 90% savings, but if you factor in the amount of <em>over,</em> over-provisioning that goes on, especially if you include multi-tenant workloads, there definitely are some major cost savings possible here. If you’re running a fairly steady workload, then you have some calculations to do.</p>
<p>In regards to multi-region replication, <strong>Aurora Serverless v2</strong> says it will support Global Database for “sub-second data access in any region and cross-region disaster recovery.” I asked for clarification on pricing, and it seems as though you could run a DR cluster in another region with just 0.5 ACUs until you needed it. Or, if you wanted multi-region access, your clusters would just scale with regional demand, which is also pretty cool. As always, data transfer fees apply. ?</p>
<h3>Let’s look at some experiments</h3>
<p>Since the initial preview of <strong>Aurora Serverless v2</strong> is only meant to showcase the scaling characteristics, I spent the majority of my time writing scripts that tried to overwhelm it. Since it’s in a test account, I only have the default reserved concurrency of 1,000 on my Lambda functions. I tried a number of different <code>select</code> and <code>insert</code> operations, adding some random delays in long-running Lambda functions to force scaling operations. Granted, these weren’t <em>massive</em> numbers, but <strong>Aurora Serverless v2 </strong>essentially just laughed at me and effortlessly processed my queries.</p>
<p>As an example, I ran 1,000 concurrent session that averaged just over <strong>17,000</strong> queries per second split between <strong>SELECTS</strong> and <strong>INSERTS</strong>. There are three separate tests run in the charts below:</p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-throughput.png"><img class="border aligncenter wp-image-3053 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-throughput.png" alt="" width="1734" height="900" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-throughput.png 1734w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-throughput-300x156.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-throughput-768x399.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-throughput-1024x531.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-throughput-1200x623.png 1200w" /></a></p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-throughput.png"><img class="aligncenter size-full wp-image-3051" src="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-throughput.png" alt="" width="1734" height="900" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-throughput.png 1734w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-throughput-300x156.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-throughput-768x399.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-throughput-1024x531.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-throughput-1200x623.png 1200w" /></a></p>
<p>The database capacity (max values) just jumped around to handle the queries with ease, and I never got any errors. The long tail scale down here was mostly due to Lambda functions not closing the connections immediately.</p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity.png"><img class="border aligncenter wp-image-3049 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity.png" alt="" width="1734" height="900" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity.png 1734w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-300x156.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-768x399.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-1024x531.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-1200x623.png 1200w" /></a>In terms of the effect on latencies, I could barely move the needle.</p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-latency.png"><img class="border aligncenter wp-image-3052 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-latency.png" alt="" width="1734" height="900" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-latency.png 1734w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-latency-300x156.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-latency-768x399.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-latency-1024x531.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-select-latency-1200x623.png 1200w" /></a></p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-latency.png"><img class="border aligncenter wp-image-3050 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-latency.png" alt="" width="1734" height="900" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-latency.png 1734w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-latency-300x156.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-latency-768x399.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-latency-1024x531.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-insert-latency-1200x623.png 1200w" /></a>I was able to get the Select Latency up to about 7 milliseconds at one point, but it was still completely negligible.</p>
<p>For good measure, I also manually scaled the database up to 32 ACUs (the max that the preview will allow), and the total scale down took about 8 minutes. However, this was controlled by setting the minimum ACUs in the console, so it might work a bit differently when reacting to load changes. I noticed several immediate drop offs during my tests, so in practice, I think it works faster.</p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-scale-down.png"><img class="border aligncenter wp-image-3055 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-scale-down.png" alt="" width="1734" height="900" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-scale-down.png 1734w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-scale-down-300x156.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-scale-down-768x399.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-scale-down-1024x531.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/12/asv2-capacity-scale-down-1200x623.png 1200w" /></a>One other small test I ran was to check the <code>max_connections</code> available at the different ACUs. The minimum ACU setting in the preview was 4, so I couldn’t see anything lower than that. Surprisingly, there were only <strong>150 connections</strong> available, which is much lower than the 270 available with 4 ACUs in <strong>v1</strong>. I bumped it all the way up to 32 ACUs and saw <strong>3060 connections</strong> available, so a little more than the 3,000 available in <strong>v1</strong>. I was going to check the others, but I have a feeling they are still tweaking these settings. It <em>might </em>be possible that the lower connection limits have something to do with optimizing the scaling, but I’m just guessing here. Hopefully that will change as the product matures.</p>
<h3>Final Thoughts</h3>
<p><strong>Aurora Serverless v2</strong> is still <em>very</em> early, and there is a long way to go before it’s GA and it “supports the full breadth of Aurora features.” Right now there are some very noticeable omissions, including the <strong>Data API</strong> and the <strong>pause capacity</strong> feature. However, assuming that the majority of features are added in by GA, the scaling performance turns this thing up to an 11. I’ll be curious to see how the pricing works out, but given the fact that this almost entirely removes the need for capacity planning and significantly reduces the amount of database management, the total cost of ownership comparison could be very compelling.</p>
<p>I’m going to keep my eye on this one, because if it delivers on its promise, then auto-scaling, relational databases in the cloud might just be another solved problem.</p>
<p>I’d love to hear your feedback and thoughts on this new version!</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aurora-serverless/" rel="tag">aurora serverless</a>, <a href="https://www.jeremydaly.com/tag/database/" rel="tag">database</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on December 4, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/aurora-serverless-v2-preview/</link>
      <guid>https://www.jeremydaly.com/aurora-serverless-v2-preview/</guid>
      <pubDate>Fri, 04 Dec 2020 08:01:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Jeremy’s Guide to a Very Serverless re:Invent 2020]]></title>
      <description><![CDATA[<p>It’s AWS re:Invent time, and once again, developers, architects, business leaders, and everyone in between are faced with the daunting task of selecting from thousands of hours of re:Invent content. As usual, I will be focusing most of my time on <strong>serverless</strong>, so I’ve combed through the massive <a href="https://virtual.awsevents.com/agenda" target="_blank" rel="noopener">session catalog</a> and picked out the ones that look the most interesting to me. If you’re looking to focus on serverless during this re:Invent, perhaps you’ll find my suggestions useful.</p>
<p>My picks are also available on the <a href="https://cloudpegboard.com/reinvent2020.html" target="_blank" rel="noopener">Cloud Pegboard re:Invent Tool</a> (Thanks, Ken). Select “Jeremy Daly” from the “AWS Hero Picks” dropdown and you’ll see all my selections with the options to add them to your wishlist and export them to your calendar. I have about 60 sessions on my list, which I’ve categorized below. But I realize that no human is likely going to be able to watch them all, so I’ve also made a list of <strong>Sessions you can’t miss!</strong></p>
<p>There are sure to be plenty of announcements throughout the three weeks of re:Invent, so be sure to subscribe to the <strong><a href="https://offbynone.io" target="_blank" rel="noopener">Off-by-none newsletter</a></strong> for weekly recaps.</p>
<p><small><strong>NOTE:</strong> The times below are all Eastern Time and are the first broadcast. Check the <a href="https://virtual.awsevents.com/agenda" target="_blank" rel="noopener">session catalog</a> or the <a href="https://cloudpegboard.com/reinvent2020.html" target="_blank" rel="noopener">Cloud Pegboard re:Invent Tool</a> to find rebroadcast and other replay options.</small></p>
<h3>Sessions you can’t miss!</h3>
<p><strong>Werner Vogels Keynote</strong><br />
Keynote Even if you’re not a big Skrillex fan, the Werner Keynote is usually loaded with lots of great technical information, customer success stories, and visions for the future. This year everyone gets a front row seat without waiting in that huge line. 12/15/20, 10:10 AM</p>
<p><strong>Amazon DynamoDB advanced design patterns‚ Part 1 &amp; Part 2</strong><br />
Session Clearly AWS is messing with us by leaving the best for last. This two-part session by the wizard himself, Rick Houlihan, is sure to be just as engaging and mind-blowing as his previous ones. Hopefully it will also highlight some new DynamoDB updates as well. Clear your calendar and make time for this. 12/15/20, 1:30 PM &amp; 12/16/20 12:45 PM</p>
<p><strong>Data modeling with Amazon DynamoDB‚ Part 1 &amp; Part 2</strong><br />
Session Giving Rick Houlihan for his money is Alex DeBrie. AWS Data Hero, author of the DynamoDB Book, and all around great guy, Alex will be following up his session from last year with another deep dive into DynamoDB modeling. You don’t want to miss this one either. 12/2/20, 4:15 PM &amp; 12/3/20, 5:00 PM</p>
<p><strong>No more idling: Creating parallel builds using serverless CI</strong><br />
Dev Chat Michael Hart has been pushing Lambda to its limits since the beginning, and in this session he’ll show you how to create super fast serverless builds using parallelization, layers, EFS, and other techniques.12/1/20, 12:00 AM</p>
<p><strong>The pragmatic cloud developer</strong><br />
Session This session promises to share insights from AWS’s experience with customers and how Amazon builds its own higher-level services. This should be really helpful for developers struggling with best practices. 12/1/20, 3:00 PM</p>
<p><strong>How LEGO.com accelerates innovation with serverless</strong><br />
Session Serverless Hero Sheen Brisals will take you through the fascinating serverless journey that LEGO has been on and how EventBridge and Step Functions have become core parts of their system. 12/1/20, 2:15 PM</p>
<p><strong>Application integration patterns for microservices</strong><br />
Session This one looks really interesting. Learn fundamental application integration patterns based on messaging and connect them to real-world use cases in a microservices scenario. 12/1/20, 4:30 PM</p>
<p><strong>Reliability, consistency, and confidence through immutability</strong><br />
Session I’m guessing Adrian Hornsby will be giving this talk as this is a subject he has written about extensively. It is a fascinating topic and something all companies should be looking at. 12/1/20, 5:15 PM</p>
<p><strong>Building event-driven applications with Amazon EventBridge</strong><br />
Session I love EventBridge and what it means for the future of serverless applications, so any opportunity to dig in deeper and learn more is one that I’m going to take. 12/2/20, 12:45 PM</p>
<p><strong>Monolith to serverless SaaS: Migrating to multi-tenant architecture</strong><br />
Session Another really interesting topic. This session plans on exploring approaches to incrementally decompose your monolith into serverless microservices as well how tenancy affects logging, metrics, and data partitioning. 12/3/20, 1:15 PM</p>
<p><strong>Is your serverless application well-architected?</strong><br />
Session Best practices, best practices, best practices! There, I said it three times, so now you have to watch it! 12/3/20, 5:45 PM</p>
<p><strong>Building revolutionary serverless applications</strong><br />
Session I am really looking forward to this session by Ajay Nair, GM of AWS Lambda. It promises to guide you through what’s next for serverless at AWS and learn about what the future of serverless applications looks like. <a href="https://www.jeremydaly.com/lambda-serverless-musical/">Join the revolution</a>! 12/9/20, 2:00 PM</p>
<p><strong>AWS Lambda‚ Part 1: Optimizing your serverless applications</strong><br />
Session I’m guessing this will be led by Chris Munns, with the first part covering everything that you should consider apart from your Lambda function. If you want optimal serverless performance, you need to know how to optimize your applications! 12/16/20, 1:15 PM</p>
<p><strong>AWS Lambda Part 2: Optimizing your Lambda function performance</strong><br />
Session This second part will cover how you can best measure and tune your function’s performance as well as best practices for prehandler logic and reuse of information to enable fast startup and fast execution of your functions. 12/17/20, 1:15 PM</p>
<p><strong>Adrian Cockcroft‚ architecture trends and topics for 2021</strong><br />
Session Never miss an opportunity to hear Adrian Cockcroft speak. In this session he’ll discuss upcoming trends including serverless first, continuously tested resilience, and Wardley mapping for technology transitions. 12/17/20, 5:00 PM</p>
<p>Below are some more sessions that I’ll be trying my best to watch. They are organized into categories to make browsing a bit easier.</p>
<h3>Security &amp; Account Management</h3>
<p><strong>15 things I wish I knew about securing my AWS account</strong><br />
Dev Chat 12/1/20, 12:00 AM</p>
<p><strong>Understanding multi-account management</strong><br />
Dev Chat 12/1/20, 12:00 AM</p>
<p><strong>Best practices for securing your multi-account environment</strong><br />
Session 12/8/20, 10:15 AM</p>
<p><strong>Best practices for securing your serverless applications</strong><br />
Session 12/10/20, 12:15 PM</p>
<p><strong>Best practices to securely operate GraphQL at scale with AWS AppSync</strong><br />
Session 12/16/20, 2:00 PM</p>
<p><strong>Deep dive into AWS Lambda security: Function isolation</strong><br />
Session 12/17/20, 3:45 PM</p>
<p><strong>Best practices for security governance in serverless applications</strong><br />
Session 12/17/20, 5:15 PM</p>
<h3>GraphQL &amp; AppSync</h3>
<p><strong>Introduction to GraphQL</strong><br />
Session 12/1/20, 5:30 PM</p>
<p><strong>Power modern serverless applications with GraphQL and AWS AppSync</strong><br />
Session 12/9/20, 3:00 PM</p>
<p><strong>Model and access application data more efficiently with AWS Amplify</strong><br />
Session 12/15/20, 1:00 PM</p>
<p><strong>Unify access to siloed data with AWS AppSync GraphQL resolvers</strong><br />
Session 12/17/20, 6:00 PM</p>
<h3>Jamstack</h3>
<p><strong>Add a custom domain to your AWS Amplify-hosted web application</strong><br />
Lightning Talk 12/1/20, 12:00 AM</p>
<p><strong>Speed up your release cycle: Host SPA and static web applications on AWS</strong><br />
Session 12/10/20, 2:30 PM</p>
<h3>Leadership Talks &amp; Vision</h3>
<p><strong>Andy Jassy Keynote</strong><br />
Keynote LIVE 12/1/20, 10:30 AM</p>
<p><strong>The value of innovation in challenging times</strong><br />
Lightning Talk 12/1/20, 12:00 AM</p>
<p><strong>The business case for serverless with Stedi</strong><br />
Session 12/9/20, 1:15 PM</p>
<p><strong>Increasing innovation with serverless applications</strong><br />
Leadership Session 12/16/20, 1:30 PM</p>
<h3>Diversity in Tech</h3>
<p><strong>Building the pipeline of next-generation tech employees and leaders</strong><br />
Lightning Talk 12/1/20, 12:00 AM</p>
<p><strong>Together, We Can Close the Gap</strong><br />
Session 12/1/20, 12:00 AM</p>
<h3>Customer Success</h3>
<p><strong>How CATCH FASHION built a serverless ML inference service with AWS Lambda</strong><br />
Dev Chat 12/1/20, 12:00 AM</p>
<p><strong>How BMW Group uses AWS serverless analytics for a data-driven ecosystem</strong><br />
Session 12/1/20, 3:00 PM</p>
<p><strong>How FINRA operates PB-scale analytics on data lakes with Amazon Athena</strong><br />
Session 12/1/20, 6:00 PM</p>
<h3>Data &amp; Databases</h3>
<p><strong>Boost serverless app performance with Amazon RDS Proxy &amp; Amazon Aurora</strong><br />
Dev Chat 12/1/20, 12:00 AM</p>
<p><strong>Analyzing data at any scale with AWS Lambda</strong><br />
Session 12/3/20, 4:45 PM</p>
<p><strong>How Disney+ scales globally on Amazon DynamoDB</strong><br />
Session 12/3/20, 6:30 PM</p>
<p><strong>MySQL options on AWS: Self-managed, managed, serverless</strong><br />
Session 12/17/20, 12:45 PM</p>
<h3>Building Event-Driven, Serverless Applications</h3>
<p><strong>Getting started building your first serverless web application</strong><br />
Session 12/2/20, 4:15 AM</p>
<p><strong>Getting started with AWS Step Functions for service orchestration</strong><br />
Session 12/2/20, 5:00 PM</p>
<p><strong>End the monolith! Lessons learned adopting serverless (sponsored by New Relic)</strong><br />
Session 12/3/20, 5:30 PM</p>
<p><strong>Decoupling serverless workloads with Amazon EventBridge</strong><br />
Session 12/17/20, 11:15 AM</p>
<p><strong>The serverless LAMP stack</strong><br />
Session 12/8/20, 2:15 PM</p>
<p><strong>Scalable serverless event-driven architectures with SNS, SQS &amp; Lambda</strong><br />
Session 12/8/20, 5:15 PM</p>
<p><strong>Understanding AWS Lambda streaming events</strong><br />
Session 12/10/20, 10:15 AM</p>
<p><strong>Choosing the right load balancer for serverless applications</strong><br />
Session 12/10/20, 1:45 PM</p>
<p><strong>Modernize your applications with AWS Lambda and Amazon EFS</strong><br />
Session 12/16/20, 5:00 PM</p>
<p><strong>Amazon API Gateway HTTP APIs: Beyond the proxy</strong><br />
Session 12/16/20, 5:45 PM</p>
<h3>Tooling &amp; Observability</h3>
<p><strong>The journey of an AWS CloudFormation template to AWS CDK</strong><br />
Dev Chat 12/1/20, 12:00 AM</p>
<p><strong>I didn’t know AWS SAM could do that!</strong><br />
Session 12/9/20, 11:00 AM</p>
<p><strong>CI/CD for serverless applications</strong><br />
Session 12/15/20, 2:15 PM</p>
<p><strong>Increase availability with AWS observability solutions</strong><br />
Session 12/15/20, 5:30 PM</p>
<p><strong>Becoming proficient with serverless application observability</strong><br />
Session 12/16/20, 3:00 PM</p>
<h3>Containers</h3>
<p><strong>AWS Fargate: Are serverless containers right for you?</strong><br />
Session 12/1/20, 2:30 PM</p>
<p><strong>AWS Fargate: Roadmap and vision</strong><br />
Session 12/16/20, 3:30 PM</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws/" rel="tag">aws</a>, <a href="https://www.jeremydaly.com/tag/aws-reinvent/" rel="tag">aws re:Invent</a>, <a href="https://www.jeremydaly.com/tag/eventbridge/" rel="tag">eventbridge</a>, <a href="https://www.jeremydaly.com/tag/security/" rel="tag">security</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on November 29, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/serverless-reinvent-2020/</link>
      <guid>https://www.jeremydaly.com/serverless-reinvent-2020/</guid>
      <pubDate>Sun, 29 Nov 2020 17:11:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[LAMBDA – A Serverless Musical – Cast & Lyrics]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda-a-serverless-musical-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda-a-serverless-musical-1200x675.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda-a-serverless-musical-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda-a-serverless-musical-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda-a-serverless-musical-1024x576.jpg 1024w" /></div>
<h2>Join the Serverless Revolution!</h2>
<p>Learning a new paradigm can be really difficult, especially something as revolutionary (and different) as serverless. Thanks to a little inspiration from fellow AWS Serverless Hero, <a href="https://twitter.com/forrestbrazeal/status/1301182968766107656" target="_blank" rel="noopener">Forrest Brazeal</a>, I created this Hamilton parody to help teach people what serverless is all about and why it’s such an amazing way to build applications. Hopefully it inspires you as well. Enjoy!</p>
<div class="iframe-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/zMua0cuhFnc" frameborder="0" allowfullscreen="allowfullscreen">[embedded content]</iframe></div>
<h2>The Cast</h2>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda.jpg"><img class="border alignleft wp-image-2890 size-thumbnail" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda-150x150.jpg" alt="" width="150" height="150" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda-150x150.jpg 150w, https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda-300x300.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/lambda.jpg 750w" /></a><strong>AWS Lambda</strong> (<a href="https://aws.amazon.com/lambda/" target="_blank" rel="noopener">more info</a>)<br /><em>Event-driven Serverless Compute</em><br />
Lambda has been around the cloud computing scene for almost six years now, inspiring amazing tools like the <a href="https://serverless.com" target="_blank" rel="noopener">Serverless Framework</a> as well as conferences like <a href="https://serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays</a> and <a href="https://serverlessconf.io/" target="_blank" rel="noopener">Serverlessconf</a>.</p>
<p class="c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/api-gateway.jpg"><img class="border alignleft wp-image-2893 size-thumbnail" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/api-gateway-150x150.jpg" alt="" width="150" height="150" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/api-gateway-150x150.jpg 150w, https://www.jeremydaly.com/wp-content/uploads/2020/09/api-gateway-300x300.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/api-gateway.jpg 750w" /></a><strong>Amazon API Gateway</strong> (<a href="https://aws.amazon.com/api-gateway/" target="_blank" rel="noopener">more info</a>)<br /><em>Secure APIs at any Scale</em><br />
API Gateway became a serverless staple in 2015 when it partnered up with Lambda to enable several new web application use cases. Since then, API Gateway has continued to grow, adding WebSockets, service integrations, and a new, lower latency HTTP API version.</p>
<p class="c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/dynamodb.jpg"><img class="border alignleft wp-image-2891 size-thumbnail" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/dynamodb-150x150.jpg" alt="" width="150" height="150" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/dynamodb-150x150.jpg 150w, https://www.jeremydaly.com/wp-content/uploads/2020/09/dynamodb-300x300.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/dynamodb.jpg 750w" /></a><strong>Amazon DynamoDB</strong> (<a href="https://aws.amazon.com/dynamodb/" target="_blank" rel="noopener">more info</a>)<br /><em>Fast and flexible NoSQL database</em><br />
Amazon DynamoDB is a key-value and document database that delivers single-digit millisecond performance at any scale. Its popularity has been growing as developers discover single-table design.</p>
<p class="c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/eventbridge.jpg"><img class="border alignleft wp-image-2892 size-thumbnail" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/eventbridge-150x150.jpg" alt="" width="150" height="150" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/eventbridge-150x150.jpg 150w, https://www.jeremydaly.com/wp-content/uploads/2020/09/eventbridge-300x300.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/eventbridge.jpg 750w" /></a><strong>Amazon EventBridge</strong> (<a href="https://aws.amazon.com/eventbridge/" target="_blank" rel="noopener">more info</a>)<br /><em>Serverless Event Bus</em><br />
The new kid on the block, EventBridge is a serverless event bus that connects application data from your own apps, SaaS, and AWS services. EventBridge made its debut in July of 2019, but it’s yet to receive the recognition it deserves.</p>
<p class="c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/werner-vogels.jpg"><img class="border alignleft wp-image-2894 size-thumbnail" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/werner-vogels-150x150.jpg" alt="" width="150" height="150" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/werner-vogels-150x150.jpg 150w, https://www.jeremydaly.com/wp-content/uploads/2020/09/werner-vogels-300x300.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/werner-vogels.jpg 750w" /></a><strong>Werner Vogels</strong> (<a href="https://twitter.com/Werner" target="_blank" rel="noopener">@Werner</a>)<br /><em>VP &amp; CTO at Amazon.com</em><br />
While Werner is no stranger to the stage and screen, this is his first musical. His favorite genres include EDM and both Heavy &amp; Bare Metal. Inspirations include Skrillex, Foo Fighters, and Werner Against The Machine.</p>
<h3>The Ensemble</h3>
<p class="c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/andy-jassy.jpg"><img class="border alignleft wp-image-2896 size-thumbnail" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/andy-jassy-150x150.jpg" alt="" width="150" height="150" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/andy-jassy-150x150.jpg 150w, https://www.jeremydaly.com/wp-content/uploads/2020/09/andy-jassy-300x300.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/andy-jassy.jpg 750w" /></a><strong>Andy Jassy</strong> (<a href="https://twitter.com/ajassy" target="_blank" rel="noopener">@ajassy</a>)<br /><em>CEO at Amazon Web Services</em><br />
Andy is a Harvard grad that joined the Amazon cast in 1997. In 2003, he co-founded a new troupe called AWS, and eventually became their leader in 2016. Though he’s had tremendous career success, he still hopes to someday draw bigger crowds than Werner keynotes.</p>
<p class="c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/jeff-barr.jpg"><img class="border alignleft wp-image-2895 size-thumbnail" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/jeff-barr-150x150.jpg" alt="" width="150" height="150" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/jeff-barr-150x150.jpg 150w, https://www.jeremydaly.com/wp-content/uploads/2020/09/jeff-barr-300x300.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/jeff-barr.jpg 750w" /></a><strong>Jeff Barr</strong> (<a href="https://twitter.com/jeffbarr" target="_blank" rel="noopener">@jeffbarr</a>)<br /><em>VP &amp; Chief Evangelist at Amazon Web Services</em><br />
Jeff is a prolific blogger, video creator, and orator that has been spreading the AWS word via social media for over 18 years. Most people believe that he has figured out how to clone himself so that he can produce as much content as he does.</p>
<h3>Special Guest</h3>
<p class="c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/rick-houlihan.jpg"><img class="border alignleft wp-image-2897 size-thumbnail" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/rick-houlihan-150x150.jpg" alt="" width="150" height="150" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/rick-houlihan-150x150.jpg 150w, https://www.jeremydaly.com/wp-content/uploads/2020/09/rick-houlihan-300x300.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/rick-houlihan.jpg 750w" /></a><strong>Rick Houlihan</strong> (<a href="https://twitter.com/houlihan_rick" target="_blank" rel="noopener">@houlihan_rick</a>)<br /><em>Senior Practice Manager at Amazon Web Services</em><br />
You may know Rick from his legendary re:Invent talks from <a href="https://www.youtube.com/watch?v=jzeKPKpucS0" target="_blank" rel="noopener">2017</a>, <a href="https://www.youtube.com/watch?v=HaEPXoXVf2k" target="_blank" rel="noopener">2018</a>, and <a href="https://www.youtube.com/watch?v=6yqfmXiZTlM" target="_blank" rel="noopener">2019</a>. Rick enjoys blowing people’s minds with single-table designs, shutting down Oracle databases, and eating Torchy’s Tacos.</p>
<h3>The DAs</h3>
<p>The serverless Developer Advocates (DAs) at AWS are a scrappy bunch of evangelists that have been speaking at conferences around the world and creating educational serverless content like they’re running out of time. They’ve consolidated their combined work at <a href="https://serverlessland.com" target="_blank" rel="noopener">serverlessland.com</a>.</p>
<figure id="attachment_2900" class="wp-caption aligncenter c2"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-das.jpg"><img class="border wp-image-2900 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-das.jpg" alt="" width="2102" height="500" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-das.jpg 2102w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-das-300x71.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-das-768x183.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-das-1024x244.jpg 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-das-1200x285.jpg 1200w" /></a>
<figcaption class="wp-caption-text">Chris Munns (<a href="https://twitter.com/chrismunns" target="_blank" rel="noopener">@chrismunns</a>), Eric Johnson (<a href="https://twitter.com/edjgeek" target="_blank" rel="noopener">@edjgeek</a>), James Beswick (<a href="https://twitter.com/jbesw" target="_blank" rel="noopener">@jbesw</a>), Moheeb Zara (<a href="https://twitter.com/virgilvox" target="_blank" rel="noopener">@virgilvox</a>), Julian Wood (<a href="https://twitter.com/julian_wood" target="_blank" rel="noopener">@julian_wood</a>), and Ben Smith (<a href="https://twitter.com/benjamin_l_s" target="_blank" rel="noopener">@benjamin_l_s</a>)</figcaption></figure><h3>The Makers</h3>
<p>Behind every great technology, there are great people. If it wasn’t for the incredibly engineers, project managers, support staff, and senior leadership, AWS Lambda wouldn’t be the amazing product it is today. The production is grateful to have a handful of them make an appearance.</p>
<figure id="attachment_2899" class="wp-caption aligncenter c2"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-makers.jpg"><img class="border wp-image-2899 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-makers.jpg" alt="" width="2102" height="500" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-makers.jpg 2102w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-makers-300x71.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-makers-768x183.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-makers-1024x244.jpg 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-makers-1200x285.jpg 1200w" /></a>
<figcaption class="wp-caption-text">Jia Liu (<a href="https://twitter.com/jiaaws1" target="_blank" rel="noopener">@jiaaws1</a>), Sushant Bhatia (<a href="https://twitter.com/AboutDev" target="_blank" rel="noopener">@AboutDev</a>), Rebecca Marshburn (<a href="https://twitter.com/beccaodelay" target="_blank" rel="noopener">@beccaodelay</a>), Holly Mesrobian (<a href="https://www.linkedin.com/in/holly-mesrobian-a1b710/" target="_blank" rel="noopener">LinkedIn</a>), Ajay Nair (<a href="https://twitter.com/ajaynairthinks" target="_blank" rel="noopener">@ajaynairthinks</a>), Trishika Pattabiraman (<a href="https://twitter.com/trishika_p" target="_blank" rel="noopener">@trishika_p</a>), Emily Shea (<a href="https://twitter.com/em__shea" target="_blank" rel="noopener">@em__shea</a>), and Dhruv Sood (<a href="https://twitter.com/dhruvsood" target="_blank" rel="noopener">@dhruvsood</a>)</figcaption></figure><h3>The Heroes</h3>
<p>The <a href="https://aws.amazon.com/developer/community/heroes/?community-heroes-all.sort-by=item.additionalFields.sortPosition&amp;community-heroes-all.sort-order=asc&amp;awsf.filter-hero-category=heroes%23serverless" target="_blank" rel="noopener">AWS Serverless Heroes</a> are an amazing bunch of technologists, educators, and community leaders that push AWS serverless technology to its limits and engage with others to help shape the future of serverless. There are so many wonderful and passionate people in this group. It’s an honor to have some of them join the cast.</p>
<figure id="attachment_2898" class="wp-caption alignnone c3"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-heroes.jpg"><img class="border wp-image-2898 size-full" src="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-heroes.jpg" alt="" width="1790" height="500" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/09/the-heroes.jpg 1790w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-heroes-300x84.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-heroes-768x215.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-heroes-1024x286.jpg 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/09/the-heroes-1200x335.jpg 1200w" /></a>
<figcaption class="wp-caption-text">Yan Cui (<a href="https://twitter.com/theburningmonk" target="_blank" rel="noopener">@theburningmonk</a>), Farrah Campbell (<a href="https://twitter.com/FarrahC32" target="_blank" rel="noopener">@FarrahC32</a>), Jeremy Daly (<a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">@jeremy_daly</a>), Marcia Villalba (<a href="https://twitter.com/mavi888uy" target="_blank" rel="noopener">@mavi888uy</a>), Forrest Brazeal (<a href="https://twitter.com/forrestbrazeal" target="_blank" rel="noopener">@forrestbrazeal</a>), and Austen Collins (<a href="https://twitter.com/austencollins" target="_blank" rel="noopener">@austencollins</a>)</figcaption></figure><h3>Special Thanks</h3>
<p>Special thanks to Nicole Daly for making the costumes, putting up with several late nights, and being forced to listen to the recording process before auto-tune was added. Also a huge thanks to Julia Daly (age 12), who was paid $1 per Memoji creation, and for her and her sister Ellie’s body doubling performances and questionable dancing skills.</p>
<h2>Lyrics</h2>
<p>Who are you?<br />
Who are you?<br />
Who are you?<br />
Who, Who is this kid, what’s he gonna do?</p>
<p>I’m gonna reduce your ops<br />
I’m gonna reduce your ops<br />
Hey yo, I’m unlike containers<br />
No patching, no maintainers<br />
And I’m gonna reduce your ops</p>
<p>I’ma introduce you to some cloud knowledge<br />
I probably shouldn’t brag, but dag, I amaze and astonish<br />
Problem is my console’s got brains but no polish<br />
I spin up fast to impress<br />
With every request, I’m rock solid</p>
<p>My security is tight, each function has a role<br />
I give you some control, power to scale? Unimpeachable<br />
Only five years old but my tech is stronger<br />
And now that my timeouts are longer, I conquer<br />
Every problem, every limitation<br />
Every situation, think I have an integration<br />
Step Functions for orchestration<br />
The plan is to put your servers to shame<br />
But damn, re:Invent’s close, so let me spell out my name</p>
<p>I am the L-A-M-B-D-A, see? This is what I’m meant to be<br />
Just a function that lets events trigger me<br />
Meanwhile, Hacker News keeps throwing shade endlessly<br />
Essentially, they treat me like php<br />
A new CGI-BIN’s what they think of me<br />
But with their blinded eyes, they fail to see there will be<br />
A serverless revolution in this century</p>
<p>Enter me, he says asynchronously<br />
Don’t be shocked when Tech Crunch mentions me<br />
I will replace your servers, set your workloads free<br />
If need be, you can provision my concurrency</p>
<p>And I’m gonna reduce your ops<br />
I’m gonna reduce your ops<br />
Hey yo, I’m unlike containers<br />
No pods or orchestrators<br />
And I’m gonna reduce your ops<br />
I’m gonna reduce your ops<br />
I’m gonna reduce your ops<br />
Hey yo, I’m unlike containers<br />
No clusters, noisy neighbors<br />
And I’m gonna reduce your ops<br />
Time to reduce your ops!</p>
<p>I dream of life without Apache<br />
No more log files pilin’ up endlessly<br />
Or changing NGINX configs haphazardly<br />
Lambda and I have some really good chemistry<br />
With my ops!</p>
<p>My scale’s unprecedented<br />
I’m the best No-S-Q-L DB ever invented<br />
My queries are fast and I blast, my data’s stable<br />
Ask Rick Houlihan what I can do with a single table<br />
And reduce your ops</p>
<p>But apps’ll never be truly free<br />
Until all events can be routed reliably<br />
Send ‘em to me<br />
And you’ll see<br />
I handle events en masse<br />
Even replace webhooks from your SaaS<br />
And reduce your ops</p>
<p>It’s genius, but think how you sell it<br />
Ops needs to agree, when Devs start to compel it<br />
I’m with you, but your position needs thought<br />
You have a fine line to be walked<br />
Threaten jobs, you’re gonna get blocked</p>
<p>Werner, check what we got<br />
This DynamoDB scales your data a lot<br />
API Gateway is hot<br />
EventBridge, I like you a lot<br />
Together we can build apps where the servers are not<br />
We have resilience and redundancy all in one spot<br />
We’ll change paradigms and minds, whether you like it or not<br />
We’re revolutionary serverless event-driven services<br />
Get out your credentials show me where your CloudFormation is</p>
<p>Oh, is my Twitter too loud?<br />
Sometimes my DAs get excited, shoot off at the mouth<br />
My community’s amazing<br />
And I promise that I’ll make y’all proud<br />
Let’s get this guy in front of a crowd</p>
<p>I’m gonna reduce your ops<br />
I’m gonna reduce your ops<br />
Hey yo, I’m unlike containers<br />
No pods or orchestrators<br />
And I’m gonna reduce your ops<br />
I’m gonna reduce your ops<br />
I’m gonna reduce your ops<br />
Hey yo, I’m unlike containers<br />
No clusters, noisy neighbors<br />
And I’m gonna reduce your ops</p>
<p>Everybody say<br />
Whoa, whoa, whoa<br />
Ayy, whoa (woo), whoa<br />
Don’t let ‘em scare ya (yeah)<br />
Let’s go<br />
Whoa, whoa, whoa<br />
I said we’re free when the server stops<br />
Whoa, whoa, whoa<br />
Said, free when the server stops<br />
Whoa, whoa, whoa<br />
A-come on (yeah)<br />
Come on, let’s go</p>
<p>Scale up<br />
When your traffic increases you scale up<br />
Tell your application it’s gotta scale up<br />
Tell your database it’s gotta scale up<br />
When are these companies gonna scale up? (Whoa, whoa)<br />
When are these companies gonna scale up? (Whoa)<br />
When are these companies gonna scale up? (Whoa)<br />
When are these companies gonna scale up?<br />
Scale up</p>
<p>I imagine outages becoming just a memory<br />
No alerts from me<br />
In your sleep, the weekend ahead of thee<br />
And did you know the fact, that all my apps are multi-az<br />
Distributing load and requests with full redundancy?<br />
Some missing use cases, but not many<br />
Of course we’ve got serverless haters by the plenty<br />
‘Cause we scare peeps livin’ in the past, we contrast, we’re growing fast<br />
Gotta get woke, it’s Twenty-twenty</p>
<p>Scratch that, terminate your servers, join the movement<br />
Soon Amazon will wonder where all their EC2s went<br />
Foes oppose us, we scale with the demand<br />
No pods or jobs to, maintain or understand<br />
Now, think about that independence<br />
Freedom to work on the customer experience<br />
Or will you stay in an endless cycle of patching, reacting, and tier 1 support dispatching</p>
<p>I know all this stuff with K8s is excitin’<br />
But damn, between the hype ’n’ the buzz<br />
I’ve been bottlin’ lightnin’<br />
I got SAM, Layers, Lambda Destinations<br />
You want state, EFS integration!<br />
I’m past patiently waitin’, I’m passionately surpassin’ the expectation<br />
On every single invocation<br />
The old way of buildin’ has no time left to borrow<br />
I’ma power all the apps of tomorrow</p>
<p>And yeah now I’m gonna reduce your ops<br />
I’m gonna reduce your ops<br />
Hey yo, I’m unlike containers<br />
No patching, no maintainers<br />
And I’m gonna reduce your ops<br />
We’re gonna scale up (time to reduce your ops)<br />
I’m gonna reduce your ops<br />
We’re gonna scale up (time to reduce your ops)<br />
I’m gonna reduce your ops<br />
We’re gonna scale up, scale up<br />
It’s time to reduce your ops<br />
Scale up, scale up<br />
It’s time to reduce your ops<br />
Scale up, it’s time to reduce your ops<br />
Scale up, reduce your ops, ops, ops<br />
It’s time to reduce ops, time to reduce ops<br />
I’m gonna reduce your<br />
I’m gonna reduce your… ops!</p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on September 20, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/lambda-serverless-musical/</link>
      <guid>https://www.jeremydaly.com/lambda-serverless-musical/</guid>
      <pubDate>Mon, 21 Sep 2020 00:49:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #103]]></title>
      <description><![CDATA[<h1>Why buy the cow if you get the Machine Learning for free? ?</h1>
<p>Welcome to <strong>Issue #103</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-102/">Last week</a>, we got some awesome insights into serverless and cloud security and took a look at serverless machine learning. This week, we learn why you don’t need to buy a cow to do machine learning, how serverless can speed up your regression tests and we get a full season of Sessions with SAM to binge watch. Plus, we have plenty of great serverless content from the community.</p>
<p>Before we begin, make sure you check out <strong>TriggerMesh</strong>. They let you connect all your key SaaS and on-premises apps with AWS EventBridge. And you can also trigger workloads running on any managed Kubernetes cloud. <a href="http://triggermesh.com/try-triggermesh/?utm_source=paid&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Join the Beta program for Free!</a> Sponsored</p>
<h3>When you’re looking for serverless success stories… ?</h3>
<p>“Some of the integrations that weren’t useful anymore, remained in production as nobody was sure if they will break something else by removing it.” If that sounds like an old app you’re working with, see how Marin Radjenovic migrated a <a href="https://medium.com/@marinradjenovic/from-legacy-application-to-serverless-with-eventbridge-8a7aaf2110a9?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">legacy application to serverless with EventBridge</a>.</p>
<p>And if that’s not exciting enough for you, check out this post by Fernando Devegili that details how his team used serverless to reduce the amount of time it took to do <a href="https://medium.com/@fedevegili/the-power-of-serverless-visual-regression-tests-from-20-minutes-to-10-seconds-bc47b2ce9d20?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">visual regression tests from 20 minutes to 10 seconds</a>.</p>
<h3>When you’re looking for some good serverless use cases… ?</h3>
<p>Why worry about writing an entire backend when you can just <a href="https://dev.to/gzuidhof/sending-e-mails-from-cloudflare-workers-2abl?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">send e-mails right from Cloudflare Workers</a>? Or if you’d like to <a href="https://dev.to/a0viedo/creating-an-svg-graph-from-your-sqlite-database-with-serverless-2dhi?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">create an SVG graph from your SQLite database</a>, Alejandro Oviedo will show you how to do it using a Lambda function.</p>
<p>Jerry Mullis shows us how to <a href="https://dev.to/jcmullis/stopping-ec2-instances-on-a-scheduled-basis-hf1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">stop EC2 instances on a scheduled basis</a>, one of those classic serverless DevOps use cases. But if you want to get really meta, how about using serverless to manage its own scalability by <a href="https://aws.amazon.com/blogs/compute/scheduling-aws-lambda-provisioned-concurrency-for-recurring-peak-usage/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">scheduling AWS Lambda Provisioned Concurrency</a>?</p>
<h3>When there’s more to learn about serverless… ?‍?</h3>
<p>Paul Swail answers “<a href="https://serverlessfirst.com/fargate-serverless-toolkit/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">where does Fargate fit into your serverless toolkit?</a>” (just in case you had that question too), Yan Cui gives us some tips for <a href="https://lumigo.io/blog/debugging-aws-lambda-timeouts/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">debugging AWS Lambda timeouts</a>, and Serkan Özal gives you the pros and cons of using a <a href="https://blog.thundra.io/mono-or-multi-repository-a-dilemma-in-the-serverless-world?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">mono- or multi-repo</a> in a serverless world.</p>
<p>There’s an entire series on running <a href="https://hint.io/blog/lambda-planning-and-architecture?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Ruby on AWS Lambda</a> from the team at Hint Media, Ernesto Marquez explains <a href="https://searchcloudcomputing.techtarget.com/answer/When-should-I-use-Amazon-RDS-vs-Aurora-Serverless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">when you should use Amazon RDS vs. Aurora Serverless</a>, and Aman Sharma shares an <a href="https://dev.to/amanintech/introduction-to-serverless-edge-scripting-2h10?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">introduction to Serverless/Edge scripting</a>.</p>
<p>If you want to go back to basics, Shane Lee gives <a href="https://codeyogi.co.uk/2020/08/12/a-brief-10-point-guide-to-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">a brief 10-point guide to AWS Lambda</a>. And if you’d like to explore more complex concepts, like <a href="https://dev.to/amcdnl/static-ips-for-aws-lambdas-14e7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">static IPs for AWS Lambdas</a>, Austin McDaniel has some ideas for you.</p>
<p>No time to write tests? Jan Groth has <a href="https://medium.com/@jan.groth.de/no-time-for-tests-12-recommendations-on-unit-testing-aws-lambdas-in-python-6a74ca8bb0c1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener"> 12 recommendations on unit-testing AWS Lambdas in Python</a>. There’s some good advice in here, like not bothering to test boto or other frameworks. They’re probably already well tested, so you should focus on your own business logic.</p>
<p>James Beswick has a new series that will tell you why <a href="https://aws.amazon.com/blogs/compute/using-serverless-backends-to-iterate-quickly-on-web-apps-part-1/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">using serverless backends to iterate quickly on web apps</a> is important to rapid development and deployments, and Yan Cui has another great post that explains <a href="https://lumigo.io/blog/what-alerts-should-you-have-for-serverless-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">what alerts you should have for your serverless applications</a>. Once you figure that out, James Allardice will demonstrate the process of <a href="https://dev.to/orangejellyfish/setting-up-cloudwatch-alarms-with-serverless-497i?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">setting up CloudWatch alarms with serverless</a>.</p>
<h3>When you just want to build something… ?‍♀️</h3>
<p><a href="https://epsagon.com/serverless-observability-dr/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL" target="_blank" rel="noopener">Auto-instrumented, trace-centric observability for serverless &amp; k8s</a><br />
If you’re running distributed serverless, Kubernetes, or containerized environments, you need a specialized tool that’s built to monitor them. Epsagon enables teams to automatically detect, troubleshoot, and resolve issues within complex microservices with no training, manual coding, tagging or maintenance required. Try free today, connect your first trace instantly, and grab one of our “cloud observability” drones! Sponsored</p>
<p>If you’re using Flutter to build native apps and you need a serverless backend, check out this post on <a href="https://medium.com/@bleyldev/full-stack-flutter-creating-a-backend-for-your-app-with-aws-serverless-6ee11ae7bd89?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">full-stack Flutter</a> that’ll show you how to create a backend for your app using AWS &amp; serverless.</p>
<p>Just need to deploy a static site? Abhishek Wagh shows you <a href="https://medium.com/@iamabhishekk/how-to-deploy-your-websites-with-aws-amplify-93c720ada69b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">how to deploy your websites with AWS Amplify</a> (no, not the framework, the console). While you can deploy backends with the Amplify Console as well, Netlify has a pretty slick setup. You may want to check out this <a href="https://medium.com/@techsocmsit2020/introduction-to-serverless-functions-2811e9d0752c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">introduction to serverless functions</a>.</p>
<p>Ben Smith isn’t ready to quit on the whole serverless PHP thing, so he wrote a post <a href="https://aws.amazon.com/blogs/compute/introducing-the-cdk-construct-library-for-the-serverless-lamp-stack/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">introducing the CDK construct library for the serverless LAMP stack</a>. Regardless of your runtime of choice, implementing a <a href="https://medium.com/@pjatocheseminario/passwordless-api-using-cognito-and-serverless-framework-7fa952191352?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">passwordless API using Cognito and the Serverless framework</a> might be a cool addition to your serverless apps.</p>
<h3>What to do to tighten up your serverless security… ?</h3>
<p>Another take on the recent ESG study points out that <a href="https://www.enterpriseai.news/2020/08/13/half-of-devops-teams-surveyed-pushing-vulnerable-code/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">half of DevOps teams surveyed pushed vulnerable code</a> “because the vulnerabilities identified were discovered too late in the [development] cycle to resolve them in time.” Um, I know lots of us face a tremendous amount of pressure to ship stuff, but knowingly shipping vulnerable code should be a show stopper.</p>
<p>Another interesting post I read was about the dangers of <a href="https://portswigger.net/daily-swig/denial-of-wallet-attacks-how-to-protect-against-costly-exploits-targeting-serverless-setups?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Denial-of-Wallet attacks</a>. I think the possibilities of DoW attacks are very real and that you should absolutely put in place mitigation strategies in order to deal with them if they occur. That being said, I haven’t heard any major horror stories about this other than from devs accidentally doing it to themselves. I’m not saying this won’t be a thing, I just haven’t seen it yet.</p>
<h3>When you’re looking for some interesting reading… ?</h3>
<p>Charity Majors has a great post called <a href="https://acloudguru.com/blog/engineering/the-future-of-ops-jobs?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">The Future of Ops Jobs</a>. In it she explains how Ops are <em>not</em> going away, but morphing into something different than you may be used to. Lots of great advice in here for those Ops people looking to advance their careers.</p>
<p>Remember when people were saying that serverless was a spectrum? Well Gillian Armstrong says that Machine Learning is spectrum and explains <a href="https://medium.com/@virtualgill/how-to-cheat-at-machine-learning-by-not-owning-a-cow-690e232aaacf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">how to cheat at it by not owning a cow</a>. There’s a helpful parable in here, but all you really need to know is that buying butter isn’t cheating. ?</p>
<p>Not sure I’d read this to my kids, but Mariliis Retter wrote a “<a href="https://dashbird.io/blog/serverless-bedtime-story/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">techy bedtime story</a>” explaining how serverless came to be; complete with wizards, caves, and server monsters. In other serverless analogies, Shrikant Navelkar explains why serverless is like good portion control and helps us <a href="https://www.dqindia.com/overcome-sunk-cost-fallacy-serverless-computing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">overcome the sunk cost fallacy</a>.</p>
<h3>When your Netflix Watch List is empty… ?</h3>
<p>On <a href="https://www.serverlesschats.com/62/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Episode #62 of the Serverless Chats podcast</a>, I had a chat with Nica Fee about the recently released <a href="https://www.serverlesschats.com/62/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">New Relic One Platform</a>, how observability can both reduce MTTR and help us optimize our applications for happier customers, and how New Relic is embracing open source and making observability available to teams of all sizes. <a href="https://www.youtube.com/watch?v=yM4q0NSFz0M&amp;feature=emb_title?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Watch this episode on YouTube</a>!</p>
<p>Yan Cui had an awesome conversation with Zack Kanter from Stedi on <a href="https://www.buzzsprout.com/877747/4615988-24-serverless-at-stedi-with-zack-kanter?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Real World Serverless, Episode #24</a>. There’s a great discussion in here about tenancy and how Stedi thinks about it.</p>
<p>And if you’re looking for something to binge watch, all the episodes from <a href="https://aws.amazon.com/blogs/compute/icymi-season-one-of-sessions-with-sam/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Season one of Sessions with SAM</a> starring Eric Johnson are nicely curated in this convenient blog post.</p>
<h3>When you realize that apparently the devs at AWS never sleep… ☕️</h3>
<p>There was a lot happening this past week at AWS. Let’s see if we can give you a quick summary of some of the major points. First of all <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/quantum-computing-available-aws-through-amazon-braket/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Quantum computing is now available on AWS through Amazon Braket</a>. I know it has nothing to do with serverless, but Jeff Barr is <a href="https://aws.amazon.com/blogs/aws/amazon-braket-go-hands-on-with-quantum-computing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">really excited about it</a>.</p>
<p>ElastiCache also had a big week, <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-elasticache-announces-support-for-resource-based-permission-policies/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">announcing support for resource-based permission policies</a> and <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-elasticache-redis-supports-500-nodes-per-cluster/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">ElastiCache Redis now supporting up to 500 Nodes per cluster</a>. And not to be outdone, <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-dynamodb-accelerator-dax-now-supports-next-generation-memory-optimized-amazon-ec2-r5-nodes/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Amazon DynamoDB Accelerator (DAX) now supports next-generation, memory-optimized Amazon EC2 R5 nodes</a>.</p>
<p>Moving on to more serverless related announcements, AWS is EOLing  Amazon Linux 1 support in Lambda on December 30, 2020. Eric Johnson shows you how you should be <a href="https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-to-al2/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">migrating AWS Lambda functions to Amazon Linux 2</a> (note that this means updating your runtimes). In related news, <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-lambda-supports-custom-runtimes-amazon-linux-2/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">AWS Lambda now supports custom runtimes on Amazon Linux 2</a> as well as <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-lambda-supports-go-amazon-linux-2/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">support for Go on Amazon Linux 2</a>.  Plus <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-lambda-supports-java-8/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">AWS Lambda now supports Java 8 (Corretto)</a>, if you’re into that sort of thing.</p>
<p>In slightly more exciting news, <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-lambda-now-supports-amazon-managed-streaming-for-apache-kafka-as-an-event-source/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">AWS Lambda now supports Amazon Managed Streaming for Apache Kafka as an event source</a>, which James Beswick <a href="https://aws.amazon.com/blogs/compute/using-amazon-msk-as-an-event-source-for-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">explains how to set it up here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-step-functions-support-string-manipulation-comparison-operators-improved-output-processing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">AWS Step Functions added support for string manipulation, new comparison operators, and improved output processing</a>, giving customer more flexibility within their state machine definitions and allowing for more dynamic behavior. <a href="https://aws.amazon.com/blogs/aws/aws-step-functions-adds-updates-to-choice-state-global-access-to-context-object-dynamic-timeouts-result-selection-and-intrinsic-functions-to-amazon-states-languages/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">This post</a> goes into more detail and shows you some of the cool new things you can do.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/08/announcing-swift-combine-support-in-amplify-ios/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Amplify iOS v1.1 was released</a>, which includes support for the Combine framework for Swift, <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-comprehend-adds-five-new-languages-to-custom-entity-recognition/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Amazon Comprehend added five new languages to Custom Entity Recognition</a>, and <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-cognito-user-pools-supports-customization-of-token-expiration/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Amazon Cognito User Pools now support customization of token expiration</a>.</p>
<p>You can also set up <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/cloudwatch-application-insights-support-cloudformation-templates/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">CloudWatch Application Insights using CloudFormation</a>, use the <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-s3-access-points-now-support-copy-api/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Copy API with Amazon S3 Access Points</a>, and check out the updated <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-solutions-serverless-bot-framework-adds-support-for-securely-integrating-with-third-party-apis/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Serverless Bot Framework solution that added support for securely integrating with third-party APIs</a>.</p>
<h3>When you need some handy serverless tools… ?</h3>
<p>Any good builder needs their trusty tool belt, and if you’re building with serverless, <a href="https://github.com/Theodo-UK/sls-dev-tools?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">sls-dev-tools</a> gives you much of what you need. Ben Ellerby <a href="https://aws.amazon.com/blogs/opensource/improving-the-serverless-developer-experience-with-sls-dev-tools/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">outlines some of the most useful features</a>.</p>
<p>Ran Isenberg wrote up a piece on how to do <a href="https://medium.com/cyberark-engineering/aws-lambda-event-validation-from-zero-to-hero-2ca950acd2ea?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">AWS Lambda Event Validation</a> using a tool called <a href="https://pydantic-docs.helpmanual.io/" target="_blank" rel="noopener">Pydantic</a>. If you’re writing functions in python, this could be worth checking out.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/tmclaughbos/status/1293219937394270209?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">“I will die on this hill: One application environment per AWS account.”</a> <strong>~ Tom McLaughlin<br /></strong>As Tom is from Boston, I’ll assume he means Bunker Hill. Regardless, one application environment per account should be the absolute minimum. I heard AWS does one account <em>PER MICROSERVICE</em>. Think about that! ?</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>August 19, 2020 –</strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_August-2020.html?webinar=2020_0808-SRV&amp;category=SRV" target="_blank" rel="noopener">AWS Lambda Data Storage: Choosing Between S3, EFS, and Local Storage (AWS Tech Talk)</a></p>
<p><strong>August 24, 2020 –</strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_August-2020.html?webinar=2020_0818-BIN&amp;trk=el_a134p000003yfU1AAI&amp;trkCampaign=August_2020_0818-BIN&amp;sc_channel=el&amp;sc_campaign=pac_Q3-2020_exlinks_blog_OTT_08DGAB&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=NAMER&amp;sc_country=mult&amp;category=BIN?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">Embedding Analytics in Your Applications (AWS Tech Talk)</a></p>
<p><strong>August 25, 2020 –</strong> <a href="https://nimbella.com/webinars/3-hours-of-serverless-conference/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23103" target="_blank" rel="noopener">3 hours of Serverless Conference</a></p>
<p><strong>September 1, 2020 –</strong> <a href="https://www.meetup.com/Serverless-Toronto/events/272394916/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Deliver Business Value Faster with AWS Step Functions</a></p>
<p><strong>September 3, 2020 –</strong> <a href="https://warsaw.serverlessdays.io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">ServerlessDays Warsaw</a></p>
<p><strong>October 1-2, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ServerlessDays Hamburg 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Jiju Thomas Mathew</strong> (<a href="https://twitter.com/jijutm" target="_blank" rel="noopener">@jijutm</a>). Jiju is an Associate Process Manager at UST Global and an AWS Community Builder. He was previously CTO and cloud computing advisor for Innoval Digital Solutions Pvt Ltd. Jiju is the co-founder of an AWS User Group in Trivandrum, and has organized and spoken at meetups and community days for local developers. Thank you, Jiju, for being a leader and contributor within the serverless community!  ?</p>
<h3>Final Thoughts ?</h3>
<p>Every week I try to make this newsletter shorter, and every week I seem to fail miserably. I even cut out two whole sections this week! I love reading all these stories and sharing them with you, so that won’t stop. But I am implementing something new that will trim some of the fat. It <em>should</em> ? be ready next week. If you’ve read this far, you are a saint and I appreciate your commitment. I welcome any other ideas you may have to make this easier to consume.</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Cheers,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-103/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-103/</guid>
      <pubDate>Wed, 19 Aug 2020 00:25:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #102]]></title>
      <description><![CDATA[<h1>Serverless security strategies… ?</h1>
<p>Welcome to <strong>Issue #102</strong> of Off-by-none. I’m happy you’re here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-101/">Last week</a>, we shared some dissenting opinions on serverless, but also got a bunch of awesome new tools. This week, we have some awesome insights into serverless and cloud security, we take a look at serverless machine learning, and try something a little different with the newsletter format. Plus, we have lots of great serverless content for you to explore.</p>
<h3>When you’re curious what’s new with serverless… ?</h3>
<p>Check out the TriggerMesh guide “<a href="https://triggermesh.com/the-triggermesh-guide-what-every-cio-needs-to-know-about-serverless/?utm_source=offbynone&amp;utm_medium=newsletter&amp;utm_campaign=cio" target="_blank" rel="noopener">What Every CIO Needs to Know about Serverless</a>” for feature comparisons of major offerings and an introduction to basic concepts like cloud native and microservices. Use it to inform your peers / managers on serverless benefits and available options. Sponsored</p>
<p>The Dashbird has a busy week. Not only did they just <a href="https://dashbird.io/blog/dashbird-turns-three-reflecting-on-year/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">turn 3 years old</a>, they also <a href="https://dashbird.io/blog/introducing-dashbird-atlas/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">introduced Dashbird Atlas</a>, a new real-time 3D map view of your entire serverless environment. And if that’s not enough, they also added <a href="https://dashbird.io/blog/dashbird-supports-aws-kinesis-step-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">insights for AWS Kinesis and Step Functions</a>.</p>
<p>In other, sort of serverless news, <a href="https://www.chronicle-tribune.com/news/wire/wayscript-raises-5-million-to-help-developers-rapidly-build-business-applications/article_ca2aeb5f-d674-5b68-8e7b-f24037ea9e02.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">WayScript just raised $5 Million</a>. Last week we mentioned <a href="https://www.useparagon.com/" target="_blank" rel="noopener">Paragon</a>, which seems quite similar. Sort of like IFTTT, but with a lot more flexibility and customizations. I have a feeling we’ll see more and more systems like this that’ll continue to build higher level abstractions on top of serverless infrastructure.</p>
<h3>When everyone starts adding buzzwords back into their pitch decks… ?</h3>
<p>Machine Learning is all the rage nowadays, and unlike several years ago when ML/AI was the cornerstone of every investor presentation, lots of companies are now <em>actually</em> able to deliver on that promise. An oft repeated criticism of Lambda (and most FaaS in general) has been its inability to handle machine learning use cases. But thanks to the recent addition of EFS support, and a clever post by Shitij Mathur, <a href="https://medium.com/@shitijkarsolia/setup-serverless-ml-inference-with-aws-lambda-efs-738546fa2e03?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">setting up serverless machine learning inference with AWS Lambda</a> couldn’t be easier. ?</p>
<p>There are plenty more examples, include Mike Palei’s post that shows you how to <a href="https://medium.com/@mikepalei/serving-a-tensorflow-2-model-on-aws-lambda-58ce64ef7d38?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">serve a Tensorflow 2 model on AWS Lambda</a>. Or Joshua Jarvis’s <a href="https://medium.com/carnegie-mellon-robotics-academy/going-serverless-for-your-ml-backend-with-sam-cli-5332912019ef?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Going Serverless for Your ML Backend with SAM CLI</a>. For a more in depth discussion on what’s possible with ML and serverless, check out <a href="https://medium.com/cracking-the-data-science-interview/datacast-episode-39-serverless-machine-learning-in-action-with-carl-osipov-e2df45bb6320?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Datacast Episode 39: Serverless Machine Learning In Action with Carl Osipov</a>.</p>
<h3>What to do if PHP is still your jam… ?</h3>
<p>Not to worry, the “<a href="https://aws.amazon.com/blogs/compute/introducing-the-new-serverless-lamp-stack/" target="_blank" rel="noopener">Serverless LAMP stack</a>” is definitely a thing. Ben Smith from AWS has another installment in his Serverless LAMP stack series, this time showing you how to <a href="https://aws.amazon.com/blogs/compute/the-serverless-lamp-stack-part-4-building-a-serverless-laravel-application/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">build a serverless Laravel application</a> and deploy it with AWS SAM.</p>
<p>And before you say, “hey, I bet Ben just made this whole thing up!”, Chandresh Singh also has a post that will show you how to <a href="https://dev.to/chandreshhere/setup-queue-with-serverless-laravel-using-bref-1g71?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">setup a queue with Serverless Laravel using bref</a>. If Laravel isn’t your thing, Smaine Milianni has a post that’ll show you how to <a href="https://medium.com/@smaine.milianni/aws-lambda-and-symfony-6d3e9831c3cd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">deploy a Symfony application in AWS Lambda</a>.</p>
<h3>When you don’t want to repeat someone else’s mistakes… ?‍♂️</h3>
<p>The Interwebs is filled with stories of success, but oftentimes learning what <em>not to do</em> can be even more instructive. Chris Plankey has a great post titled <a href="https://medium.com/@cplankey/how-i-failed-at-generating-revenue-with-alexa-in-skill-purchases-ee698eb90cdd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">How I Failed at Generating Revenue with Alexa In-Skill Purchases</a> that details his attempt to bring in some extra cash with a side hustle. We’re all prone to making bad assumptions, but maybe this will help you avoid a few.</p>
<p>Even if all your assumptions are correct, you’re still bound to hit some roadblocks when building out your serverless applications. Dimitri Saeys recounts <a href="https://medium.com/vrt-digital-studio/how-sporza-created-a-real-time-sport-data-api-b157b033b7c0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">how Sporza created a real-time sport data api</a> (in tremendous detail). His team followed an interesting process, and there’s plenty to learn from their journey.</p>
<h3>When you’re looking for a serverless solution to your problem… ?</h3>
<p>If you still list <em>DevOps</em> on your LinkedIn profile, then perhaps using serverless for <a href="https://medium.com/@edgardo_CJ/aws-automation-iam-user-monitoring-part-1-d32fe592bf10?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">IAM user monitoring</a> or <a href="https://medium.com/wantedjobs/sending-bash-commands-to-an-ec2-cluster-with-aws-lambda-and-ssm-8b7ecb9597bd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">sending bash commands to an EC2 cluster with AWS Lambda and SSM</a> might be interesting to you.</p>
<p>For some simpler automations, Harish Aravindan can show you how to <a href="https://dev.to/harisharavindan/pull-request-notification-on-slack-using-aws-lambda-3m4l?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">get notified on pull requests via Slack using AWS Lambda</a> or you can see how Javaad Patel <a href="https://javaadpatel.com/get-page-views-from-google-analytics-using-a-netlify-serverless-function/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">gets page views from Google Analytics using a Netlify Serverless function</a>.</p>
<p>For the truly ambitious, Nghia Dang has an excellent post that shows you how to <a href="https://medium.com/@binlong09/implementing-a-highly-available-scalable-and-cost-efficient-video-processing-service-using-47ae73e54ca4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">implement a highly available, scalable and cost-efficient video processing service using AWS Lambda, SNS and SQS</a>. And if that’s not big enough for you, take a look at how <a href="https://siliconangle.com/2020/08/06/aws-serverless-architecture-drives-sbas-lender-gateway-for-ppp-loans-awspublicsectorawards/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">AWS serverless architecture drives SBA’s Lender Gateway for PPP loans</a>.</p>
<h3>Where to go to level up your serverless knowledge… ?</h3>
<p>Yan Cui compares <a href="https://theburningmonk.com/2020/08/choreography-vs-orchestration-in-the-land-of-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">choreography vs orchestration</a> when dealing with serverless function composition. As he points out, both have their pros and cons, with Step Functions being the clear winner for mission critical workflows. Lots of useful information in here, but I still think there are cross-service use cases for Step Functions. Perhaps a discussion for another day.</p>
<p>Of course, Step Functions can get expensive, which is why Renato Byrro offers some suggestions on <a href="https://dashbird.io/blog/cutting-step-functions-costs-on-enterprise-scale-workflows/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">cutting Step Functions costs on enterprise-scale workflows</a>. He mentions “orchestration” with EventBridge, but even though there are strong guarantees, this still falls into the “choreography” bucket for me.</p>
<p>If you’re still not fully up to speed on the magical service that is EventBridge, then perhaps this post on <a href="https://blog.thundra.io/migrating-applications-to-cloud-with-amazon-eventbridge?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">migrating applications to cloud with Amazon EventBridge</a> by Emrah Samdan will fill in some gaps.</p>
<p>And speaking of magic, the new <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-appsync-releases-direct-lambda-resolvers-for-graphql-apis/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Direct Lambda Resolvers for AppSync</a> are pretty darn cool as well. John Connerton not only helped build this new feature, but also explains why <a href="https://dev.to/conjohnerton/effective-direct-lambdas-for-aws-appsync-spoiler-they-are-really-effective-3pjd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">they are really effective</a>.</p>
<p>Still thirsty for some serverless know-how? You can learn about <a href="https://dev.to/rajikaimal/netlify-functions-in-2-ish-minutes-242k?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Netlify Functions in 2-ish minutes</a>, let Michael Bahr show you how to <a href="https://bahr.dev/2020/08/07/archiving-data/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">archive your AWS data to reduce storage costs</a>, or get help from Ran Ribenzaft on how <a href="https://epsagon.com/observability/distributed-tracing-vs-logging/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">distributed tracing differs from logging</a>. Plus, Lou Bichard can tell you why <a href="https://www.thedevcoach.co.uk/aws-lambda-metric-math-error-rate-percentage/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">you’re alerting wrong with CloudWatch</a> and Yossi Ittach will give you a rundown of your <a href="https://www.altostra.com/blog/aws-pub-sub?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">options for pub-sub services on AWS</a>.</p>
<h3>When you want to get hands-on with serverless… ?‍♀️</h3>
<p>Even though your code coverage is probably zero (don’t worry, I know you’ll eventually get to it), Mohammed Izzy shows you how to easily <a href="https://medium.com/serverlessguru/performing-tests-on-your-iac-code-with-pulumi-668f478cb299?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">perform tests on your IaC code with Pulumi</a>, so one less excuse. ?</p>
<p>For those of you looking for a full-stack experience, Fidel Vazquez has a tutorial on <a href="https://medium.com/dev-news-and-stories/full-stack-web-application-architecture-design-and-deployment-in-aws-using-aws-amplify-908f7eb7254a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">designing and deploying a full-stack web application using AWS Amplify</a>. Ashan Fernando shows you <a href="https://blog.bitsrc.io/the-simplest-way-to-host-a-gatsby-website-in-aws-without-servers-870f5d0e9d61?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">the simplest way to host a Gatsby website in AWS without servers</a>, and Atila Fassina gives you the deets on <a href="https://dev.to/atila/netlify-functions-typescript-3b3i?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">deploying Netlify Functions with TypeScript</a>.</p>
<p>Yi Ai has another excellent tutorial that shows you how to <a href="https://medium.com/@yia333/creating-a-instance-scheduler-using-aws-cdk-203c87bf9764?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">create an instance scheduler using AWS CDK</a>, a common use case that I’m sure you’ll need to address at some point. You’re also likely going to need to <a href="https://medium.com/@hang.c/processing-large-s3-files-with-aws-lambda-2c5840ae5c91?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">process large S3 files with AWS Lambda</a>, so give that one a look as well.</p>
<p>Simran Kaur Kahlon shows you how easy it is to setup an <a href="https://medium.com/@simran.r.kahlon/aws-private-apis-using-serverless-framework-785de73b2447?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">AWS Private API using Serverless Framework</a>, and if you need <a href="https://medium.com/@venkat86.careers/multiple-api-versions-in-serverless-microservices-480dfac19653?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">multiple API versions in serverless microservices</a>, Venkatachalam Dekshinamurthy will tell you how he does it (without using Route53).</p>
<p>If you’re ready to go with Go in Lambda, you might find this <a href="https://medium.com/softkraft/aws-lambda-in-golang-the-ultimate-guide-4eec6c53149a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Ultimate Guide</a> by Sebastian Karasiewicz handy. For something a little less involved, take a look at Adis Kovacevic’s post on how to <a href="https://medium.com/@akovacevicuta/adding-algolia-search-to-firestore-1cd30874395a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">add Algolia Search to Firestore</a> using a cloud function.</p>
<h3>When you need some serverless security best practices… ?</h3>
<p><a href="https://pages.awscloud.com/Serverless-Security-Strategies-Under-the-Hood_2020_FC_e06-SRV_OD.html" target="_blank" rel="noopener">ICYMI: Serverless Security Strategies – A Recorded Session with AWS Principal Engineers</a><br />
AWS Senior Principal Engineers Becky Weiss and Marc Brooker cover the most common areas of vulnerability including misapplied patches and updates, malicious code and runtime security, overly permissive access, and network segmentation, and share the ways that serverless technologies address these areas. This talk gives you a solid understanding of how a serverless security strategy functions technically and how it can be operationalized in your business. Sponsored</p>
<p>In addition to the excellent recommendations from Becky and Marc above, Anthony DiMarco offers up some <a href="https://blog.scalesec.com/best-practices-for-serverless-endpoints-on-aws-89e617575380?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">best practices for serverless endpoints on AWS</a>. For more insights into dealing with serverless security vulnerabilities, <a href="https://www.builtinaustin.com/2020/08/07/managing-security-serverless-computing?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">here’s how Cloudflare handles them</a>.</p>
<p>Serverless certainly shifts more responsibility onto the developers, so it’s no surprise that <a href="https://www.techrepublic.com/article/synopsys-survey/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">security analysts want more help from developers to improve DevSecOps</a>. After all, “only 15% of respondents said that a majority of developers participate in formal security training.” Couple that with the fact that a recent report showed misconfigured cloud storage services were prevalent in 93% of analyzed cloud deployments, it’s no wonder that the <a href="https://securityboulevard.com/2020/08/cloud-breaches-to-become-faster-and-bigger-research-suggests/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">research suggests that cloud breaches will become faster and bigger</a>. If you’re using serverless, you’re already in a much better position.</p>
<h3>When you’re looking for some good serverless reads… ?</h3>
<p>Corey Quinn brilliantly explains why <a href="https://www.lastweekinaws.com/blog/multi-cloud-is-the-worst-practice/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">multi-cloud is the worst practice</a>. Not only does it force you to choose the least common denominator, but the likelihood of cloud agnostic workloads actually existing, is probably quite slim.</p>
<p>Sheen Brisals extends his theory of <a href="https://medium.com/lego-engineering/think-and-develop-serverless-applications-as-set-pieces-4fa36d79ac3f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">thinking and developing serverless applications as “Set-Pieces”</a> in his most recent piece. This ties in nicely with Haim Raitsev’s <a href="https://epsagon.com/development/monolithic-to-microservices-architecture-data-management/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Monolithic to Microservices</a> post.</p>
<p>David Anderson explains how <a href="https://devops.com/serverless-helping-the-enterprise-scale-devops/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">serverless helps enterprises scale DevOps</a>, and how they did it at Liberty Mutual, while Brian Foody suggests that startups should be <a href="https://medium.com/lambda-lego/day-one-cloud-native-organisations-250b4e181a8d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">“Day One” Cloud Native Organizations</a>.</p>
<p>I’m not sure who gave Forrest Brazeal the title of “Cloud bard”, but it’s spot on! He was interviewed on theCube and outlines common paths to <a href="https://siliconangle.com/2020/08/07/cloud-bard-forrest-brazeal-pinpoints-failure-celebrates-success-cloud-native-evolution/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">failures (and successes) in enterprise cloud native evolutions</a>. Unfortunately, there are no rap battles or cloud ballads performed during the interview. ?</p>
<p>Ben Ellerby has a great piece on <a href="https://medium.com/serverless-transformation/serverless-bi-a-data-driven-path-to-digital-transformation-4aeb8f01e587?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Serverless BI</a> and how serverless helps companies on their path towards data-driven Business Intelligence. And speaking of data, <a href="https://www.techrepublic.com/article/this-early-twitter-engineer-has-a-suggestion-for-your-next-database/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">this early Twitter engineer has a suggestion for your next database</a>.</p>
<h3>When you’re looking for something serverless to listen to… ?</h3>
<p>I had a great chat with Heitor Lessa on <a href="https://www.serverlesschats.com/61/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Episode #61 of the Serverless Chats Podcast</a>. We discussed the the Well-Architected Serverless Lens and how best practices are defined, how services are chosen for the serverless lens, and what new services will be added to the Lens this year. You can also <a href="https://www.youtube.com/watch?v=bFjT3TrpbZg&amp;feature=emb_title?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">watch it on YouTube</a>.</p>
<p>On <a href="https://overcast.fm/+X7f44WaEg?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Episode #23 of the Real World Serverless Podcast</a>, Yan Cui talks with Ari Palo about how they do serverless at Alma Media and the third-party development tools they use to optimize their workflow.</p>
<h3>When you’re curious what’s new with AWS… ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-appsync-releases-direct-lambda-resolvers-for-graphql-apis/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">AWS AppSync releases Direct Lambda Resolvers for GraphQL APIs</a>, which we already mentioned, but it’s so cool that it deserves to be mentioned again. I’ve got nothing against VTL, but if you are rapidly prototyping something, this just feels like an easier way to get started. Ed Lima <a href="https://aws.amazon.com/blogs/mobile/appsync-direct-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">does a better job explaining it</a> than I can.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-lambda-provides-iam-condition-keys-vpc-settings/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">AWS Lambda now provides IAM condition keys for VPC settings</a> so you can ensure that users can only deploy functions connected to one or more allowed VPCs. Julian Wood gives some <a href="https://aws.amazon.com/blogs/compute/using-aws-lambda-iam-condition-keys-for-vpc-settings/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">good use cases</a> for it and why it might be right for you.</p>
<p>I just found out that <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-api-gateway-http-apis-supports-wildcard-custom-domain-names/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Amazon API Gateway HTTP APIs now support wildcard custom domain names</a>, which I didn’t realize wasn’t possible before they announced this. I’ve still yet to make HTTP APIs my go-to flavor of API Gateway. ?</p>
<p>In AWS ML news, <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-transcribe-launches-custom-language-models/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Amazon Transcribe launches custom language models</a> to let you add “out-of-lexicon terms.” In my experience, that includes most words in the English language ?, but I’m sure it’s getting better all the time. Plus, <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-lex-launches-accuracy-improvements-and-confidence-scores/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Amazon Lex launches accuracy improvements and confidence scores</a>, which will allow you to use business logic to help clarify intents. And <a href="https://aws.amazon.com/about-aws/whats-new/2020/08/aws-step-functions-adds-support-for-amazon-sagemaker-processing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">AWS Step Functions adds support for Amazon SageMaker Processing</a> with help from the Step Functions Data Science SDK. So that’s another thing I’ll add to my “probably need to learn this someday” list.</p>
<h3>When you need some helpful serverless tools… ?</h3>
<p>Neiman Marcus open sourced a Serverless Framework Plugin that gives you better control over <a href="https://medium.com/neiman-marcus-tech/serverless-provisioned-concurrency-autoscaling-3d8ec23d10c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Provisioned Concurrency Autoscaling</a>.</p>
<p><a href="https://medium.com/@gevorggalstyan/%EF%B8%8F-dynatron-bridge-between-aws-dynamodb-document-client-and-real-world-usage-184438c40d28?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Dynatron</a> is a new NPM package that can “bridge between AWS DynamoDB Document Client and real world usage.” Gevorg Galstyan explains that this can find missing optimizations and hidden issues that are very hard to catch. Sounds interesting to me.</p>
<p><a href="https://medium.com/@uplifted_latte_kangaroo_248/first-aws-lambda-function-with-midway-serverless-8d715e961b28?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Midway Serverless</a> is a “serverless framework used to build Node.js cloud functions and it helps you significantly reduce maintenance costs and focus more on product development in the cloud-native era.” Who doesn’t need another serverless framework? ?</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>September 1, 2020 –</strong> <a href="https://www.meetup.com/Serverless-Toronto/events/272394916/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23102" target="_blank" rel="noopener">Deliver Business Value Faster with AWS Step Functions</a></p>
<p><strong>September 3, 2020 –</strong> <a href="https://warsaw.serverlessdays.io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">ServerlessDays Warsaw</a></p>
<p><strong>October 1-2, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ServerlessDays Hamburg 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>George Mao</strong> (<a href="https://twitter.com/georgemao" target="_blank" rel="noopener">@georgemao</a>). George is the WW Technical Leader for Serverless Computing at AWS. He is a regular speaker at AWS Summits, re:Invent, and various tech events. George also contributes to open source projects and works with customers to design their applications in the cloud. Thanks for all of your contributions and work on serverless, George! ?</p>
<h3>Final Thoughts ?</h3>
<p>So, for those of you that have been around for a while, you may have noticed that I changed the format of the newsletter a bit. I’ve received a tremendous amount of feedback from a lot of you (which I greatly appreciate), and I’ve tried to start incorporating some of your suggestions. The biggest issue for me with the old format was that it had become terribly limiting, and in many cases, didn’t give me an opportunity to add the right amount of context. I have many more thoughts and ideas on additional changes that I plan on making (which I’ll share in a blog post soon), but I’m a sucker for feedback, so I’d love to know your thoughts.</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-102/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-102/</guid>
      <pubDate>Wed, 12 Aug 2020 02:06:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #101]]></title>
      <description><![CDATA[<h1>Tell us what you really think of serverless… ?</h1>
<p>Welcome to <strong>Issue #101</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-100/">Last week</a>, we celebrated our 100th issue, and at the same time, realized we have a lot more to share about serverless! This week, we get some dissenting opinions on serverless while at the same time getting a bunch of awesome new tools to make it even better. Plus, we’ve got plenty of great posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/partners/amazon/?utm_source=paid&amp;utm_medium=offbynone&amp;utm_campaign=Amazon" target="_blank" rel="noopener">The brand new <strong>TriggerMesh</strong> integration with <strong>Amazon EventBridge</strong></a> lets you use any TriggerMesh source in EventBridge. Our sources include GitHub, GitLab, Slack, Zendesk, Azure Activity Logs, as well as on-premises apps. <a href="https://triggermesh.com/partners/amazon/?utm_source=paid&amp;utm_medium=offbynone&amp;utm_campaign=Amazon" target="_blank" rel="noopener">Learn more here</a>! Sponsored</p>
<p><a href="https://searchitoperations.techtarget.com/news/252486902/New-Relic-pricing-plummets-with-product-overhaul?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">New Relic pricing plummets with product overhaul</a><br />
New Relic just released their New Relic One platform, which is a complete overhaul of their existing system. This is a great article that sums up the need to reposition in an increasingly saturated cloud observability market.</p>
<p><a href="https://techcrunch.com/2020/07/28/yc-alum-paragon-snags-2-5m-seed-for-low-code-app-integration-platform/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">YC alum Paragon snags $2.5M seed for low-code app integration platform</a><br />
This is an interesting new tool that is built on a AWS serverless backend. You still need quite a bit of technical knowledge, but most of the infrastructure is abstracted away for you. Give me a way to do IaC with this, and I might be <em>very</em> interested.</p>
<p><a href="https://aws.amazon.com/blogs/aws/announcing-the-new-aws-community-builders-program/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Announcing the New AWS Community Builders Program!</a><br />
Looking to get access to AWS product teams, information about new services and features, mentorship from AWS experts, Promotional Credits, and other helpful resources to support content creation and community-based work? Check out this new program from AWS.</p>
<p><a href="https://www.einnews.com/pr_news/522702764/rockset-shatters-operational-barriers-for-real-time-analytics?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Rockset Shatters Operational Barriers for Real-Time Analytics</a><br />
Maybe this is just an overhyped press release, but the idea of “Converged Indexes” that support real-time SQL queries on semi-structured data at massive scale is pretty exciting. I was just chatting with someone about RocksDB the other day, and they have been very happy with it.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://theburningmonk.com/2020/07/how-i-scaled-an-appsync-project-to-200-resolvers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">How I scaled an AppSync project to 200+ resolvers</a><br />
If you’re working on a massive AppSync project, you definitely want to read how Yan Cui built one with over 200 AppSync resolvers and 600 CloudFormation resources.</p>
<p><a href="https://www.morling.dev/blog/how-i-built-a-serverless-search-for-my-blog/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">How I Built a Serverless Search for My Blog</a><br />
This is amazing. Probably total overkill, but amazing nonetheless. Gunnar Morling used Java and the Apache Lucene full-text search library, compiled into a native binary using the Quarkus framework and GraalVM, to deploy a serverless search engine on Lambda.</p>
<p><a href="https://medium.com/@abhra.dev/aws-dynamodb-writing-millions-of-records-not-consuming-provisioned-throughput-global-secondary-6edb4e521b8f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">AWS DynamoDB: Writing millions of records: Not consuming provisioned throughput: Global Secondary Index and Sharding</a><br />
This article does a great job explaining why write sharding might be necessary when using low-cardinality partition keys in secondary indexes. If you’re writing lots of data to DynamoDB, definitely give this a look.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://aws.amazon.com/blogs/compute/understanding-database-options-for-your-serverless-web-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Understanding database options for your serverless web applications</a><br />
Helpful post by James Beswick that outlines a few patterns that can be used to handle database interactions from your serverless applications. The relational database story for AWS and serverless is getting much better (thanks RDS Proxy), but it’s still not quite there yet.</p>
<p><a href="https://serverlessfirst.com/pains-testing-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">The Pains of Testing Serverless Applications</a><br />
Having difficulty testing your serverless applications? You’re not the only one. Paul Swail reveals some of the problems and complaints from developers collected through his recent serverless survey.</p>
<p><a href="https://dev.to/aws/aws-compiled-001-484d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">AWS Compiled 001</a><br />
Alejandra Quetzalli has put together (what I think) is the first issue of an AWS newsletter. This one focuses on Java and Serverless. I hope there are more of these.</p>
<p><a href="https://medium.com/@harshchau/best-practices-for-an-improved-serverless-developer-experience-88b83118d94a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Best Practices for an Improved Serverless Developer Experience</a><br />
I think Harsh Chaudhary has a lot of really good recommendations in here, but I’m personally not a huge fan of mocking cloud services locally. But, hey, whatever works for you. That’s what’s important.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://epsagon.com/serverless-observability-dr/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL" target="_blank" rel="noopener">Auto-instrumented, trace-centric observability for serverless &amp; k8s</a><br />
If you’re running distributed serverless, Kubernetes, or containerized environments, you need a specialized tool that’s built to monitor them. Epsagon enables teams to automatically detect, troubleshoot, and resolve issues within complex microservices with no training, manual coding, tagging or maintenance required. Try free today, connect your first trace instantly, and grab one of our “cloud observability” drones! Sponsored</p>
<p><a href="https://medium.com/@samnco/serverless-framework-immutable-packaging-how-to-9573ffdd3dd6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Serverless Framework &amp; Immutable Packaging: How to</a><br />
Samuel Cozannet outlines a strategy for creating immutable deployment packages with the Serverless Framework. It’s an interesting approach, though it still requires the framework to rebuild the CloudFormation templates on every deploy. As soon as you throw certain plugins into the mix, everything goes out the window.</p>
<p><a href="https://medium.com/@psingman/why-you-should-never-ever-print-in-a-lambda-function-f997d684a705?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Why You Should Never, Ever print() in a Lambda Function</a><br />
Paul Singman offers some advice for you to “upgrade your dance” when it comes to logging in your Lambda functions. Also, take a look at the structured logging format provided by AWS if you really want to take it to the next level.</p>
<p><a href="https://aws.amazon.com/blogs/compute/building-well-architected-serverless-applications-controlling-serverless-api-access-part-1/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Building well-architected serverless applications: Controlling serverless API access – Part 1</a>, <a href="https://aws.amazon.com/blogs/compute/building-well-architected-serverless-applications-controlling-serverless-api-access-part-2/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Part 2</a>, and <a href="https://aws.amazon.com/blogs/compute/building-well-architected-serverless-applications-controlling-serverless-api-access-part-3/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Part 3</a><br />
I love this series by Julian Wood. It takes you through all the steps and questions you need to be asking to make sure your serverless app’s API access is secure and well-architected.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://www.techrepublic.com/article/study-finds-misconfigured-cloud-storage-services-in-93-of-cloud-deployments-analyzed/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Study finds misconfigured cloud storage services in 93% of cloud deployments analyzed</a><br />
I wish this came as a surprise. This has “led to nearly 200 breaches that have given attackers access to 30 billion records over the past two years.” ?</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.infoq.com/news/2020/07/aws-serverless-lamp/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">The AWS Serverless LAMP Stack: The Future of PHP or Vendor Lock-in?</a><br />
The good news about this article is that they don’t criticize serverless, just the proprietary nature of building a LAMP stack on top of Lambda and the AWS ecosystem. I’ll say one thing about vendor lock-in. If I had a nickel for every time I had to move my production application to another provider… I’d be broke.</p>
<p><a href="https://dev.to/iamcherta/my-monolith-doesn-t-fit-in-your-serverless-311o?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">My monolith doesn’t fit in your serverless</a><br />
Gabriel Chertok gives some reasons why he thinks serverless isn’t right for apps that live somewhere between really simple and infinitely scalable. He makes some good points, and I’ve been arguing for awhile that I think we’ve added too much complexity to the serverless paradigm. What are your thoughts?</p>
<p><a href="https://www.itprotoday.com/hybrid-cloud/why-benefits-serverless-may-never-be-realized?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Why the Benefits of Serverless May Never Be Realized</a><br />
“I think serverless as a whole has been over-hyped. It may be part of a broader cloud-native computing revolution, but serverless on its own falls short of being revolutionary. It’s a handy technology, but it’s not exactly a pathbreaking or singularly disruptive one.” I strongly disagree. Yes it has constraints, but I’ve never worked with a technology that offered this much potential.</p>
<h3>For the podcast listener… ?</h3>
<p><a href="https://www.serverlesschats.com/60/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Episode #60: Going Green with Serverless with Paul Johnston (Part 2)</a><br />
In part 2 of this two-part episode, I finish my chat with Paul Johnston about how the big cloud providers are addressing climate change, what the tech industry can do as a whole, the effect this will have on globalized business, and how the positive downstream impact of choosing serverless can create a more sustainable business.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-kinesis-data-firehose-now-supports-data-delivery-to-http-endpoints/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Amazon Kinesis Data Firehose now supports data delivery to HTTP endpoints</a><br />
This feature enables you to use a fully managed service to stream data to an HTTP endpoint without building custom applications or worrying about operating and managing the data delivery infrastructure. I’m down for that! It also supports data delivery to <a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-kinesis-data-firehose-now-supports-data-delivery-to-datadog/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Datadog</a>, <a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-kinesis-data-firehose-now-supports-data-delivery-to-new-relic/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">New Relic</a>, and <a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-kinesis-data-firehose-supports-data-delivery-mongodb-cloud/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">MongoDB Cloud</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/aws-codebuild-supports-code-coverage-reporting/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">AWS CodeBuild supports code coverage reporting</a><br />
This is a nice new feature. Supports any test framework that outputs files for JaCoco XML, SimpleCov JSON, Clover XML, and Cobertura XML.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-guardduty-expands-threat-detection-coverage-to-help-you-better-protect-your-data-stored-in-amazon-s3/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Amazon GuardDuty expands threat detection coverage to help you better protect your data stored in Amazon S3</a><br />
Threat detection coverage has been broadened to monitor for highly-suspicious data access and anomaly detection to help you better protect your data residing in Amazon Simple Storage Service. We now know that 93% of their customers need it. <a href="https://aws.amazon.com/blogs/aws/new-using-amazon-guardduty-to-protect-your-s3-buckets/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Read more</a>.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/serverless-transformation/is-serverless-cheaper-for-your-use-case-find-out-with-this-calculator-2f8a52fc6a68?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">Is serverless cheaper for your use case? Find out with this calculator.</a><br />
Xavier Lefèvre has put together a really helpful serverless calculator that has a ton of default values already configured. You’re free to use the official AWS cost calculator, but this one assumes things based on a “typical” serverless application.</p>
<p><a href="https://dev.to/miguelacallesmba/five-serverless-security-tools-you-should-be-using-1egi?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">5 Serverless Security Tools You Should Be Using</a><br />
Miguel Calles put together a list of serverless security tools for you. There are lots of other monitoring/observability tools available, but it’s a handy reference.</p>
<p><a href="https://medium.com/@chrisrbailey/cli-tool-to-query-the-aws-aurora-serverless-data-api-23cc0eda06b2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23101" target="_blank" rel="noopener">CLI tool to Query the AWS Aurora Serverless Data API</a><br />
Chris Bailey wrote a python script that lets you query your Aurora Serverless cluster right from your CLI. Great little tool for debugging and development.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>September 3, 2020 –</strong> <a href="https://warsaw.serverlessdays.io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">ServerlessDays Warsaw</a></p>
<p><strong>October 1-2, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ServerlessDays Hamburg 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Nicole Yip</strong> (<a href="https://twitter.com/Pelicanpie88" target="_blank" rel="noopener">@Pelicanpie88</a>). Nicole is an Engineering Manager at the LEGO Group, where, prior to her recent promotion (congrats!) she has been involved with the platform team looking after the hosting infrastructure (AWS), CI/CD and dev experience, SRE, operations and security for both application and infrastructure. Her experience as an infrastructure and DevOps engineer has allowed her to help teams of all sizes get their services to AWS. Nicole has also spoken at the Serverless Architecture Conference and DevOps Con. Thank you, Nicole, for helping others make the jump to serverless! ?</p>
<h3>Final Thoughts ?</h3>
<p>There were several new tools released this week that help with building serverless applications. From New Relic’s new platform, to TriggerMesh’s EventBridge integration, to Xavier Lefèvre’s Serverless Cost Calculator, all of these investments are a continued testament to the growing power and popularity of serverless.</p>
<p>While there were several articles this week that criticize serverless, it seems to be the same old recycled arguments, many of which have been addressed by the cloud providers or the community. We just need to keep fighting the good fight and spreading the serverless word. Eventually the dissenters will find themselves left in the dust with a whole bunch of servers to manage.</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>See you next week,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-101/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-101/</guid>
      <pubDate>Wed, 05 Aug 2020 02:06:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #100]]></title>
      <description><![CDATA[<h2>Celebrating 100 Issues! ??</h2>
<p>Welcome to issue <strong>#100</strong>! Thanks for being here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-99/">Last week</a>, we got a Q2 serverless recap, someone realized that NAT Gateways were expensive, and we learned how to model our serverless apps in a way that allows us to evolve them more easily.</p>
<p>This week, we’re celebrating the <strong>100th issue of Off-by-none</strong> with what you’ve come to know, expect, and hopefully love: the many, many great serverless articles, projects, and tools from our community. But what’s more: I’m taking the time to reflect on the wonderful community we’ve built here, in your inbox, and sharing some ways I hope to improve your newsletter experience.</p>
<p>I’ve always wanted this newsletter to recognize the community’s vast and great work, and be inclusive and representative of those who are in it. I want you to feel like <strong><em>you’re a part of this newsletter</em></strong> and that you can see yourself in this community. To better accomplish that, I’m in the final stages of launching the new Off-by-none website. Though I’ve still got some work to do on it, it’s the vision of the site I am most excited about. I hope that it will be a place where I can facilitate more engagement, invite more submissions, ideas, and stars, and better amplify the many voices that make this community so great. If you have any suggestions, as always, please feel free to let me know, as I want the Off-by-none site to truly be a place for all of us. ?</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="http://triggermesh.com/try-triggermesh/?utm_source=paid&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">TriggerMesh helps you do more with serverless</a><br />
Connect GitLab with Confluent and Zendesk, or connect these and dozens of other apps with AWS services like Kinesis, SQS, SNS, and Cognito. Even integrate with EventBridge. <a href="http://triggermesh.com/try-triggermesh/?utm_source=paid&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Join the Beta program today!</a> Sponsored</p>
<p><a href="https://techcrunch.com/2020/07/27/cloudflare-launches-workers-unbound-the-next-evolution-of-its-serverless-platform/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Cloudflare launches Workers Unbound, the next evolution of its serverless platform</a><br />
Oh wow, this looks amazing. Workers Unbound is meant for more complex and longer-running processes and operates at a fraction of the cost of Lambda, Azure Functions, and Google Cloud Function.</p>
<p><a href="https://aws.amazon.com/blogs/compute/the-aws-serverless-application-model-cli-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">The AWS Serverless Application Model CLI is now generally available</a><br />
In case you don’t know, the AWS SAM CLI is the command line tool companion for AWS SAM templates. It provides developers local tooling to create, develop, debug, and deploy serverless applications, and now it’s finally GA.</p>
<p><a href="https://cloud.google.com/functions/docs/concepts/nodejs-runtime?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">The Node.js Runtime</a><br />
FYI, Google Cloud Functions now support Node.js 12 (in beta). I’d love to see Google become more competitive with some of their serverless offerings. Node 12 was released over a year ago.</p>
<p><a href="https://epsagon.com/announcements/dtcp-invests-in-epsagon/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Epsagon Further Accelerates Growth with New Investment from DTCP</a><br />
Congrats to the team over at Epsagon! This latest investment brings their total funding to $30M which will help them increase their team to service their growing customer base. Apparently observability in the cloud is getting very popular.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://dev.to/adityarao310/we-went-serverless-with-our-new-startup-and-you-should-probably-too-okd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">We went serverless with our new startup. And you should (probably) too.</a><br />
I totally agree. Ankit explains why he chose serverless and what some of the benefits are. He gives some reasons when <em>not</em> to go serverless, but I think we’ve addressed those objections many times over.</p>
<p><a href="https://dev.to/daniels1996/plumber-s-guide-to-cloud-88?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">A Plumber’s Guide to Cloud</a><br />
Great post by Daniel Singletary, who took his experience as a plumber and applied the same troubleshooting methodology to complete Forrest Brazeal’s “Cloud Resume Challenge”.</p>
<p><a href="https://dev.to/braeden/a-micro-api-in-firebase-and-cloudflare-workers-jdn?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">A micro API in Firebase and Cloudflare Workers</a><br />
This was a fun little experiment by Braeden Smith that compared building a simple micro API for loading an image in both Firebase and Cloudflare Workers. Fun Fact: Cloudflare won.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@tschoffelen/serverless-magic-links-with-aws-cognito-92eff1351123?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Serverless magic links with AWS Cognito</a><br />
Here’s a really interesting use case for serverless that takes advantage of Cognito’s multi-factor login support to allow for temporary “magic links”. Thomas Schoffelen explains how secure it is, how it scales, and provides some code for a proof of concept.</p>
<p><a href="https://medium.com/@pavelito/functions-as-a-service-a-simple-use-case-e66f90767f07?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Functions as a Service — A simple use case</a><br />
Need to catch a webhook and publish a message to the Slack API? Pavel Pratyush explains why serverless is the perfect solution for this simple use case.</p>
<p><a href="https://medium.com/@mayankmadhukar7191/processing-pgp-encrypted-data-in-aws-lambda-using-python-3b3eeb34b393?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Processing PGP Encrypted Data in AWS Lambda using Python.</a><br />
Here’s an interesting serverless use case. Mayank Madhukar shows you how to use python-gnupg to decrypt emails from an S3 bucket using Lambda.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://lumigo.io/aws-lambda-monitoring/?utm_source=OBN&amp;utm_medium=newsletter&amp;utm_name=20200707" target="_blank" rel="noopener">Monitor &amp; Debug Serverless with 30-Second Auto-Instrumentation</a><br />
Complete observability over your serverless environment with no code changes required. With one-click distributed tracing, Lumigo lets you effortlessly find &amp; fix issues in serverless and microservices environments. Get serverless-specific smart alerts before they impact performance or cost. Sign up for a free account and get up &amp; running in minutes. Sponsored</p>
<p><a href="https://medium.com/cloudway/real-time-data-processing-with-kinesis-data-analytics-ad52ad338c6d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Real-time Data Processing With Kinesis Data Analytics</a><br />
Nick Van Hoof and David Smits put together an excellent post that shows the serverless architecture they use to track, analyze and alert on traffic jams in Belgium using (near) real-time analytics processing. Very cool stuff.</p>
<p><a href="https://blog.thundra.io/breaking-down-serverless-anti-patterns?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Breaking Down Serverless Anti-Patterns</a><br />
Parts of this post by Sarjeel Yusuf are a bit hard to follow, but the overall point should be well taken. We have to think and operate differently when building serverless applications, and in many circumstances, best practices are still a moving target.</p>
<p><a href="https://medium.com/@jgilbert001/connecting-accounts-with-aws-event-bridge-db89b9e4b697?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Connecting Accounts with AWS Event Bridge</a><br />
I like John Gilbert’s overall approach here, especially separating subsystems at the AWS account level to create bulkheads to contain the blast radius. I’m curious if there might be an alternative approach that doesn’t require upstream subsystems to know about other subsystems? Perhaps creating a common bus in a separate account that all subsystems can push to and read from?</p>
<p><a href="https://dev.to/aws-heroes/five-reasons-you-should-consider-appsync-over-api-gateway-20o2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Five Reasons You Should Consider AppSync Over API Gateway</a><br />
Excellent breakdown by Yan Cui that outlines and explains five <em>really</em> good reasons to give AppSync another look.</p>
<p><a href="https://aws.amazon.com/blogs/compute/replacing-web-server-functionality-with-serverless-services/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Replacing web server functionality with serverless services</a><br />
Another great post by James Beswick that explains how to significantly reduce your infrastructure requirements, setup time, and maintenance needs by switching to a serverless approach. Getting all that scalability and multi-AZ redundancy right out of the box should make the choice simple.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://dev.to/nokiabelllabs/implementing-a-serverless-speech-to-speech-language-translation-app-1mij?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Implementing a Serverless Speech-To-Speech Language Translation App</a><br />
Andre Beck started a series of articles that aim to illustrate the implementation of simple cloud apps on serverless platforms. First up is a language translation app that uses Step Functions.</p>
<p><a href="https://www.blog.muraliallada.com/lambda-duplicate-invocations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">How to handle duplicate Lambda invocations</a><br />
Important message from Murali Allada about idempotent operations when dealing with asynchronous Lambda invocations. He suggests using DynamoDB, which makes a lot of sense, but you should also determine whether mitigating the side effects is worth the extra effort.</p>
<p><a href="https://epsagon.com/tools/aws-ci-cd-pipeline-tools/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">AWS CI/CD Pipeline Tools: CodeBuild and CodePipeline</a><br />
Ran Ribenzaft walks you through setting up a CI/CD pipeline for a serverless project using CodeBuild and CodePipeline.</p>
<p><a href="https://medium.com/@nickbordeau/creating-an-aws-sam-cli-project-with-typescript-and-both-types-of-layers-dependencies-and-34da5efdaec8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Creating an AWS SAM CLI project with Typescript and Both Types of Layers (Dependencies and Function)</a><br />
Thinking about building a serverless Typescript project using AWS SAM? Nick Bordeau has you covered, complete with his project boilerplate.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://www.theregister.com/2020/07/21/twilio_sdk_code_injection/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Twilio: Someone broke into our unsecured AWS S3 silo, added ‘non-malicious’ code to our JavaScript SDK</a><br />
Note to self: Don’t enable S3 access policies that leave SDKs readable and writable by anyone. Otherwise, automated cyber-crime campaigns that prey on JavaScript code might infect said SDKs and take you over 8 hours to realize it.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://aws.amazon.com/blogs/architecture/liberty-it-adopts-serverless-best-practices-using-aws-cdk/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Liberty IT Adopts Serverless Best Practices Using AWS Cloud Development Kit</a><br />
Andrew Robinson wrote up a great piece (with the help of Matthew Coulter) on how Liberty IT is using the AWS CDK along with a number of best practices to create secure, repeatable deployments for their services. Nice mention of the <a href="http://cdkpatterns.com/" target="_blank" rel="noopener">CDK Patterns</a> site as well.</p>
<p><a href="https://dashbird.io/blog/serverless-for-enterprises-large-scale-projects/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Serverless for Enterprise: Scale big or go home</a><br />
Using serverless for greenfield applications should be a no brainer at this point, but for enterprises with existing workloads, the choice isn’t always as clear. Mariliis Retter offers a few things enterprises should be keeping in mind as they start to make the transition.</p>
<p><a href="https://channelasia.tech/article/681656/what-comes-after-kubernetes/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">What comes after Kubernetes?</a><br />
I once knew an Ops person who said his primary role was to automate himself out of a job. And that’s what cloud providers are doing with K8s IMO. There are a lot more interesting things to be built <em>on</em> the infrastructure than there is to be done <em>to</em> the infrastructure. It’s just a matter of time until Kubernetes will be given as much thought as the hypervisor or Firecracker.</p>
<p><a href="https://blog.cloudflare.com/cloudflare-workers-serverless-week/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">The Edge Computing Opportunity: It’s Not What You Think</a><br />
Matthew Prince goes into detail about the future of Edge Computing and how Cloudflare Workers are addressing things like speed, cost, and most importantly, compliance.</p>
<p><a href="https://medium.com/@pradeepkumar1/serverless-or-kubernetes-when-do-you-use-which-c1fd52e219a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Serverless or Kubernetes: When do you use which?</a><br />
Pradeep Kumar lays out a number of rational arguments as to why you’d choose one over the other. I still think the choice isn’t just between FaaS and containers, though. There are so many other serverless “services” available, that trying to implement any of these on K8s would seem like a colossal waste of time and resources.</p>
<h3>Videos, Podcasts, and more… ?</h3>
<p><a href="https://pages.awscloud.com/AWS-Learning-Path-How-to-Use-Objects-in-Amazon-S3-to-Trigger-Automated-Workflows-Using-AWS-Lambda_2020_LP_0003-SRV.html" target="_blank" rel="noopener">Free 50-Minute Learning Path: How to Use Objects in Amazon S3 to Trigger Automated Workflows Using AWS Lambda</a><br />
From the same author that brought you the episodic Innovator Island virtual workshop, this 6-episode learning series shows you how to use the S3 and Lambda pattern through several example applications. You’ll deploy applications into your own AWS account, explore extending them to your own use-cases, and ultimately be ready to develop sophisticated distributed applications built around S3 events using custom code to integrate with other AWS services. Sponsored</p>
<p><a href="https://www.serverlesschats.com/59/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Episode #59: Going Green with Serverless with Paul Johnston (Part 1)</a><br />
In part 1 of this two-part episode, I chat with Paul Johnston about how serverless compares to traditional computing in terms of being “green”, the impact of data centers on climate, why efficiency is only a first step, what people in tech can do to affect change, and so much more. <a href="https://www.youtube.com/watch?v=SI2-WU_0zgs&amp;feature=emb_title?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://www.youtube.com/watch?v=K1KOHsrVzLo?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">ServerlessDays Virtual – July 2020</a><br />
The second edition of ServerlessDays Virtual happened live last night! The replay is available now, so make sure you check out the amazing talks by Adrian Cockroft, Linda Nichols, Rusthem Feyzkhanov, Rich Buggy, Will Velida and Dr. Denis Bauer.</p>
<p><a href="https://www.talkingserverless.io/listen?wix-music-track-id=6468762069893120&amp;wix-music-comp-id=comp-iiypc64?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">The Talking Serverless Podcast #19</a><br />
I had a great time being a guest on The Talking Serverless Podcast with Ryan Jones. He’s had a lot of amazing guests, so you should check out the archives and give the show a listen.</p>
<p><a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5idXp6c3Byb3V0LmNvbS84Nzc3NDcucnNz/episode/QnV6enNwcm91dC00MTUzNjgy?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Real World Serverless #21: From K8 to Serverless at Wealth Wizards</a><br />
Yan Cui talks with Ionut Craciunescu from Wealth Wizards and discusses why their team decided to move away from Kubernetes and adopt a more serverless approach.</p>
<p><a href="https://www.youtube.com/watch?v=XVHGq2uJu9s?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Simplest Serverless App with AWS CDK (API Gateway, AWS Lambda and DynamoDB)</a><br />
Marcia Villalba give us an introduction to the AWS CDK and shows us how to deploy a simple serverless stack that creates an API route, a Lambda function, and a DynamoDB Table.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/cloudfront-geolocation-headers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Amazon CloudFront adds additional geolocation headers for more granular geotargeting</a><br />
This is an awesome update. You can now access a visitor’s city, state, and zip code, plus their timezone and approximate latitude and longitude. Lots of cool personalization that can be done with this</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-elastic-file-system-increases-per-client-throughput/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Amazon Elastic File System increases per-client throughput by 100%</a><br />
Starting to play around with EFS and Lambda? Well, Amazon EFS now supports up to 500 MB/s of per-client throughput, a 100% increase from the previous limit of 250 MB/s.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/aws-codebuild-now-supports-accessing-build-environments-with-aws-session-manager/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">AWS CodeBuild now supports accessing Build Environments with AWS Session Manager</a><br />
Great feature if you need to dig in to diagnose complex build problems. Since you should be using CI/CD for all your production workloads anyway, this could become a handy tool.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-elasticsearch-services-announces-support-elasticsearch-versions-7-7/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Amazon Elasticsearch Services announces support for Elasticsearch versions 7.7</a><br />
Nope, still not serverless, but new features are always welcome.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/cloudfront-cache-key-policy/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Amazon CloudFront announces Cache Key and Origin Request Policies</a><br />
Another very cool update to CloudFront. You now have more control over your cache keys, and can even forward varying information to your origin, but still used the same cached content if necessary. Very cool.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/announcing-aws-serverless-application-model-cli-generally-available-production-use/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Announcing AWS Serverless Application Model (SAM) CLI now generally available for production use</a><br />
We already mentioned this at the beginning, but here is the official “what’s new” announcement. Good stuff from the SAM team.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-lightsail-now-offers-cdn-distributions-to-accelerate-content-delivery/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%23100" target="_blank" rel="noopener">Amazon Lightsail now offers CDN distributions to accelerate content delivery</a><br />
This is an interesting way to take your “not-so-serverless” application and add a bit of serverless to it. Adding a CDN to cache assets and pages automatically is at least a good first step.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>July 29, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_July-2020.html?webinar=2020_0722-SRV&amp;trk=el_a134p000003yQBBAA2&amp;trkCampaign=July_2020_0708-SRV&amp;sc_channel=el&amp;sc_campaign=pac_Q3-2020_exlinks_PMM_OTT_07DGAB&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=NAMER&amp;sc_country=mult&amp;category=SRV" target="_blank" rel="noopener">Orchestrating Distributed Business Workflows with AWS Step Functions</a></p>
<p><strong>July 30, 2020 –</strong> <a href="https://triggermesh.com/webinar-building-intelligent-application-flows-in-the-cloud-and-on-premises-with-triggermesh/?utm_source=paid&amp;utm_medium=offbynone&amp;utm_campaign=July_2020_webinar" target="_blank" rel="noopener">Building Intelligent Application Flows in the Cloud and On-premises with TriggerMesh</a> (Webinar)</p>
<p><strong>September 3, 2020 –</strong> <a href="https://warsaw.serverlessdays.io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">ServerlessDays Warsaw</a></p>
<p><strong>October 1-2, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ServerlessDays Hamburg 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>Each week, I fill this spot with people who are helping to grow the serverless community with their work. With people in every corner of the globe making great contributions, I unfortunately and inevitably cannot know them all. That’s why I am asking for your help in ensuring we amplify the accomplishments of our friends and colleagues through my new <a href="https://offbynone.io/nominate.html" target="_blank" rel="noopener"><strong>Serverless Star nomination form</strong></a>. These are the people on your team, in your circle, who are grinding out new projects, ideas, and perspectives that can make a difference in the serverless community. In honor of our 100th issue, let’s take this step to elevate their voices, and recognize their contributions together. You can start by nominating someone <a href="https://offbynone.io/nominate.html" target="_blank" rel="noopener">here</a>.</p>
<h3>Final Thoughts ?</h3>
<p>Wow. 100 issues! I’ve learned so much over the last two years from reading all the amazing content that this community has created, and I hope you have too. Thank you all for continuing to be a part of this.</p>
<p>Like I mentioned in the beginning, the new site should be available soon, and I hope it will give the community more ways to contribute, learn, and amplify the voices of our members.</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Cheers,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-100/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-100/</guid>
      <pubDate>Wed, 29 Jul 2020 00:43:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The Storage First Pattern]]></title>
      <description><![CDATA[<h2>Interactive Reference Architecture</h2>
<p>Click on the components or numbered steps below to explore how this architecture works.</p>
<div class="iframe-container ref-arch c2"><iframe width="1000" height="500" src="https://www.jeremydaly.com/ref-arch/storage-first.html" frameborder="0" scrolling="no">[embedded content]</iframe></div>
<p>The Storage First pattern is useful when your application doesn’t require a lot of data transformation on incoming API requests. Rather than attaching API Gateway to a Lambda function that has to parse, process, transform, and save data, we can bypass the Lambda function by using a “service integration” that will send the data directly to an AWS service, like SQS. This reduces the latency of our API calls, saves money by removing the need to run a processing Lambda function, and makes our application more reliable because we are not introducing additional code.</p>
<p>In our example above, we’re using an SQS queue and then processing data off of that using a Lambda function subscription. There are plenty of other services that can be written to directly including DynamoDB, Kinesis, and EventBridge. To the best of my knowledge, Eric Johnson from AWS coined the term “Storage First” to indicate that we want to ensure that we save a user’s raw data before we attempt to run any processing on it. That way, if downstream services or processing fails, we always have a copy of the original request. He explains the process in his post <a href="https://aws.amazon.com/blogs/compute/building-a-serverless-url-shortener-app-without-lambda-part-1/" target="_blank" rel="noopener">Building a serverless URL shortener app without AWS Lambda</a>.</p>
<p>The incoming data <em>can</em> be transformed and verified using VTL templates, but the more complexity you introduce, the more likely you are to create issues with edge cases. This is an incredibly useful pattern for high velocity workloads like webhooks and clickstream data because it provides low latency and high reliability. Additional processing can be done asynchronously, allowing you to add resiliency to your application if downstream systems are unavailable.</p>
<h2>Deploy this Pattern</h2>
<p>Below are the basic configurations for deploying this pattern using different frameworks and platforms. Additional configuration for your environment will be necessary. The source files and additional examples are available in the <a href="https://github.com/serverless-architecture/reference-architectures/tree/master/storage-first" target="_blank" rel="noopener">GitHub repo</a>.</p>
<ul class="tabs"><li class="tab"><input id="tab-sam" checked="checked" name="tabs" type="radio" /><label for="tab-sam">SAM</label>
<div id="tab-content-sam" class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/template?owner=serverless-architecture&amp;repo=reference-architectures&amp;file=storage-first/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorDesign" frameborder="0" id="stackeryEditorTemplate">[embedded content]</iframe></div>
</li>
<li class="tab"><input id="tab-stackery" name="tabs" type="radio" /><label for="tab-stackery">Stackery</label>
<div id="tab-content-stackery" class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/design?owner=serverless-architecture&amp;repo=reference-architectures&amp;file=storage-first/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorTemplate" frameborder="0" id="stackeryEditorDesign">[embedded content]</iframe></div>
</li>
<li class="tab"><input id="tab-serverless" name="tabs" type="radio" /><label class="tab-serverless" for="tab-serverless">Serverless Framework</label>
<div id="tab-content-serverless" class="content">TO IMPLEMENT</div>
</li>
</ul><h2>Want to Contribute?</h2>
<p>All patterns and sample code are free to use and available under the MIT License. If you'd like to contribute to these patterns, please submit PRs to the <a href="https://github.com/jeremydaly/reference-architectures/" target="_blank">GitHub repo</a>.</p>
<p><a href="https://www.jeremydaly.com/serverless-reference-architecture"><strong>» Explore more Serverless Reference Architectures and Patterns</strong></a></p>]]></description>
      <link>https://www.jeremydaly.com/the-storage-first-pattern/</link>
      <guid>https://www.jeremydaly.com/the-storage-first-pattern/</guid>
      <pubDate>Fri, 24 Jul 2020 00:08:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The Circuit Breaker]]></title>
      <description><![CDATA[<h2>Interactive Reference Architecture</h2>
<p>Click on the components or numbered steps below to explore how this architecture works.</p>
<div class="iframe-container ref-arch c2"><iframe width="1000" height="420" src="https://www.jeremydaly.com/ref-arch/circuit-breaker.html" frameborder="0" scrolling="no">﻿</iframe></div>
<p>The Circuit Breaker pattern keeps track of the number of failed (or slow) API calls by using a cache to share the status across multiple Lambda functions. In this example, we’re using a DynamoDB table so that we can avoid using a VPC. If you were in a VPC already, ElastiCache would be a good alternative.</p>
<p>Here’s how it works. When the number of failures reaches a certain threshold, we “open” the circuit and send errors back to the calling client immediately without even trying to call the API. After a short period of time, we “half open” the circuit, sending just a few requests through to see if the API is finally responding correctly. All other requests receive an error. If the sample requests are successful, we “close” the circuit and start letting all traffic through. However, if some or all of those requests fail, the circuit stays “open”, and the process repeats with some algorithm for increasing the timeout between “half open” retry attempts.</p>
<p>This is an incredibly powerful (and cost saving) pattern for any type of synchronous request to an API or downstream system. You are accumulating charges whenever a Lambda function is running and waiting for another task to complete. Allowing your systems to self-identify issues like this, provide incremental backoff, and then self-heal when the service comes back online, adds a tremendous amount of resiliency to your applications.</p>
<h2>Deploy this Pattern</h2>
<p>Below are the basic configurations for deploying this pattern using different frameworks and platforms. Additional configuration for your environment will be necessary. The source files and additional examples are available in the <a href="https://github.com/serverless-architecture/reference-architectures/tree/master/circuit-breaker" target="_blank" rel="noopener">GitHub repo</a>.</p>
<ul class="tabs"><li class="tab"><input id="tab-sam" checked="checked" name="tabs" type="radio" /><label for="tab-sam">SAM</label>
<div id="tab-content-sam" class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/template?owner=serverless-architecture&amp;repo=reference-architectures&amp;file=circuit-breaker/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorDesign" frameborder="0" id="stackeryEditorTemplate">[embedded content]</iframe></div>
</li>
<li class="tab"><input id="tab-stackery" name="tabs" type="radio" /><label for="tab-stackery">Stackery</label>
<div id="tab-content-stackery" class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/design?owner=serverless-architecture&amp;repo=reference-architectures&amp;file=circuit-breaker/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorTemplate" frameborder="0" id="stackeryEditorDesign">[embedded content]</iframe></div>
</li>
<li class="tab"><input id="tab-serverless" name="tabs" type="radio" /><label class="tab-serverless" for="tab-serverless">Serverless Framework</label>
<div id="tab-content-serverless" class="content">
<div id="crayon-5f19fffee775a039658136" class="crayon-syntax crayon-theme-classic crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c7" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c3" data-settings="dblclick" readonly="readonly" rows="10" cols="50">service: simple-web-service
provider:
  name: aws
  runtime: nodejs12.x
  stage: ${opt:stage,'dev'}
  region: us-east-1
  stackName: ${self:service}-${self:provider.stage}
  stackTags:
    SERVICE: ${self:service}
  httpApi:
    payload: '2.0'
    cors: true
functions:
  GetUser:
    handler: index.handler
    memorySize: 1024
    timeout: 6
    tracing: Active
    environment:
      TABLE_NAME: !Ref Users
      TABLE_ARN: !GetAtt Users.Arn
    iamRoleStatementsName: ${self:service}-${self:provider.stage}-getuser-role
    iamRoleStatements:
      - Effect: Allow
        Action:
          - dynamodb:getItem
          - dynamodb:putItem
          - dynamodb:updateItem
          - dynamodb:deleteItem
        Resource:
          - !Join [ '/', [ !GetAtt Users.Arn, '*' ] ]
          - !GetAtt Users.Arn
      - Effect: Allow
        Action:
          - xray:PutTraceSegments
          - xray:PutTelemetryRecords
        Resource: "*"
    events:
      - httpApi:
          path: /user/{id}
          method: get
plugins:
  - serverless-iam-roles-per-function
resources:
  Resources:
    Users:
      Type: AWS::DynamoDB::Table
      Properties:
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        BillingMode: PAY_PER_REQUEST
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        StreamSpecification:
          StreamViewType: NEW_AND_OLD_IMAGES</textarea></div>
<div class="crayon-main c6">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content c4">
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-1">1</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-2">2</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-3">3</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-4">4</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-5">5</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-6">6</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-7">7</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-8">8</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-9">9</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-10">10</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-11">11</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-12">12</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-13">13</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-14">14</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-15">15</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-16">16</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-17">17</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-18">18</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-19">19</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-20">20</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-21">21</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-22">22</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-23">23</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-24">24</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-25">25</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-26">26</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-27">27</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-28">28</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-29">29</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-30">30</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-31">31</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-32">32</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-33">33</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-34">34</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-35">35</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-36">36</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-37">37</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-38">38</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-39">39</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-40">40</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-41">41</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-42">42</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-43">43</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-44">44</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-45">45</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-46">46</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-47">47</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-48">48</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-49">49</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-50">50</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-51">51</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-52">52</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-53">53</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-54">54</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-55">55</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-56">56</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-57">57</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-58">58</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-59">59</div>
<div class="crayon-num" data-line="crayon-5f19fffee775a039658136-60">60</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c5">
<div class="crayon-line" id="crayon-5f19fffee775a039658136-1">service: simple-web-service</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-2">provider:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-3">name: aws</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-4">runtime: nodejs12.x</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-5">stage: ${opt:stage,'dev'}</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-6">region: us-east-1</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-7">stackName: ${self:service}-${self:provider.stage}</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-8">stackTags:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-9">SERVICE: ${self:service}</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-10">httpApi:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-11">payload: '2.0'</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-12">cors: true</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-14">functions:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-15">GetUser:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-16">handler: index.handler</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-17">memorySize: 1024</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-18">timeout: 6</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-19">tracing: Active</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-20">environment:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-21">TABLE_NAME: !Ref Users</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-22">TABLE_ARN: !GetAtt Users.Arn</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-23">iamRoleStatementsName: ${self:service}-${self:provider.stage}-getuser-role</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-24">iamRoleStatements:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-25">- Effect: Allow</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-26">Action:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-27">- dynamodb:getItem</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-28">- dynamodb:putItem</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-29">- dynamodb:updateItem</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-30">- dynamodb:deleteItem</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-31">Resource:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-32">-!Join[ '/', [ !GetAtt Users.Arn, '*' ]]</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-33">-!GetAttUsers.Arn</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-34">- Effect: Allow</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-35">Action:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-36">- xray:PutTraceSegments</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-37">- xray:PutTelemetryRecords</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-38">Resource: "*"</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-39">events:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-40">- httpApi:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-41">path: /user/{id}</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-42">method: get</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-44">plugins:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-45">-serverless-iam-roles-per-function</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-47">resources:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-48">Resources:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-49">Users:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-50">Type: AWS::DynamoDB::Table</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-51">Properties:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-52">AttributeDefinitions:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-53">- AttributeName: id</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-54">AttributeType: S</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-55">BillingMode: PAY_PER_REQUEST</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-56">KeySchema:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-57">- AttributeName: id</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-58">KeyType: HASH</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-59">StreamSpecification:</div>
<div class="crayon-line" id="crayon-5f19fffee775a039658136-60">StreamViewType: NEW_AND_OLD_IMAGES</div>
</div>
</td>
</tr></table></div>
</div>
</div>
</li>
</ul><h2>Want to Contribute?</h2>
<p>All patterns and sample code are free to use and available under the MIT License. If you'd like to contribute to these patterns, please submit PRs to the <a href="https://github.com/jeremydaly/reference-architectures/" target="_blank">GitHub repo</a>.</p>
<p><a href="https://www.jeremydaly.com/serverless-reference-architecture"><strong>» Explore more Serverless Reference Architectures and Patterns</strong></a></p>]]></description>
      <link>https://www.jeremydaly.com/the-circuit-breaker/</link>
      <guid>https://www.jeremydaly.com/the-circuit-breaker/</guid>
      <pubDate>Thu, 23 Jul 2020 23:23:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #99]]></title>
      <description><![CDATA[<h1>Modeling business logic flows in serverless applications… ?</h1>
<p>Welcome to <strong>Issue #99</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-98/">Last week</a>, we got more CDK patterns to explore, another reason to look at BigQuery, and some updated serverless best practices. This week, we get a Q2 serverless recap, someone realizes that NAT Gateways are expensive, and we learn how to model our apps for simpler evolutions. Plus, we’ve got some amazing posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="http://triggermesh.com/try-triggermesh/?utm_source=paid&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">TriggerMesh helps you do more with serverless</a><br />
Connect GitLab with Confluent and Zendesk, or connect these and dozens of other apps with AWS services like Kinesis, SQS, SNS, and Cognito. Even integrate with EventBridge. <a href="http://triggermesh.com/try-triggermesh/?utm_source=paid&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Join the Beta program today!</a> Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/compute/icymi-serverless-q2-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">ICYMI: Serverless Q2 2020</a><br />
The Serverless Team at AWS has wrapped up all of the Q2 serverless announcements, blog posts, videos and more into a nice little package for you. Lots of stuff happened, so set aside a few hours if you click this link!</p>
<p><a href="https://epsagon.com/product-updates/fastly-integration/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Epsagon Introduces Fastly Technology Integration</a><br />
Pay attention to Fastly. Oh, and by the way, Epsagon now supports tracing their requests from the edge.</p>
<p><a href="https://pulse2.com/tiledb-15-million-funding/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">MIT Spinoff Data Management Company TileDB Closes $15 Million</a><br />
“With a totally serverless infrastructure, TileDB delivers access control and enables distributed computing at extreme scale, eliminating all cluster management and minimizing TCO.” Hmm, a universal data engine that can access, analyze, and share complex data sets with any tool at planet scale? Very, very interesting. ?</p>
<p><a href="https://blog.begin.com/begin-now-supports-renaming-default-github-branches-6d76ece06048?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Begin supports renaming default GitHub branches</a><br />
I’ve seen a lot of people rightfully question some of the naming conventions we use in tech, but Begin actually did something about it. Now you no longer need to use the <code>master</code> branch, but can rename it to something else and still have their system pick it up.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://usefathom.com/blog/vapor-one-year?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">A 1 year review of Laravel Vapor</a><br />
This is an excellent post by Jack Ellis that not only recounts his team’s use of Laravel Vapor, but offers some great insights into the benefits (and constraints) of serverless. For those of you toiling with servers to run your Laravel applications, this glowing endorsement of Vapor might be just what you’re looking for.</p>
<p><a href="https://medium.com/@audrius.kucinskas/lessons-in-serverless-tech-1-nat-gw-is-expensive-85bb7984e17f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Lessons in Serverless Tech. 1 – NAT GW is expensive.</a><br />
Yup. I might even go as far as saying it’s <em>too</em> expensive. If you are trying to optimize your serverless application costs, think long and hard about whether you need both VPC and Internet access from the same Lambda function. Audrius Kucinskas clearly agrees with me.</p>
<p><a href="https://www.sankalpjonna.com/posts/meet-el-chapo-an-open-source-serverless-url-shortener?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">El Chapo: an open source &amp; serverless URL shortener written in python/flask</a><br />
Here is an interesting post by Sankalp Jonna that highlights one of the core tenets of serverless development: build vs. buy. In order to save $30/mth on a prebuilt solution, his team spent a day building their own, and now it costs only $5/mth to run it. I probably would have built my own solution as well, but I have to think the $25/mth cost savings wouldn’t outweigh the cost of development. ?‍♂️</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@vishal18.gupta/what-scenarios-are-appropriate-for-serverless-6eb0d798641c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">What scenarios are appropriate for serverless?</a><br /><strong>“Serverless computing is best-used for tasks that don’t block the user interface.”</strong> ?‍♂️ Please, please, please stop saying things like this. Either the author has <em>never</em> run a serverless application at scale, or didn’t take the time to learn how to optimize it. According to the results of the Serverless Community Survey, 75% of respondents are using serverless for REST APIs. So, yes, this is a perfectly appropriate scenario for it!</p>
<p><a href="https://medium.com/better-programming/how-i-built-a-rest-api-using-google-sheets-5bbf356b01f0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">How I Built a REST API Using Google Sheets</a><br />
I think there are much easier ways to accomplish this without needing to use Cloud Run, but the use case still stands. Google Sheets works great for a number of things, and being able to pull or push data to it from an API can make a lot sense in the right scenario.</p>
<p><a href="https://dashbird.io/blog/5-popular-use-cases-for-going-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">5 Popular Use Cases for Going Serverless</a><br />
Mariliis Retter offers up five use cases for serverless. We’ve covered these in depth before, but it never hurts to get a good reminder now and then.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/@swongful/scale-and-resilience-arent-just-buzzwords-ce748360e80?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Scale and Resilience Aren’t Just Buzzwords</a><br />
So this isn’t specifically about serverless, and I have a feeling this series is going to eventually go down the Kubernetes route, but Stephanie Wong lays out some very good principles here, and more importantly, adds helpful context to the terms “scale” and “resilience”. I know I’ve seen “but will it scale?” become a party joke, but for modern application developers, it needs to be the cornerstone of your architecture.</p>
<p><a href="https://dev.to/leading-edje/using-the-aws-serverless-application-model-sam-54gm?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Using the AWS Serverless Application Model (SAM)</a><br />
Great post by Andrew May that compares and contrasts SAM and the Serverless Framework. He points out a lot of the limitations faced by SAM, but I often find myself working around limitations in the Serverless Framework as well. If you’re trying to choose between the two, this post will give you some good insights.</p>
<p><a href="https://dev.to/chiubaca/typescript-and-netlify-functions-37b8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">TypeScript and Netlify Functions</a><br />
The more you know. Alex Chiu reminds us that Netlify just uses AWS Lambda functions, and can therefore utilize the <code>@types/aws-lambda</code> type definitions for <code>event</code> object autocompletion.</p>
<p><a href="https://dev.to/twilio/6-things-you-didn-t-know-you-could-do-with-the-twilio-serverless-toolkit-59n2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">6 things you didn’t know you could do with the Twilio Serverless Toolkit</a><br />
I really love this model that allows you to develop serverless functions on the SaaS platforms you’re using. In this post, Phil Nash highlights a few features of the Twilio Serverless Toolkit.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://pages.awscloud.com/AWS-Learning-Path-How-to-Use-Objects-in-Amazon-S3-to-Trigger-Automated-Workflows-Using-AWS-Lambda_2020_LP_0003-SRV.html" target="_blank" rel="noopener">Free 50-Minute Learning Path: How to Use Objects in Amazon S3 to Trigger Automated Workflows Using AWS Lambda</a><br />
From the same author that brought you the episodic Innovator Island virtual workshop, this 6-episode learning series shows you how to use the S3 and Lambda pattern through several example applications. You’ll deploy applications into your own AWS account, explore extending them to your own use-cases, and ultimately be ready to develop sophisticated distributed applications built around S3 events using custom code to integrate with other AWS services. Sponsored</p>
<p><a href="https://dashbird.io/blog/crash-course-aws-cdk-serverless-rest-api-data-lake-analytical-querying/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Crash Course on AWS CDK and Serverless with REST API and Data Lake Analytical Querying</a><br />
If you’re looking to get started with the AWS CDK, this might be a good place to start. Simple, straightforward tutorial by Renato Byrro that walks you step by step through the basics and then right into a working example.</p>
<p><a href="https://dev.to/divporter/vue-serverless-side-rendering-with-aws-lambda-edge-1ep8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Vue Serverless Side Rendering with AWS Lambda@Edge</a><br />
David Porter has some code and explanations that will let you perform SSR with Vue apps on Lambda@Edge. Lots of good reasons to do this, which David points out in the post.</p>
<p><a href="https://theburningmonk.com/2020/07/appsync-how-to-inject-table-names-into-dynamodb-batch-transact-operations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">AppSync: how to inject table names into DynamoDB batch &amp; transact operations</a><br />
Yan Cui has a quick fix for those of you using dynamic table names for DynamoDB and are required to pass it into your AppSync resolvers. Really interesting approach, but he says this could be better encapsulated as part of the <code>serverless-appsync-plugin</code>. So if you have some free time, maybe add a PR. ?</p>
<p><a href="https://medium.com/@mirco_90519/how-to-structure-graphql-typescript-app-using-serverless-infrastructure-7f6e19a7973a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">How to structure GraphQL and Typescript app using Serverless infrastructure</a><br />
Here’s a tutorial from Mirco Guidetti that uses the <code>apollo-server-lambda</code> npm package to turn Lambda into a GraphQL server. Should you use AppSync instead? Maybe, but I’ve seen people having success with this approach.</p>
<p><a href="https://medium.com/serverlessguru/serverless-end-to-end-tracing-troubleshooting-performance-monitoring-with-lumigo-5538de199590?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Serverless end-to-end tracing, troubleshooting &amp; performance monitoring with Lumigo</a><br />
Mohammed Izzy provides a good overview of Lumigo and how their tracing features and console allow you to quickly debug your serverless applications. There are a lot of good tools out there for adding observability to your serverless applications, and at this point, you probably can’t go wrong choosing any of them.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://medium.com/version-1/protecting-your-serverless-solution-cd5d4247e27c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Protecting Your Serverless Solution</a><br />
This article by Sat Gainda gives a pretty good overview of all the things to think about when it comes to securing your serverless application, along with some other things to think about (like cost). The section on serverless development was a bit confusing (modern approaches use IaC, not containers), but otherwise, some really great info in here.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://lumigo.io/aws-lambda-monitoring/?utm_source=OBN&amp;utm_medium=newsletter&amp;utm_name=20200707" target="_blank" rel="noopener">Monitor &amp; Debug Serverless with 30-Second Auto-Instrumentation</a><br />
Complete observability over your serverless environment with no code changes required. With one-click distributed tracing, Lumigo lets you effortlessly find &amp; fix issues in serverless and microservices environments. Get serverless-specific smart alerts before they impact performance or cost. Sign up for a free account and get up &amp; running in minutes. Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/compute/modeling-business-logic-flows-in-serverless-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Modeling business logic flows in serverless applications</a><br />
I really enjoyed this piece by James Beswick that walks you through the evolution of a serverless application as business requirements change. My evolutions have never been quite as smooth and straightforward as the example James gives, but the point is well taken. Designing serverless applications in small, single-purpose, discrete actions, certainly does make iteration much easier.</p>
<p><a href="https://blog.thundra.io/building-well-architected-serverless-applications-with-thundra-part-1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Building Well-Architected Serverless Applications with Thundra (3-part series)</a><br />
This three-part series is vendor specific to Thundra, but Emrah Samdam does an excellent job taking you through the Well-Architected Serverless Lens and addressing the questions that every developer should be asking when building a serverless app.</p>
<p><a href="https://www.rehanvdm.com/general/aws-serverless-you-might-not-need-third-party-monitoring/index.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">AWS Serverless: you might not need third party monitoring</a><br />
This is a really interesting post by Rehan van der Merwe that highlights all of the powerful monitoring, logging, and tracing features provided by AWS for your serverless applications. Here’s the problem, the complexity of setting all of these components up (and getting everything configured correctly) is still a massive exercise in patience. For smaller projects, I will typically rely on the built-in AWS services, but for critical applications, third-party services give you what you need out-of-the-box, with minimal setup.</p>
<p><a href="https://medium.com/@sbrisals/grow-not-build-your-serverless-team-bc3a64454ac0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Grow, not build, your serverless team!</a><br />
If Sheen Brisals can’t inspire you to go serverless, then no one can! In his latest post, he outlines a number of stages for growing a serverless team from with your organization, culminating in an agile and efficient culture with highly-accelerated development processes.</p>
<p><a href="https://medium.com/@pang.bian/the-exotic-mixture-of-enterprise-and-serverless-28581a53ea9a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">The exotic mixture of Enterprise and Serverless</a><br />
This is an entertaining read by Pang Bian that juxtaposes the multiple layers of corporate bureaucracy with the novelty of serverless in the enterprise he works for. I’m still not sure how they seem to make it work, but good for them for trying.</p>
<h3>For the serverless (non)commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/58/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Episode #58: Observing Serverless Observability with Erica Windisch</a><br />
In this episode, I chat with Erica Windisch about the challenges with monitoring and troubleshooting serverless applications, why observability is so important with serverless, what advancements have been made over the last year, and so much more. <a href="https://www.youtube.com/watch?v=T1t_P_zqOiE&amp;feature=emb_title?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/announcing-automatic-backups-for-amazon-elastic-file-system/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Announcing automatic backups for Amazon Elastic File System</a><br />
It would be amazing if AWS would do more things like this. Under what circumstances would you <em>not</em> want your file system backed up? There might be a few, but things like this make more sense as an <em>opt out</em>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/new-classroom-course-aws-cloud-financial-management-for-builders/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">New classroom course: AWS Cloud Financial Management for Builders</a><br />
Interesting course from AWS that says it’ll teach how to design “cost-optimized” architectures. The syllabus seems quite solid, and just might give you some Corey Quinn level skills (without all the snark of course ?).</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/cloudfront-tls-security-policy/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Amazon CloudFront announces new TLS1.2 security policy for viewer connections</a><br />
Improvements to the SSL/TLS protocols are always good to see.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/announcing-cdk-pipelines-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Announcing CDK Pipelines Preview, continuous delivery for AWS CDK applications</a><br />
Two things you need to know about this. One, CDK Pipelines are self-mutating, meaning they automatically update themselves when you add new applications or stages, and two, they seem pretty amazing.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/introducing-amazon-ivs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Introducing Amazon Interactive Video Service (Amazon IVS)</a><br />
I have no idea how good (or pricey) this is, but under the right circumstances, hosting your own live broadcasts does sound amazing. There are plenty of streaming platforms out there, but to be able to “own your audience” is an interesting value prop.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/new-amazon-elastic-file-system-console-simplifies-file-system-creation-and-management/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">New Amazon Elastic File System console simplifies file system creation and management</a><br />
Again, I like these moves by AWS to simplify the user experience. Not known for their console UX, seeing these strides gives me hope for the future.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-sqs-now-supports-new-console-experience/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Amazon SQS Now Supports New Console Experience</a><br />
Not to keep harping on this, but these upgrades are very welcome. Now, granted, most of this stuff should be managed with IaC, but being able to poke around and easily look at configurations is a handy feature.</p>
<p><a href="https://aws.amazon.com/blogs/developer/introducing-the-cloud-development-kit-for-terraform-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Introducing the Cloud Development Kit for Terraform (Preview)</a><br />
cdktf lets you define application infrastructure with familiar programming languages, while leveraging the hundreds of providers and thousands of module definitions provided by Terraform and the Terraform community. Hey, if this is your thing, go for it.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p>Featured Event<br /><strong>July 28th, 2020 – CloudZero</strong> presents <a href="https://www.cloudzero.com/how-to-build-a-scalable-machine-learning-pipeline" target="_blank" rel="noopener">How We Built a Serverless Machine Learning Pipeline for Under $7/Day</a> with Adam Tankanow (Webinar)</p>
<p><strong>July 22, 2020 –</strong> <a href="https://register.gotowebinar.com/register/4918819606251777038?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Serverless 201: Advanced Development and Monitoring with AWS, Stackery, and Lumigo</a></p>
<p><strong>July 22, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_July-2020.html?webinar=2020_0708-SRV&amp;trk=el_a134p000003yQBBAA2&amp;trkCampaign=July_2020_0708-SRV&amp;sc_channel=el&amp;sc_campaign=pac_Q3-2020_exlinks_PMM_OTT_07DGAB&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=NAMER&amp;sc_country=mult&amp;category=SRV" target="_blank" rel="noopener">Predicting and Managing Costs in Serverless Applications with AWS</a></p>
<p><strong>July 27/28, 2020 –</strong> <a href="https://virtual.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">ServerlessDays Virtual</a></p>
<p><strong>July 28, 2020 –</strong> <a href="https://medium.com/wix-engineering/hosting-without-hoisting-npm-flattening-for-zero-cold-start-serverless-upcoming-online-meetup-a9cce79944ff?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2399" target="_blank" rel="noopener">Hosting Without Hoisting: NPM Flattening for Zero Cold Start Serverless</a> (Online Meetup)</p>
<p><strong>July 29, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_July-2020.html?webinar=2020_0722-SRV&amp;trk=el_a134p000003yQBBAA2&amp;trkCampaign=July_2020_0708-SRV&amp;sc_channel=el&amp;sc_campaign=pac_Q3-2020_exlinks_PMM_OTT_07DGAB&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=NAMER&amp;sc_country=mult&amp;category=SRV" target="_blank" rel="noopener">Orchestrating Distributed Business Workflows with AWS Step Functions</a></p>
<p><strong>July 30, 2020 –</strong> <a href="https://triggermesh.com/webinar-building-intelligent-application-flows-in-the-cloud-and-on-premises-with-triggermesh/?utm_source=paid&amp;utm_medium=offbynone&amp;utm_campaign=July_2020_webinar" target="_blank" rel="noopener">Building Intelligent Application Flows in the Cloud and On-premises with TriggerMesh</a> (Webinar)</p>
<p><strong>September 3, 2020 –</strong> <a href="https://warsaw.serverlessdays.io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">ServerlessDays Warsaw</a></p>
<p><strong>October 1-2, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ServerlessDays Hamburg 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Alex Wood</strong> (<a href="https://twitter.com/alexwwood" target="_blank" rel="noopener">@alexwwood</a>). Alex is currently a Senior Software Engineer at AWS developing open source serverless tools. Before that, Alex was the lead developer on the AWS Ruby SDK and is the author of the AWS Lambda Ruby runtime. He’s spoken about writing Lambda functions as idiomatic Ruby code and running them on AWS for the Ruby on Rails podcast, and also had a re:Invent 2019 session, speaking about AWS SAM and the AWS SAM CLI. Thank you, Alex, for your incredible work – and sharing it with others! ?</p>
<h3>Final Thoughts ?</h3>
<p>Another busy week for serverless, and it’s super exciting to see some additional serverless events starting to pop up.</p>
<p>And speaking of super exciting, next week the Off-by-none newsletter celebrates <strong>100 issues!</strong> It seems a bit crazy to think about how many amazing serverless stories, use cases, tutorials, and more have been shared over the last two years. I’m planning something kinda big for next week, so I hope you’ll share this with your friends and coworkers so they don’t miss it!</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>See you next week,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-99/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-99/</guid>
      <pubDate>Wed, 22 Jul 2020 00:20:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #98]]></title>
      <description><![CDATA[<h1>More serverless CDK Patterns for you to explore… ?️‍♀️</h1>
<p>Welcome to <strong>Issue #98</strong> of Off-by-none. I’m glad you could join us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-97/">Last week</a>, we announced a new way to explore serverless architectures, learned how to debug and load test serverless applications, and we finally got “connection pools” from Lambda. This week, we get more CDK patterns to explore, yet another reason to look at BigQuery, and some updated serverless best practices. Plus, we have plenty of great content from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/webinar-building-intelligent-application-flows-in-the-cloud-and-on-premises-with-triggermesh/?utm_source=paid&amp;utm_medium=offbynone&amp;utm_campaign=July_2020_webinar" target="_blank" rel="noopener">Webinar: Would you like to connect applications like GitLab, Confluent, Zendesk, AWS services together?</a><br />
You can, using TriggerMesh Bridges which allows you to build intelligent application flows using any service, running in the cloud or on-premises. Join us July 30 to see how easy TriggerMesh makes it connect application flows! Sponsored</p>
<p><a href="https://medium.com/fauna/announcing-the-faunadb-data-manager-37754d6fe106?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Announcing the FaunaDB Data Manager</a><br />
The FaunaDB Data Manager (FDM) can assist with a variety of import and export tasks, including copying documents, collections, indexes, functions, and roles from one FaunaDB database, at any particular point in time, to another FaunaDB database, plus a variety of useful data features. It’s still in preview mode, but looks like a useful tool for FaunaDB customers.</p>
<p><a href="https://www.techrepublic.com/article/google-cloud-announces-bigquery-omni-multicloud-analytics-solution/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Google Cloud announces BigQuery Omni multicloud analytics solution</a><br />
So this sounds way too good to be true, but if I can actually query my AWS data using BigQuery without worrying about data transfer costs or duplicating data, that’s pretty amazing. This could be a game changer.</p>
<p><a href="https://www.serverlesschats.com/spotlight/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Serverless Spotlight – Sign up to be a guest</a><br />
I’m launching a new web series called Serverless Spotlight that will “Shine a light on the people who make serverless awesome!” The episodes are 5-10 minutes, and will feature people like you sharing what they are working on in serverless. Commercial, open source, blog post, whatever, we want to hear from you. Be sure to sign up to be a guest.</p>
<p><a href="https://aws.amazon.com/serverless/customers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">AWS Serverless Customer Success</a><br />
Not convinced that serverless is ready for primetime? These customer success stories should help change your mind. AWS recently launched a “Serverless Customer Success” page that highlights a series of case studies that show the positive impact of serverless on companies ranging from startups to enterprises.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/swlh/how-i-built-a-serverless-aws-lambda-twitter-bot-in-nodejs-in-a-single-day-6901f8df13f0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">How I Built a Serverless AWS Lambda Twitter Bot in NodeJS in a Single Day</a><br />
Spencer Pollock walks through his journey building a Twitter Bot using AWS Lambda. It’s fun following someone’s thought process like this. I would use Parameter Store for my Twitter credentials instead of storing them in a file that’ll likely get checked into git, but for a quick and dirty first go, it’ll do.</p>
<p><a href="https://medium.com/dev-genius/the-cloud-resume-challenge-or-how-i-learned-to-stop-worrying-and-love-the-cloud-f057f437d6ce?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">The Cloud Resume Challenge, or How I Learned to Stop Worrying and Love the Cloud</a><br />
Kudos again to Forrest Brazeal for starting the Cloud Resume Challenge. There are several people writing about their experiences, but I found this one from Antonio Lo Fiego to be incredibly enlightening. He doesn’t seem to agree that “… the latest version [of the] SAM CLI makes serverless development easier for developers.” His well-placed JT GIF perfectly encapsulates the way many people new to serverless feel.</p>
<p><a href="https://dev.to/fulcrum3/how-i-built-a-zero-cost-completely-serverless-scraper-20io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">How I built a zero cost serverless scraper</a><br />
Anshaj Khare explains how he built a Twitter scraper using cloud native GCP tools. This post makes me wonder about the differences in the developer experience between GCP and other clouds.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://michaelvigor.dev/serverless-url-to-markdown/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Convert HTML to Markdown with a serverless function</a><br />
Michael Vigor outlines a simple use case that I certainly wouldn’t want to set up and maintain a server for. I love little one-off services like these that are easy to build with FaaS, and enable developers to build things quickly without all the red tape.</p>
<p><a href="https://dev.to/azure/a-rock-paper-scissors-app-with-gesture-detection-and-voice-3471?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">A rock-paper-scissors app with gesture detection and voice</a><br />
Who would have thought of serverless Rochambeau? The cloud advocates at Microsoft, that’s who. This uses a bunch of Azure native services (not 100% serverless), but still a pretty interesting application of the technologies.</p>
<p><a href="https://medium.com/@gcornwell/how-we-automatically-create-and-delete-environments-for-developers-caac0e30846?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">How We Automatically Create And Delete Environments For Developers</a><br />
Gavin Cornwell has written before about automation using Step Functions, but in this post he shows how his team creates an environment when feature branches are created, and then deletes the environment when the branch is removed.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://dev.to/nideveloper/cdk-patterns-at-20-let-s-walk-through-all-20-serverless-patterns-for-aws-d1n?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">CDK Patterns at 20! Let’s Walk Through all 20 Serverless Patterns for AWS</a><br />
Matt Coulter has done an amazing job on the CDK Patterns site and repository and has consolidated all 20 patterns into a comprehensive blog post. There are so many amazing ideas to explore with this, so make sure you check it out.</p>
<p><a href="https://medium.com/@amulya.bhatia/aws-serverless-application-lens-a-summary-4f740c4f376d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">AWS Serverless Application Lens — A Summary</a><br />
Amulya Rattan Bhatia attempts to summarize the Well-Architected Serverless Application Lens whitepaper. It’s a much shorter read and does a good job covering the most important points. If you don’t have time to read the whitepaper, this should at least get you headed in the right direction.</p>
<p><a href="https://theburningmonk.com/2020/07/are-lambda-to-lambda-calls-really-so-bad/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Are Lambda-to-Lambda calls really so bad?</a><br />
This recent post by Yan Cui started a bit of a debate on Twitter regarding his recommendation to put an API Gateway in between inter-service, synchronous calls that ultimately map to a Lambda function. I’m personally a big fan of using synchronous Lambda-to-Lambda calls using the SDK (when appropriate) to reduce overhead and complexity, but Yan makes a lot of really good points why not to do this. Serverless best practices are constantly evolving, so you’d be wise to follow this debate.</p>
<p><a href="https://lumigo.io/blog/node-js-lambda-execution-leaks-a-practical-guide/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Lambda Execution Leaks: A Practical Guide</a><br />
Dori Aviram points out the problem when unresolved promises leak into your Node-based Lambda functions. This is probably more common than you think, and can be a massive pain to debug. This post outlines what can cause this issue and some ways to mitigate it.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://lumigo.io/aws-lambda-monitoring/?utm_source=OBN&amp;utm_medium=newsletter&amp;utm_name=20200707" target="_blank" rel="noopener">Monitor &amp; Debug Serverless with 30-Second Auto-Instrumentation</a><br />
Complete observability over your serverless environment with no code changes required. With one-click distributed tracing, Lumigo lets you effortlessly find &amp; fix issues in serverless and microservices environments. Get serverless-specific smart alerts before they impact performance or cost. Sign up for a free account and get up &amp; running in minutes. Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/compute/the-serverless-lamp-stack-part-3-replacing-the-web-server/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">The Serverless LAMP stack part 3: Replacing the web server</a><br />
Benjamin Smith and Matthieu Napoli (the creator of Bref) show you how to build serverless PHP applications without needing a web server. Matthieu also explains how the implementation of FastCGI Process Manager inside of Lambda helps makes this possible.</p>
<p><a href="https://aws.amazon.com/blogs/compute/integrating-amazon-eventbridge-and-amazon-ecs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Integrating Amazon EventBridge and Amazon ECS</a><br />
Jakub Narloch shows you how the new EventBridge to API Gateway target enables new use cases. Even if ECS isn’t your thing, you can use this to route events to webhook consumers, map inter-service communication contracts, and even handle complex integration tests.</p>
<p><a href="https://medium.com/@adrin.mukherjee/get-more-out-of-lambda-authorizers-use-response-context-c4cdbe1cf8ce?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Get More Out Of Lambda Authorizers- Use Response Context</a><br />
Adrin Mukherjee outlines a scenario that uses custom authorizers to pass additional context into your Lambda functions that can be used for calls to downstream services. It’s a powerful pattern, and with the integration into Secrets Manager, you can apply a lot of security best practices, including automatic credential rotation.</p>
<p><a href="https://aws.amazon.com/blogs/compute/creating-low-latency-high-volume-apis-with-provisioned-concurrency/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Creating low-latency, high-volume APIs with Provisioned Concurrency</a><br />
Even though James Beswick craps on my Lambda Warmer project (? totally kidding, I don’t actually use it anymore), he does a great job explaining how Provisioned Concurrency can ensure predictable start-up times to latency-sensitive Lambda functions. And if your workload really needs this, a 75% reduction in your slowest execution times is a compelling reason to spend the extra money.</p>
<p><a href="https://medium.com/@serverlessguru/explore-serverless-on-alibaba-cloud-with-sls-framework-4964d309040e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Explore Serverless On Alibaba Cloud With SLS Framework</a><br />
Thinking about going serverless on the Alibaba cloud? The Serverless Framework has got you covered, and the Serverless Guru team has provided us with this straightforward tutorial to get you started.</p>
<p><a href="https://medium.com/altostra/multipart-uploads-with-s3-pre-signed-urls-d98712cc4da2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Multipart uploads with S3 pre-signed URLs</a><br />
Great tutorial by Shahar Yakov that walks you through the detailed steps of initiating a multipart upload to S3, generating pre-signed URLs for all the parts, and then stitching them all back together to complete the process.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://dev.to/aws-heroes/serverless-a-backend-thing-that-gives-superpowers-to-frontend-developers-163c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Serverless: a backend thing that gives superpowers to frontend developers</a><br />
Another fun post by Slobodan Stojanović that explains how serverless can give frontend developers the power to make their applications more interactive and highly scalable using modern techniques, rather than relying on traditional servers.</p>
<p><a href="https://theburningmonk.com/2020/07/why-we-didnt-choose-qldb-for-a-healthcare-app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Why we didn’t choose QLDB for a healthcare app</a><br />
Yan Cui has a great article that simply points out the pros and cons of Amazon’s Quantum Ledger Database, and explains why his client decided it wasn’t quite ready for their application.</p>
<p><a href="https://medium.com/@michabahr/how-to-pick-the-right-compute-savings-plan-for-serverless-workloads-on-aws-33d351b573c7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">How to pick the right Compute Savings Plan for Serverless Workloads on AWS</a><br />
If you’re interested in saving some money on your AWS serverless workloads (and who doesn’t like saving money?), they check out this post by Michael Bahr that outlines how Compute Savings Plans work, and when they might be right for you.</p>
<p><a href="https://dev.to/aws-heroes/how-to-design-serverless-apps-like-a-pro-using-interactive-serverless-reference-architectures-43kf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">How to design Serverless Apps like a Pro using *Interactive* Serverless Reference Architectures ??</a><br />
Farrah Campbell wrote up a piece on the Serverless Reference Architecture project (which she and Stackery were instrumental in getting off the ground). We’re working on more patterns and content, so stay tuned for more serverless!</p>
<h3>For the commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/57/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Episode #57: Building Serverless Applications using Webiny with Sven Al Hamad</a><br />
In this episode, I chat with Sven Al Hamad about how Webiny makes building serverless applications easier, why everyone from small startups to large enterprises should be choosing serverless, whether or not Webiny could be a WordPress killer, and much more. <a href="https://www.youtube.com/watch?v=9TSmOcLBr0k?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Watch on YouTube</a></p>
<p><a href="https://www.pscp.tv/ServerlessOpsIO/1rmxPYwejNdKN?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Good Morning Serverless with Tom McLaughlin</a><br />
I had a blast chatting with Tom McLaughlin on his Good Morning Serverless Show last week. It airs every Thursday morning at 8:30 am ET, and he’s always looking for guests, so be sure to <a href="https://www.serverlessops.io/signup-good-morning-serverless" target="_blank" rel="noopener">sign up</a>.</p>
<p><a href="https://softwareengineeringdaily.com/2020/07/02/dynamodb-with-alex-debrie/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">DynamoDB with Alex DeBrie</a><br />
Alex DeBrie seems to be the hardest working man in DynamoDB right now ?, making the rounds on the podcast circuit. He has a great interview with Jeff Meyerson on the Software Engineering Daily podcast that you definitely should check out.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/blogs/architecture/announcing-the-new-version-of-the-well-architected-framework/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Announcing the New Version of the Well-Architected Framework</a><br />
Not specific to serverless, but it’s great to see the Well-Architected Framework evolving based on customer feedback and experience. <a href="https://aws.amazon.com/blogs/aws/aws-well-architected-framework-updated-white-papers-tools-and-best-practices/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">More on it here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-comprehend-launches-real-time-custom-entity-recognition/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Amazon Comprehend launches real time Custom Entity Recognition</a><br />
This is a great update that allows you to identify terms that are specific to your domain in real time. If you’ve ever worked with NLP, you’ll know how important this is.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/docker-and-aws-collaborate-to-help-deploy-applications-to-amazon-ecs-on-aws-fargate/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Docker and AWS collaborate to help deploy applications to Amazon ECS on AWS Fargate</a><br />
Great news for those still using containers for parts of your workload. You can now use Docker Desktop and Docker Compose to deploy containers on Amazon Elastic Container Service using the AWS Fargate launch type. No need for third-party tools anymore.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amplify-cli-adds-support-for-lambda-layers-to-easily-share-code-assets-across-lambda-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Amplify CLI adds support for Lambda layers to easily share code &amp; assets across Lambda functions</a><br />
Amplify CLI now makes it easy to use Lambda layers to share code &amp; assets across various Lambda functions. Plus, you can add existing Lambda layers to your Lambda functions by referencing existing Lambda layer ARNs.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-athena-adds-support-for-managing-data-catalogs-using-aws-cloudformation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Amazon Athena adds support for managing data catalogs using AWS CloudFormation</a><br />
No more using the console or APIs to register your data sources. You can now create, update and delete your data sources using the AWS CloudFormation <code>AWS::Athena::DataCatalog</code> resource.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-documentdb-support-cross-region-snapshot-copy/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Amazon DocumentDB (with MongoDB compatibility) adds support for cross-region snapshot copy</a><br />
This is a nice feature for all you MongoDBers out there. You can now copy a snapshot to another region for the purpose of disaster recovery, security, or to populate a development/test environment.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-keyspaces-now-enables-you-to-back-up-your-table-data-continuously-by-using-point-in-time-recovery-pitr/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Amazon Keyspaces now enables you to back up your table data continuously by using point-in-time-recovery (PITR)</a><br />
And for all your Cassandra(ers), PITR provides you with continuous backups of your Amazon Keyspaces table data to help you protect against accidental writes or deletes. When enabled, it’ll back up your table data automatically with per-second granularity and then you can restore your table data to any second in time in the preceding 35 days. Crazy.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>July 22, 2020 –</strong> <a href="https://register.gotowebinar.com/register/4918819606251777038?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">Serverless 201: Advanced Development and Monitoring with AWS, Stackery, and Lumigo</a></p>
<p><strong>July 27/28, 2020 –</strong> <a href="https://virtual.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">ServerlessDays Virtual</a></p>
<p><strong>July 30, 2020 –</strong> <a href="https://triggermesh.com/webinar-building-intelligent-application-flows-in-the-cloud-and-on-premises-with-triggermesh/?utm_source=paid&amp;utm_medium=offbynone&amp;utm_campaign=July_2020_webinar" target="_blank" rel="noopener">Building Intelligent Application Flows in the Cloud and On-premises with TriggerMesh</a> (Webinar)</p>
<p><strong>September 3, 2020 –</strong> <a href="https://warsaw.serverlessdays.io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2398" target="_blank" rel="noopener">ServerlessDays Warsaw</a></p>
<p><strong>October 1-2, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ServerlessDays Hamburg 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Gal Zabib</strong> (<a href="https://twitter.com/GalZabib" target="_blank" rel="noopener">@GalZabib</a>). Gal is the co-founder and CEO of Altostra, an intuitive serverless development platform that helps developers build modern cloud applications. Altostra allows for quicker serverless adoption by automating development workflows, which is incredibly helpful for teams looking to hit the ground running. Gal’s background in software engineering and leading R&amp;D certainly has given her great insight into the needs of teams looking to adopt serverless. Thank you, Gal, for making it easier for other teams to adopt serverless quickly and confidently! ?</p>
<h3>Final Thoughts ?</h3>
<p>Remember last week when I said it was getting harder and harder to narrow down all the amazing serverless posts? Well, it was even harder this week. If I didn’t include your post, please feel free to shoot me a DM and I’ll be happy to retweet it. The amount of serverless content and ideas being generated is incredible, which is a great sign for serverless adoption. Keep the posts coming, and I’ll keep working to find additional ways to amplify them.</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Until next week,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-98/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-98/</guid>
      <pubDate>Tue, 14 Jul 2020 23:02:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Data API Client: v1.1 Released]]></title>
      <description><![CDATA[<p>Bug fixes and feature updates including support for native JavaScript dates (thanks <a href="https://github.com/cklam2" target="_blank" rel="noopener">@cklam2</a>), support for non-specific database queries, and deprecation of the HTTP keepAlive workaround in favor of the native SDK support.</p>
<p>Your feedback is greatly appreciated, so please submit feature requests and <a href="https://github.com/jeremydaly/data-api-client/issues" target="_blank" rel="noopener">issues</a>. If you want to contribute, even better! Pull requests are always welcome.</p>
<p><strong>Full Release Notes:</strong> <a href="https://github.com/jeremydaly/data-api-client/releases/tag/v1.1.0" target="_blank" rel="noopener">https://github.com/jeremydaly/data-api-client/releases/tag/v1.1.0</a></p>
<p><strong>NPM: </strong><a href="https://www.npmjs.com/package/data-api-client" target="_blank" rel="noopener">https://www.npmjs.com/package/data-api-client</a><strong><br />
GitHub: </strong><a href="https://github.com/jeremydaly/data-api-client" target="_blank" rel="noopener">https://github.com/jeremydaly/data-api-client</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<p>Learn more about <a href="https://www.jeremydaly.com/projects/data-api-client/"><strong>Data API Client</strong></a> or check out the other <a href="https://www.jeremydaly.com/current-projects"><strong>projects</strong></a> I'm working on.</p>]]></description>
      <link>https://www.jeremydaly.com/data-api-client-v1-1-released/</link>
      <guid>https://www.jeremydaly.com/data-api-client-v1-1-released/</guid>
      <pubDate>Fri, 10 Jul 2020 01:53:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #97]]></title>
      <description><![CDATA[<h1>Serverless Reference Architectures for the Rest of Us… ?‍?</h1>
<p>Welcome to <strong>Issue #97</strong> of Off-by-none. Thanks for joining us this week!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-96/">Last week</a>, we learned how serverless applications can be truly vendor neutral and how EFS is finally makes serverless ML a reality. This week, we announce a new way to explore serverless architectures, learn how to debug and load test serverless applications, and we finally get “connection pools” from Lambda. Plus, we have lots of awesome content from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/webinar-building-intelligent-application-flows-in-the-cloud-and-on-premises-with-triggermesh/?utm_source=paid&amp;utm_medium=offbynone&amp;utm_campaign=July_2020_webinar" target="_blank" rel="noopener">Webinar: Building Intelligent Application Flows in the Cloud and On-premises with TriggerMesh</a><br />
Join us July 30 as we build some example Bridges. One will perform sentiment analysis on ZenDesk tickets using AWS, another will execute an Oracle Cloud function in response to a change in an on-premises OracleDB. See you there! Sponsored</p>
<p><a href="https://www.jeremydaly.com/announcing-the-serverless-reference-architectures-project/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Announcing the Serverless Reference Architectures Project</a><br />
Shameless plug here for the new Serverless Reference Architectures Project that I just launched. I have been sharing and discussing serverless microservice patterns for years, and finding a better, more interactive way to share them has been a goal of mine for quite some time. This is just the first step, but I hope people find it useful and will contribute their own patterns and examples to help others.</p>
<p><a href="https://www.dbta.com/Editorial/News-Flashes/Fauna-Raises-27-Million-to-Continue-Providing-Cutting-Edge-Solutions-for-Developers-141679.aspx?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Fauna Raises $27 Million to Continue Providing Cutting Edge Solutions for Developers</a><br />
I love seeing companies in the serverless space raising money. It’s inevitable, serverless will (someday) take over the world. Will Fauna be the global datastore of choice when that happens?</p>
<p><a href="https://techcrunch.com/2020/07/01/vendia-raises-5-1m-for-its-multi-cloud-serverless-platform/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Vendia raises $5.1M for its multi-cloud serverless platform</a><br />
No surprises here. Tim Wagner, and the former head of blockchain at AWS, Shruthi Rao, are the ultimate serverless dream team. This is another company/space to pay attention to.</p>
<p><a href="https://techcrunch.com/2020/06/30/dfinity-demos-its-tiktok-clone-opens-up-its-internet-computer-to-outside-developers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Dfinity demo’s its TikTok clone, opens up its ‘Internet Computer’ to outside developers</a><br />
Speaking of blockchain, what do you get when you cross serverless with blockchain, and then mix in some WebAssembly? Apparently an “Internet Computer” that can run distributed applications without servers, databases, or firewalls.</p>
<p><a href="https://theburningmonk.com/2020/07/production-ready-serverless-is-back-with-improved-curriculum/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Production-Ready Serverless is back (with improved curriculum)!</a><br />
Yan Cui’s course was groundbreaking when it first launched, now it has the benefit of feedback and iteration on its side. Not only that, but he’s offering it in a much more interactive way. This is probably the best serverless training resource out there.</p>
<p><a href="https://lumigo.io/blog/gartner-cool-vendor/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Gartner Names Lumigo a Cool Vendor in Performance Analysis for Cloud-Native Architectures</a><br />
When you’re working hard behind the scenes to try and build something amazing, getting positive feedback like this is important. And for the record, Lumigo has been in my “Cool Vendor” column for quite some time. ?</p>
<p><a href="https://epsagon.com/product-updates/epsagon-achieves-privacy-shield-framework-certification/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Epsagon Achieves Privacy Shield Framework Certification</a><br />
Certifications like this are a sign of maturity, so congrats to Epsagon for doing the work to not only bring you an awesome product, but also to bring it up to the highest standards of security and privacy.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://www.sanjaysiddhanti.com/2020/07/05/serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Serverless Web Apps in Python</a><br />
A good collection of tips and tricks based on what Sanjay Siddhanti learned while using Zappa to build serverless applications.</p>
<p><a href="https://dev.to/labelinsight/serverless-side-rendering-with-lambda-at-edge-aep?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Serverless-Side Rendering With Lambda at Edge</a><br />
Great use case and example explained by Joe Duran that uses Lambda@Edge to render static pages for their application. Interesting note in there about solving the problem of competitors scraping their public API. SPAs can be great for many reasons, but making data easily accessible via an API, might not be the best strategic choice.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://lumigo.io/aws-lambda-monitoring/?utm_source=OBN&amp;utm_medium=newsletter&amp;utm_name=20200707" target="_blank" rel="noopener">Monitor &amp; Debug Serverless with 30-Second Auto-Instrumentation</a><br />
Complete observability over your serverless environment with no code changes required. With one-click distributed tracing, Lumigo lets you effortlessly find &amp; fix issues in serverless and microservices environments. Get serverless-specific smart alerts before they impact performance or cost. Sign up for a free account and get up &amp; running in minutes. Sponsored</p>
<p><a href="https://towardsdatascience.com/serverless-bert-with-huggingface-and-aws-lambda-625193c6cc04?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Serverless BERT with HuggingFace and AWS Lambda</a><br />
Awesome post by Philipp Schmid that shows you how to build a serverless question-answering API with BERT and HuggingFace. These ML use cases for serverless are great.</p>
<p><a href="https://medium.com/@mrkevin.wang/create-a-covid-19-dashboard-with-angular-9-serverless-aws-lambda-a40b4b096bd5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Create a COVID-19 dashboard with Angular 9+Serverless+AWS Lambda</a><br />
Angular would not be my first choice, but to each their own. This post shows how to create a server-side rendered backend that loads a datasource and generates graphs using AWS Lambda.</p>
<p><a href="https://medium.com/better-programming/send-emails-serverlessly-with-node-js-lambda-and-aws-ses-186cba40d695?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Send Emails Serverlessly With Node.js, Lambda, and AWS SES</a><br />
Another serverless use case that is becoming a standard go-to solution. Angad Singh shows you how to set up and test this in a sandbox environment. This post just scratches the surface of what’s possible.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://lumigo.io/blog/how-to-debug-aws-lambda-performance-issues/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">How to Debug AWS Lambda Performance Issues</a><br />
Latency can have a huge impact on the business metrics of your applications, so making sure you are achieving an acceptable level of performance is hugely important. Yan Cui has another excellent post that dives deep into how to debug these issues and optimize your use cases.</p>
<p><a href="https://medium.com/@nideveloper/protect-your-rds-mysql-db-from-aws-lambda-scalability-65e0a6276418?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Protect your RDS MySQL DB from AWS Lambda Scalability</a><br />
Matt Coulter has added a new pattern to his CDK Patterns site that implements the new RDS Proxy service. The code is available in Python and Typescript. Good stuff.</p>
<p><a href="https://medium.com/@rajeshkankran/deletion-policy-to-keep-serverless-stack-safe-80cf194491db?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Deletion Policy To Keep Serverless Stack Safe</a><br />
Simple, yet powerful reminder by Rajesh Kankran to set deletion policies for production AWS services so that you don’t accidentally lose data. It’s okay to admit that it happened to you.</p>
<p><a href="https://dashbird.io/blog/challenges-of-going-serverless-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Challenges of Going Serverless (2020 edition)</a><br />
This is a good overview by Mariliis Retter that outlines some of the common challenges of developing serverless applications. I totally agree that serverless has many challenges and causes for confusion due to the unknowns. But it’s still totally worth it.</p>
<p><a href="https://medium.com/@harshavardhan.ghorpade/disaster-recovery-strategies-using-aws-serverless-services-3793a13cb099?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Disaster Recovery strategies using AWS Serverless Services</a><br />
This is a good read by Harshavardhan Ghorpade that explains the importance of Disaster Recovery and how serverless helps us achieve that at a much lower cost that traditional serverfull environments.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://aws.amazon.com/blogs/compute/using-amazon-rds-proxy-with-aws-lambda/" target="_blank" rel="noopener">Build serverless apps that seamlessly connect to MySQL &amp; PostgreSQL databases</a><br />
Amazon RDS Proxy is a fully managed, highly available database proxy that allows applications to pool and share database connections, improving database efficiency, application scalability, and security. Previously launched in Preview at AWS re:Invent in 2019, RDS Proxy is now generally available and can be enabled for MySQL and PostgreSQL workloads through both the Amazon RDS and AWS Lambda consoles. Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/compute/load-testing-a-web-applications-serverless-backend/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Load testing a web application’s serverless backend</a><br />
It’s all fine and good to <em>say</em> that serverless can easily scale, but do you know if your architecture actually <em>can</em>? This is why load testing is so important to confirm your system’s scalability before you realize it during a Black Friday sale. James Beswick has another excellent post that walks you through setting up the tools and running the experiments to make sure you serverless system will handle anything you throw at it.</p>
<p><a href="https://medium.com/@rafaelrodriguez_68048/its-simple-with-aws-a-step-by-step-serverless-fan-out-architecture-guide-d81f5b0e0faa?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">It’s simple with AWS: A step by step serverless fan-out architecture guide</a><br />
Rafael Rodriguez has a great tutorial that shows you how to implement the fan-out pattern using AWS serverless services. He’s using an SNS topic in this example, but EventBridge could also be another effective way to implement it.</p>
<p><a href="https://dev.to/aws-heroes/handling-webhooks-with-eventbridge-sam-and-sar-ac3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Handling webhooks with EventBridge, SAM and SAR</a><br />
Slobodan Stojanović explains the evolution of webhook implementations at Vacation Tracker and then shows you how to create a SAR app that publishes incoming message to an EventBridge event bus for further processing.</p>
<p><a href="https://dev.to/okeeffed/deploying-serverless-golang-apis-with-the-aws-cdk-2h04?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Deploying Serverless Golang APIs With The AWS CDK</a><br />
Go is screaming fast on Lambda, so it’s becoming a popular choice for developers building serverless applications. Dennis O’Keeffe has created a tutorial that shows you how to deploy a Golang API using the AWS CDK.</p>
<p><a href="https://www.vittorionardone.it/en/2020/06/04/chromium-and-selenium-in-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Chromium and Selenium in AWS Lambda</a><br />
Headless browser running in an AWS Lambda function? No problem. Vittorio Nardone shows you how to get Chromium up and running and then how to use Selenium to run some tests.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/@zef/the-gold-stack-cf17ad32385f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">The GoLD Stack</a><br />
We don’t see enough articles that look at serverless from a management perspective, and as we see more developers adopting it, I think it’s wise to be able to effectively communicate the value “up-the-stack”. Zef Hemel put some thoughts out there on this as it relates to using Go with Lambda and DynamoDB.</p>
<p><a href="https://medium.com/@garethdthomas/the-truth-about-serverless-bc8079ab2fa?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">The truth about Serverless</a><br />
How can you not click on a title like this? But seriously, Gareth Thomas outlines the perceived pros and cons of serverless and then offers a reality check for each one.</p>
<p><a href="https://cloudirregular.substack.com/p/youre-not-ready-for-feature-flags?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">You’re not ready for feature flags</a><br />
Another batch of good advice from Forrest Brazeal about making sure you nail down the basics of cloud deployments before you go ahead and try getting all fancy-like.</p>
<p><a href="https://serverlessfirst.com/serverless-vendors-metered-billing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Why do so few vendors in the serverless space offer metered billing?</a><br />
Interesting observation by Paul Swail about why most third-party serverless products are using a quota-based billing model instead of a more “serverless” pay-per-use model. He partially answers his own question, but definitely something to think about if you’re building a business in this space.</p>
<p><a href="https://medium.com/@soandsos/my-time-as-a-black-woman-software-engineer-at-capital-one-5c05fa8faed?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">My Time as a Black Woman Software Engineer at Capital One</a><br />
Though it isn’t about serverless, I had to include this incredibly brave post that recounts the horrific experience suffered by a black woman working as a software engineer. As I read this, my heart sank to the floor. The ideas and contributions of underrepresented people are far too often marginalized or hijacked by the current culture in tech. If you witness anything like this (even the things that may seem small to you), please speak out and stand up for changing toxic cultures.</p>
<h3>Podcast, videos, and more… ?</h3>
<p><a href="https://www.serverlesschats.com/56/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Episode #56: Accelerating DynamoDB Workflows using Dynobase with Rafal Wilinski</a><br />
In this episode, I chat with Rafal Wilinski about the challenges developers face when using DynamoDB, why DynamoDB makes sense for applications big and small, and why we need more tools like Dynobase to make working with your data easier. <a href="https://www.youtube.com/watch?v=41YJAflfnP4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://siliconangle.com/2020/07/02/vendias-founders-aim-leverage-serverless-blockchain-solve-data-sprawl/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">How Vendia’s founders aim to leverage serverless and blockchain to solve data sprawl</a><br />
As I said before, Tim Wagner and Shruthi Rao are a serverless force to be reckoned with. This is a good article (and video interview) that goes much deeper into their vision and what Vendia is capable of.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-rds-proxy-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Amazon RDS Proxy is Generally Available</a><br />
Amazon RDS Proxy, a fully managed, highly available database proxy for Amazon Relational Database Service (RDS), is now generally available with MySQL and PostgreSQL compatibility. I think this is a good solution for those that need a better way to manage their connections from Lambda. <a href="https://aws.amazon.com/blogs/aws/amazon-rds-proxy-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Read more here</a></p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-quicksight-supports-lake-formation-protected-athena-data-sources/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Amazon QuickSight now supports Lake Formation–protected Athena data sources</a><br />
QuickSight users can now visualize their Lake Formation–protected Athena data, natively using the benefits that come with Lake Formation, including table and column-level access controls.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/07/aws-appsync-introduces-new-instance-server-side-api-caching/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">AWS AppSync introduces new 12xlarge instance for server-side API caching</a><br />
AWS AppSync is a managed GraphQL service that simplifies application development by letting you create a flexible API to securely access, manipulate, and combine data from one or more data sources.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-efs--increases-file-system-minimum-throughput/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Amazon Elastic File System increases file system minimum throughput</a><br />
Amazon Elastic File System (Amazon EFS) file systems using the default bursting throughput mode now have a minimum throughput of 1 MiB/s.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-documentdb-supports-t3-medium-instances/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Amazon DocumentDB (with MongoDB compatibility) now supports T3 medium instances</a><br />
Amazon DocumentDB (with MongoDB compatibility) is a fast, scalable, highly available, and fully managed document database service that supports MongoDB workloads. Amazon DocumentDB makes it easy and intuitive to store, query, and index JSON data. Amazon DocumentDB now supports t3.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://blog.thundra.io/dry-dont-repeat-yourself-on-the-cloud-with-pulumi?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">DRY (Don’t Repeat Yourself) on the cloud with Pulumi</a><br />
This is a nice write up about using Pulumi to build repeatable cloud deployments. If you’re not familiar with Pulumi, it’s like a CDK for all major cloud vendors.</p>
<p><a href="https://github.com/jeshan/serverless-ghost?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">serverless-ghost</a><br />
Jeshan Babooa ported the Ghost project to Lambda, which should give you a way to run the blogging platform serverlessly. It is very early on and there are some expected issues, but it’s a good start.</p>
<p><a href="https://medium.com/koyeb/koyeb-serverless-data-processing-platform-early-access-fce1c0771f4d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Koyeb Serverless Data Processing Platform Early Access</a><br />
I came across this article about a new tool for easily building serverless workflows. Looks really interesting.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/mattbonig/status/1279501252791959557?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">So, I was going to write up a whole blog post about DynamoDB performance in Lambda with Deno. But ultimately the whole things can be represented by this picture.</a> <strong>~ Matthew Bonig</strong><br />
Click to see the picture, but it doesn’t take a thousand words to describe it. Deno is not ready for primetime with Lambda and DynamoDB.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>July 9, 2020 –</strong> <a href="https://info.lumigo.io/webinar-debugging-aws-lambda-performance-issues?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Debugging AWS Lambda Performance Issues</a></p>
<p><strong>July 9, 2020 –</strong> <a href="https://twitter.com/ServerlessOpsIO" target="_blank" rel="noopener">Good Morning Serverless with Tom McLaughlin</a> (I’ll be his guest)</p>
<p><strong>July 30, 2020 –</strong> <a href="https://triggermesh.com/webinar-building-intelligent-application-flows-in-the-cloud-and-on-premises-with-triggermesh/?utm_source=paid&amp;utm_medium=offbynone&amp;utm_campaign=July_2020_webinar" target="_blank" rel="noopener">Building Intelligent Application Flows in the Cloud and On-premises with TriggerMesh</a> (Webinar)</p>
<p><strong>October 1-2, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ServerlessDays Hamburg 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Josh Carlisle</strong> (<a href="https://twitter.com/joshcarlisle" target="_blank" rel="noopener">@joshcarlisle</a>). Josh is a Senior Sales Engineer – Partner Channel for AppDynamics, and a Microsoft MVP (Azure). In his role at AppDynamics, Josh provides technical and sales enablement to strategic partners implementing AppDynamics on the Azure platform. Based in Raleigh, he’s active in the local serverless community, co-organizing and participating in meet-ups, user groups, and code camps. Josh has also spoken at conferences around the country, including ServerlessDays events in Austin, Nashville and Amsterdam. Thank you, Josh, for sharing your knowledge and passion! ?</p>
<h3>Final Thoughts ?</h3>
<p>I mentioned in tweet that it’s getting harder and harder to narrow down all the amazing serverless posts that are being published every week. As you’ve probably noticed, this newsletter gets quite long, and I’m only including a <em>fraction</em> of the posts that I collect and review. I have a lot of ideas about how to make this better, so stay tuned for some upgrades to the Off-by-none experience coming soon.</p>
<p>In the meantime, be sure to check out the <a href="https://www.jeremydaly.com/serverless-reference-architectures/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2397" target="_blank" rel="noopener">Serverless Reference Architectures Project</a> and contribute your thoughts, ideas and patterns. The more examples, the better, so people can learn and experiment with the tools and languages they are comfortable with. #ServerlessForEveryone</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-97/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-97/</guid>
      <pubDate>Tue, 07 Jul 2020 21:46:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Announcing the Serverless Reference Architectures Project]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2020/07/header-image-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/07/header-image.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2020/07/header-image-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/07/header-image-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/07/header-image-1024x576.png 1024w" /></div>
<p><strong>Serverless</strong> gives us the power to focus on delivering value to our customers without worrying about the maintenance and operations of the underlying compute resources. Cloud providers (like AWS), also give us a huge number of managed services that we can stitch together to create incredibly powerful, and massively scalable serverless microservices.</p>
<p>Almost 2 years ago now, I wrote a post on <strong><a href="https://www.jeremydaly.com/serverless-microservice-patterns-for-aws/">Serverless Microservice Patterns for AWS</a></strong> that became a popular reference for newbies and serverless veterans alike. The capabilities of serverless have changed dramatically since then, opening up a ton of new patterns and possibilities. Today I’m announcing the <a href="https://www.jeremydaly.com/serverless-reference-architectures/"><strong>Serverless Reference Architectures Project</strong></a>. This project is intended to capture, share, explore, and debate the patterns and practices being used in serverless production applications today.</p>
<p>To really understand what’s going on, it’s useful to take a birds-eye view of a pattern, understand how data flows back and forth through the different components, and think about the implications on your application. I’ve created interactive architectures that let you explore the details of each component and walk you through the different steps.</p>
<p>You also need to understand how a pattern would come alive with AWS services and how you can configure it for your implementation. I’ve partnered with <strong><a href="https://www.stackery.io/" target="_blank" rel="noopener">Stackery</a></strong> and integrated their interactive canvas so that you can explore these patterns, customize them, and generate updated SAM templates automatically.</p>
<p>Finally, you want to understand how you’d replicate the pattern in production using infrastructure-as-code to ensure repeatable, safe deployments. You’re free to use the generated SAM templates, or take advantage of community supplied templates for the Serverless Framework, CDK, and others.</p>
<p>This project hopes to encapsulate all of this in one place so you can start by learning about the pattern fundamentals, then go all the way through to deploying a functional version of the pattern into your own AWS account (all with just a few clicks).</p>
<p>By partnering on sharing common serverless reference architectures and patterns, we can help others unlock the true power of serverless with AWS. We are starting with just a few patterns, but I plan on adding several more and hope that <a href="https://github.com/jeremydaly/reference-architectures" target="_blank" rel="noopener"><strong>you will contribute</strong></a> as well.</p>
<p><strong><a href="https://www.jeremydaly.com/serverless-reference-architectures/">Give it a try</a>, and let me know what you think!</strong></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on.</p>
<div class="footer-info">? This post was originally published on July 2, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/announcing-the-serverless-reference-architectures-project/</link>
      <guid>https://www.jeremydaly.com/announcing-the-serverless-reference-architectures-project/</guid>
      <pubDate>Thu, 02 Jul 2020 19:38:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The Simple Web Service]]></title>
      <description><![CDATA[<h2>Interactive Reference Architecture</h2>
<p>Click on the components or numbered steps below to explore how this architecture works.</p>
<div class="iframe-container ref-arch c2"><iframe width="1000" height="360" src="https://www.jeremydaly.com/ref-arch/simple-web-service.html" frameborder="0" scrolling="no">﻿﻿</iframe></div>
<p>This is the most basic of patterns you’re likely to see with serverless applications. The Simple Web Service fronts a Lambda function with an API Gateway. I’ve shown DynamoDB as the database here because it scales nicely with the high concurrency capabilities of Lambda.</p>
<h2>Deploy this Pattern</h2>
<p>Below are the basic configurations for deploying this pattern using different frameworks and platforms. Additional configuration for your environment will be necessary. The source files and additional examples are available in the <a href="https://github.com/jeremydaly/reference-architectures/tree/master/simple-web-service" target="_blank" rel="noopener">GitHub repo</a>.</p>
<ul class="tabs"><li class="tab"><input id="tab-sam" checked="checked" name="tabs" type="radio" /><label for="tab-sam">SAM</label>
<div id="tab-content-sam" class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/template?owner=jeremydaly&amp;repo=reference-architectures&amp;file=simple-web-service/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorDesign" frameborder="0" id="stackeryEditorTemplate">[embedded content]</iframe></div>
</li>
<li class="tab"><input id="tab-stackery" name="tabs" type="radio" /><label for="tab-stackery">Stackery</label>
<div id="tab-content-stackery" class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/design?owner=jeremydaly&amp;repo=reference-architectures&amp;file=simple-web-service/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorTemplate" frameborder="0" id="stackeryEditorDesign">[embedded content]</iframe></div>
</li>
<li class="tab"><input id="tab-serverless" name="tabs" type="radio" /><label class="tab-serverless" for="tab-serverless">Serverless Framework</label>
<div id="tab-content-serverless" class="content">
<div id="crayon-5efe0d720dd9a046479361" class="crayon-syntax crayon-theme-classic crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c7" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c3" data-settings="dblclick" readonly="readonly" rows="10" cols="50">service: simple-web-service
provider:
  name: aws
  runtime: nodejs12.x
  stage: ${opt:stage,'dev'}
  region: us-east-1
  stackName: ${self:service}-${self:provider.stage}
  stackTags:
    SERVICE: ${self:service}
  httpApi:
    payload: '2.0'
    cors: true
functions:
  GetUser:
    handler: index.handler
    memorySize: 1024
    timeout: 6
    tracing: Active
    environment:
      TABLE_NAME: !Ref Users
      TABLE_ARN: !GetAtt Users.Arn
    iamRoleStatementsName: ${self:service}-${self:provider.stage}-getuser-role
    iamRoleStatements:
      - Effect: Allow
        Action:
          - dynamodb:getItem
          - dynamodb:putItem
          - dynamodb:updateItem
          - dynamodb:deleteItem
        Resource:
          - !Join [ '/', [ !GetAtt Users.Arn, '*' ] ]
          - !GetAtt Users.Arn
      - Effect: Allow
        Action:
          - xray:PutTraceSegments
          - xray:PutTelemetryRecords
        Resource: "*"
    events:
      - httpApi:
          path: /user/{id}
          method: get
plugins:
  - serverless-iam-roles-per-function
resources:
  Resources:
    Users:
      Type: AWS::DynamoDB::Table
      Properties:
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        BillingMode: PAY_PER_REQUEST
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        StreamSpecification:
          StreamViewType: NEW_AND_OLD_IMAGES</textarea></div>
<div class="crayon-main c6">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content c4">
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-1">1</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-2">2</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-3">3</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-4">4</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-5">5</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-6">6</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-7">7</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-8">8</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-9">9</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-10">10</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-11">11</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-12">12</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-13">13</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-14">14</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-15">15</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-16">16</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-17">17</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-18">18</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-19">19</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-20">20</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-21">21</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-22">22</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-23">23</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-24">24</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-25">25</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-26">26</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-27">27</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-28">28</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-29">29</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-30">30</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-31">31</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-32">32</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-33">33</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-34">34</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-35">35</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-36">36</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-37">37</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-38">38</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-39">39</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-40">40</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-41">41</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-42">42</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-43">43</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-44">44</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-45">45</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-46">46</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-47">47</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-48">48</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-49">49</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-50">50</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-51">51</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-52">52</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-53">53</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-54">54</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-55">55</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-56">56</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-57">57</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-58">58</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-59">59</div>
<div class="crayon-num" data-line="crayon-5efe0d720dd9a046479361-60">60</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c5">
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-1">service: simple-web-service</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-2">provider:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-3">name: aws</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-4">runtime: nodejs12.x</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-5">stage: ${opt:stage,'dev'}</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-6">region: us-east-1</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-7">stackName: ${self:service}-${self:provider.stage}</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-8">stackTags:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-9">SERVICE: ${self:service}</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-10">httpApi:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-11">payload: '2.0'</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-12">cors: true</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-14">functions:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-15">GetUser:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-16">handler: index.handler</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-17">memorySize: 1024</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-18">timeout: 6</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-19">tracing: Active</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-20">environment:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-21">TABLE_NAME: !Ref Users</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-22">TABLE_ARN: !GetAtt Users.Arn</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-23">iamRoleStatementsName: ${self:service}-${self:provider.stage}-getuser-role</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-24">iamRoleStatements:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-25">- Effect: Allow</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-26">Action:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-27">- dynamodb:getItem</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-28">- dynamodb:putItem</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-29">- dynamodb:updateItem</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-30">- dynamodb:deleteItem</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-31">Resource:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-32">-!Join[ '/', [ !GetAtt Users.Arn, '*' ]]</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-33">-!GetAttUsers.Arn</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-34">- Effect: Allow</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-35">Action:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-36">- xray:PutTraceSegments</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-37">- xray:PutTelemetryRecords</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-38">Resource: "*"</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-39">events:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-40">- httpApi:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-41">path: /user/{id}</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-42">method: get</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-44">plugins:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-45">-serverless-iam-roles-per-function</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-47">resources:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-48">Resources:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-49">Users:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-50">Type: AWS::DynamoDB::Table</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-51">Properties:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-52">AttributeDefinitions:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-53">- AttributeName: id</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-54">AttributeType: S</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-55">BillingMode: PAY_PER_REQUEST</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-56">KeySchema:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-57">- AttributeName: id</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-58">KeyType: HASH</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-59">StreamSpecification:</div>
<div class="crayon-line" id="crayon-5efe0d720dd9a046479361-60">StreamViewType: NEW_AND_OLD_IMAGES</div>
</div>
</td>
</tr></table></div>
</div>
</div>
</li>
<li class="tab"><input id="tab-cdk" name="tabs" type="radio" /><label for="tab-cdk">CDK</label>
<div id="tab-content" class="content c8">Are you a CDK Guru?<br />
Would you like to contribute patterns to the community?<br />
Check out the <a href="https://github.com/jeremydaly/reference-architectures/tree/master/simple-web-service" target="_blank" rel="noopener">Github repo</a>!</div>
</li>
</ul><h2>Want to Contribute?</h2>
<p>All patterns and sample code are free to use and available under the MIT License. If you'd like to contribute to these patterns, please submit PRs to the <a href="https://github.com/jeremydaly/reference-architectures/" target="_blank">GitHub repo</a>.</p>
<p><a href="https://www.jeremydaly.com/serverless-reference-architecture"><strong>» Explore more Serverless Reference Architectures and Patterns</strong></a></p>]]></description>
      <link>https://www.jeremydaly.com/simple-web-service/</link>
      <guid>https://www.jeremydaly.com/simple-web-service/</guid>
      <pubDate>Thu, 02 Jul 2020 17:03:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The Scalable Webhook]]></title>
      <description><![CDATA[<h2>Interactive Reference Architecture</h2>
<p>Click on the components or numbered steps below to explore how this architecture works.</p>
<div class="iframe-container ref-arch c2"><iframe width="1000" height="420" src="https://www.jeremydaly.com/ref-arch/scalable-webhook.html" frameborder="0" scrolling="no">﻿﻿</iframe></div>
<p>If you’re building a webhook, the traffic can often be unpredictable. This is fine for Lambda, but if you’re using a “less-scalable” backend like RDS, you might just run into some bottlenecks. There are ways to manage this, but because Lambda supports SQS triggers, we can throttle our workloads by queuing the requests and then using a throttled (low concurrency) Lambda function to work through our queue. Under most circumstances, your throughput should be near real-time. If there is some heavy load for a period of time, you might experience some small delays as the throttled Lambda chews through the messages.</p>
<p>You’ll also want to handle failed messages using a Dead Letter Queues (DLQ). The SQS Poller will adjust its polling frequency based on your Lambda function’s concurrency. You’ll need to configure your redrive policies to appropriately handle failed messages.</p>
<h2>Deploy this Pattern</h2>
<p>Below are the basic configurations for deploying this pattern using different frameworks and platforms. Additional configuration for your environment will be necessary. The source files and additional examples are available in the <a href="https://github.com/jeremydaly/reference-architectures/tree/master/scalable-webhook" target="_blank" rel="noopener">GitHub repo</a>.</p>
<ul class="tabs"><li class="tab"><input checked="checked" name="tabs" type="radio" /><label for="tab-sam">SAM</label>
<div class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/template?owner=jeremydaly&amp;repo=reference-architectures&amp;file=scalable-webhook/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorDesign" frameborder="0">[embedded content]</iframe></div>
</li>
<li class="tab"><input name="tabs" type="radio" /><label for="tab-stackery">Stackery</label>
<div class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/design?owner=jeremydaly&amp;repo=reference-architectures&amp;file=scalable-webhook/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorTemplate" frameborder="0">[embedded content]</iframe></div>
</li>
<li class="tab"><input name="tabs" type="radio" /><label class="tab-serverless" for="tab-serverless">Serverless Framework</label>
<div class="content">
<div id="crayon-5efe0d72b7399684756265" class="crayon-syntax crayon-theme-classic crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c7" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c3" data-settings="dblclick" readonly="readonly" rows="10" cols="50"># Code sample coming soon</textarea></div>
<div class="crayon-main c6">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content crayon-num c4">1</div>
</td>
<td class="crayon-code">
<div class="crayon-pre crayon-line c5"># Code sample coming soon</div>
</td>
</tr></table></div>
</div>
</div>
</li>
<li class="tab"><input name="tabs" type="radio" /><label for="tab-cdk">CDK</label>
<div class="content c8">Are you a CDK Guru?<br />
Would you like to contribute patterns to the community?<br />
Check out the <a href="https://github.com/jeremydaly/reference-architectures/tree/master/scalable-webhook" target="_blank" rel="noopener">Github repo</a>!</div>
</li>
</ul><h2>Want to Contribute?</h2>
<p>All patterns and sample code are free to use and available under the MIT License. If you'd like to contribute to these patterns, please submit PRs to the <a href="https://github.com/jeremydaly/reference-architectures/" target="_blank">GitHub repo</a>.</p>
<p><a href="https://www.jeremydaly.com/serverless-reference-architecture"><strong>» Explore more Serverless Reference Architectures and Patterns</strong></a></p>]]></description>
      <link>https://www.jeremydaly.com/the-scalable-webhook/</link>
      <guid>https://www.jeremydaly.com/the-scalable-webhook/</guid>
      <pubDate>Thu, 02 Jul 2020 17:02:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The Strangler Pattern]]></title>
      <description><![CDATA[<h2>Interactive Reference Architecture</h2>
<p>Click on the components or numbered steps below to explore how this architecture works.</p>
<div class="iframe-container ref-arch c2"><iframe width="1000" height="500" src="https://www.jeremydaly.com/ref-arch/strangler.html" frameborder="0" scrolling="no">﻿﻿</iframe></div>
<p>The Strangler is another popular pattern that lets you incrementally replace pieces of an application with new or updated services. Typically you would create some sort of a “Strangler Facade” to route your requests, but API Gateway can actually do this for us using “AWS Service Integrations” and “HTTP Integrations”. For example, an existing API (front-ended by an Elastic Load Balancer) can be routed through API Gateway using an “HTTP” integration. You can have all requests default to your legacy API, and then direct specific routes to new serverless service as you add them.</p>
<h2>Deploy this Pattern</h2>
<p>Below are the basic configurations for deploying this pattern using different frameworks and platforms. Additional configuration for your environment will be necessary. The source files and additional examples are available in the <a href="https://github.com/jeremydaly/reference-architectures/tree/master/the-strangler" target="_blank" rel="noopener">GitHub repo</a>.</p>
<ul class="tabs"><li class="tab"><input checked="checked" name="tabs" type="radio" /><label for="tab-sam">SAM</label>
<div class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/template?owner=jeremydaly&amp;repo=reference-architectures&amp;file=the-strangler/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorDesign" frameborder="0">[embedded content]</iframe></div>
</li>
<li class="tab"><input name="tabs" type="radio" /><label for="tab-stackery">Stackery</label>
<div class="content"><iframe width="100%" height="500" src="https://app.stackery.io/editor/design?owner=jeremydaly&amp;repo=reference-architectures&amp;file=the-strangler/sam/template.yaml&amp;standalone=true&amp;sync=stackeryEditorTemplate" frameborder="0">[embedded content]</iframe></div>
</li>
<li class="tab"><input name="tabs" type="radio" /><label class="tab-serverless" for="tab-serverless">Serverless Framework</label>
<div class="content">
<div id="crayon-5efe0d734129e612091115" class="crayon-syntax crayon-theme-classic crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c7" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c3" data-settings="dblclick" readonly="readonly" rows="10" cols="50"># Code sample coming soon</textarea></div>
<div class="crayon-main c6">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content crayon-num c4">1</div>
</td>
<td class="crayon-code">
<div class="crayon-pre crayon-line c5"># Code sample coming soon</div>
</td>
</tr></table></div>
</div>
</div>
</li>
<li class="tab"><input name="tabs" type="radio" /><label for="tab-cdk">CDK</label>
<div class="content c8">Are you a CDK Guru?<br />
Would you like to contribute patterns to the community?<br />
Check out the <a href="https://github.com/jeremydaly/reference-architectures/tree/master/the-strangler" target="_blank" rel="noopener">Github repo</a>!</div>
</li>
</ul><h2>Want to Contribute?</h2>
<p>All patterns and sample code are free to use and available under the MIT License. If you'd like to contribute to these patterns, please submit PRs to the <a href="https://github.com/jeremydaly/reference-architectures/" target="_blank">GitHub repo</a>.</p>
<p><a href="https://www.jeremydaly.com/serverless-reference-architecture"><strong>» Explore more Serverless Reference Architectures and Patterns</strong></a></p>]]></description>
      <link>https://www.jeremydaly.com/the-strangler-pattern/</link>
      <guid>https://www.jeremydaly.com/the-strangler-pattern/</guid>
      <pubDate>Thu, 02 Jul 2020 17:01:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #96]]></title>
      <description><![CDATA[<h1>Serverless, distributed, and vendor neutral applications… ?</h1>
<p>Welcome to <strong>Issue #96</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-95/">Last week</a>, we saw how EFS integration makes serverless even better, got a lesson in why serverless <em>is</em> for everyone, and looked at the internals of DynamoDB. This week, we learn how serverless applications can be truly vendor neutral, see how EFS finally makes serverless ML a reality, and we get a master class in building serverless applications for the experts at AWS. Plus, we have a plenty of great content from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p>Check out the TriggerMesh guide “<a href="https://triggermesh.com/the-triggermesh-guide-what-every-cio-needs-to-know-about-serverless/?utm_source=offbynone&amp;utm_medium=newsletter&amp;utm_campaign=cio" target="_blank" rel="noopener">What Every CIO Needs to Know about Serverless</a>” for feature comparisons of major offerings and an introduction to basic concepts like cloud native and microservices. Use it to inform your peers / managers on serverless benefits and available options. Sponsored</p>
<p><a href="https://www.vendia.net?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Introducing Vendia Share</a><br />
When Tim Wagner launches something new, it’s probably best that we all pay attention. His new project, Vendia, is now in preview and it looks like it could solve a lot of problems for a lot of people.</p>
<p><a href="https://medium.com/lambda-store/announcing-redis-as-a-code-lambda-store-terraform-provider-c2a481cad591?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Announcing Redis as a Code! Lambda Store Terraform Provider</a><br />
You can now create your serverless Redis using Terraform. IaC is a must have, so it’s good to see them moving in that direction.</p>
<p><a href="https://codingsans.typeform.com/to/mPinnC?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">State of Serverless 2020</a><br />
Coding Sans is running a State of Serverless 2020 survey. It only takes about 8 minutes to fill out, so give it a look when you get a chance.</p>
<p><a href="https://www.streetinsider.com/Corporate+News/Fastly%2C+Inc.+%28FSLY%29+announces+extension+of+its+platforms+observability+features+to+its+Compute%40Edge+serverless+compute+environment/17064071.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Fastly, Inc. (FSLY) announces extension of its platform’s observability features to its Compute@Edge serverless compute environment</a><br />
Like I said last week… pay attention to Fastly. Lots of really cool stuff happening there.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@mike.r.leonard/building-firewatch-australia-introduction-2f33dcad2b28?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Building Firewatch Australia</a><br />
Mike Leonard has a great series on how he built a serverless app using Cloudflare and GCP to help others navigate the Australian bushfires.</p>
<p><a href="https://www.informationweek.com/cloud/infrastructure-as-a-service/how-liberty-mutuals-cloud-journey-led-to-going-serverless/a/d-id/1338183?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">How Liberty Mutual’s Cloud Journey Led to Going Serverless</a><br />
Great piece with Dave Anderson discussing how and why Liberty Mutual decided to move towards serverless. My favorite line in here is “Code is a liability. The less code we write the better.” Totally agree.</p>
<p><a href="https://medium.com/lambda-lego/the-ultimate-aws-gotcha-to-watch-out-for-when-launching-a-product-9cfda2a2b8f8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">The Ultimate AWS Gotcha to watch out for when launching a product</a><br />
Brian Foody spent some time trying to figure out why 2FA verification codes were no longer being sent to his users. After some digging, he figured out the problem had to do with AWS service availability based on regions. He offers some good learnings at the end, especially the bit about not feeling bad if you don’t understand all of AWS. I don’t think anyone does.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://dev.to/daveparr/why-use-aws-lambda-for-data-science-421?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Why use AWS Lambda for Data Science?</a><br />
Dave Parr explains why Data Science and AWS Lambda work well together, and even gives you a quick tutorial for building a “hello world” data science function.</p>
<p><a href="https://medium.com/lambda-store/who-said-that-a-tweet-guess-game-implemented-with-serverless-stack-on-netlify-7ae7e9cb0273?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Who Said That: A tweet guess game implemented with serverless stack on Netlify</a><br />
No one ever said serverless use cases had to be boring, and as Sven Anderson shows us with his “Who Said That” game, serverless likely makes for a great tool for little one-offs like this. If your game goes viral, I wouldn’t want to be the one trying to scale that with EC2 instances.</p>
<p><a href="https://medium.com/@edgardo_CJ/aws-automation-narrowing-security-group-rules-6eb32de3c092?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">AWS Automation: Narrowing security group rules</a><br />
Ed Reinoso is using Lambda to automate closing all potential threatening rules that might jeopardize the security of his EC2 instances. And you can too.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://epsagon.com/try-free/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL&amp;utm_term={keyword}&amp;utm_device={device}" target="_blank" rel="noopener">Automated end-to-end observability for microservice environments</a><br />
Epsagon enables full-depth observability of complex serverless and containerized architectures, delivering the automation needed to instantly identify, troubleshoot, and resolve issues before they affect production. Try free today. Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/compute/managing-backend-requests-and-frontend-notifications-in-serverless-web-apps/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Managing backend requests and frontend notifications in serverless web apps</a><br />
Another excellent post by James Beswick and an absolute MUST READ for anyone building applications with serverless backends. He walks you through moving from the common synchronous model to a much more resilient asynchronous one, and includes real-time communication just for good measure.</p>
<p><a href="https://blog.thundra.io/can-lambda-and-rds-play-nicely-together?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Can Lambda and RDS Play Nicely Together?</a><br />
Serkan Özal explains possible problems that can occur when using RDS with Lambda, and offers some solutions and alternatives.</p>
<p><a href="https://medium.com/element7-io/lambda-cold-starts-why-i-dont-see-the-problem-d6ede18bb220?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Lambda Cold Starts, why I don’t see the problem</a><br />
Gert Leenders has some thoughts on cold starts and points out that it’s possible that Lambda might not be the solution to your problem.</p>
<p><a href="https://medium.com/@leejamesgilmore/enterprise-serverless-series-358be237b510?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Enterprise Serverless ? (Series)</a><br />
Lee James Gilmore put together an excellent series on Enterprise Serverless that covers tooling, architecture, AWS limits &amp; limitations, and more. Plus there’s an awesome list of useful resources. ?</p>
<p><a href="https://medium.com/@leroyc/6-tips-for-deploying-aws-serverless-node-js-applications-to-production-c1023d746368?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">6 Tips for Deploying AWS Serverless Node.js Applications to Production</a><br />
Leroy Chan wrote an in depth article that offers a number of tips for building production-ready serverless applications along with a boilerplate template to get you going. I’m still 50/50 on the right use cases for Lambda Layers, but overall, I think this is a good set of tips.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/@aswinkumar4018/interactive-slack-bot-using-aws-serverless-5b87073ed51a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Interactive Slack bot using AWS Serverless</a><br />
Simple walkthrough for setting up a Slack bot using AWS Lambda and API Gateway by Aswin Kumar Rajendran.</p>
<p><a href="https://medium.com/@dtraskas/automatic-s3-file-splitter-620d04b6e81c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Automatic file splitting on S3 buckets at $0 cost</a><br />
Cool trick by Dimitris Traskas that shows you how to use a Lambda function with a bash custom runtime to stream large files from S3, split them into smaller files, and push back to another S3 bucket.</p>
<p><a href="https://dev.to/headwayio/contact-forms-with-netlify-serverless-functions-11cn?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Contact Forms with Netlify Serverless Functions</a><br />
Building HTML forms is the worst, amiright? Luckily, services like Netlify have this functionality built in. Chris Held walks you through it.</p>
<p><a href="https://hackernoon.com/how-to-create-serverless-functions-with-openfaas-in-17-steps-u21l3y7m?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">How to Create Serverless Functions with OpenFaaS in 17 Steps</a><br />
I like to sprinkle things in here for the k8s crowd every once in awhile, and I thought this was a good article to share. I’m not going through all these steps, but they are very well documented if you want to.</p>
<p><a href="https://towardsdatascience.com/building-a-conversational-ai-chatbot-with-aws-lambda-function-and-amazon-efs-615fddb4d55?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Building a Conversational AI Chatbot With AWS Lambda Function and Amazon EFS</a><br />
EFS integration with AWS Lambda opened up quite a few new use cases, and Machine Learning is a big one. Yi Ai shows you how to use SageMaker exports to EFS to build a conversational chat bot with Lambda.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://aws.amazon.com/blogs/aws/find-your-most-expensive-lines-of-code-amazon-codeguru-is-now-generally-available/" target="_blank" rel="noopener">Automate code reviews and identify expensive lines of code with Amazon CodeGuru</a><br />
Previously launched in Preview last re:Invent, Amazon CodeGuru is now generally available. CodeGuru uses machine learning to perform automated code reviews and recommend application optimizations. With CodeGuru, you can identify your most expensive lines of code and find and fix code issues such as resource leaks, potential concurrency race conditions, and wasted CPU cycles—faster and with less frustration. Sponsored</p>
<p><a href="https://medium.com/@craig.beardy.digital/using-microservice-patterns-in-an-increasingly-serverless-world-c350115dc7fd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Using Microservice Patterns in an increasingly Serverless world</a><br />
Craig Godden-Payne outlines three different patterns, ultimately landing on orchestration via Step Functions as a preferred solution. Step Functions certainly have their place, but I wouldn’t be so quick to dismiss the power and autonomy of an event-driven, asynchronous approach.</p>
<p><a href="https://medium.com/crane-taking-flight/serverless-and-the-future-of-computing-48b1189a1171?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Serverless and the future of computing</a><br />
Great write up by Erik Stadigh of the London Enterprise Tech Meetup. Lots of smart serverless people talking about what serverless means for companies and the cloud, and what it’s going to look like in the future.</p>
<p><a href="https://dev.to/aws-heroes/applying-the-well-architected-framework-small-edition-18fj?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Applying the Well-Architected Framework, Small Edition</a><br />
Awesome post by Mark Nunnikhoven that explains why there are no silver bullets with cloud. Using the Well-Architected Framework to evaluate your project can help give you new perspective, which means you might actually choose the right tool for the job.</p>
<p><a href="https://dev.to/aws-heroes/what-problems-does-serverless-solve-1fg6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">What problems does serverless solve?</a><br />
Um, all of them? Slobodan Stojanović has a great piece that explains the value of serverless using Wardley Maps in the context of a small start up. Lots of insight in here in regards to what your startup should be spending their time on.</p>
<p><a href="http://blog.drgriffin.com.au/posts/2020-06-21-the-three-fs-of-cloud-pricing.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">The three Fs of cloud pricing</a><br />
Not particularly about serverless, but a worthwhile read nonetheless. I’ll be interested to see what David is working on that addresses some of these issues.</p>
<h3>Podcasts, videos, and more… ?</h3>
<p><a href="https://www.serverlesschats.com/55/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Episode #55: Serverless PHP using Bref with Matthieu Napoli</a><br />
In this episode, I chat with Matthieu Napoli about why PHP is still an important part of the web landscape, how Bref can help you make existing PHP workloads serverless, and whether or not PHP devs will embrace serverless design patterns. <a href="https://www.youtube.com/watch?v=H8tkZcjQxOA&amp;t=1s?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://aws.amazon.com/blogs/compute/icymi-serverless-first-function/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ICYMI: Serverless-First Function</a><br />
Here are all the recordings and slides from the recent AWS Serverless-First Function event. Lots of great stuff in here!</p>
<p><a href="https://www.thecloudcast.net/2020/06/building-next-generation-of-serverless.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">The Cloudcast: Building a Next-Generation of Serverless</a><br />
Tim Zonca talks about the next evolution of the serverless developer experience, the maturity of customer adoption, how much customers appreciate not having to manage infrastructure, and how to manage the journey to serverless.</p>
<p><a href="http://www.youtube.com/watch?v=NdPg_AXdQQU?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Patterns and Practices for Building Resilient Serverless Applications</a><br />
Excellent presentation by Yan Cui from a recent AWS Community Day that gives you a solid overview of how to build resilient serverless applications.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-codeguru-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Find your most expensive lines of code and improve code quality with Amazon CodeGuru – now generally available</a><br />
Amazon CodeGuru is a developer tool powered by machine learning that provides intelligent recommendations for improving code quality and identifying an applications’ most expensive lines of code. <a href="https://aws.amazon.com/blogs/aws/find-your-most-expensive-lines-of-code-amazon-codeguru-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Read more</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/announcing-aurora-serverless-with-mysql-5-7-compatibility/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Announcing Amazon Aurora Serverless with MySQL 5.7 compatibility</a><br />
Amazon Aurora Serverless is now available with MySQL 5.7 compatibility. MySQL 5.7-compatible Aurora offers enhancements such as JSON support, spatial indexes, and generated columns, and is up to 5X faster than MySQL 5.7.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-rekognition-custom-labels-now-supports-single-object-training/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Amazon Rekognition Custom Labels now supports single object training</a><br />
Amazon Rekognition Custom Labels is an automated machine learning (ML) feature that enables customers to quickly train their own custom models for detecting business-specific objects and scenes from images – no ML experience is required.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-documentdb-adds-sixteen-additional-real-time-metrics-amazon-cloudwatch/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Amazon DocumentDB (with MongoDB compatibility) adds sixteen additional Amazon CloudWatch metrics for monitoring MongoDB opcounters, connections, cursors, operations on documents and index cache hits</a><br />
For all of you that can’t let go of MongoDB.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-athena-supports-partition-projection/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Amazon Athena adds support for Partition Projection</a><br />
Amazon Athena has added support for Partition Projection, a new functionality that you can use to speed up query processing of highly partitioned tables and automate partition management.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/user-management-and-other-improvements-added-to-serverless-developer-portal/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">User management and other improvements added to Serverless Developer Portal</a><br />
You can now manage users of the Amazon API Gateway Serverless Developer Portal directly from the portal’s admin interface.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/announcing-amazon-honeycode/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Announcing Amazon Honeycode</a><br />
Amazon Honeycode, which is available in beta, is a fully managed service that allows customers to quickly build powerful mobile and web applications – with no programming required. There have been some <a href="https://twitter.com/QuinnyPig/status/1275901918066298880" target="_blank" rel="noopener">opinions</a> on this. <a href="https://aws.amazon.com/blogs/aws/introducing-amazon-honeycode-build-web-mobile-apps-without-writing-code/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Read more</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amplify-console-adds-support-for-automatically-creating-deleting-custom-sub-domains-for-every-branch-deployment/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Amplify Console adds support for automatically creating and deleting custom sub-domains for every branch deployment</a><br />
Another very cool feature from the Amplify Console team.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/better-programming/run-serverless-deno-with-vercel-6456e588f62f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">Run Serverless Deno With Vercel</a><br />
I’m a big fan of Deno and Vercel, and now you can use the new <code>vercel-deno</code> runtime to make it super easy to deploy serverless functions implemented using Deno.</p>
<p><a href="https://medium.com/@konstankino/samber-a-full-stack-developers-dream-come-true-9e1a94d51b89?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">SAMBER, a Full-Stack developer’s dream come true</a><br />
SAM + Ember.js? ?‍♂️</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>July 6, 2020 –</strong> <a href="https://homeschool.dev/class/serverless-for-frontend-devs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Serverless for Frontend Developers</a> (Course)</p>
<p><strong>October 1-2, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2396" target="_blank" rel="noopener">ServerlessDays Hamburg 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Sander van de Graaf</strong> (<a href="https://twitter.com/svdgraaf" target="_blank" rel="noopener">@svdgraaf</a>). Sander is a Principal Solutions Architect at Ookla, the global leader in internet testing, data and analysis. Sander also is the owner of 42Unicorns, acting as architect, developer and advisor for several clients. Though he has more than 15 years of experience with building and deploying large scale applications, his most recent focus and roles have been in serverless solutions. Sander has written many pieces about serverless on his personal website, and he’s also been a prolific speaker across the globe. He’s presented at Serverless Conf in New York, participated in serverless meetups in his home country, the Netherlands, and spoken at other events like Python Rotterdam, PyAmsterdam, and eqNation about serverless. Thank you, Sander, for being a part of this great community! ?</p>
<h3>Final Thoughts ?</h3>
<p>I recently launched the <a href="https://www.serverlesschats.com/insiders/" target="_blank" rel="noopener">Serverless Chats Insiders</a> program that allows listeners to submit questions for upcoming guests. If you’re a podcast listener (or you just want to see who my future guests are), then make sure you sign up. In addition to that, I have <em>a lot</em> of stuff in the pipeline that I hope to share soon. Stay tuned.</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Until next time,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-96/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-96/</guid>
      <pubDate>Wed, 01 Jul 2020 00:27:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #95]]></title>
      <description><![CDATA[<h1>EFS + Lambda = Serverless for Everything? ?</h1>
<p>Welcome to <strong>Issue #95</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-94/">Last week</a>, we learned why now is the time to go serverless, saw how to build our own Chaos Monkey, and celebrated a year of Serverless Chats. This week, we see how EFS integration makes serverless even better, we get a lesson in why serverless <em>is</em> for everyone, and take a look at the internals of DynamoDB. Plus, we have a ton of awesome posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/the-triggermesh-guide-what-every-cio-needs-to-know-about-serverless/?utm_source=offbynone&amp;utm_medium=newsletter&amp;utm_campaign=cio" target="_blank" rel="noopener">What Every CIO Needs to Know about Serverless</a><br />
This TriggerMesh guide includes feature comparisons of major offerings and an introduction to foundational concepts like cloud native and microservices. Please check it out! We hope it can help inform your peers and managers on serverless benefits and available options. Sponsored</p>
<p><a href="https://techcrunch.com/2020/06/23/salesforce-introduces-several-new-developer-tools-including-serverless-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Salesforce introduces several new developer tools including serverless functions</a><br />
I’ve said it before, and I’ll say it again, I really like how SaaS companies are empowering their users by giving them access to compute in their environments. So many interesting things that you can do, including maybe even just triggering a data export to your main application.</p>
<p><a href="https://www.businesswire.com/news/home/20200617005123/en/Fastly-Achieves-100-Tbps-Edge-Capacity-Milestone?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Fastly Achieves 100 Tbps of Edge Capacity Milestone</a><br />
Pay attention to Fastly. The edge market is going to become more and more important for building cloud/serverless applications, and I think Fastly is positioning themselves nicely.</p>
<p><a href="https://epsagon.com/observability/announcing-epsagons-applied-observability-for-azure-k8s/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Announcing Epsagon’s Applied Observability for Azure and K8s</a><br />
I’ve always been a big fan of Epsagon, and they continue to smartly expand their offerings. Getting into Azure and (cough) Kubernetes, is another good strategic move.</p>
<p><a href="https://blog.webiny.com/new-updates-on-webiny-4-1-0-d798e5740fcd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">New Updates on Webiny 4.1.0</a><br />
After the recent launch of the Serverless Headless CMS, the team over at Webiny is continuing to churn out new features and capabilities.</p>
<p><a href="https://www.helpnetsecurity.com/2020/06/19/datadog-aws/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Datadog now supports Amazon EFS for AWS Lambda on Amazon Web Services</a><br />
I think EFS integration with Lambda is going to be huge, so Datadog jumping on this right away is good to see.</p>
<h3>AWS Adds EFS to Lambda… ?</h3>
<p>Last week (just after we published the newsletter ?) AWS released a <a href="https://aws.amazon.com/blogs/aws/new-a-shared-file-system-for-your-lambda-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Shared File System for Your Lambda Functions</a>, that is, integration with Elastic File Storage (EFS). This is a <em>very</em> big deal and I think it opens up a lot of new use case for serverless (including machine learning). There were several well written pieces on the subject, so I’ve included some of my favorites below:</p>
<p><a href="https://medium.com/@aletheia/migrating-image-memorability-service-to-aws-lambda-using-a-shared-elastic-file-system-volume-582218ca91c2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Migrating Image Memorability service to AWS Lambda using a shared Elastic File System volume</a><br />
Excellent post by Luca Bianchi that shows you just how powerful (and cost effective) the new EFS integration with Lambda can be. This is also an excellent example of why rethinking your architecture to optimize for the final result is so important. The individual image processing times may have increased, but the parallelization significantly reduced the total job time.</p>
<p><a href="https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Using Amazon EFS for AWS Lambda in your serverless applications</a><br />
I loved this piece by James Beswick because it outlined some sample applications that you could build with EFS integration. It’s important to note that he shows “asynchronous” operations, not real-time synchronous ones that could suffer from EFS latency.</p>
<p><em>And here are a bunch more that are worth digging into:</em></p>
<ul><li><a href="https://lumigo.io/blog/unlocking-more-serverless-use-cases-with-efs-and-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Unlocking new serverless use cases with EFS and Lambda</a> by Yan Cui</li>
<li><a href="https://epsagon.com/blog/tools/get-started-with-efs-file-system-access-for-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Get Started with EFS File System Access for AWS Lambda</a> by Ran Ribenzaft</li>
<li><a href="https://technology.customink.com/blog/2020/06/16/monolithic-ideas-for-aws-lambda-file-systems/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Monolithic Ideas For AWS Lambda File Systems</a> by Ken Collins</li>
<li><a href="https://read.acloud.guru/how-i-used-lambda-and-efs-for-massively-parallel-compute-96575bc85157?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">How I used Lambda and EFS for massively parallel compute</a> by Peter Sbarski</li>
<li><a href="https://dev.to/imohd23/how-to-use-efs-with-aws-lambda-2057?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">How to use EFS with AWS Lambda?</a> by Mohamed Latfalla</li>
</ul><h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@drewword/multi-region-lambda-with-route53-8d8f8d63357b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Multi-Region Lambda with Route53</a><br />
Dre May documents the experience of setting up a multi-region Lambda deployment using the AWS CDK. All the code is provided, but the article is a great read for understanding where you might run into rough edges, and how to deal with them.</p>
<p><a href="https://dev.to/peibolsang/cloud-native-development-just-clicked-for-me-73?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Cloud-Native Development just clicked for me</a><br />
Great perspective from Pablo Bermejo about why companies need to build cloud-native instead of trying to achieve some level of cloud/on-prem agnosticism.</p>
<p><a href="https://dev.to/wboland33/my-experience-with-the-cloud-resume-challenge-1ade?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">My Experience with the Cloud Resume Challenge</a><br />
Good on Forrest Brazeal for creating the Cloud Resume Challenge. I’ve see lots of people really pushing themselves to complete it and creating excellent posts of their journey, like this one by Will Boland.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://epsagon.com/try-free/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL&amp;utm_term={keyword}&amp;utm_device={device}" target="_blank" rel="noopener">Automated end-to-end observability for microservice environments</a><br />
Epsagon enables full-depth observability of complex serverless and containerized architectures, delivering the automation needed to instantly identify, troubleshoot, and resolve issues before they affect production. Try free today. Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/compute/implementing-geohashing-at-scale-in-serverless-web-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Implementing geohashing at scale in serverless web applications</a><br />
Using location data within your mobile (or even web-based) applications is becoming more and more common. James Beswick outlines how using serverless tools like DynamoDB and IoT Core can make building and scaling these types of applications super easy.</p>
<p><a href="https://medium.com/@soumoks/building-a-github-webhook-handler-using-aws-sam-91ab65d747ca?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Building a Github Webhook handler using AWS SAM</a><br />
Straightforward use case by Sourabh Mokhasi. I’d think about using EventBridge instead of SNS (you’d get more targets that way), and if your target is another Lambda function, SQS might make more sense for better buffering and greater insight into the queue.</p>
<p><a href="https://johndous.com/posts/serverless-graphql-server-on-aws-lambda?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Serverless GraphQL server on AWS Lambda</a><br />
This is a little bit use case, and a lot tutorial. John Dousaitis shows you how to set up an Apollo GraphQL “server” on AWS Lambda.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/@uditsharma/internals-of-dynamodb-b3b7912256ae?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Internals of DynamoDB</a><br />
Excellent writeup by Udit Sharma that explains how the different parts of DynamoDB work in order to ensure high availability and scalability in your applications.</p>
<p><a href="https://dashbird.io/blog/using-api-gateway-to-decouple-and-scale-serverless-architectures/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Using API Gateway to Decouple and Scale Serverless Architectures</a><br />
Renato Byrro offers some thoughts into using API Gateway as an abstraction layer to other AWS services. I think there are a lot of interesting use cases for service integrations, but I’m not sure I fully agree with this implementation.</p>
<p><a href="https://theburningmonk.com/2020/06/how-to-choose-the-right-api-gateway-auth-method/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">How to choose the right API Gateway auth method</a><br />
Yan Cui gives you a handy guide to help you choose the appropriate API Gateway authorization method. There are a lot of options, including using direct integrations to third-party provides with JWT, but if you’ve got no idea where to start, this should point you in the right direction.</p>
<p><a href="https://www.edward-huang.com/cloud/aws/devops/2020/05/30/all-you-need-to-know-about-sqs-and-kinesis-is-here/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">All you need to know about SQS and Kinesis is Here</a><br />
Edward Huang gives you a breakdown of Kinesis and SQS and outlines some of the benefits and drawbacks of each.</p>
<p><a href="https://dev.to/jhole89/how-to-test-serverless-workflows-2ibj?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">How to test serverless workflows?</a><br />
Joel Lutman explains why implementing regression tests in serverless applications are important, what advantages they have over unit and integration tests, and how to set your system up to automate them.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://homeschool.dev/class/serverless-for-frontend-devs/" target="_blank" rel="noopener">COURSE: Serverless for Frontend Devs in 4 weeks</a> ?<br /><strong>Use code OFFBYNONE_JUNE for 10% off</strong><br />
Learn from AWS Serverless Heroes Slobodan Stojanovic &amp; Alex Simovic. ~5hrs/week starting July 6th. You’ll learn to set up and secure Amplify &amp; React using Cognito, connect GraphQL, manage permissions, use AppSync, test your code, and much more. Homeschool by Senzo is a virtual classroom giving you live chat with your classmates, weekly instructor Q&amp;A + perpetual access to course materials. £/$400, €440. Sponsored</p>
<p><a href="https://medium.com/@simran.r.kahlon/how-to-connect-to-mongodb-cluster-from-aws-lambda-e14231e4af0e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">How to connect to MongoDB cluster from AWS Lambda?</a><br />
Simran Kaur Kahlon shows you how to use host aliases when connecting to a MongoDB cluster from AWS Lambda. Seems like a straightforward solution.</p>
<p><a href="https://dev.to/madebygps/serverless-database-computing-with-azure-cosmos-db-and-azure-functions-23a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Serverless database computing with Azure Cosmos DB and Azure Functions</a><br />
Gwyneth Pena shows you how to set up an Azure Cosmos DB and then utilize it from Azure Functions using input and output bindings.</p>
<p><a href="https://richardhaines.dev/jamstack-and-the-power-of-serverless-with-faunadb/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Jamstack and the power of serverless with FaunaDB</a><br />
And incredibly in depth tutorial by Richard Haines that walks you through creating a Jamstack website powered by Gatsby, Netlify Functions, Apollo and FaunaDB. There’s the opportunity to swap in some of your favorites tools here, but this will give you a very good overview of how Jamstack sites are built.</p>
<p><a href="https://blog.thundra.io/coordinate-complex-workflows-with-step-functions?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Coordinate Complex Workflows with Step Functions</a><br />
Serkan Özal gives you some tips on the when, why and how of Step Functions, and then shows you how to build a state machine that loads images from S3 and runs them through Rekognition.</p>
<p><a href="https://emshea.com/post/serverless-cicd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">A Basic CI/CD Pipeline for Serverless Apps</a><br />
Emily Shea has a great tutorial that shows you how to implement a basic CI/CD pipeline using the AWS Serverless Application Model (SAM), GitHub, and CircleCI.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/@sbrisals/serverless-is-for-everyone-188e3f1b9600?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Serverless is for Everyone!</a><br />
Another excellent read by Sheen Brisals that debunks a few common misconceptions about serverless, explains why adoption faces challenges from ingrained thinking, and offers a list of resources to help you get started on your serverless journey.</p>
<p><a href="https://dev.to/fllstck/why-do-you-need-a-backend-475d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Why Do You Need a Backend?</a><br />
I have been fascinated lately with the possibilities of the Jamstack, and seeing what’s available to frontend developers. Kay Plößer has another good post that asks the question, and then answers, why you do (or don’t) need a backend for your applications.</p>
<p><a href="https://serverlessfirst.com/serverless-adoption-initial-survey-results/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Serverless Adoption Survey — The numbers so far</a><br />
Paul Swail started a research project into the gains and pains development teams encounter when adopting serverless in AWS. He’s got some interesting preliminary numbers to share with you.</p>
<p><a href="https://medium.com/@shams.mosowi/how-to-write-less-code-in-your-serverless-application-with-declarative-cloud-functions-45fa7b2667d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">How to write less code in your serverless application with declarative cloud functions</a><br />
Never mind functions calling functions, what about functions creating functions? Shams Mosowi illustrates a pattern that uses generator functions to enforce consistent data flows. It’s an interesting approach, but as he points out, there are some drawbacks.</p>
<h3>Podcasts and Videos… ?</h3>
<p><a href="https://www.serverlesschats.com/54/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Serverless Chats – Episode #54: Coordinating Cloud Engineers and Serverless Developers with Joe Duffy</a><br />
In this episode, I chat with Joe Duffy about the biggest challenges for teams working in the cloud, how infrastructure-as-code (IaC) helps teams collaborate better, the distinction between serverless developers and cloud engineers, and a lot more. <a href="https://www.youtube.com/watch?v=MYOGfK9PHM8&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://www.youtube.com/watch?v=YjKXhCJOxQ0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Observability and Monitoring in Serverless Applications</a><br />
Marcia Villalba is joined by Danilo Poccia to discuss the new launches and functionality in Amazon CloudWatch and how you can use them observing serverless applications.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amplify-console-supports-deploying-and-hosting-web-apps-managed-in-monorepos/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">AWS Amplify Console now supports deploying and hosting web apps managed in monorepos</a><br />
I was just looking for this a week or two ago, so they must have heard me. ? This is an awesome feature that allows you to specify a subdirectory in your repo and it will only detect and kick off builds if changes are made to that directory.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/introducing-aws-solutions-constructs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Introducing AWS Solutions Constructs</a><br />
If you are building with the AWS CDK, things just got easier. There are over 20 pre-built, multi-service architecture patterns that allow you to quickly assemble well-architected applications. <a href="https://aws.amazon.com/blogs/aws/aws-solutions-constructs-a-library-of-architecture-patterns-for-the-aws-cdk/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Read more here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-polly-launches-a-child-us-english-ntts-voice/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Amazon Polly launches a child US English NTTS Voice</a><br />
Probably strange if you have a ten year old’s voice read you the latest technical blog post, but could be a great feature for applications that are geared towards children.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/introducing-multi-region-application-architecture/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Introducing Multi-Region Application Architecture</a><br />
More AWS Solutions to help you build better applications. This solution leverages Amazon Simple Storage Service (Amazon S3) Cross-Region replication and Amazon DynamoDB Global Tables to asynchronously replicate application data between the primary and secondary AWS Region.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-sqs-provides-results-for-list-queues-list-dead-letter-queues-requests-multiple-pages/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Amazon SQS now provides results for the “List Queues” and “List Dead Letter Source Queues” requests in multiple pages</a><br />
Probably not the most exciting announcement, but if you have a complex system with lots of queues and DLQs, having paginated access to them through an API can be very useful.</p>
<p><a href="https://aws.amazon.com/blogs/aws/introducing-aws-snowcone-small-lightweight-edge-storage-and-processing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Introducing AWS Snowcone – A Small, Lightweight, Rugged, Secure Edge Computing, Edge Storage, and Data Transfer Device</a><br />
This thing is pretty cool. I don’t have any immediate uses for it, but I can see some really good use cases, especially if you need to get massive amounts of data in and out of the cloud.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-aurora-global-database-supports-read-replica-write-forwarding/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Amazon Aurora Global Database supports read replica write forwarding</a><br />
If you’re still using RDBMS over DynamoDB and want to utilize global replications, Aurora Global Database is a good option. With this latest update, you can now simplify your application code and simply direct writes to the local region’s cluster. It will automatically forward the write requests back to the primary region.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-ses-can-now-send-notifications-when-the-delivery-of-an-email-is-delayed/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Amazon SES can now send notifications when the delivery of an email is delayed</a><br />
This is a cool feature, especially if your application has strict time requirements for email delivery. This would make it possible to use a secondary contact method if a valid email address has temporary issues.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-api-gateway-allows-subprotocols-on-websocket-api-connection/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Amazon API Gateway allows subprotocols on a WebSocket API connection</a><br />
I remember this being a big problem if you didn’t necessary control the client, so now having support for subprotocols is a nice add-on.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/new-on-coursera-digital-course-on-building-amazon-dynamodb-friendly-apps/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">New on Coursera: Digital course on building Amazon DynamoDB-friendly apps</a><br />
If you’re looking to level up your DynamoDB game, this looks like a good course to check out. It says you can register for free, but there’s also something about paying for a certificate. Probably worth looking into.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://github.com/lambci/cmda?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">cmda</a><br />
cmda (think: commander) is a CLI tool by Michael Hart that can execute remote commands, including uploading local files/directories, to an AWS Lambda function. Along with EFS for Lambda, this makes it an easy tool to move files to/from an EFS file system that you might use with your other Lambda functions.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>June 24, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Fireside-Chat_2020_FC_e06-SRV.html" target="_blank" rel="noopener">Serverless Security Strategies: Under the Hood</a> (AWS Fireside Chat)</p>
<p><strong>June 26, 2020 –</strong> <a href="https://aws-serverless-community-day.splashthat.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Serverless Community Day</a></p>
<p><strong>July 6, 2020 –</strong> <a href="https://homeschool.dev/class/serverless-for-frontend-devs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2395" target="_blank" rel="noopener">Serverless for Frontend Developers</a> (Course)</p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Dr. Denis Bauer</strong> (<a href="https://twitter.com/allPowerde" target="_blank" rel="noopener">@allPowerde</a>). Denis is the Group Lead at Commonwealth Scientific and Industrial Research Organisation (CSIRO) and she’s been doing some pretty amazing things with serverless. As an internationally-recognized expert in machine learning, Denis leads the team at CSIRO in using AWS infrastructure to process genomic data to unlock secrets in human DNA, and using serverless architecture to build a web service that identifies the optimal genome engineering sites. She has developed an open-source, AI-based cloud service that accelerates disease research. Thank you, Denis, for your research and work, and contribution to both science and technology! ?</p>
<h3>Final Thoughts ?</h3>
<p>I’m really excited about this new EFS integration with Lambda. I’ve run a few experiments and had similar results to others in regards to performance. And even though we’re not getting mounted drive speeds, it is still fast enough to process most background tasks that require large file access patterns. It might not be perfect yet, but the ability to have shared access to a massive file system directly from your Lambda function is pretty darn amazing. If you build anything really cool with it, please let me know.</p>
<p>I hope you enjoyed this newsletter. We’re always looking for ideas and feedback to make it better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Take Care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-95/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-95/</guid>
      <pubDate>Tue, 23 Jun 2020 21:37:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #94]]></title>
      <description><![CDATA[<h1>A Year of Serverless Chats… ?</h1>
<p>Welcome to <strong>Issue #94</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-93/">Last week</a>, we got a new serverless headless CMS, learned about the next generation of the LAMP stack, and asked, “Do you really need Kubernetes?” This week, we find out why now is the time to go serverless, learn how to build our own Chaos Monkey, and celebrate a year of Serverless Chats. Plus, we have plenty of amazing posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/the-triggermesh-guide-what-every-cio-needs-to-know-about-serverless/?utm_source=offbynone&amp;utm_medium=newsletter&amp;utm_campaign=cio" target="_blank" rel="noopener">What Every CIO Needs to Know about Serverless</a><br />
This TriggerMesh guide includes feature comparisons of major offerings and an introduction to foundational concepts like cloud native and microservices. Please check it out! We hope it can help inform your peers and managers on serverless benefits and available options. Sponsored</p>
<p><a href="https://finance.yahoo.com/news/check-point-software-launches-cloudguard-100010127.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Check Point Software Launches CloudGuard Cloud Native Security, Delivering Complete Protection for Any Cloud and Workload</a><br />
Check Point (who acquired our friends at Protego a while back), has launched their new security platform. The Protego platform was very cool, so I have a feeling this will incorporate the best parts of it.</p>
<p><a href="https://epsagon.com/blog/epsagon-achieves-aws-container-competency-status/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Epsagon Achieves AWS Container Competency Status</a><br />
Congrats to the team over at Epsagon for achieving this. I’ve always been a big fan of what Epsagon does, so whether you’re serverless, container-based, or running on VMs, Epsagon’s got your covered.</p>
<p><a href="https://medium.com/@jpollock_77405/want-to-contribute-to-an-upcoming-book-e2c52ed5e308?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Want To Contribute To An Upcoming Book?</a><br />
If you’d like to share your knowledge of the cloud and get published at the same time, O’Reilly Media is looking for essays on a number of topics. I’m looking forward to reading this once it comes out.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://blog.garrettvargas.com/posts/what-you-need-to-know-to-build-a-serverless-communication-system?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">What you need to know to build a serverless communication system</a><br />
Garrett Vargas explains how his company built a serverless email system that handles the often overlooked concept of idempotency. He also provides some code snippets to help you implement this for yourself.</p>
<p><a href="https://sharpend.io/recreational-programming-with-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Recreational Programming with Serverless</a><br />
Mathias Lafeldt repurposed his AWS Community Talk into an excellent blog post that (a) is critical of Kubernetes, and (b) points out why serverless is such a useful tool for building in the cloud without distraction.</p>
<p><a href="https://medium.com/thron-tech/real-time-thumbnail-generation-in-a-mostly-serverless-aws-architecture-667c10e177b0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Real-time Thumbnail Generation in a (mostly) Serverless AWS Architecture</a><br />
Excellent writeup by Luca Tiozzo that recounts how they built their thumbnail generation tool and the improvements and upgrades made over the years. One of the very cool features he mentions is auto-cropping using subject faces to determine the crop position. This is a common technique, and actually quite easy to implement with some of the built-in cloud services.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://epsagon.com/try-free/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL&amp;utm_term={keyword}&amp;utm_device={device}" target="_blank" rel="noopener">Automated end-to-end observability for microservice environments</a><br />
Epsagon enables full-depth observability of complex serverless and containerized architectures, delivering the automation needed to instantly identify, troubleshoot, and resolve issues before they affect production. Try free today. Sponsored</p>
<p><a href="https://blog.bassemdy.com/2020/06/08/aws/architecture/microservices/patterns/aws-step-functions-think-again.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Planning on using AWS Step Functions? Think again</a><br />
Bassem Dghaidi outlines a few use cases for AWS Step Functions and gives you the pros and cons of each. I really like Step Functions, but as Bassem points out, knowing <em>when</em> to use them is more important than the <em>how</em>.</p>
<p><a href="https://dev.to/memories2digital/automatically-creating-contacts-deals-in-hubspot-using-netlify-functions-4af8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Automatically creating contacts &amp; deals in Hubspot using Netlify Functions</a><br />
Besides using serverless to handle simple backend workflows (like calling the HubSpot API), integrating it as part of your mostly static sites is just an all around perfect use case.</p>
<p><a href="https://towardsdatascience.com/searching-the-clouds-for-serverless-gpu-597b34c59d55?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Searching the Clouds for Serverless GPU</a><br />
Jorrit Sandbrink built a side project that needs TensorFlow and GPUs to run efficiently, but after some research, realized that this is still one of those use cases that serverless isn’t great at addressing.</p>
<p><a href="https://medium.com/@vamjakkula/start-stop-aws-ec2-instances-using-aws-iot-button-aws-lambda-5f5628efc0f7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Start/Stop AWS-EC2 Instances using AWS IoT Button &amp; AWS Lambda</a><br />
I love this use case! Sure, maybe shutting down an EC2 instance isn’t the best use of an IoT Button, but just the fact that you can do it is pretty great.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://aws.amazon.com/blogs/compute/building-well-architected-serverless-applications-approaching-application-lifecycle-management-part-1/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Building well-architected serverless applications: Approaching application lifecycle management – part 1</a><br />
Julian Wood continues his series on using the Serverless Lens of the Well-Architected framework to build using best practices. In this post, he shows you how to approach application lifecycle management using infrastructure as code and stages to isolate environments.</p>
<p><a href="https://medium.com/swlh/structuring-serverless-projects-2a9a82f7732d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Structuring Serverless Projects</a><br />
Nick Holbrook has a good post on how to structure Serverless Framework projects. I think his approach (at least for monorepos) has become widely adopted, so for smaller projects, this is a good starting point. I’ve become a big fan of putting function configuration YAML files right next to the function code. This makes merging and code reviews much easier.</p>
<p><a href="https://dev.to/fllstck/cloudflare-workers-kv-introduction-1oo?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Cloudflare Workers KV Introduction</a><br />
Kay Plößer has a follow up post that provides a helpful introduction to Cloudflare Workers KV. Lots of detail in here including some code to help you get started.</p>
<p><a href="https://medium.com/@jgcmarins/node-js-serverless-aws-lambda-function-how-to-cache-mongodb-connection-and-reuse-it-between-6ec2fea0f465?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Node.js Serverless AWS Lambda Function: How to cache MongoDB connection and reuse it between function calls?</a><br />
If you’re still using MongoDB in your serverless applications, then this post by João Marins will give you the details on how to manage your connections from Lambda functions.</p>
<p><a href="https://medium.com/@firstlineoutsourcing/migrating-serverless-architecture-from-aws-to-gcp-345d4068c60?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Migrating Serverless Architecture from AWS to GCP</a><br />
Interesting post by Andrey Zaikin that explains the process for migrating a serverless app from AWS to GCP. There is a lot of complexity when doing this, but I’m still guessing it takes less time than building an app that’s “cloud agnostic”. I also think the likelihood of needing to move is going to be very small.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://homeschool.quadernoapp.com/checkout/link/c6f9a54424b61e5a8f0f5fa1afec1a525829d488/?coupon=OFFBYNONE_JUNE" target="_blank" rel="noopener">COURSE: Testing Serverless Apps using Hexagonal Architecture in 2 weeks</a> ?‍?<br />
Testing serverless apps isn’t as difficult as you might think. Over 2 weeks, learn which approach to take, how to prepare your app for testing, and how to write tests without sacrificing speed or agility. Taught by AWS Serverless Heroes Slobodan Stojanović and Aleksandar Simovic, on the Homeschool by Senzo platform. <a href="https://homeschool.quadernoapp.com/checkout/link/c6f9a54424b61e5a8f0f5fa1afec1a525829d488/?coupon=OFFBYNONE_JUNE" target="_blank" rel="noopener">Register now and get 10% off</a>  Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/compute/introducing-the-serverless-lamp-stack-part-2-relational-databases/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Introducing the serverless LAMP stack – part 2 relational databases</a><br />
Benjamin Smith goes deeper into the new (L)ambda (A)PI Gateway (M)ySQL (P)HP stack with a run down on how to deploy your PHP Lambda functions with VPC access and how to use RDS Proxy to mitigate connection exhaustion issues.</p>
<p><a href="https://medium.com/warpjs/8-simple-steps-to-add-a-serverless-back-end-to-a-vue-js-project-bc7a3803f3f6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">8 simple steps to add a serverless back end to a Vue.js project</a><br />
I’ve never actually used WarpJS, but this post from Dominique Péré shows you how simple it is for front-end developers to easily publish serverless functions.</p>
<p><a href="https://aws.amazon.com/blogs/compute/building-a-location-based-scalable-serverless-web-app-part-2/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Building a location-based, scalable, serverless web app – Part 2</a> &amp; <a href="https://aws.amazon.com/blogs/compute/building-a-location-based-scalable-serverless-web-app-part-3/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Part 3</a><br />
In parts 2 and 3 of James Beswick’s series, he explains the API Gateway setup, geohashing implementation, backend processing, and data aggregation. This is an excellent series for anyone looking for a comprehensive tutorial for building serverless applications.</p>
<p><a href="https://medium.com/@adhorn/creating-your-own-chaos-monkey-with-aws-systems-manager-automation-6ad2b06acf20?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Creating your own Chaos Monkey with AWS Systems Manager Automation</a><br />
I truly appreciate all the work that Adrian Hornsby has done in the chaos engineering space, and this new post is a great primer (and tutorial) that will show you how chaos engineering can be applied to your organization to help build more resilient systems.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.forbes.com/sites/forbestechcouncil/2020/06/10/why-now-is-the-time-to-go-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Why Now Is The Time To Go Serverless</a><br />
Great post by Romi Stein that points out a number of reasons why companies shouldn’t be waiting any longer to adopt serverless. One of the great points he makes has to do with rapidly changing customer behavior. We live in a world where everything from memes to new apps can become global in minutes. 99.999% of the time, designing and provisioning systems for that is completely pointless. But with serverless (if done right), it’s not a choice that needs to be made.</p>
<p><a href="https://www.forbes.com/sites/forbestechcouncil/2020/06/15/its-the-end-of-infrastructure-as-a-service-as-we-know-it-heres-whats-next/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">It’s The End Of Infrastructure-As-A-Service As We Know It: Here’s What’s Next</a><br />
Another helpful (and accurate) piece from the Forbes Technology Council on serverless and cloud computing. Lots of good points in this article, and probably a good one to forward to your stubborn manager. ?</p>
<p><a href="https://www.cbronline.com/emerging-technology/guide-to-serverless-computing-gartner/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">The CTO’s Guide to Serverless Computing</a><br />
Then there are articles like this. I think most of the information and advice is sound, but recommendations like “CTOs should focus on ‘greenfield’ use cases for serverless functions” are just plain wrong. My recommendation would be that CTOs focus on reducing operational complexity and work on migrating components that require too much undifferentiated heaving lifting from your teams.</p>
<p><a href="https://www.verdict.co.uk/cloud-computing-technology-trends/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Cloud Computing: Technology Trends</a><br />
Here’s a random article that I came across that summarizes some of the current trends in cloud computing. Not a ton of surprises here, but there seems to be strong support for serverless (to reduce DevOps overhead), interest in edge computing, and a renewed interest in microservices with serverless at the forefront.</p>
<p><a href="https://www.infoq.com/news/2020/06/oreilly-cloud-report/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">New Report Shows “Overwhelming” Cloud Usage</a><br />
We covered the Cloud Adoption in 2020 report a few weeks ago, but this analysis made the point that “a surprising number of respondents expressed little interest in [the serverless] paradigm.” I’m really curious why that is.</p>
<p><a href="https://blog.thundra.io/will-aws-managed-cassandra-replace-dynamodb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Will Amazon Managed Apache Cassandra Service Replace DynamoDB?</a><br />
Interesting perspective from Serkan Özal here about why Managed Cassandra is better than DynamoDB. I’m not sure I’m in that camp, but I’d be happy to hear your perspective.</p>
<p><a href="https://medium.com/lambda-lego/the-compounding-returns-of-serverless-feba5b89b17f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">The compounding returns of Serverless</a><br />
Even though this post by Brian Foody is short, it says a heckuva lot. Serverless applications might not be completely “set it and forget it”, but my experience and perspective is similar to his. Solving the same problems gets us nowhere, but being able to focus mostly on customer value (even if it’s just by a team of one), will always be a winning strategy.</p>
<h3>Videos, podcasts, and more… ?</h3>
<p><a href="https://www.serverlesschats.com/53/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Serverless Chats – Episode #53: A Year of Serverless Chats</a><br />
In this special episode, we look back at the first year of Serverless Chats. Thank you to all my guests and to all of you for listening! We have some exciting new announcements coming soon, so stay tuned.</p>
<p><a href="https://www.lastweekinaws.com/podcast/screaming-in-the-cloud/dynamodb-the-database-of-choice-for-serverless-applications-with-alex-debrie/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">DynamoDB The Database of Choice for Serverless Applications with Alex DeBrie</a><br />
Alex DeBrie joins Corey Quinn on the latest episode of Screaming in the Cloud to discuss why he wrote his book, what to thinking about when trying to scale your data in the cloud, and a whole lot more.</p>
<p><a href="https://www.youtube.com/watch?v=E-AiWnqHfXY?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">How to Design Serverless Event-Driven Applications (with the help of Amazon EventBridge)</a><br />
In this video, James Beswick joins Marcia Villalba to discuss how to design serverless event-driven applications using Amazon EventBridge.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-cloudfront-enables-configurable-origin-connection-attempts-and-origin-connection-timeouts/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Amazon CloudFront enables configurable origin connection attempts and origin connection timeouts</a><br />
This is a hugely important feature that gives you more control over origin failover with CloudFront. You can now configure the number of connection attempts, the connection timeout, and the origin response timeout.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/alexa-business-available-lifesize-icon-meeting-room-systems/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Alexa for Business now available on Lifesize Icon meeting room systems</a><br />
So maybe not a highly relevant announcement for most of us, but I’m a big believer that voice interfaces are going to become widely adopted for business applications. I did an entire <a href="https://www.serverlesschats.com/31/" target="_blank" rel="noopener">Serverless Chats</a> episode on this, because serverless plays a big part.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/improve-productivity-interactive-sql-tools-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Improve productivity with interactive SQL tools in Amazon Elasticsearch Service</a><br />
I’ll say this again, if we could only make this serverless! I don’t know if you’ve ever written queries for Elasticsearch, but it is always a painstaking adventure. Looking forward to trying this out.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/updated-digital-course-architecting-serverless-solutions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Updated digital course: Architecting Serverless Solutions</a><br />
This free course has now added hands-on learning with optional labs where you can learn how to build a serverless application as well as how to deal with failure management, performance testing, auditing, and updating applications without downtime.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/aws-shield-advanced-now-supports-proactive-event-response/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">AWS Shield Advanced now supports proactive response to events</a><br />
Probably not something your average start up is going to use (or be able to afford), but this new service actually makes a lot of sense for critical workloads.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/introducing-aws-codeartifact-a-fully-managed-software-artifact-repository-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Introducing AWS CodeArtifact: A fully managed software artifact repository service</a><br />
This is a very cool new service from AWS. Managing and maintaining code artifacts is a pain, but this new service gives you a ton of great features for auditing, securing, and managing your packages. <a href="https://aws.amazon.com/blogs/aws/software-package-management-with-aws-codeartifact/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">Read more here</a>.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://github.com/condense9/teal-lang?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">The Teal Programming Language</a><br />
Run stateful Python business logic on AWS Lambda without managing infrastructure. According to the documentation, it’s like Step Functions, “but is cheaper (pay only for the Lambda invocations and process data), and way easier to program and test.” ?‍♂️</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/swyx/status/1271046193619992576?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">TIL that all of HN runs on a *single* machine with one backup – As much as you’ll see me comment about serverless, you will never see me put down serverful development. it is still super early days and the tooling and metalanguage needed is still in flux.</a> <strong>~ Shawn Wang</strong><br />
I liked this post by Shawn because it’s important to remember that one-size almost never fits all. I think (once you become comfortable with the paradigm) that serverless can add a tremendous amount of operational efficiency to companies large and small, but it’s not a silver bullet (yet).</p>
<p><a href="https://twitter.com/mthenw/status/1272549552265072640?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2394" target="_blank" rel="noopener">An interesting consequence of the “serverless is expensive” myth is that engineers are more eager to calculate the cost of app/service that they plan to build. And in most cases (of course, depending on the scale), they are surprised how cheap it is.</a> <strong>~ Maciej Winnicki</strong><br />
Good points in this thread by Maciej. There are comments about the cost of NAT Gateways being something that disproportionately affect your costs, which is why I try to avoid VPCs for Lambdas that need outbound Internet access.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>June 22, 2020 –</strong> <a href="https://homeschool.quadernoapp.com/checkout/link/c6f9a54424b61e5a8f0f5fa1afec1a525829d488/?coupon=OFFBYNONE_JUNE" target="_blank" rel="noopener">Testing Serverless Apps using Hexagonal Architecture</a> (Course)</p>
<p><strong>June 24, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Fireside-Chat_2020_FC_e06-SRV.html" target="_blank" rel="noopener">Serverless Security Strategies: Under the Hood</a> (AWS Fireside Chat)</p>
<p><strong>June 26, 2020 –</strong> <a href="https://aws-serverless-community-day.splashthat.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Serverless Community Day</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Murali Allada</strong> (<a href="https://twitter.com/amuralis" target="_blank" rel="noopener">@amuralis</a>). Murali is a Consultant who helps his clients build serverless applications, as well as critical infrastructure and platforms in the cloud. Murali was previously a Principal Software Engineer at Ixia where he worked on their CloudLens platform, which was designed using a completely serverless architecture. Prior to these roles, Murali worked on open source software at Rackspace and cloud-based platforms at Microsoft. He’s also written pieces on serverless, DynamoDB, and AWS. Thank you, Murali, for being a part of this serverless movement! ?</p>
<h3>Final Thoughts ?</h3>
<p>If you’re still looking for ways to support the <a href="https://blacklivesmatter.com/" target="_blank" rel="noopener">Black Lives Matter</a> movement, AWS Serverless Hero coordinator (and amazing human being), <a href="https://twitter.com/beccaodelay" target="_blank" rel="noopener">Rebecca Marshburn</a>, is currently accepting donations from non-Amazonians and applying them to Amazon’s Matching policy for organizations that support Black equity. If you’d like to have your donations’ impact doubled, you can Venmo her at <a href="https://venmo.com/code?user_id=1504789665939456221" target="_blank" rel="noopener">Rebecca-Marshburn-1</a> and include your email address in the notes section. She’ll email you a receipt of your donation’s match! Get your donation in before July 6th!</p>
<p>We’re always looking for ideas and feedback to make the newsletter better and more inclusive, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Until next week,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-94/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-94/</guid>
      <pubDate>Tue, 16 Jun 2020 22:34:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #93]]></title>
      <description><![CDATA[<h1>The new Serverless LAMP Stack… ?</h1>
<p>Welcome to <strong>Issue #93</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-92/">Last week</a>, we met new serverless heroes, Step Functions got some attention, and GCP jumped on the Java train. This week, we get a new headless (and serverless) CMS, we learn why LAMP is nixing Linux and Apache, and ask the age old question, “Do you really need Kubernetes?” Plus, we have some awesome posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/webinar-how-to-use-knative-to-build-event-driven-application-flows/?utm_source=newsletter&amp;utm_medium=offbynone&amp;utm_campaign=knative_webinar" target="_blank" rel="noopener">Webinar: How to Use Knative to Build Event-Driven Application Flows</a><br />
Join Sebastien Goasguen, TriggerMesh co-founder, Kubeless creator, and author of the Kubernetes Cookbook for a live webinar on June 11. Sebastien will demo how the Knative API and TriggerMesh let you trigger functions on any cloud with a single mechanism and cap your EventBridge costs. <a href="https://triggermesh.com/webinar-how-to-use-knative-to-build-event-driven-application-flows/?utm_source=newsletter&amp;utm_medium=offbynone&amp;utm_campaign=knative_webinar" target="_blank" rel="noopener">Learn more and register here</a>. Sponsored</p>
<p><a href="https://blog.webiny.com/launching-serverless-headless-cms-by-webiny-bf4607e46a61?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Launching Serverless Headless CMS by Webiny</a><br />
I’ve been waiting for this to come out for awhile, and now Sven Al Hamad and his team at Webiny have finally released the first, completely serverless, headless CMS. Very cool stuff.</p>
<p><a href="https://serverless.com/blog/serverless-azure-functions-v2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Serverless Azure Functions V2 – Linux, Python &amp; .NET Core Support</a><br />
The official v2 release of the Serverless Azure Functions plugin for the Serverless Framework is here. This version includes some new features that’ll simplify your development experience and enable you to do more with Azure Functions.</p>
<p><a href="https://swift.org/blog/aws-lambda-runtime/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Introducing Swift AWS Lambda Runtime</a><br />
This is quite interesting for all you Swift developers out there. Now you can extend your skills to the cloud with the new Swift AWS Lambda Runtime.</p>
<p><a href="https://www.bell-labs.com/knix/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">KNIX</a><br />
Nokia Bell Labs have released a new serverless platform that runs on Knative, virtual machines, or bare metal and is compatible with AWS Lambda and Step Functions. I haven’t had a chance to dig in to this yet, but it looks really interesting.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@danodev/my-first-foray-into-serverless-with-aws-3d7ff9df8460?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">My First Foray into Serverless with AWS</a><br />
I like reading articles that recount the thought process and challenges faced when building a serverless application. I think articles like this are important for product managers to understand where the rough edges are, and find better ways to bring more people into the fold.</p>
<p><a href="https://medium.com/@gcornwell/event-driven-architectures-with-eventbridge-719819e39ede?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Event Driven Architectures With EventBridge</a><br />
Gavin Cornwell has a short follow up to his previous article about using Step Functions to automate customer trials. He highlights some of the main benefits of using event-driven architectures and explains the success he’s had with this approach and the flexibility it provides his team.</p>
<p><a href="https://medium.com/99xtechnology/how-we-helped-norways-number-one-travel-curator-boost-its-sales-by-60-with-aws-2560f7e2be24?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">How we helped Norway’s number one travel curator boost its sales by 60% with AWS</a><br />
There are a lot of stories like this out there, and if you have one, please share it with me. Serverless is enabling lots of development companies to build high-value solutions much faster. Plus, the overhead of maintaining them is significantly lower as well.</p>
<p><a href="https://medium.com/lambda-lego/poor-aws-architectural-choices-we-all-make-them-70db8829483b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Poor AWS Architectural choices</a><br />
Brian Foody says he made a bad choice when choosing Sydney as the central region for his global serverless infrastructure. But thanks to serverless and IaC, it was a simple fix.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@nabiel.omair/programmatically-schedule-tasks-using-aws-cloudwatch-and-lambdas-serverless-a370a0d4159a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Programmatically Schedule Tasks using AWS CloudWatch and Lambdas Serverless</a><br />
Here’s an article by Omair Nabiel that shows you how to implement a serverless crontab (one of the most useful serverless use cases, even if the rest of your stack isn’t serverless), using the AWS SDK.</p>
<p><a href="https://medium.com/@mszwu/why-serverless-architecture-will-be-the-future-of-business-computing-e99279cb298a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Why Serverless Architecture Will Be The Future Of Business Computing?</a><br />
Here’s a good article by Adem Zeina that gives a good overview of serverless, the main platforms, and the types of use case for it. I’m not sure it answers why it will be the future of business computing, but it’s easy enough to infer.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://aws.amazon.com/blogs/compute/introducing-the-new-serverless-lamp-stack/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Introducing the new Serverless LAMP stack</a><br />
I don’t use PHP anymore, but when I switched from PERL/CGI in the late 90s to the LAMP stack, it became my default until the early 2010s, and it served me very well. Most of the web was built on PHP, and it still remains incredibly popular. But now, PHP developers no longer need to worry as much about the underlying infrastructure, the just need to replace the “LA” in LAMP with “Lambda” and “API Gateway”.</p>
<p><a href="https://dev.to/fllstck/cloudflare-workers-introduction-14mo?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Cloudflare Workers Introduction</a><br />
Kay Plößer, along with his sweet mohawk, wrote a really helpful intro to Cloudflare Workers, including how they’re different than Lambda, what you can use them for, and even provided a sample application.</p>
<p><a href="https://medium.com/php-fad/going-serverless-with-php-f5a67cb3d67b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Going serverless with PHP</a><br />
Another post that talks about the current state of PHP in serverless as well as the authors perceived pros and cons of a serverless approach.</p>
<p><a href="https://dashbird.io/blog/cost-efficient-ways-to-run-dynamodb-tables/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Cost-Efficient Ways to Run DynamoDB Tables</a><br />
Renato Byrro gives you some options for cutting costs with DynamoDB if your On-Demand workloads start to get expensive (like 7x more expensive than provisioned). I’m a big fan of the load leveling with a queue approach, for multiple reasons.</p>
<p><a href="https://dashbird.io/blog/ultimate-guide-to-serverless-monitoring-platforms/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">The Ultimate Guide to Serverless Monitoring Platforms</a><br />
This is a helpful chart from the team at Dashbird that compares the most popular serverless observability tools. It is well done, and objective, and I love the spirit behind this line, “They are all amazing services with outstanding teams behind them and we’re proud to be in this market alongside them.”</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://epsagon.com/try-free/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL&amp;utm_term={keyword}&amp;utm_device={device}" target="_blank" rel="noopener">Automated end-to-end observability for microservice environments</a><br />
Epsagon enables full-depth observability of complex serverless and containerized architectures, delivering the automation needed to instantly identify, troubleshoot, and resolve issues before they affect production. Try free today. Sponsored</p>
<p><a href="https://medium.com/@sachin.gill07/aws-cdk-devops-for-developers-9fdbc50cc08f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">AWS CDK: DevOps for developers</a><br />
Sachin Gill gives you an introduction into the AWS CDK along with an example to deploy a sample applications.</p>
<p><a href="https://medium.com/better-programming/set-up-your-serverless-project-with-typescript-ready-to-deploy-to-aws-6cfd7b2e5263?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Set Up Your Serverless Project With TypeScript, Ready to Deploy to AWS</a><br />
Sébastien Poyer has an excellent tutorial that walks you through a boilerplate set up for a serverless project with TypeScript. This includes everything you need for webpack configs, linting, AWS credential setup, and deployment.</p>
<p><a href="https://dev.to/fampinheiro/consider-dynamodb-for-your-next-project-4h82?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Consider DynamoDB for your next project</a><br />
Filipe Pinheiro has an excellent post that shows you how to model a simple application using a single DynamoDB table. Lots of good strategies in here and some good explanations that will help beginners and advanced users alike.</p>
<p><a href="https://dev.to/lambdastore/hacker-news-with-serverless-stack-1llf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Hacker News with Serverless Stack</a><br />
This is a good tutorial (and savvy marketing) that shows you how to build a Hacker News clone using AWS API Gateway and Lambda with Lambda.Store as the database.</p>
<p><a href="https://medium.com/@PhilipAndrews/how-to-create-an-aws-sqs-queue-with-serverless-2a538fe2413a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">How To Create An AWS SQS Queue With Serverless</a><br />
Quick and simple tutorial by Phil Andrews. He has some other posts like this as well, which assumes basic knowledge of a topic and just gets right to the point. I like that style and I hope he does more of them.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://blog.scalesec.com/security-best-practices-for-serverless-applications-on-aws-6484e634a643?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Security Best Practices for Serverless Applications on AWS</a><br />
Anthony DiMarco has some recommendations for securing your serverless applications within the AWS ecosystem. The advice in here is straightforward and practical, and will help you add another layer of protection to an already highly secure environment.</p>
<p><a href="https://www.crn.com.au/news/12-biggest-cloud-threats-and-vulnerabilities-in-2020-549025?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">12 Biggest Cloud Threats And Vulnerabilities In 2020</a><br />
This article makes a few good points, but the one I’ve been thinking about more lately is how willingly people are copying templates from others without taking the time to understand exactly what they do. Cloudformation and other DSLs can get complex very quickly, and perhaps cloud providers need to address the need for all these shortcuts in the first place.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://blog.thundra.io/do-you-really-need-kubernetes?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Do you really need Kubernetes?</a><br />
I’ve got nothing against Kubernetes (okay, maybe a little), but Emrah Samdam does a great job of explaining the differences between Kubernetes and alternative approaches for a couple of popular use cases. In the end, Kubernetes might be the right choice for your organization, but it’s worth examining that choice before you commit to the endeavor.</p>
<p><a href="https://medium.com/better-programming/3-reasons-why-you-should-consider-going-serverless-c2b8f25e966d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">3 Reasons Why You Should Consider Going Serverless</a><br />
Dmytro Khmelenko had a short, but very popular article that calls out the three most fundamental serverless services in the AWS arsenal that satisfy a lot of use cases.</p>
<p><a href="https://www.informit.com/articles/article.aspx?p=3006828?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Blockchain is the Ultimate Serverless Platform</a><br />
Interesting thought process by Michael Juntao Yuan here. I would agree that distributed computing through blockchains could be useful, but Ethereum is painfully slow and the complexity of those “functions” is very minimal. Perhaps the improvements with WebAssembly might make a difference, but until the performance comes anywhere close to FaaS, blockchain will likely not be part of the conversation.</p>
<p><a href="https://serverlessfirst.com/debiasing-software-architecture-decisions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Debiasing your software architecture decisions</a><br />
This is an interesting topic covered by Paul Swail. I often find myself defaulting to technical choices that I perceive as “easy” because that is the way I’m comfortable with doing them, even if a small bit of learning would help me understand potentially better ways to achieve something. I’ve been investing a lot of time in learning lately, and it can actually be refreshing to realize how much you <em>don’t</em> know.</p>
<h3>For the commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/52/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Episode #52: The Past, Present, and Future of Serverless with Tim Wagner</a><br />
In this episode, I chat with Tim Wagner about the history behind AWS Lambda, why the stateless versus stateful debate rages on, how to use serverless as a supercomputer, what innovations are still needed, and so much more. <a href="https://www.youtube.com/watch?v=M6I0ay5R884&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://medium.com/@timpackwood/code-examples-from-sessions-at-aws-re-invent-2019-8827233c8c72?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Code examples from sessions at AWS re:invent 2019</a><br />
Tim Packwood compiled a list of some AWS re:Invent sessions (remember in-person conferences?) along with links to their accompanying code samples. There are a few good serverless ones in here.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/announcing-cross-cluster-search-support-for-amazon-elisticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Announcing Cross-Cluster Search support for Amazon Elasticsearch Service</a><br />
While I’d still like to see a serverless alternative, this is a pretty cool feature. If you have multiple ES clusters because you’re managing different workloads (like search index versus analytics), now you can keep these clusters separate, but search across them and aggregate the results.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-redshift-now-supports-writing-to-external-tables-in-amazon-s3/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Amazon Redshift now supports writing to external tables in Amazon S3</a><br />
Lots of workloads are running on Redshift, so being able to export (and append to) external tables is a powerful feature for integrating more serverless tools like Athena on top of it.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/cloudwatch-application-insights-supports-mysql-amazon-dynamodb-custom-logs-more/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">CloudWatch Application Insights now supports MySQL, Amazon DynamoDB, custom logs, and more</a><br />
Now you can configure monitors for DynamoDB on CloudWatch and detect common errors such as slow queries, transaction conflicts, and replication latency.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/real-time-anomaly-detection-support-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Real-time anomaly detection support in Amazon Elasticsearch Service</a><br />
Amazon Elasticsearch Service now offers anomaly detection, which uses machine learning to detect anomalies on real-time streaming data and identifies issues as they evolve so you can mitigate them immediately. Interesting.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/06/tighten-s3-permissions-iam-users-roles-access-history-s3-actions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Tighten S3 permissions for your IAM users and roles using access history of S3 actions</a><br />
This is a nice new feature: “This granular access information helps you analyze access, identify unused S3 actions, and remove them confidently.”</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://github.com/dforsber/s3-selectable?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">s3-selectable – S3 Select over a Glue Table</a><br />
Here’s an interesting tool if you need to use S3 select over Glue tables that can point to hundreds of different S3 Objects in separate Hive Partitions and Hive Buckets. Very cool stuff.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/brianleroux/status/1270054520387559426?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2393" target="_blank" rel="noopener">Deno moving internals away from TypeScript is an interesting read. Internal advocates finding Ry isn’t convinced by the marketing lines in actual practice.</a> <strong>~ Brian Leroux</strong><br />
Great thread by Brian Leroux here that talks about the issues Deno is having with implementing TypeScript natively. There seems to be lots of problems that might just not be worth the effort.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>June 10, 2020 –</strong> <a href="https://www.meetup.com/Stockholm-Serverless/events/270963666/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Nordic Serverless – Serverless Developer Experience</a></p>
<p><strong>June 10 &amp; 11, 2020 –</strong> <a href="https://awsamplifydays.splashthat.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Virtual Amplify Days</a></p>
<p><strong>June 11, 2020 –</strong> <a href="https://triggermesh.com/webinar-how-to-use-knative-to-build-event-driven-application-flows/?utm_source=newsletter&amp;utm_medium=offbynone&amp;utm_campaign=knative_webinar" target="_blank" rel="noopener">How to Use Knative to Build Event-Driven Application Flows</a></p>
<p><strong>June 26, 2020 –</strong> <a href="https://aws-serverless-community-day.splashthat.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Serverless Community Day</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Zamira Jaupaj</strong> (<a href="https://twitter.com/zamirajaupaj" target="_blank" rel="noopener">@zamirajaupaj</a>). Zamira is a Solution Architect at Mobiquity, leading the cloud platform team, as well as guiding customers on their journey to the cloud with enterprise solutions, and helping them modernize their infrastructure, applications, and processes. She’s a recent AWS Community Hero, the founder of AWS Meetup Albania and co-organizer of AWS Meetup Netherlands. She also regularly speaks at technical conferences and authors tech blogs, sharing best practices about serverless, containers and AWS. Thank you Zamira for being a part of our community! ?</p>
<h3>Final Thoughts ?</h3>
<p>Several weeks ago, I started dedicating time each week to learning new, or deepening my understanding of, tools and concepts in the web and cloud development space. The events of the last two weeks have dramatically changed my syllabus, and I (like hopefully most of us) have been spending a lot of time educating myself on topics of racial injustice, policing policies, and the systemic problems that face the United States.</p>
<p>I’ve always tried to be ally, and whenever I witnessed discrimination (especially against women) in the workplace, I stood up to use whatever privilege I had to “help” the person affected. But I realized that I can’t just be an ally that steps in when injustice is right in my face. I need to be an advocate. I need to use whatever platform I have to not only talk about needed change, but to actually affect it.</p>
<p>We can all help by <a href="https://blacklivesmatter.com/partners/" target="_blank" rel="noopener">donating</a> to the cause. That’s a good first step, but it’s only a first step, and more needs to be done. I’m working with some others to figure out ways to better serve a more diverse audience and to help create a welcoming and inclusive culture within the serverless and tech communities. Additional ideas and feedback are invited and appreciated, so please feel free to reach out to me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Cheers,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-93/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-93/</guid>
      <pubDate>Tue, 09 Jun 2020 21:56:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #92]]></title>
      <description><![CDATA[<p><em>I know that this week has weighed heavily on all of us. I grappled with how to start off this newsletter and share this week’s content given that recent events are deserving of our attention. The goal of this newsletter has always been to share content with the serverless community, and I still intend on doing that this week. But I can’t do that without addressing what’s been going on in our communities across the United States.</em></p>
<p><em>There are no words to explain how saddened and sickened I am by the tragic events that have occurred during the past week. I’m not sure my voice carries much weight, or adds anything meaningful to the national conversation, but I do want to echo an important message that must be repeated over and over until it becomes a fundamental truth in American society: <strong>#BlackLivesMatter</strong>.</em></p>
<hr /><h1>More Use Cases for Step Functions…</h1>
<p>Welcome to <strong>Issue #92</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-91/">Last week</a>, we saw how a “typical” serverless architecture sparked some strong opinions about serverless complexity. This week, we meet some new serverless heroes, Step Functions get more attention, and GCP jumps on the Java train. Plus, we have lots of great posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/webinar-how-to-use-knative-to-build-event-driven-application-flows/?utm_source=newsletter&amp;utm_medium=offbynone&amp;utm_campaign=knative_webinar" target="_blank" rel="noopener">Webinar: How to Use Knative to Build Event-Driven Application Flows</a><br />
Join Sebastien Goasguen, TriggerMesh co-founder, Kubeless creator, and author of the Kubernetes Cookbook for a live webinar on June 11. Sebastien will demo how the Knative API and TriggerMesh let you trigger functions on any cloud with a single mechanism and cap your EventBridge costs. <a href="https://triggermesh.com/webinar-how-to-use-knative-to-build-event-driven-application-flows/?utm_source=newsletter&amp;utm_medium=offbynone&amp;utm_campaign=knative_webinar" target="_blank" rel="noopener">Learn more and register here</a>. Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/aws/introducing-the-latest-aws-heroes-may-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Introducing the latest AWS Heroes – May, 2020</a><br />
Congratulations and welcome to all the new AWS Heroes including serverless heroes Kyuhyun Byun and Serkan Özal!</p>
<p><a href="https://serverlessfirst.com/serverless-adoption-pains-survey/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Understanding the pains of building serverless applications</a><br />
Paul Swail is running a serverless adoption survey, and he’d like you to participate. It’s a very short survey, so it shouldn’t take you more than a few minutes.</p>
<p><a href="https://cloud.google.com/blog/products/application-development/introducing-java-11-on-google-cloud-functions?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Introducing Java 11 on Google Cloud Functions</a><br />
Google Cloud Functions now supports Java, so you can now write Cloud Functions using your favorite JVM languages (Java, Kotlin, Groovy, Scala, etc) with their Functions Framework for Java, and also with Spring Cloud Functions and Micronaut.</p>
<p><a href="https://serverless.com/blog/serverless-express-apis-aws-lambda-http-api?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Serverless Express – Easy APIs On AWS Lambda &amp; AWS HTTP API</a><br />
This uses the new Serverless Components and configuring it requires about 5 lines of YAML. I’m a big fan of these higher levels of abstraction that incorporate sane defaults and best practices for you. Also, the development feedback loop is screaming fast.</p>
<p><a href="https://acloud.guru/cloud-playground?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">ACG Cloud Playground</a><br />
Get your hands cloudy with A Cloud Guru’s new Cloud Playground. This is really cool. Set up environments on the major cloud providers and break stuff to your heart’s content, without affecting any of your own environments.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://dev.to/luminousmen/how-to-start-your-blog-for-20-cents-3j48?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">How to start your blog for 20 cents</a><br />
I found this post to be interesting because it makes the case for serverless, but is also sprinkled with misleading information about use cases and some potentially bad options for accessing and saving state. I appreciate authors writing these posts, but I don’t know if these do more harm then good.</p>
<p><a href="https://www.html5videobank.com/how-we-got-5m-dollars-of-it-infrastructure-for-next-to-nothing.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">HTML5VideoBank — How We Got $5M of IT Infrastructure For Next to Nothing</a><br />
Akeel Din points out the infrastructure cost differences from what would have been a traditional system years ago to the cost of doing it now using FaaS.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@jan.groth.de/10-recommendations-for-writing-pragmatic-aws-lambdas-in-python-5f4b038caafe?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">10 Recommendations for writing pragmatic AWS Lambdas in Python</a><br />
Jan Groth outlines a collection of design patterns and best practices to implement AWS Lambdas in Python. Lots of good stuff in here about DevOps use cases.</p>
<p><a href="https://medium.com/@sohit_kumar/etl-with-step-function-100-000-files-under-30-e9bc20952876?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Serverless ETL using AWS Step Function -100,000 files under $30</a><br />
Sohit Kumar points out a great use case for serverless, running ETL tasks. In his scenario, they have a bit of complexity, so Step Functions work really well in this situation. I’m wondering if they could get the cost down using Express Workflows?</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://www.keithrozario.com/2020/04/logging-within-lambda-functions.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Logging within AWS Lambda Functions (python edition)</a><br />
Everything you’ve ever wanted to know about logging in Lambda functions written in python (and perhaps even some things you didn’t) by Keith Rozario.</p>
<p><a href="https://www.serverlessops.io/blog/hello-serverless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Hello Serverless</a><br />
Tom McLaughlin has an excellent 5 part series that is meant to be a primer for individuals or teams building their first serverless application. This series addresses the common conceptual and tactical questions that occur during the serverless development and operational lifecycle.</p>
<p><a href="https://levelup.gitconnected.com/stupid-simple-kubernetes-e509355fba3d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Stupid Simple Kubernetes</a><br />
I think Czako Zoltan got at least two words right in his article title ?, but for those that really want to get a better understanding of Kubernetes, this article will give you a good overview.</p>
<p><a href="https://dashbird.io/blog/aws-api-gateway-vs-application-load-balancer/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">AWS API Gateway vs. Application Load Balancer (ALB)</a><br />
Renato Byrro gives you a breakdown of the differences between API Gateway and Application Load Balancers. There are some use cases that could make ALBs a better choice, but the majority most likely fall to API Gateway.</p>
<p><a href="https://blog.thundra.io/caching-with-aws-serverless-applications?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Caching with AWS Serverless Applications</a><br />
Serkan Özal has a great post that shows you different levels of caching within AWS serverless applications and when and how to use them.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/@hussain94aa/serverless-breaking-a-large-serverless-yml-into-manageable-chunks-89fc909937c7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Serverless: Breaking a large serverless.yml into manageable chunks</a><br />
Hussain Ali Akbar has a quick tip for helping to maintain some sanity when building larger serverless projects with the Serverless Framework. This is a handy trick for when you have multiple people working on different functions in the same project, as each function configuration can be updated independently.</p>
<p><a href="https://medium.com/dev-jam/serverless-simple-crud-application-in-10-minutes-on-aws-69e022298e80?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Serverless: Simple CRUD Application in 10 minutes on AWS</a><br />
Roberto Frontado has an excellent tutorial that shows you how to build a serverless TODO application using TypeScript, AWS Lambda, and DynamoDB.</p>
<p><a href="https://levelup.gitconnected.com/how-to-use-typescript-for-aws-lambda-in-3-steps-1996243547eb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">How to Use TypeScript for AWS Lambda in 3 Steps</a><br />
Zijing Zhao shows you how to compile your TypeScript and deploy it to AWS Lambda. TypeScript has a lot of great features, and if you’ve never used it, this simple guide will show you how easy it is to start benefiting from it in your serverless applications.</p>
<p><a href="https://aws.amazon.com/blogs/compute/simplifying-application-orchestration-with-aws-step-functions-and-aws-sam/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Simplifying application orchestration with AWS Step Functions and AWS SAM</a><br />
Another really well done tutorial by Rob Sutter that shows you how to use the newly added AWS Step Functions support in AWS SAM.</p>
<p><a href="https://aws.amazon.com/blogs/compute/building-a-location-based-scalable-serverless-web-app-part-1/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Building a location-based, scalable, serverless web app – part 1</a><br />
James Beswick is knocking it out of the park with these serverless application tutorials he’s been writing, and this one is no exception. Lots of detailed explanations, code references, and years of experience wrapped up in a nice package for you.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://pages.awscloud.com/AWS-Virtual-Workshop_2020_VW_s05-SRV.html" target="_blank" rel="noopener">Innovator Island: A free, hands-on, virtual serverless workshop with AWS expert James Beswick</a><br />
Innovator Island debuted as a hands-on workshop at re:Invent last year. This year, the AWS Serverless team is bringing it to you in virtual format, totally free. Sign up to join AWS Serverless expert James Beswick for an hour a day, June 8 – June 12, to build a complete serverless web application using AWS Amplify, AWS Lambda, AWS SAM, AWS IoT Core, Amazon EventBridge, and more. You’ll get hands-on instruction and have access to all sorts of help from AWS experts. Sponsored</p>
<p><a href="https://medium.com/lego-engineering/challenging-the-status-quo-serverless-casserole-part-2-312e0586b2bf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Challenging the Status Quo! Serverless Casserole — Part 2</a><br />
I always enjoy reading Sheen Brisals’ posts, and in this one he lays out an excellent rationale for why his team started adopting Lambda Destinations for both the failure and success modes of asynchronous invocations. (And thanks for the mention ?)</p>
<p><a href="https://thejaysmith.com/titles/blogroll/serverless-eventing-why-you-need-an-eventing-bus/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Serverless Eventing: Why You Need an Event Bus!</a><br />
Jay Smith makes the case for using event buses in your serverless microservice communications. There are a lot of options in this space (as he points out), but he actually missed Amazon EventBridge, which should be your default choice in AWS.</p>
<p><a href="https://www.netlify.com/blog/2020/05/27/state-of-the-jamstack-survey-2020-first-results/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">State of the Jamstack Survey 2020: First results</a><br />
If you’re building serverless applications and you’re not thinking about the Jamstack, you might need to do some rethinking. This study probably tells most of us what we already knew, but seeing 11ty making a strong showing for SSGs is really interesting.</p>
<p><a href="https://siliconangle.com/2020/05/29/shelves-are-well-stocked-with-cloud-native-tools-but-simplicity-remains-a-moving-target-dockercon/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Shelves are well-stocked with cloud-native tools, but simplicity remains a moving target</a><br />
Interesting discussion here. We have a ton of cloud-native tools available to us, but there is a lot of overlap that is making the adoption process harder.</p>
<h3>Serverless Podcasts and Videos ?</h3>
<p><a href="https://www.serverlesschats.com/51?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Serverless Chats – Episode #51: Globally Resilient Architectures with Adrian Hornsby</a><br />
In this episode, I chat with Adrian Hornsby about why you need to embrace failure at scale, how to avoiding cascading failures, when to cache for resiliency, and much more. <a href="https://www.youtube.com/watch?v=6o2owe2VHMo&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://www.youtube.com/watch?v=MS5pzddwwqU&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Using a custom runtime with AWS Lambda (example with Deno the new JS framework)</a><br />
Deno as a custom runtime with first-class support for TypeScript? What could be better? Marcia Villalba walks you through connecting an existing Deno Lambda Layer and shows you how to run a TypeScript file directly in Lambda.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/aws-sam-adds-support-for-aws-step-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">AWS SAM adds support for AWS Step Functions</a><br />
This is awesome, and the implementation is really well done. AWS Step Functions are not that complicated to implement, but integrating them with deployment frameworks has always been over-complicated. First class support from SAM was much needed.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/announcing-general-availability-amplify-ios-android-authentication-data-ai-ml-support/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Announcing General Availability of Amplify iOS and Amplify Android, with new authentication, data, and AI/ML support</a><br />
The Amplify team keeps making it easier and easier to build full-featured serverless applications, and now with the iOS and Android libraries, building native apps should be much simpler as well. <a href="https://aws.amazon.com/blogs/aws/new-aws-amplify-libraries-for-android-and-ios/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">More info here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-rds-proxy-preview-now-available-in-8-additional-aws-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Amazon RDS Proxy (Preview) Now Available in 8 Additional AWS Regions</a><br />
I really like what RDS Proxy is trying to solve, but it’s still not a silver bullet, and it doesn’t work with Aurora Serverless. However, for those that didn’t realize the Lambda/RDBMS problem when they created their apps, this can be a nice bandaid.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/aws-fargate-now-encrypts-data-stored-on-ephemeral-storage-by-default-in-platform-version-1-4/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">AWS Fargate now encrypts data stored on ephemeral storage by default in platform version 1.4</a><br />
This is a great security improvement, even if the likelihood of this data being exposed was low in the first place.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-rds-data-api-and-query-editor-available-additional-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Amazon RDS Data API and Amazon RDS Query Editor are available in additional regions</a><br />
I’m a huge fan of the Data API, mostly because it doesn’t require your Lambda functions to be in a VPC to use it. It might not be the best choice for all synchronous workflows, but for async, it was a game changer for me.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/codepipeline-supports-invoking-step-functions-with-a-new-action-type/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">CodePipeline supports invoking Step Functions with a new action type</a><br />
This is another awesome feature. Imagine being able to coordinate multiple processes (like schema changes, DNS routing updates, multi-region deployments) and then having the ability to rollback the entire thing if there are errors? Well, now you totally can!</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://syncedreview.com/2020/05/27/new-latex-css-library-enables-websites-to-look-like-latex-docs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">New LaTeX.CSS Library Enables Websites to Look Like LaTeX Docs</a><br />
Nothing to do with serverless, but totally worth mentioning. This almost class-less CSS library turns your HTML document into a website that looks like a LATEX document. Very cool stuff.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/theburningmonk/status/1267444521710882817?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">I have spent quite a bit of time with AppSync on a few projects, and it’s really grown on me, big time. So much of what’s difficult with API GW comes out-of-the-box. Here are 5 things that really stood out.</a> <strong>~ Yan Cui</strong><br />
Excellent thread by Yan Cui about his experience adopting AppSync and what about it makes it so advantageous to API Gateway. There are a lot of good points in here that has me itching to start thinking more seriously about it. I’ve been stuck in REST land for too long.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>June 3, 2020 –</strong> <a href="https://us02web.zoom.us/webinar/register/9615905201172/WN_9i2_whs0RhqiGyZG2dijbA?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Mastering AWS Organizations with Infrastructure-As-Code</a></p>
<p><strong>June 4, 2020 –</strong> <a href="https://milan.serverlessdays.io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">ServerlessDays Milan (Virtual)</a></p>
<p><strong>June 4, 2020 –</strong> <a href="https://twitter.com/edjgeek/status/1266103079667003392?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Sessions With SAM – The Step Functions Edition</a></p>
<p><strong>June 9, 2020 –</strong> <a href="https://www.thundra.io/webinars/the-state-of-serverless-in-2020?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">The State of Serverless in 2020</a></p>
<p><strong>June 10, 2020 –</strong> <a href="https://www.meetup.com/Stockholm-Serverless/events/270963666/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2392" target="_blank" rel="noopener">Nordic Serverless – Serverless Developer Experience</a></p>
<p><strong>June 10 &amp; 11, 2020 –</strong> <a href="https://awsamplifydays.splashthat.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Virtual Amplify Days</a></p>
<p><strong>June 11, 2020 –</strong> <a href="https://triggermesh.com/webinar-how-to-use-knative-to-build-event-driven-application-flows/?utm_source=newsletter&amp;utm_medium=offbynone&amp;utm_campaign=knative_webinar" target="_blank" rel="noopener">How to Use Knative to Build Event-Driven Application Flows</a></p>
<p><strong>June 26, 2020 –</strong> <a href="https://aws-serverless-community-day.splashthat.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Serverless Community Day</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Takahiro Horike</strong> (<a href="https://twitter.com/horike37" target="_blank" rel="noopener">@horike37</a>). Takahiro is the CEO of Serverless Operations, Inc., which offers consulting and development services to help its customers design, develop, and maintain serverless applications. Takahiro is also a core contributor to the Serverless Framework, and creator of the <a href="https://github.com/serverless-operations/serverless-step-functions" target="_blank" rel="noopener">Serverless Step functions</a> and <a href="https://github.com/serverless-operations/serverless-apigateway-service-proxy" target="_blank" rel="noopener">API Gateway Service Proxy</a> plugins. His passion for serverless is a central fixture in all of his projects. Thank you for helping make serverless more accessible, Takahiro! ?</p>
<h3>Final Thoughts ?</h3>
<p>If you think there’s anything I can do to make this newsletter more inclusive, to add more voices, and to do what we can as a serverless community to bring about systemic change, please let me know. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a>.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-92/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-92/</guid>
      <pubDate>Tue, 02 Jun 2020 21:24:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Takeaways from Programming AWS Lambda by Mike Roberts and John Chapin]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2020/05/programming-aws-lambda-1200x675.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/05/programming-aws-lambda.jpg 1200w, https://www.jeremydaly.com/wp-content/uploads/2020/05/programming-aws-lambda-300x169.jpg 300w, https://www.jeremydaly.com/wp-content/uploads/2020/05/programming-aws-lambda-768x432.jpg 768w, https://www.jeremydaly.com/wp-content/uploads/2020/05/programming-aws-lambda-1024x576.jpg 1024w" /></div>
<p>Recently, <a href="http://www.symphonia.io" target="_blank" rel="noopener">Symphonia</a> co-founders <a href="https://twitter.com/mikebroberts" target="_blank" rel="noopener">Mike Roberts</a> and <a href="https://twitter.com/johnchapin" target="_blank" rel="noopener">John Chapin</a> wrote a book called <a href="http://shop.oreilly.com/product/0636920178101.do" target="_blank" rel="noopener">Programming AWS Lambda: Build and Deploy Serverless Applications with Java</a>. I personally abandoned Java long ago, but I knew full well that anything written by Mike and John was sure to be great. So despite the title (and my past war stories of working with Java), I picked up the book and gave it a read. I discovered that it’s not really a book about Java, but a book about building serverless applications with the <em>examples</em> in Java. Sure, there are a few very Java specific things (which every Java developer probably needs to read), but overall, this book offers some great insight into serverless from two experts in the field.</p>
<p>I had the chance to catch up with Mike on a recent <a href="https://www.serverlesschats.com/47" target="_blank" rel="noopener">episode of Serverless Chats</a>. We discussed the book, how John and Mike got started with serverless (by building Java Lambda functions, of course), and what are some of the best practices people need to think about when building serverless applications. It was a great conversation (which you can watch/listen to here), but it was also jam packed with information, so I thought I’d highlight some of the important takeaways.</p>
<h3>Testing</h3>
<p>The book offers extensive insight on testing serverless applications, and it takes a really strong stance against using local mocking libraries. Plain and simple, Mike and John think that local mocking libraries are a bad idea. Using those libraries for building local tests can be great for experimentation, but once you rely on those, then you have created more complex testing setups. If you are calling an API, it is likely just returning JSON. Instead of using a library, simulate that JSON statically, test against it, and then you know the response is always the same and it isn’t going to change because of some update to localstack or some other local mocking library.</p>
<p>Mike also says that engineers have to wear two hats when writing software built for longevity: the experimentation hat (“how does this fit into the software I’m building?”), and the “built-to-last software” hat. They’re two very different modes of thinking, and you have to write your tests with the production code in mind. Mike thinks that many people fall into the trap of doing some experimentation and then writing some code without switching those gears.</p>
<p>Integration tests are also important with serverless applications, given the different connectivity pieces and services communicating with each other. But it’s also possible to simulate complex workflows locally using functional tests. In most cases, we just need to know: “If this Lambda function receives this event, does it do what it’s supposed to do?” That is relatively easy with functional tests, which is testing how a bigger part of the application responds to the system around it without actually running the entire system around it. The most important takeaway is to design and build your applications so that they can be easily tested.</p>
<h3>Mythbusting Cold Starts</h3>
<p>Mike shared a case where a client of his was writing Lambda functions in Java, and they were extremely concerned about cold starts. However, when they put it into production, everything was fine – something Mike observes happening pretty regularly. He says cold starts have the reputation for being scary because when you’re in development with Lambda, every time you run your new Lambda function, you see a cold start. But really, they’re just not as much of a problem as they used to be, especially now that Amazon has fixed the VPC issue.</p>
<p>Another thing we discuss is that the vast majority of our Lambda functions now run asynchronously, so the user isn’t waiting on a response. In these cases, cold starts generally don’t matter at all. Although the cold starts in Java are certainly higher than Node or Python, once a Java function is initialized, it’s much faster than many of the alternative runtimes. If you’re running high volume data processing, this faster performance could end up saving you a lot of money. Mike also added that if all you’ve ever used Lambda for is synchronous APIs, then you’re missing about 95% of what Lambda is about.</p>
<h3>The Caveats around Provisioned Concurrency</h3>
<p>As much as Mike has tried to convince people that cold starts aren’t a major problem, he still often hears the need for guaranteed latency. Even though he doesn’t think most people actually need it, he’s glad that AWS has provided the Provisioned Concurrency “escape hatch” so he can just point those people to that.</p>
<p>However, Mike admits it comes with some caveats, like it’s slow to deploy. For example, it took an extra 1.5-2 minutes to deploy a single provisioned concurrency Lambda function, and an extra four minutes to deploy a function set to 50. It’s also rather expensive. With Lambda functions, you only pay when they are used, but with provisioned concurrency, you’re always paying a flat fee plus execution time, so you have to be very aware of the economics. Finally, Mike says you need to make sure you don’t use the same provisioned concurrency settings in development as you do in production. When using a SAM template, for example, the difference between the development configuration of a Lambda function versus the production configuration is often precisely the same, aside from different environment variables.</p>
<p>Caveats aside, Mike finds this “escape hatch” to be incredibly helpful. There’s also the added benefit of using provisioned concurrency to pre-warm a pool of Lambda functions if you are anticipating a big traffic spike.</p>
<h3>When to use (or not use) Custom Runtimes</h3>
<p>Lambda comes with a number of standard Java runtimes, but AWS also gives users the ability to use any custom runtime they want. As a result, a number of people came along with specialized runtimes for different environments. Mike says you could write your own custom runtime to try and solve some of these cold starts issues.</p>
<p>If you’re a large organization, you might want to use your organization’s Java runtimes versus Amazon’s. Mike suggests that another option is using an alternative like <a href="https://www.graalvm.org/" target="_blank" rel="noopener">Graal</a>, which takes your Java code and produces something that doesn’t run in a regular JVM, which makes your startup times significantly faster.</p>
<p>Mike also points out that if you use your own custom runtime, then you also have to maintain it. Updates happen automatically with AWS’s standard Java runtimes, but with something custom, you’ll likely need to do some testing when the underlying environment is updated.</p>
<p>Also, if you’re trying to minimize all of that undifferentiated heavy lifting through serverless, you’re defeating the purpose by maintaining your own runtime. If you’re a big organization, this may make total sense because you can bake in security and other things you might want to do, but certainly for the average developer or company, it can be an overwhelming undertaking.</p>
<h3>The Spring Framework</h3>
<p>One of the things that’s very popular with Java, especially when it comes to building APIs, is the Spring framework. AWS has invested a significant amount of time and energy into the Serverless Java Container project, which makes it easy for you to write Java Spring Boot projects with Lambda. Mike and John make it very clear in the book that this is a bad idea.</p>
<p>Mike explains that Spring is based on the idea that you’d bring in a whole bunch of things and dependencies at the startup of an application, then that application would serve requests over the course of days or weeks. But, as Mike says, those assumptions just don’t make sense in a world of Lambda. Even if you take those assumptions out, there’s still a cost to running Spring, and those costs come at cold start time.</p>
<p>He adds that while Spring does a bunch of stuff at startup using reflection to dynamically load code, it still just doesn’t make sense. For Mike, he sees the real problem being that Java developers using Spring will get to a point where they’ll realize that Lambda wasn’t designed to support this type of implementation. He says that Java developers would be far more effective if they scratched Spring, and focused on the underlying function they’re trying to write.</p>
<h3>Multi-Module, Multi-Function Lambda Applications that Share Code</h3>
<p>Mike and John outline a really interesting solution to create multi-module, multi-function serverless Java applications. Mike offers a scenario: if you have 10 different types of requests, consider having 10 different Lambda functions. This way, each Lambda function can follow the principle of least privilege and only access the things it needs. Plus, you can reduce cold starts because you’re only loading up the code and the libraries that each Lambda function actually needs – and that makes a difference.</p>
<p>They show readers how Lambda functions can rely on external dependency libraries, but also on internal libraries that can be shared across functions. This can all be done using Maven. Maven has its drawbacks, plus it’s XML, but as far as Mike’s concerned, its semantics around modeling dependencies are far more advanced than any other main language on Lambda. If you want to model dependencies, he recommends using something like Maven.</p>
<h3>Gotchas</h3>
<p>Mike and John have a really great “gotchas” section in the book which is a must read for the  uninitiated. New serverless developers often get excited about everything they can do, and then all of a sudden hit a limitation that knocks the wind out of their sails. I think this is true with most cloud-native development, but Mike and John call out a few things specific to serverless.</p>
<p>Mike references at-least-once delivery as one of those things that can bite developers, especially those new to distributed systems. Amazon has gotten some flack here, which Mike considered warranted, as he thinks there should be a switch for this. Lambda generally guarantees that your function will be <em>called</em>. What they <em>don’t</em> guarantee is <strong>how many times</strong> it will be called. Almost every time it’s a one-to-one correspondence, but sometimes your Lambda function will be called more than once, which if not properly dealt with, could lead to nasty side effects like double billing a credit card.</p>
<p>Mike also discusses the impact of Lambda scaling on downstream systems, something I’m pretty passionate about (you might have heard me talk about this before). This is a big deal when building hybrid serverless, non-serverless systems. He uses the example of having a Lambda function in front of a SQL database. Mike says that one of the really awesome things about Lambda is that it will, by default, scale to 1,000 instances. On the flipside, one of the terrible things about Lambda when it’s connecting to a SQL database, is that it will automatically <em>scale to 1,000 instances</em>! If you’re not careful, that could take down your non-serverless infrastructure components.</p>
<p>The book also points out that serverless is a different way of architecting systems. When you look at Lambda code, it looks like the same code that we’ve been writing for years. But when you’re architecting for Lambda, you have to think differently. He thinks people don’t necessarily realize that. Because the code is easy, we’ve now shifted the mental effort from the code to architecture. Mike encourages everyone to be an architect and to learn about the architectural trade-offs that come when building distributed systems. I totally agree.</p>
<h3>Final Thoughts</h3>
<p>I admit I was skeptical because of the title, but this book covers many of the fundamental serverless concepts that developers really need to know. If you happen to be developing in Java, then that’s just a bonus. To listen to my conversation with Mike, check out our <a href="https://www.serverlesschats.com/47" target="_blank" rel="noopener">Serverless Chats episode</a>, or <a href="http://shop.oreilly.com/product/0636920178101.do" target="_blank" rel="noopener">click here</a> to purchase a copy of the book.</p>
<p>Listen to the episode:<br /><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/d82d5790/dark">[embedded content]</iframe></p>
<p>Watch the episode:</p>
<div class="iframe-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/16en-TTGNhk" frameborder="0" allowfullscreen="allowfullscreen">﻿</iframe></div>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws/" rel="tag">aws</a>, <a href="https://www.jeremydaly.com/tag/java/" rel="tag">java</a>, <a href="https://www.jeremydaly.com/tag/lambda/" rel="tag">lambda</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c3">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c2">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c1" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<div class="footer-info">? This post was originally published on May 27, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/takeaways-from-programming-aws-lambda-by-mike-roberts-and-john-chapin/</link>
      <guid>https://www.jeremydaly.com/takeaways-from-programming-aws-lambda-by-mike-roberts-and-john-chapin/</guid>
      <pubDate>Wed, 27 May 2020 20:16:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #91]]></title>
      <description><![CDATA[<h2>Thinking about serverless complexity… ?</h2>
<p>Welcome to <strong>Issue #91</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-90/">Last week</a>, we looked at a “typical” serverless architecture.  This week, we see how that “typical” serverless architecture sparked some strong opinions on both sides of the serverless complexity debate. Plus, we’ve got plenty of awesome posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/webinar-how-to-use-knative-to-build-event-driven-application-flows/?utm_source=newsletter&amp;utm_medium=offbynone&amp;utm_campaign=knative_webinar" target="_blank" rel="noopener">Webinar: How to Use Knative to Build Event-Driven Application Flows</a><br />
Join Sebastien Goasguen, TriggerMesh co-founder, creator of Kubeless, and author of the Kubernetes Cookbook for a live webinar on June 11. Sebastien will demo how to use the Knative API and TriggerMesh to simplify building event-driven applications with any on-premises and cloud service. <a href="https://triggermesh.com/webinar-how-to-use-knative-to-build-event-driven-application-flows/?utm_source=newsletter&amp;utm_medium=offbynone&amp;utm_campaign=knative_webinar" target="_blank" rel="noopener">Learn more and register here</a>. Sponsored</p>
<p><a href="https://www.infoq.com/news/2020/05/azure-static-web-apps-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Microsoft Introduces App Service Static Web Apps in Preview at Build 2020</a><br />
There were a lot of announcements at Microsoft Build last week, but this one is really interesting. The future of serverless will rely heavily on edge-optimized static assets, and Microsoft is building tools to take advantage of this.</p>
<p><a href="https://github.com/mhart/dynalite/releases/tag/v3.2.0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">v3.2.0 of dynalite released to support empty string and binary values</a><br />
I’ve been using dynalite over DynamoDB local lately for simulating integration tests, and I’m a big fan. And now it supports the new empty value feature.</p>
<p><a href="https://www.ecommercetimes.com/story/86675.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Microsoft Reimagines Azure</a><br />
Here’s another wrap up of Microsoft Build. There are some really interesting things happening with serverless over there, and the fact that they are adapting quickly to this new wave of modern application development is awesome. Also, Cosmos DB is getting a serverless makeover.</p>
<p><a href="https://epsagon.com/blog/announcing-epsagons-official-integration-with-pagerduty/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Announcing Epsagon’s Official Integration with PagerDuty</a><br />
I love seeing companies partner to create a better solution for customers. Epsagon monitoring coupled with PagerDuty alerts, does just that.</p>
<p><a href="https://www.prnewswire.com/il/news-releases/aqua-security-raises-30-million-in-series-d-funding-to-fuel-the-expansion-of-its-cloud-native-security-platform-301062087.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Aqua Security Raises $30 Million in Series D Funding to Fuel the Expansion of Its Cloud Native Security Platform</a><br />
More investment into the cloud native and serverless security space. According to the press release, Aqua has more than doubled revenue and headcount in the last 12 months and have expanding to more than 400 customers.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@arkadyt/3-things-i-wish-i-knew-about-aws-lambda-functions-early-on-4dbb2b176d8f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">3 Things I Wish I Knew About AWS Lambda Functions Early On</a><br />
Andrew Titenko points out a few gotchas that he found when working with Lambda functions. You do need to be careful of global variables, but they also come in really, really handy when used correctly.</p>
<p><a href="https://www.itnews.com.au/news/xinja-almost-abandoned-serverless-backend-built-for-apple-pay-548232?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Xinja almost abandoned serverless backend built for Apple Pay</a><br />
Great story about Xinja being able to launch Apple Pay capabilities in just six weeks using serverless and why it made achieving PCI DSS compliance even easier. There’s also a great example of serverless components getting better without your team needing to do anything.</p>
<p><a href="https://medium.com/swlh/how-aws-waf-saved-us-6dc21343f1f5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">How AWS WAF saved us</a><br />
Not specifically about serverless, but don’t forget, you can put AWS WAF in front of your API Gateways too. Riad Rifai tells the story of how AWS WAF helped mitigate a front-end bug, but of course, it’s applicable to many more situations.</p>
<p><a href="https://cloudirregular.substack.com/p/a-war-story-about-covid-cloud-and?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">A war story about COVID, cloud, and cost</a><br />
Forrest Brazeal says that cloud cost-cutting stories are boring, yet somehow he’s made this one totally worth the read.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@gcornwell/expiration-with-dynamodb-ttl-6cd5332a2d5c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Expiration With DynamoDB TTL</a><br />
Here’s a simple but powerful use case from Gavin Cornwell, using DynamoDB TTLs to trigger trial expirations on EC2 instances. The TTL feature isn’t as accurate as I’d like, but it works great for use cases like this.</p>
<p><a href="https://medium.com/@vikramshinde/config-service-using-google-sheet-6ac126b1c742?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Config Service using Google Sheet</a><br />
While there are plenty of other ways to store configuration data, you have to appreciate the simplicity of just using a Google Sheet.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/@nideveloper/let-me-help-you-build-serverless-well-architected-systems-with-proven-patterns-55504efec8d4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Let Me Help You Build Serverless Well-Architected Systems With Proven Patterns</a><br />
The <a href="https://cdkpatterns.com/" target="_blank" rel="noopener">cdkpatterns.com</a> site by Matt Coulter is an awesome resource for the serverless community. And now he’s added a feature that lets you find a pattern by a AWS Well-Architected Pillar! Great stuff.</p>
<p><a href="https://dashbird.io/blog/roadmap-to-backend-developer-on-serverless-infrastructures/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Roadmap to Backend Developer on Serverless Infrastructures</a><br />
Another helpful post by Renato Byrro that should get you asking the right questions as you start your journey as a serverless developer.</p>
<p><a href="https://blog.rowanudell.com/amplify-amplify-amplify/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Amplify, Amplify, and Amplify</a><br />
Are you confused by all the things that have the name “Amplify” associated with them? You’re not alone, and Rowan Udell is here to help explain. Amplify (in all its parts) is extremely powerful, so long as you understand which part you’re actually using. ?</p>
<p><a href="https://medium.com/@arkadyt/3-valuable-lessons-learned-about-aws-lambda-destinations-bc1004c94329?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">3 Valuable Lessons Learned About AWS Lambda Destinations</a><br />
Andrew Titenko provides a few quick tips for using Lambda Destinations. Also, +100 for adding asynchronous invocations to the AWS Lambda console “TEST” option.</p>
<p><a href="https://medium.com/@george.mao/developing-on-aws-lambda-part-3-some-tips-you-can-use-8407238195ad?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Developing on AWS Lambda (Part 3): Some tips you can use!</a><br />
Here are some more great AWS Lambda tips from George Mao. Lots of really useful information in here.</p>
<p><a href="https://blog.thundra.io/aws-lambda-limits-to-keep-in-mind-when-developing-a-serverless-application?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Lambda Limits to Keep in Mind When Developing a Serverless Application</a><br />
Emrah Samdan gives you some quick tips and tricks to avoid hitting different types of Lambda limits in your serverless apps.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://levelup.gitconnected.com/aws-cdk-for-beginners-e6c05ad91895?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS CDK for Beginners</a><br />
Rani Lian has a great tutorial that gives you some background on the why of AWS CDK, and then walks you through launching a quick “hello world” project to show you the how.</p>
<p><a href="https://medium.com/swlh/how-to-create-and-use-layer-for-python-aws-lambda-function-80bc6eefa331?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">How to Create and Use Layer for Python AWS Lambda Function</a><br />
Simple and straightforward Lambda Layer tutorial from Ashutosh Karna using Python.</p>
<p><a href="https://dev.to/dvddpl/reduce-lambda-invocations-and-code-boilerplate-by-adding-a-json-schema-validator-to-your-api-gateway-15af?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Reduce Lambda invocations and code boilerplate by adding a JSON Schema Validator to your API Gateway</a><br />
Davide de Paolis has a great tutorial that’ll show you how to mitigate Lambda invocations by using schema validation on API Gateway. It might add a bit more complexity, but using this for mature routes can be very cost effective.</p>
<p><a href="https://medium.com/swlh/cooking-serverless-with-aws-amplify-1555710677ca?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Cooking Serverless with AWS Amplify</a><br />
If you want to get started with AWS Amplify really quickly, this simple tutorial from Shehan Wisumperuma will get your first project up and running in no time.</p>
<p><a href="https://aws.amazon.com/blogs/compute/building-scalable-serverless-applications-with-amazon-s3-and-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Building scalable serverless applications with Amazon S3 and AWS Lambda</a><br />
Another incredibly helpful post from James Beswick that shows you how to build a serverless system that can quickly and reliably process S3 data with Lambda functions.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://www.zdnet.com/article/report-finds-cloud-it-complexity-creates-immutable-security-issues/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">DevSecOps report: Cloud IT complexity creates ‘immutable’ security issues</a><br />
Tying the idea of immutable infrastructures to security is an interesting take. This also reinforces the notion that cloud deployments create a lot of complexity that needs to be managed and audited by someone, especially around security.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://tlakomy.com/why-im-excited-about-serverless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Why I’m excited about serverless as a frontend engineer</a><br />
Tomasz Łakomy is definitely on to something. The idea of a full stack serverless developer is something we’re already starting to see, both through front-enders implementing serverless backends, to some seasoned backend devs moving down the stack. If you are a front-end engineer, start taking a look at things like Amplify, Vercel, and other platforms enabling this capability.</p>
<p><a href="https://medium.com/serverlessguru/a-day-in-the-life-of-a-serverless-developer-on-aws-cf620bd95463?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">A day in the life of a serverless developer on AWS</a><br />
Ryan Jones lays out some of the common tasks performed regularly by a serverless developer on AWS. I find that my work varies day to day, sometimes spending a day or two on IaC and experiments, then buckling down for a few days to work on implementation details, tests, and documentation. One thing is for sure, I spend <em>a lot</em> less time writing code.</p>
<p><a href="https://www.oreilly.com/radar/cloud-adoption-in-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Cloud Adoption in 2020</a><br />
Interesting data provided here by O’Reilly, especially the fact that “serverless” adoption is “stagnant” according to their numbers. In terms of complexity, the article poses this question: “Is it possible that the complexity of microservice architecture, serverless computing, service mesh architecture, and other next-generation patterns is contributing to (if not driving) interest in SRE?” Good question.</p>
<p><a href="https://medium.com/@chris_nagy/aws-kendra-is-the-google-to-all-of-your-organizations-knowledge-3f9c41e70c65?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Kendra is the Google to all of your organization’s knowledge</a><br />
I really love the idea of Kendra, and the power and efficiency that it could bring to <em>a lot</em> of businesses. Unfortunately, the $5,000/mth price tag probably prices out many of the companies that desperately need a technology like this. I’m sure it’s expensive to run, but it would be great to see this cost come down to make it more accessible.</p>
<h3>Podcasts, Videos, and Presentations…</h3>
<p><a href="http://serverlesschats.com/50?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Serverless Chats – Episode #50: Static First Using Serverless Front-ends with Guillermo Rauch</a><br />
In this episode, I chat with Guillermo Rauch about the difference between front-end and backend serverless, how we should think about and build for scale, why latency down to the first contentful paint is so important, and so much more. <a href="https://www.youtube.com/watch?v=iRNxV9vRg6o&amp;feature=share?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Watch on YouTube</a>!</p>
<p><a href="https://medium.com/google-cloud/freedom-bring-custom-binaries-and-runtimes-to-serverless-using-cloud-run-serverless-toolbox-d377bb31fbe5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Freedom! Bring custom binaries and runtimes to serverless using Cloud Run — Serverless Toolbox</a><br />
Got to love the Bret McGown/Martin Omander duo. On this episode of Serverless Toolbox, they take you through importing custom binaries and runtimes into your Cloud Run containers.</p>
<p><a href="https://siliconangle.com/2020/05/19/event-driven-apps-are-endgame-of-serverless-says-triggermesh-cubeconversations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">TriggerMesh’s new EveryBridge: Event-driven apps are the endgame of serverless</a><br />
Stu Miniman interviewed Mark Hinkle and Sebastien Goasguen from TriggerMesh to discuss their new EveryBridge product. I think most of us cloud natives don’t worry too much about legacy on-prem systems, but the fact that this aims to solve a missing piece for the vast majority of companies looking to bridge that gap, is pretty cool.</p>
<p><a href="https://www.youtube.com/watch?v=pSfKZRv3nhY&amp;feature=share?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Patterns and practices for building resilient Serverless applications</a><br />
Yan Cui gave a marathon session at the AWS User Group Delhi the other day, and it is chockfull of some amazing serverless know-how. It’s almost two hours long, but is worth the time. The slides are available too.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-dynamodb-local-adds-support-for-empty-values-for-non-key-string-and-binary-attributes-and-25-item-transactions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Amazon DynamoDB local adds support for empty values for non-key String and Binary attributes and 25-item transactions</a><br />
Amazon DynamoDB local has been updated to support the new empty values feature that was just released. Make sure to update to the latest version so you have parity with the actual cloud version.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/serverless-bot-framework-adds-remastered-user-interface-uses-aws-amplify/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Solutions: Serverless Bot Framework adds a remastered user interface and uses AWS Amplify</a><br />
The solution now makes use of User Pools to allow users to securely sign in to the chatbot with Amazon Cognito. The web interface is re-implemented using ReactJS and AWS Amplify and uses Amazon CloudFront to securely deliver application web assets from Amazon S3 to the user.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-transcribe-now-supports-vocabulary-filtering-for-real-time-transcription/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Amazon Transcribe now supports vocabulary filtering for real-time transcription</a><br />
This is a cool feature added to Amazon Transcribe. Being able to filter out words as well as mask or tag them during real-time transcription can be quite handy. I haven’t check in on the transcription quality lately, but all these new features might make me take another look.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/aws-global-accelerator-available-two-additional-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Global Accelerator is Now Available in Two Additional Regions</a><br />
I’m sure that the AWS Global Accelerator could get a bit expensive, but the latency compared to standard routing is incredible. If you have to home run some of your data calls, this is definitely something you should look at.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://www.npmjs.com/package/dynamodb-size?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">dynamodb-size</a><br />
Here’s an interesting tool from Chris Armstrong that will calculate the size of your DynamoDB payload. I can see this being useful in testing applications to help calculate costs.</p>
<p><a href="https://dutzi.party/cloud-local-storage-serverless-storage-solution/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">I Built a Simple Serverless Storage Solution</a><br />
Sometimes you need to scratch or own itch, and Eldad Bercovici did just that with his Cloud Local Storage project. There are lots of ways to implement something like this on your own (and likely a bunch of security requirements to think about as well), but you’ve got to love the level of abstraction.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/tucker_dev/status/1264949731861467146?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">“Can someone explain Serverless to me like I’m 5?”</a> <strong>~ James Tucker</strong><br />
This question by James Tucker triggered a series of hilarious explanations. Some of them are dead on.</p>
<p><a href="https://twitter.com/paulbiggar/status/1264257243911991305?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">“Crying at this typical Serverless infrastructure. wtf happened to the “simple” functions-as-a-service idea?”</a> <strong>~ Paul Biggar</strong><br />
Well, that escalated quickly! This post by Paul Biggar sparked a series of reactions about whether or not serverless is <em>more complex</em> than some other traditional architectures. Much of the complexity is abstracted away for you through reusable components, though I still believe a new type of configuration complexity now exists. But it’s still 1000% easier than the old way.</p>
<h3>Serverless Jobs ?‍? Sponsored</h3>
<p><a href="https://jobs.lever.co/stedi/424506cf-b090-4646-a9c9-d2c18aab167b?lever-origin=applied&amp;lever-source%5B%5D=off-by-none" target="_blank" rel="noopener"><strong>Serverless Engineer – stedi.com</strong></a><br />
At Stedi, we’re working in one of the biggest markets on the planet – EDI, the technological backbone of the physical product economy. We’re building a next-generation platform: a ubiquitous commercial trading network to automate the trillions of dollars in B2B transactions exchanged by nearly every company on Earth. If you’re interested in what we’re building and how we’re building it, we’d love to hear from you.</p>
<p><em>Have a job listing you’d like to share? Please <a href="mailto:contact@jeremydaly.com">contact</a> me for more information. </em></p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>May 27, 2020 –</strong> <a href="https://www.meetup.com/Serverless-London/events/270600915/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Serverless London May Meetup (Virtual)</a></p>
<p><strong>May 28, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-event-OE-serverless-first-function-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Serverless-First Function by AWS</a></p>
<p><strong>May 28, 2020 –</strong> <a href="https://register.gotowebinar.com/register/994713183352026638?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">Modernizing applications with serverless: Scale higher, ship faster, and reduce TCO up to 90%</a></p>
<p><strong>June 4, 2020 –</strong> <a href="https://milan.serverlessdays.io?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">ServerlessDays Milan (Virtual)</a></p>
<p><strong>June 9, 2020 –</strong> <a href="https://www.thundra.io/webinars/the-state-of-serverless-in-2020?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">The State of Serverless in 2020</a></p>
<p><strong>June 10 &amp; 11, 2020 –</strong> <a href="https://awsamplifydays.splashthat.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Virtual Amplify Days</a></p>
<p><strong>June 26, 2020 –</strong> <a href="https://aws-serverless-community-day.splashthat.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2391" target="_blank" rel="noopener">AWS Serverless Community Day</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Charity Majors</strong> (<a href="https://twitter.com/mipsytipsy" target="_blank" rel="noopener">@mipsytipsy</a>). Charity is the co-founder of <a href="https://www.honeycomb.io/" target="_blank" rel="noopener">Honeycomb</a>, a tool designed for engineers to debug platforms, microservices, and serverless apps, enabling collaborative problem solving. Prior to Honeycomb, Charity was a former systems engineer and manager at Facebook, Parse, and Linden Lab, and the co-author of Database Reliability Engineering. She’s spoken at several ServerlessDays conferences, and offers advice and writes about serverless (and the Tiger King ?) on her <a href="https://charity.wtf/" target="_blank" rel="noopener">personal website</a>. Thank you, Charity, for making the serverless world better and brighter with your contributions! ?</p>
<h3>Final Thoughts ?</h3>
<p>I find this whole serverless complexity debate to be quite fascinating. The point of serverless has always been (at least in my opinion) to reduce undifferentiated heavy-lifting, freeing up engineers to work on things unique to your business that add customer value. This certainly reduces some of the complexity, but also adds new complexity as we create more complex systems. Serverless is certainly <em>easier</em>, but that doesn’t mean it’s <em>easy</em>.</p>
<p>If any of you missed the <a href="https://pages.awscloud.com/GLOBAL-event-OE-serverless-first-function-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">AWS Serverless-First Function</a> last week, you should definitely check out the <a href="https://aws.amazon.com/blogs/aws/serverless-first-function-virtual-events/" target="_blank" rel="noopener">recap</a> and sign up for Day 2 on Thursday. I’ve watched a lot of presentations (especially virtual ones) and I really enjoyed the mix of content from the speakers and the witty banter between hosts Eric Johnson and Chris Munns. And… getting a shout out to my <a href="https://www.jeremydaly.com/serverless-microservice-patterns-for-aws/" target="_blank" rel="noopener">patterns post</a> from <a href="https://twitter.com/jeremy_daly/status/1263536719049129986" target="_blank" rel="noopener">Adrian Cockcroft</a> was pretty darn cool as well.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Until next week,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-91/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-91/</guid>
      <pubDate>Tue, 26 May 2020 21:45:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #90]]></title>
      <description><![CDATA[<h2>Is Serverless a Silver Bullet? ?</h2>
<p>Welcome to <strong>Issue #90</strong> of Off-by-none. Thanks for stopping by!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-89/">Last week</a>, we took a crash course on monitoring serverless apps, got a lesson in response times from <em>the</em> cloud architect, and learned a bit about serverless developer culture. This week, we see what a typical serverless architecture looks like, learn how to #SingleTable with AppSync, and take a quick trip to Deno Land.  Plus, we’ve got plenty of amazing posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://triggermesh.com/welcome-off-by-none-readers/?utm_source=paidnewsletter&amp;utm_medium=email&amp;utm_campaign=off_by_none" target="_blank" rel="noopener">TriggerMesh Cloud Native Integration Platform</a><br />
TriggerMesh provides a platform to trigger functions on any cloud or on-premises from virtually any source that can provide a message, including legacy applications and enterprise service buses. Use one platform for AWS Lambda, Google Cloud Functions, Azure Functions, Knative, or Kubernetes workloads. <a href="https://triggermesh.com/welcome-off-by-none-readers/?utm_source=paidnewsletter&amp;utm_medium=email&amp;utm_campaign=off_by_none" target="_blank" rel="noopener">Learn more and try for free</a>. Sponsored</p>
<p><a href="https://medium.com/lambda-store/lambda-store-developer-api-9b6e32c045fd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Lambda Store Developer API</a><br />
This is a really great feature that allows you to provision Lambda Store via an API. They are working on Infrastructure-as-Code support, which could be really handy as well.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@arnaud.charlier/is-serverless-with-lambda-the-silver-bullet-80c48d38a572?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Is Serverless with Lambda, the “silver bullet”?</a><br />
Arnaud Charlier tells the story of his company’s serverless journey and recounts the successes and failures they had along the way. Overall, it seems the experience was a relatively good one, despite that recursive Lambda function mistake ?. I think most of us can relate to that.</p>
<p><a href="https://medium.com/@dan_22184/serverless-content-management-system-for-websites-using-vue-js-ac7e10081d2f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Serverless Content Management System for Websites using Vue.js and AWS</a><br />
While building a content management system can be a daunting task, Dan Bartlett decided to do it anyway. The end result is a full-blown serverless CMS that’s available to you on GitHub.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@egctoru/create-kinesis-firehose-data-stream-from-iot-core-to-s3-using-serverless-framework-2af1d0b35500?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Create Kinesis Firehose Data Stream from IoT Core to S3 using Serverless framework</a><br />
I don’t do anything with IoT, but these use cases are everywhere nowadays. I’m a big fan of using Kinesis Data Firehose for capturing stream data like this and stuffing it into S3, so if your source is an IoT device, Toru Eguchi has got you covered.</p>
<p><a href="https://medium.com/altostra/automating-cross-account-role-creation-to-access-users-account-edc1c29c6a3e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Automating Cross-Account Role creation to access users’ account</a><br />
Here’s a great use case by Yossi Ittach, generating AWS roles and then persisting the information back to the partner account. More and more companies are building solutions that need some level of access to your AWS account, so automating this process with Lambda and SNS is pretty slick.</p>
<p><a href="https://medium.com/@jlaitio/a-basic-solution-to-shutting-down-aws-infrastructure-on-a-schedule-eef1dc9c2482?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">A Basic Solution to Shutting Down AWS Infrastructure on a Schedule</a><br />
This is one of my favorite serverless use cases, and Joonas Laitio gives you a sample script to easily schedule shutdowns and startups of ECS services, Auto Scaling Groups and RDS clusters.</p>
<p><a href="https://medium.com/@ritesh.modi/developing-a-serverless-solution-to-detect-people-without-masks-f33615059452?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Developing a Serverless solution to detect people without masks</a><br />
Here’s another interesting serverless use case, detecting those folks not wearing masks in public places. Ritesh Modi has a very in depth post about a system he creating using Azure to accomplish this.</p>
<p><a href="https://towardsdatascience.com/why-we-dont-use-lambda-for-serverless-machine-learning-d00038e1b242?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Why we don’t use Lambda for serverless machine learning</a><br />
This should fall under the “Not Serverless Use Cases” section. Sure, some ML workloads <em>can</em> run on Lambda, but I tend to agree with Caleb Kaiser on this one: “Lambda is fantastic – just not for ML.”</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://aws.amazon.com/blogs/compute/best-practices-for-organizing-larger-serverless-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Best practices for organizing larger serverless applications</a><br />
Great piece by James Beswick that lays out some simple rules for organizing your serverless applications. I’m not a fan of the repo-per-function approach, and there are plenty mono versus multi-repo arguments to be made, but overall, this is some excellent advice for teams building with serverless, especially those that want flexibility as they grow.</p>
<p><a href="https://medium.com/serverless-transformation/what-a-typical-100-serverless-architecture-looks-like-in-aws-40f252cd0ecb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">What a typical 100% Serverless Architecture looks like in AWS!</a><br />
Love this article by Xavier Lefèvre that shows a full-blown serverless architecture on AWS and explains how each section works. The more patterns like this are visible, the easier it is for others to understand how best to architect their systems.</p>
<p><a href="https://serverlessfirst.com/iac-linchpin/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Infrastructure-as-Code is the linchpin practice for successful serverless teams</a><br />
Paul Swail highlights the benefits and drawbacks of Infrastructure-as-Code, but ultimately points out its necessity for building robust and repeatable deployments in the cloud. Unfortunately, I think point and click is still a very popular option. ?‍♂️</p>
<p><a href="https://blog.begin.com/testing-in-deno-the-basics-943916d85224?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Testing in Deno: the basics</a><br />
Brian Leroux gives you a quick lesson on how to build tests in Deno, which just so happens to support testing as a first class citizen.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://www.goingserverless.com/blog/single-table-dynamodb-for-appsync?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">How to build an AppSync API using a single table DynamoDB design</a><br />
Awesome post by Rich Buggy that shows you how to build a generic single table DynamoDB solution for AWS AppSync. I think you all know by now that I’m on #TeamSingleTable, so seeing the possibilities with AppSync is very exciting.</p>
<p><a href="https://emshea.com/post/serverless-getting-started?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Getting started with serverless on AWS</a><br />
Emily Shea has compiled a list of resources and tutorials for common serverless use cases on AWS. With information overload everywhere, it’s very helpful to have guides like this that establish a learning path.</p>
<p><a href="https://aws.amazon.com/blogs/devops/deploying-a-serverless-application-using-aws-cdk/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Deploying a serverless application using AWS CDK</a><br />
For all you CDK fans out there, here is a complete tutorial by Georges Leschener and Luis Lopez Soria that shows you how to deploy a full serverless application including the provisioning of an Amazon Aurora Serverless cluster.</p>
<p><a href="https://mechanicalrock.github.io/2020/04/27/ensuring-resolvers-aren't-rejected.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Ensuring Resolvers Aren’t Rejected</a><br />
This is pretty cool. Rick Foxcroft shows you how to test your VTL templates so that you can speed up your feedback loop and have some more confidence when deploying to AppSync.</p>
<p><a href="https://medium.com/google-cloud/deno-on-cloud-run-89ae64d1664d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Deno on Cloud Run</a><br />
Deno is all the rage (and probably for good reason), so being able to start using it (and run TypeScript directly) on Cloud Run, sounds like a lot of fun. Grant Timmerman gives you a quick and easy set up.</p>
<p><a href="https://blog.thundra.io/chaos-engineering-with-serverless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Chaos Engineering with Serverless</a><br />
Whether you use Thundra to do this or not, injecting latency and other types of failures into your applications to test their resiliency is becoming an incredibly important tool. Emrah Samdan gives you some tips and shows you how to do it.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/@nandovillalba/why-i-think-gcp-is-better-than-aws-ea78f9975bda?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Why I think GCP is better than AWS</a><br />
This isn’t specifically about serverless offerings, but I think the author makes a number of valid points in here. There is a clear difference between offering primitives versus more abstracted solutions. I’m not sure either one is better than the other, and may just be a matter of personal preference. Either way, this is a very thoughtful article and worth the read.</p>
<p><a href="https://www.alibabacloud.com/blog/7-major-trends-for-cloud-native-in-2020-serverless_595936?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">7 Major Trends for Cloud Native in 2020: Serverless</a><br />
I somehow missed this post from a few months ago, but it recently caught my attention. I think there are a lot of really excellent (although hopeful) predictions in here. I’m not sold on Java or Knative, but WASM? Yes, please!</p>
<p><a href="https://medium.com/serverlessguru/the-case-for-serverless-and-hiring-serverless-consultants-8895a4a937fd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">The case for serverless and hiring serverless consultants</a><br />
Ryan Jones makes a pitch for hiring consultants to speed up your serverless adoption, but at the same time, makes a pretty good case for building with serverless regardless of your company size. Serverless is getting more and more complex every day, so having people that know their way around is usually not a bad thing.</p>
<p><a href="https://medium.com/@serhatcan/how-aws-lambda-team-made-my-two-years-old-talk-completely-irrelevant-1c74c528ca78?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">How AWS Lambda team made my two years old talk completely irrelevant</a><br />
One of the greatest benefits of using serverless (and many cloud services in general) is that it just gets better without you needing to do anything. Serhat Can explains how much Lambda has changed over the last two years and how all of the major roadblocks he faced back then have all been addressed.</p>
<h3>When you’re sick of Netflix… ?</h3>
<p><a href="https://www.serverlesschats.com/49?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Serverless Chats – Episode #49: Things I Wish I Knew Before Migrating to the Cloud with Jared Short</a><br />
In this episode, I chat with Jared Short about why you shouldn’t try to master every cloud service, what’s wrong with the “lift and shift” approach, why thinking about transparency right from the beginning will result in better applications, and a lot more. <a href="https://www.youtube.com/watch?v=rA4eVtpFnVs&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Watch on YoutTube</a>!</p>
<p><a href="https://www.youtube.com/watch?v=UVfs3_gYOzg?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Upload Images to S3 and Store Metadata with GraphQL to DynamoDB (using AWS Amplify and AppSync)</a><br />
In this video, Marcia Villalba shows you how to upload files to S3 with AWS AppSync in an Amplify project.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-dynamodb-now-supports-empty-values-for-non-key-string-and-binary-attributes-in-dynamodb-tables/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Amazon DynamoDB now supports empty values for non-key String and Binary attributes in DynamoDB tables</a><br />
This is a new feature that some should find quite handy. I prefer to remove empty attributes, but I can see there being use cases that require empty lists or maps. Also, if you don’t feel like checking every field for empty values in your code, then this might alleviate some of those frustrations.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/announcing-major-enhancements-to-amazon-macie-an-80-percent-plus-price-reduction-and-global-region-expansion/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Announcing major enhancements to Amazon Macie, an 80%+ price reduction, and global region expansion</a><br />
When I first looked at Amazon Macie, I was immediately turned off by the price (because it was expensive). This massive overhaul and 80%+ price reduction might finally make it more accessible to small and medium sized companies. <a href="https://aws.amazon.com/blogs/aws/new-enhanced-amazon-macie-now-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Read more here</a>.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://davidwells.io/blog/cleaner-async-await-code-without-try-catch?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">Cleaner async JavaScript code without the try/catch mess.</a><br />
I thought this was an interesting tool by David Wells that wraps your <code>await</code>s for better error handling. If you’re a JS developer, you might want to take a look at his “safeAwait” pattern.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/mthenw/status/1261290361395261440?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2390" target="_blank" rel="noopener">“What tool would you recommend to a product company that wants to start building serverless services on AWS? Any alternatives to AWS SAM or Serverless Framework? Taking into account the learning curve and the number of online resources.”</a> <strong>~ Maciej Winnicki</strong><br />
Good conversation around this Twitter post by Maciej. It’s hard to remember what it was like when I first started exploring serverless (although I do remember there were a lot fewer options), so for newcomers to the space, seeking an answer to this question can be overwhelming.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>April 2-May 31, 2020 – </strong><a href="https://github.com/singledigit/sam-template-examples">Sessions with SAM: Live Twitch sessions by Eric Johnson (every Thursday at 10AM PDT)</a></p>
<p><strong>May 20, 2020 –</strong> <a href="https://register.gotowebinar.com/register/8833212941224882443?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Designing for DynamoDB Success (webinar)</a></p>
<p><strong>May 21 &amp; 28, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-event-OE-serverless-first-function-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Serverless-First Function by AWS</a></p>
<p><strong>May 27, 2020 –</strong> <a href="https://www.meetup.com/Serverless-London/events/270600915/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Serverless London May Meetup (Virtual)</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Patrick Steger</strong> (<a href="https://twitter.com/StegerPatrick" target="_blank" rel="noopener">@StegerPatrick</a>). Patrick is an AWS Certified Solutions Architect who also ran his own application development company, IDMA Solutions. Patrick is a co-organizer for Triangle Serverless, based out of Raleigh, NC, and participates in other serverless meet-ups in the area. You can find him on Twitter regularly commenting about the latest in his serverless journey. Thank you, Patrick, for being a part of the community! ?</p>
<h3>Final Thoughts ?</h3>
<p>I hope you’re all staying safe and healthy as things are starting to reopen again. I would personally suggest staying away from <a href="https://twitter.com/stoolpresidente/status/1262755555417837569" target="_blank" rel="noopener">Jeep Weekend</a>, but, hey, to each their own.</p>
<p>I’ve been using this extra time to move some projects forward, which I hope to share soon. Also, my daughters were at it again and came up with an idea for a Serverless Chats promo video. Like a good dad, I helped them <a href="https://twitter.com/jeremy_daly/status/1260430414281420800" target="_blank" rel="noopener">execute</a>.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Cheers,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-90/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-90/</guid>
      <pubDate>Tue, 19 May 2020 23:39:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #89]]></title>
      <description><![CDATA[<h2>A Serverless Monitoring Guide… ?</h2>
<p>Welcome to <strong>Issue #89</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-88/">Last week</a>, we explored the super powers of API Gateway, discussed the proper microservice size, and let Forrest Brazeal serenade us. This week, we look at a crash course on monitoring serverless apps, get a lesson in response times from the cloud architect of all cloud architects, and learn about serverless developer culture. Plus, we have tons of great content from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://www.datadoghq.com/dg/monitor/lambda/?utm_source=Advertisement&amp;utm_medium=Advertisement&amp;utm_campaign=OffbyNoneServerless-Newsletter" target="_blank" rel="noopener">Analyze and debug Lambda performance in Datadog</a><br />
Collect custom metrics from serverless functions and correlate them with cold starts to identify patterns of customer-facing latency. Start optimizing your serverless applications with a free Datadog trial today. Sponsored</p>
<p><a href="https://itbrief.com.au/story/boomi-launches-eventbridge-ipaas-platform-connector?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Boomi launches EventBridge iPaaS platform connector</a><br />
The movement in this space is fascinating, and this integration with EventBridge is huge. Data exchange via EDA and EDI is rapidly evolving, so it’ll be interesting to see if this motivates other providers to create EventBridge integrations as well.</p>
<p><a href="https://finance.yahoo.com/news/converge-technology-solutions-corp-forms-120000459.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Converge Technology Solutions Corp. Forms Preferred Partnership with Trek10</a><br />
Congratulations to Trek10 for their continued growth and success. It’s good to have smart professionals that can help teams implement serverless quickly and correctly.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@thomas.recouvreux/how-we-built-a-multiplayer-card-game-in-1-week-450c7ca84006?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">How we built a multiplayer card game in 1 week</a><br />
I love this story, because it perfectly captures the promise of serverless. Thomas Recouvreux and a friend built a real-time, multi-player online game in 5 days, and it’s 100% serverless. Sure it’s not a full-blown enterprise application, but for startups and PoCs, is there a better way?</p>
<p><a href="https://dashbird.io/blog/launching-saas-app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Dashbird’s Lessons Learned from Launching a SaaS Application</a><br />
I always enjoy hearing directly from the people in the trenches, an although this article from Dashbird isn’t specifically about serverless, the experiences and insights from their developers as they pushed to launch their new platform is worth a quick read.</p>
<p><a href="https://medium.com/swlh/an-aws-lambda-serverless-journey-part-1-what-why-and-how-do-i-get-started-7a9f2d60ddbb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">An AWS Lambda Serverless Journey – Part 1</a> and <a href="https://medium.com/@mitulipatel/an-aws-lambda-serverless-journey-part-2-a-serverless-api-in-java-f713d8b80fc6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Part 2</a><br />
Mitul Patel has a series on building a serverless application using Java. There’s a lot of information in these first two parts, but I liked these articles because they not only give you the technical details, but also explain the reasoning behind the choices.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://blog.concurlabs.com/how-to-write-a-tldr-chat-bot-ec02d9e1649c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">How to write a TLDR chat bot</a><br />
Loved this post by Chris Ismael! He shows you a hybrid approach to implementing a machine learning model that uses Lambda and SQS to do the majority of the application work, while relying on an EC2 instance to do the inferencing. Great use case in general, but also an excellent example of how serverless components make the overall implementation easier.</p>
<p><a href="https://medium.com/@jgilbert001/combining-the-best-of-aws-eventbridge-and-aws-kinesis-9b363b043ade?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Combining the Best of AWS EventBridge and AWS Kinesis</a><br />
Interesting pattern described here by John Gilbert. There are a lot of benefits to consuming events from Kinesis versus subscribing directly to an EventBridge bus, so I can see this being effective under the right circumstances.</p>
<p><a href="https://medium.com/@allecsro/making-a-custom-dynamicdns-service-with-cloudflare-workers-1aef14c189a4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Making a custom DynamicDNS service with Cloudflare Workers</a><br />
A simple serverless use case that could be applicable in a number of scenarios. As the author mentions, there are plenty of services like this out there already, but the fact that it’s so easy to build with serverless says something.</p>
<p><a href="https://medium.com/@gcornwell/provisioning-trial-environments-with-step-functions-e1ee36d91d06?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Provisioning Trial Environments With Step Functions</a><br />
Very cool serverless use case outlined by Gavin Cornwell, as well as a perfect use case for Step Functions.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/devops-dudes/serverless-monitoring-guide-e18a1470e6c2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Serverless Monitoring Guide</a><br />
If you are responsible for monitoring a serverless application, or you soon will be, this is a great primer post from Tj Blogumas. Besides all the excellent detail provided on <em>what</em> to monitor, I love that there is an emphasis on Ops people getting closer to the code, and in the same vein, developers embracing repeatable deployment processes.</p>
<p><a href="https://dev.to/aws/why-are-services-slow-sometimes-mn3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Why are services slow sometimes?</a><br />
If there is anyone you should listen to about cloud architecture, it’s Adrian Cockcroft. This excellent piece explains a number of reasons (and the theories behind) why services can experience lower response times and what you need to think about to design around it.</p>
<p><a href="https://epsagon.com/blog/cost-of-monitoring-microservices-managed-solutions-vs-inhouse/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">The Cost of Monitoring Microservices: Managed Solutions vs. In-house</a><br />
TLDR; Don’t build something that isn’t core to your business. This post by Ran Ribenzaft does a great job pointing out the “build vs. buy” argument, which is at the heart of the serverless mindset. And yes, you also need a monitoring tool.</p>
<p><a href="https://medium.com/@craig.beardy.digital/benefits-of-serverless-and-event-driven-design-e55d9bfd0aad?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Benefits of Serverless, and Event Driven Design</a><br />
I’m sure most of you are well aware of the benefits of serverless, but this post by Craig Godden-Payne might be a good one to share with your skeptical coworkers. Simple explanations with a couple of basic patterns to tie it all together.</p>
<p><a href="https://medium.com/@mdsadiq/a-tl-dr-guide-to-serverless-framework-ea6e5dadd7fd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">A tl;dr guide to Serverless Framework</a><br />
I don’t think there is a shortcut to learning serverless and the cloud, but this post at least attempts it. Lots more to know than what’s included in here, but for those looking for a really quick start, this might help.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/@peiruwang/serverless-build-a-serverless-simple-flask-application-with-kubeless-on-top-of-kubernetes-95c6682c3750?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Build a Serverless Simple Flask Application with Kubeless on top of Kubernetes</a><br />
I think I’m going to start embracing a few of these “serverless on top of Kubernetes” posts since they seem to be growing in popularity. Next step is to convince people that they don’t actually need Kubernetes to run their functions. Baby steps.</p>
<p><a href="https://dev.to/dabit3/5-minute-tutorial-deploying-a-next-app-with-aws-amplify-hosting-5199?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">⚡️ 5 Minute Tutorial: Deploying a Next app with AWS Amplify Hosting</a><br />
Nader Dabit wrote a tutorial for deploying a Next.js app and using Amplify to host it. It’s written by Nader, so you know it’s awesome.</p>
<p><a href="https://medium.com/@liuhongbo/build-a-slackbot-with-aws-sam-application-257dfd2339a8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Build a Slackbot with AWS SAM Application</a><br />
Here is this week’s edition of “How to build a Serverless Slackbot”, this time with Hongbo Liu using AWS SAM with some local debugging.</p>
<p><a href="https://codingcat.dev/lessons/aws-amplify-video/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">AWS Amplify Video</a><br />
Alex Patterson has an excellent tutorial that shows you how to add video for live streaming or Video-on-Demand to your next Amplify project. Very cool stuff in here.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://blog.thundra.io/securing-serverless-applications?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Securing Serverless Applications</a><br />
The rules for securing your serverless applications are quite straightforward (good AppSec practices and all that), but I like that Thundra has built in some additional tools to give you more peace of mind. Serkan Özal outlines a few of the recommended approaches and then highlights the added features of Thundra.</p>
<p><a href="https://towardsdatascience.com/21-best-practices-for-aws-cloud-security-cfdfb217330?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">21 Best Practices for AWS Cloud Security</a><br />
Establishing good security practices should be table stakes for anyone building applications in the cloud. There is some good advice in here, even though not all applicable to serverless.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://pages.awscloud.com/GLOBAL-event-OE-serverless-first-function-2020-reg-event.html" target="_blank" rel="noopener">Register for the first-ever, completely free AWS Serverless-First Function</a><br />
The AWS Serverless-First Function is a set of two free-of-charge virtual events that offer the latest education and thought leadership material about serverless approaches on AWS. Happening on Thursday, May 21 and Thursday, May 28, the event agenda includes sessions with AWS leaders like VP of Serverless, David Richardson, VP of Cloud Architecture Strategy, Adrian Cockcroft, customer speakers like Workgrid Software Head of Cloud Engineering, Gillian McCann, and an introduction by Amazon CTO, Dr. Werner Vogels. Sponsored</p>
<p><a href="https://www.cbronline.com/news/serverless-computing-2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Serverless Exists In The Cloud and Both Need Servers</a><br />
You know I love to share stories that are critical of serverless, because it’s important to get as much perspective as possible. And while there are several things I don’t agree with in this article (like the inaccurate definition of serverless), us advocates need to remember that perception is reality, and articles like this feed the narrative. One thing I do agree with is the challenges around understanding costs in an on-demand world.</p>
<p><a href="https://www.trek10.com/blog/guiding-priciples-for-building-saas-on-aws?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">3 Guiding Principles for Building New SaaS Products on AWS</a><br />
I really liked this piece by Jared, because I think it extends well beyond just building SaaS products. One of the most important points in here is about documentation, because even though we want to move quickly, poorly documented applications make everything harder, including onboarding new developers to grow your application.</p>
<p><a href="https://medium.com/@jamesgimourginas/multi-source-processing-v2-0-90de35c39b8f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Multi-Source Processing v2.0</a><br />
As of this writing, this post only had 1 clap on Medium, but it is a brilliant piece by James Gimourginas where he reimagines his architectural decisions from 10 years ago and provides an updated solution using modern cloud and serverless services. It’s a long read, but it’s incredibly insightful to see just how far we’ve come in the last decade.</p>
<p><a href="https://medium.com/serverlessguru/talking-serverless-with-nader-dabit-1a753acf9fee?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Talking Serverless with Nader Dabit</a><br />
Ryan Jones recently interviewed Nader Dabit on the Talking Serverless Podcast. It’s always great getting insights from Nader, so I think you’ll find some good takeaways in this summary of their discussion.</p>
<p><a href="https://virtualizationreview.com/articles/2020/05/08/cloud-native-dev-survey.aspx?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Cloud-Native Development Survey Details Kubernetes, Serverless Data</a><br />
If you ask a developer what their favorite flavor of Kool-Aid is, you’ll likely get “Kubernetes” as the answer. I think we’re going to be seeing a hybrid approach for many, many years to come.</p>
<p><a href="https://dev.to/syamantics/future-of-backend-development-gha?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Future of backend development</a><br />
I thought this piece was an interesting read, as well as the discussion that follows. The move to serverless (and microservices, to a similar extent) seems obvious to me. I can certainly understand the hesitance from others, but I also think the term “laggards” will be true for these people in every sense of the word. ?‍♂️ Just one man’s humble opinion.</p>
<h3>Serverless Podcasts… ?</h3>
<p><a href="https://www.serverlesschats.com/48?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Serverless Chats – Episode #48: Serverless Developer Culture with Linda Nichols</a><br />
In this episode, I chat with Linda Nichols about why modern cloud developers should be writing less code, how new deployment processes affect the testing culture, why Ops teams are still really important, and much more. <a href="https://www.youtube.com/watch?v=e5oFSIMuvcM&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Watch on YouTube</a>!</p>
<p><a href="https://castbox.fm/episode/10%3A-Serverless-at-DAZN-with-Daniel-Wright-and-Sara-Gerion-id2644378-id259599881?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Real World Serverless – Ep. #10: Serverless at DAZN with Daniel Wright and Sara Gerion</a><br />
Yan Cui speaks with Daniel Wright and Sara Gerion about the state of Serverless adoption at DAZN, how they use serverless in a high-scale, high-uptime environment, and how they mix serverless and containers in a hybrid environment.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/control-your-email-flows-in-amazon-workmail-using-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Control your email flows in Amazon WorkMail using AWS Lambda</a><br />
Amazon WorkMail announced that you can now control email flow of your organization using AWS Lambda functions when using Email Flow Rules. With this, you can build powerful email flow control system with completely customizable conditions.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-cloudwatch-logs-insights-now-allows-you-to-save-queries/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Amazon CloudWatch Logs Insights now allows you to save queries</a><br />
Amazon CloudWatch is introducing Saved Queries, a new feature that makes it easier for CloudWatch Logs Insights users to save queries. They can organize these queries in folders and easily run them again for different purposes by team, application, or runbook.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/introducing-the-new-aws-saas-competency/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Introducing the new AWS SaaS Competency</a><br />
The AWS SaaS Competency was created to support AWS customers looking for APN Consulting Partners with deep specialization and expertise in designing and building Software-as-a-Service (SaaS) solutions on AWS.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/aws-announces-amazon-elasticsearch-service-ultrawarm-general-availability/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">AWS announces Amazon Elasticsearch Service UltraWarm general availability</a><br />
Amazon Elasticsearch Service UltraWarm is now generally available. UltraWarm is a performance-optimized warm storage tier that lets you store and interactively analyze your data using Elasticsearch and Kibana while reducing your cost per GB by up to 90% over hot storage options. <a href="https://aws.amazon.com/blogs/aws/general-availability-of-ultrawarm-for-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Read more here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/aws-step-functions-supports-aws-codebuild-service-integration/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">AWS Step Functions now supports AWS CodeBuild service integration</a><br />
AWS Step Functions is now integrated with AWS CodeBuild, making it faster to build continuous integration workflows for your applications. <a href="https://aws.amazon.com/blogs/aws/new-building-a-continuous-integration-workflow-with-step-functions-and-aws-codebuild/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Read more here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-kendra-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Amazon Kendra is now generally available</a><br />
Amazon Kendra is now generally available to all AWS customers. It provides customers with a highly accurate and easy to use enterprise search service powered by machine learning. <a href="https://aws.amazon.com/blogs/aws/reinventing-enterprise-search-amazon-kendra-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Read more here</a>.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/serverless-transformation/how-to-succeed-with-serverless-automate-best-practices-2a41894721a3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">How to succeed with Serverless? Automate best practices.</a><br />
I really like the direction that Ben Ellerby and his team are taking the <code>sls-dev-tools</code> library. I totally agree that education is one of the biggest blockers to serverless adoption. This new Guardian tool is opinionated, but that’s not always a bad thing, especially if people don’t have enough experience to form their own opinions just yet.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>April 2-May 31, 2020 – </strong><a href="https://github.com/singledigit/sam-template-examples">Sessions with SAM: Live Twitch sessions by Eric Johnson (every Thursday at 10AM PDT)</a></p>
<p><strong>May 13, 2020 –</strong> <a href="https://kommunity.com/cloud-and-serverless-turkey/events/full-stack-development-with-aws-amplify-03976368?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Full stack development with AWS Amplify (Cloud and Serverless Turkey)</a></p>
<p><strong>May 13, 2020 –</strong> <a href="https://aws.amazon.com/events/summits/online/india/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">AWS Summit Online 2020: Empowering Tech Startups To Scale Sustainably</a></p>
<p><strong>May 14, 2020 –</strong> <a href="https://newrelic.com/webinar/serverless-in-place?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Virtual Meetup: Serverless Fail Day!</a> ?</p>
<p><strong>May 16, 2020 –</strong> <a href="https://www.meetup.com/AmazonAWS-Delhi/events/270236307/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Patterns and Practices for Building Resilient AWS Serverless Applications</a></p>
<p><strong>May 20, 2020 –</strong> <a href="https://register.gotowebinar.com/register/8833212941224882443?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Designing for DynamoDB Success (webinar)</a></p>
<p><strong>May 21 &amp; 28, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-event-OE-serverless-first-function-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Serverless-First Function by AWS</a></p>
<p><strong>May 27, 2020 –</strong> <a href="https://www.meetup.com/Serverless-London/events/270600915/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2389" target="_blank" rel="noopener">Serverless London May Meetup (Virtual)</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Jennifer Davis</strong> (<a href="https://twitter.com/sigje" target="_blank" rel="noopener">@sigje</a>).  Jennifer is a Senior Cloud Advocate at Microsoft, but has held previous roles with Chef and Yahoo, among others. Jennifer has spoken about the “Ops in Serverless” at SRECon, Velocity Conf San Jose, and Serverless Week last summer. She’s also spoken at ServerlessDays London, and joined Microsoft Ignite in Toronto and London. Jennifer also organized AWS Community Day in Silicon Valley, as well as Serverless Days Seattle. Thanks, Jennifer, for taking serverless across the globe with you! ?</p>
<h3>Final Thoughts ?</h3>
<p>I hope you’ve all made it safely through another week. It looks like a lot of places are starting to relax the #StayAtHome orders, so just be sure to stay safe out there. I know I really need a haircut, but it’s certainly not worth risking anyone’s life over (even though it’s getting really long and out of control ?‍♂️).</p>
<p>If you’re still looking for things to keep you busy, you can do like my daughters and put on a <a href="https://twitter.com/jeremy_daly/status/1258068434757312521" target="_blank" rel="noopener">Serverless Fashion Show</a>. Or maybe check out the latest release of <a href="http://dynamodbtoolbox.com/" target="_blank" rel="noopener">DynamoDB Toolbox</a>. ?</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>See you next week,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-89/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-89/</guid>
      <pubDate>Tue, 12 May 2020 23:35:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #88]]></title>
      <description><![CDATA[<h2>API Gateway deserves some love too… ?</h2>
<p>Welcome to <strong>Issue #88</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-87/">Last week</a>, we had too many releases from AWS to list, some really great EventBridge posts, and a debate about where serverless is in the technology adoption lifecycle. This week, we explore the super powers of API Gateway, answer the question of whether (microservice) size matters, and get a new song about S3 stuck in our heads.  Plus, we have lots of content from our amazing serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://www.datadoghq.com/dg/monitor/lambda/?utm_source=Advertisement&amp;utm_medium=Advertisement&amp;utm_campaign=OffbyNoneServerless-Newsletter" target="_blank" rel="noopener">Monitor all your Lambda functions, API Gateways, SQS queues, DynamoDB tables, and more, straight from Datadog</a><br />
Natively create real-time serverless metrics at one-second granularity for your errors, cold starts, memory used, estimated cost, and more. Datadog’s AWS Lambda integration enables you to monitor all of your serverless metrics, plus logs and traces in one, unified platform, so you can get full context when troubleshooting an issue. Try it for free today. Sponsored</p>
<p><a href="https://serverlessevents.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Serverless Events</a><br />
AWS Serverless Hero, Gunnar Grosch, has put together a curated list of upcoming serverless events. If you know about an upcoming conference, meetup, podcast, webinar, or other awesome serverless event, make sure to add it.</p>
<p><a href="https://blog.begin.com/a-brand-new-primitive-for-your-begin-apps-event-functions-9cdfd2bb3dcb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">A brand new primitive for your Begin apps: event functions!</a><br />
I really like the simplicity of the Architect Framework, and Begin has been adding some pretty cool features lately. This new “event” primitive should make building your event-driven systems even easier.</p>
<p><em>And…</em> A bunch of the usual suspects achieved the new <strong>AWS Lambda Ready designation</strong>. Congrats to all these excellent companies: <a href="https://lumigo.io/blog/lumigo-achieves-aws-lambda-ready-designation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Lumigo</a>, <a href="https://blog.thundra.io/news/thundra-achieves-the-aws-lambda-ready-designation?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Thundra</a>, <a href="https://epsagon.com/blog/epsagon-achieves-aws-lambda-ready-designation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Epsagon</a>, <a href="https://dashbird.io/blog/aws-service-ready-announcement/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Dashbird</a>, and <a href="https://www.stackery.io/blog/lambda-ready-announcement/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Stackery</a> (and any others I may have missed).</p>
<h3>When API Gateway doesn’t want to be left out…</h3>
<p>There were several posts this week that pointed out the benefits of using API Gateway service integrations to bypass Lambda. And since we called out AppSync a few weeks ago, I figured API Gateway deserved some attention as well.</p>
<p><a href="https://dashbird.io/blog/using-api-gateway-to-run-database-queries/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Using API Gateway to run Database Queries</a><br />
Renato Byrro advocates for using a service integration to query data directly from API Gateway to DynamoDB. Benefits included.</p>
<p><a href="https://medium.com/@hareesh.veduraj/aws-api-gateway-integration-with-dynamodb-ba85347dcce8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">AWS API Gateway integration with DynamoDB</a><br />
Hareesh Veduraj has a similar post to Renato’s, but this one goes into more detail and shows you how to set up a service integration to retrieve data from DynamoDB.</p>
<p><a href="https://medium.com/@richardfan1126/dont-use-lambda-to-move-data-api-gateway-can-help-fe899df239e6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Don’t use Lambda to move data! API Gateway can help</a><br />
And Richard Fan goes a step further and shows you how to put data INTO DynamoDB, complete with permissions and input validation.</p>
<p><a href="https://dashbird.io/blog/can-api-gateway-act-load-balancer/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Can AWS API Gateway Act as a Load Balancer?</a><br />
And rounding out our API Gateway section, is another post by Renato Byrro, this time comparing ALB to API Gateway. Strangler patterns apply.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/levarne/your-worst-case-serverless-scenario-part-iii-the-invisible-process-f8b67e90567e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Your Worst-case Serverless Scenario Part III: The Invisible Process</a><br />
Niels van Bree wraps up his excellent series on how one mistake turned 100k records into 56M records and brought down their production environment. This post talks about the effects of partition key design and index replication.</p>
<p><a href="https://alexwlchan.net/2020/04/using-dynamodb-as-a-calculator/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Using DynamoDB as a calculator</a><br />
This is what happens when you indulge Corey Quinn’s curiosity, a bit of insanity, but also what turned out to be a brilliant experiment. Alex Chan wrote a DynamoDB calculator, a self admitted terrible idea, but certainly worth the effort.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://www.wizeline.com/blog-continuous-deployment-with-semantic-release-and-github-actions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Continuous Deployment with Semantic Release and GitHub Actions</a><br />
Brett Andrews shows you how to automate deployments and changelogs using Semantic Release and GitHub Actions. I love the idea of this, though I’m still not sure I’m ready to fully trust my semantic versioning and NPM publishing to an automated process.</p>
<p><a href="https://medium.com/@jswheeler/backing-up-auth0-to-github-using-aws-lambda-93f53a0f0b87?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Backing up Auth0 to GitHub using AWS Lambda</a><br />
Here’s a straightforward, highly adaptable use case by John Wheeler. Use AWS Lambda to backup third-party service configuration information.</p>
<p><a href="https://dev.to/t04glovern/dog-bark-detector-serverless-audio-processing-2g4e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Dog Bark Detector – Serverless Audio Processing</a><br />
Can you think of a better serverless use case than detecting when your dogs bark? Well, maybe, but this post by Nathan Glover will give you some really good insights into processing audio with serverless.</p>
<p><a href="https://www.jeremydaly.com/making-the-case-for-serverless-use-cases/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Making the Case for Serverless Use Cases</a><br />
This is an article I wrote as a follow up to my Serverless Chats conversation with Gareth McCumskey. Newcomers to the space often don’t realize just how many use cases there are for serverless. This post makes the case for nine of them.</p>
<p><a href="https://medium.com/nimbella/a-serverless-cloud-for-stateful-applications-a63fe573f16f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">A Serverless Cloud for Stateful Applications</a><br />
Rodric Rabbah (one of the creators of Apache OpenWhisk) took a slightly different approach to serverless with his company Nimbella. In this post he shows how to create a stateful stock trading application.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://dashbird.io/blog/leveraging-lambda-cache-for-serverless-cost-efficiency/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Leveraging Lambda Cache for Serverless Cost-Efficiency</a><br />
For most experienced AWS serverless devs, using global variables in our Lambda functions is second nature. If you’re still not sure what global variables afford you, take a look at this post by Renato Byrro.</p>
<p><a href="https://www.blog.muraliallada.com/Aurora-Serverless-DataAPI/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Aurora Serverless: Data API vs Connection pools</a><br />
I thought this was an interesting approach by Murali Allada. I really love the Data API, but I can see using it for user-facing, synchronous operations being a problem. But why not just use it where it makes sense?</p>
<p><a href="https://www.techrepublic.com/article/how-to-trim-your-cloud-infrastructure-costs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">How to trim your cloud infrastructure costs</a><br />
Being cost-conscious is never a bad thing, especially when it comes to the cloud. This becomes even more important due to the economic impact of the current COVID-19 situation. This article had a few interesting cost-cutting measures that can hopefully save you a few bucks so you can better weather this storm.</p>
<p><a href="https://medium.com/google-cloud/13-most-common-google-cloud-reference-architectures-23630b46326d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">13 Most Common Google Cloud Reference Architectures</a><br />
Priyanka Vergadia compiled a list of her #13DaysOfGCP mini series on Twitter. In each video, she outlines a use case and a reference architecture using GCP. These might not all be applicable to you, but you know me, I’m a sucker for serverless patterns.</p>
<p><a href="https://medium.com/@dorivalq/deploying-microservices-using-serverless-architecture-cf7d1570950?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Deploying Microservices Using Serverless Architecture</a><br />
I’m not 100% in sync with Dorival Querino’s depiction of using a Lambda function as an orchestrator in a serverless microservice architecture. However, assuming there was a message bus or Step Function to bridge that gap, the overall intent is similar to my thinking on the subject.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://aws.amazon.com/blogs/compute/creating-a-scalable-serverless-import-process-for-amazon-dynamodb/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Creating a scalable serverless import process for Amazon DynamoDB</a><br />
Great post by James Beswick that shows you how to use S3 as a staging environment to import datasets of any size into DynamoDB. This is a very useful pattern for either preprocessing data or database migrations.</p>
<p><a href="https://medium.com/doorr/creating-a-local-testing-environment-for-aws-lambda-with-express-and-typescript-90984a1d7071?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Creating a local testing environment for AWS Lambda with Express and Typescript.</a><br />
Joan Gil shows you another way to test your AWS Lambda-backed API locally. This example uses a combination of <code>swagger-routes-express</code> and the AWS SDK to load your API Gateway routes. It’s an interesting, albeit, complicated approach, but it apparently works for them.</p>
<p><a href="https://medium.com/@soumoks/developing-a-serverless-backend-api-using-flask-39398d0eb95d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Developing a Serverless Backend API using Flask</a><br />
If you’re looking for a way to quickly make your Flask app serverless, this tutorial from Sourabh Mokhasi should get you there. This is an easy onramp to serverless, but once you’re up and running, start thinking about strangling some of those routes to separate Lambda functions.</p>
<p><a href="https://bahr.dev/2020/04/27/measuring-performance/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Measuring Performance with CloudWatch Custom Metrics and Insights</a><br />
Michael Bahr has a great post that shows you four approaches to generating metric data. Each approach has trade offs, but the post outlines when and why to use CloudWatch Insights versus asynchronous log analysis.</p>
<p><a href="https://theburningmonk.com/2020/05/appsync-how-to-compare-strings-lexicographically-in-vtl/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">AppSync: how to compare strings lexicographically in VTL</a><br />
Yan Cui gives you a simple solution for lexicographical string comparisons in VTL. More importantly is the way he figured it out, by getting help from an amazing #serverless community.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://blog.thundra.io/how-compliance-standards-see-serverless-in-production?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">How Compliance Standards See Serverless in Production?</a><br />
Ah compliance standards, the bane of almost every fast moving developers. The good news is, that with serverless, lots of these things are handled for you. Emrah Samdan has a great post that outlines some common standards and their considerations when using AWS Lambda.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/serverless-transformation/how-to-remain-agile-with-dynamodb-eca44ff9817?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">How to Remain Agile with DynamoDB</a><br />
Excellent post by Rob Cronin that points out three common hurdles that new DynamoDB developers often face. As he points out, there is a tremendous amount of agility available to you if you start with the proper techniques and use DynamoDB for what it was intended.</p>
<p><a href="https://medium.com/teamzerolabs/5-aws-services-you-should-avoid-f45111cc10cd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">5 AWS Services You Should Avoid!</a><br />
This article has been making the rounds, so without piling on additional criticism, I’ll just say this: if you use cloud services poorly, you’re likely going to be the victim of poor outcomes (and then write posts like this).</p>
<p><a href="https://medium.com/@ashu9719/do-not-follow-hype-of-serverless-blindfolded-311ffc5bb265?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Do not follow Hype of Serverless Blindfolded</a><br />
And while we’re dumping on serverless, I figured I’d include this piece from Ashish Singh. Besides the fact that his cost estimates don’t include the engineer(s) that needs to maintain his three t3.2xlarge EC2 instances, I’m thinking that 50M (25 second long) requests/month spread across three servers means each one has to handle ~160 request per second. Probably fine if the traffic is evenly distributed, but how often does that happen?</p>
<p><a href="https://gifted-lichterman-f7d315.netlify.app/serverless-days-virtual-wrap-up?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">ServerlessDays virtual wrap up</a><br />
I had a blast hosting the first ever ServerlessDays Virtual conference, and thanks to Nick Van Hoof, we have a great write up for you to enjoy.</p>
<p><a href="https://thenewstack.io/serverless-needs-standards-to-be-the-future-of-application-infrastructure/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Serverless Needs Standards to Be the Future of Application Infrastructure</a><br />
Thoughtful piece by Gadi Naor that makes the point that serverless adoption is likely being hurt by the lack of standardization across serverless providers. While I tend to agree with his analogy to the early days of web standards, there was also a tremendous amount of innovation that happened during that time. Too quickly standardizing on something like Kubernetes, could prove to be terribly inefficient in the long run.</p>
<h3>Serverless Music, Podcasts, and more…</h3>
<p><a href="https://www.youtube.com/watch?v=SnxzWlfWxbA?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Durably: The Ballad of S3</a><br />
Every day it becomes more and more apparent that Forrest Brazeal has few limits. He says he can’t dance, but that remains to be seen. ?</p>
<p><a href="https://www.serverlesschats.com/47?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Serverless Chats – Episode #47: Programming AWS Lambda with Mike Roberts</a><br />
In this episode, I chat with Mike Roberts about his new book, why Java shops should be just fine moving to AWS Lambda, how we need to approach testing serverless applications, and much more. <a href="https://www.youtube.com/watch?v=16en-TTGNhk&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://www.youtube.com/watch?v=ZChGXfRDHKA?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">How Big Should Microservices Be?</a><br />
Not really about serverless, but whenever Sam Newman talks about microservices, I like to listen. I think this is probably the most common question, and while Sam’s answer might not be exactly what you were hoping for, it’s probably exactly what you needed to hear.</p>
<p><a href="https://www.youtube.com/watch?v=WQKRMQA8tak?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Observability in serverless applications – the Serverless Coffee Break</a><br />
Ran Ribenzaft from Epsagon joins James Beswick to discuss how to bring observability to serverless applications, and shares some best practices in running serverless apps at scale.</p>
<p><a href="https://www.talkingserverless.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Talking Serverless with Ryan Jones</a><br />
Ryan Jones from Serverless Guru has started his podcast up again. Lots of great guests on here.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-eventbridge-schema-registry-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Amazon EventBridge schema registry is now generally available</a><br />
The schema registry is such an awesome tool for all of us lazy developers that don’t want to document anything. And if you run this in your dev or staging environment, it’s basically free. <a href="https://aws.amazon.com/blogs/aws/new-amazon-eventbridge-schema-registry-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Read more here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-translate-now-adds-support-for-mexican-spanish/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Amazon Translate now adds support for Mexican Spanish</a><br />
I know my Spanish isn’t very good, so let’s hope AWS can do a better job. And just in time for Cinco de Mayo!</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-s3-batch-operations-adds-support-for-s3-object-lock/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Amazon S3 Batch Operations adds support for S3 Object Lock</a><br />
You can now perform S3 Object Lock operations using Amazon S3 Batch Operations to apply or change legal holds or retention periods across many objects with a single API request or a few clicks in the S3 Management Console.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/aws-waf-now-supports-migration-wizard-for-converting-waf-rules-from-aws-waf-classic/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">AWS WAF now supports migration wizard for converting WAF rules from AWS WAF Classic</a><br />
I love easy upgrade paths, so it’s good to know that AWS WAF now provides a simple way to migrate your WAF rules from AWS WAF Classic.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-rds-data-api-client-library-for-java-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Amazon Relational Database Service (RDS) Data API Client Library for Java now generally available</a><br />
I’m a big fan of the Data API, so if you’ve been missing out because someone forced you to write your code in Java, at least now you have some good news.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/nosql-workbench-for-dynamodb-adds-support-for-linux/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">NoSQL Workbench for DynamoDB adds support for Linux</a><br />
Real devs use Linux! Not me, but this is something I (and apparently the NoSQL Workbench team) hear all the time.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-codeguru-reviewer-launches-new-pricing-model/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Amazon CodeGuru Reviewer launches new, more cost-effective pricing model</a><br />
I still haven’t played around with, but now revisions to a pull request are only charged for changed or newly added lines of code.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/@gojedan/aurora-serverless-data-api-with-typeorm-330c334e033b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Aurora Serverless Data API with TypeORM</a><br />
Lots of people have asked if you could use an ORM with the Data API, and now you can. Goje Dan shows you how to use the <code>typeorm-aurora-data-api-driver</code> package to integrate with TypeORM. And if you dig deep enough, you’ll find that it’s using my <code>data-api-client</code> package under the hood. ?</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/chrismunns/status/1256304015324917760?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">It’s that time again again. Sitting virtually with the Lambda PM + DA team talking about 2021. What do YOU want to @awscloud to build? #serverless #awsLambda #serverlessforeveryone</a> <strong>~ Chris Munns</strong><br />
If you have serverless requests, Chris is the person to send them to! Check out this post for some really great ideas.</p>
<p><a href="https://twitter.com/jeremy_daly/status/1256259584819449856?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Question for all you @dynamodb hackers out there. Is there ever a reason to store an attribute with a ‘NULL’ value, or should you just remove the attribute entirely? Please explain your answer.</a> <strong>~ Jeremy Daly</strong><br />
I <em>always</em> remove NULL attributes in DynamoDB, but apparently there are lots of people who see the value in storing them. Interesting discussion around this poll I posted.</p>
<p><a href="https://twitter.com/JoeEmison/status/1256748385102704646?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Running a serverless insurance startup, selling home, auto, renters, and umbrella in five states (http://ourbranch.com ) on AWS. April AWS bill was just under $740. DynamoDB – $202 CodeBuild – $116 Cloudwatch – $100 S3 – $66 AWS Directory Service – $36</a> <strong>~ Joe Emison</strong><br />
How much does it cost to run a fully serverless startup on AWS? Joe Emison gives you some of his numbers, with plenty of commentary from others.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>April 2-May 31, 2020 – </strong><a href="https://github.com/singledigit/sam-template-examples">Sessions with SAM: Live Twitch sessions by Eric Johnson (every Thursday at 10AM PDT)</a></p>
<p><strong>May 7, 2020 –</strong> <a href="https://jsvidcon.com/events/yan-cui/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Building a social network in under 4 weeks with Serverless and GraphQL</a></p>
<p><strong>May 8, 2020 –</strong> <a href="http://serverlessdays.amsterdam/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">ServerlessDays Amsterdam 2018 (online edition)</a></p>
<p><strong>May 14, 2020 –</strong> <a href="https://newrelic.com/webinar/serverless-in-place?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2388" target="_blank" rel="noopener">Virtual Meetup: Serverless Fail Day!</a> ?</p>
<p><strong>May 16, 2020 –</strong> <a href="https://www.meetup.com/AmazonAWS-Delhi/events/270236307/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Patterns and Practices for Building Resilient AWS Serverless Applications</a></p>
<p><strong>May 21 &amp; 28, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-event-OE-serverless-first-function-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Serverless-First Function by AWS</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Belinda Vennam</strong> (<a href="https://twitter.com/BeeMarieV" target="_blank" rel="noopener">@BeeMarieV</a>). Belinda is an Advisory Software Engineer and Developer Advocate for IBM Cloud Functions and Apache OpenWhisk. Belinda led her team to deliver the functionality for the Templates feature in Cloud Functions, and has worked on and delivered a number of Open Source Apache projects, including a package for deploying serverless functions from a manifest file. Belinda has taken serverless cross-country, speaking at ServerlessDays Seattle and ServerlessDays NYC, among many other serverless events. Thanks, Belinda, for helping to make serverless better! ?</p>
<h3>Final Thoughts ?</h3>
<p>It looks like it was another busy week for all the stay-at-home serverlessers out there. I hope creating all this amazing serverless content is keeping you relatively sane. #StayAtHome is wearing really thin here at the Daly household, but we’re staying healthy. I hope you all are too.</p>
<p>Just an FYI, I’m planning on launching the next version of <a href="http://dynamodbtoolbox.com/" target="_blank" rel="noopener">DynamoDB Toolbox</a> this week, so stay tuned for that. Check it out if you get a chance.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Until next time,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-88/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-88/</guid>
      <pubDate>Tue, 05 May 2020 23:42:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Making the Case for Serverless Use Cases]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2020/05/digging-into-serverless-use-cases-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/05/digging-into-serverless-use-cases.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2020/05/digging-into-serverless-use-cases-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/05/digging-into-serverless-use-cases-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/05/digging-into-serverless-use-cases-1024x576.png 1024w" /></div>
<p>For quite some time, there was a running joke that “serverless” was just for converting images to thumbnails. That’s still a great use case for serverless, of course, but since AWS released Lambda in 2014, serverless has definitely come a long way. Even still, newcomers to the space often don’t realize just how many use cases there are for serverless. I spoke with <a href="https://twitter.com/garethmcc" target="_blank" rel="noopener">Gareth McCumskey</a>, a Solutions Architect at Serverless Inc, on a recent two part episode (<a href="https://www.serverlesschats.com/45" target="_blank" rel="noopener">part 1</a> and <a href="https://www.serverlesschats.com/46" target="_blank" rel="noopener">part 2</a>) of <a href="https://www.serverlesschats.com" target="_blank" rel="noopener">Serverless Chats</a>, and we discussed seven very applicable use cases that I thought I’d share with you here.</p>
<h3>RESTful APIs</h3>
<p>By far, the most popular use case for serverless has been using it to build APIs, whether that’s a RESTful API or a GraphQL service. Just running a Lambda by itself can be very powerful, but when you drop something like API Gateway in front of it, you now have a match made in heaven — a highly scalable endpoint processing data in real time with no servers to manage.</p>
<p>AWS has two flavors of API Gateway, the standard REST version and the new HTTP APIs. But a very cool feature with the REST version (and something that will be coming to HTTP APIs as well) is the ability to configure service integrations. Lambda functions are often necessary to perform transformations and other types of processing, but with service integrations, you have a useful and efficient way to transport data from API requests without the need for (or additional costs of) Lambda functions.</p>
<p>There are plenty of great use cases that use HTTP endpoints, and when you start to think about high-volume, write-heavy applications (like webhooks), using service integrations with something like SQS or Kinesis makes perfect sense. When you have a lot of data coming in quickly, you don’t need to respond to the request with a message that says, “I’ve done all the processing.” You just need to indicate that the data has been captured.</p>
<p>Like Gareth mentions, store the data by throwing it into SQS, respond to the client immediately, and then worry about processing that data later on down the line. By thinking asynchronously like this, you get message durability, faster response times, the ability to mitigate downstream pressure, and you’ve added a layer of resiliency to your application.</p>
<h3>GraphQL</h3>
<p>GraphQL has become another incredibly popular use case for serverless. The major benefit of GraphQL is that the client can make tailored requests and only get the data back that they need. In doing that, they’re not over-fetching data, plus they can also combine data from multiple data sources so that they’re not under-fetching data or required to make multiple calls. It’s quite possible to use API Gateway and Lambda to build a GraphQL “server”, however, AWS also has AppSync, that will do almost all of the heavy lifting for you.</p>
<p>AppSync, like API Gateway, is massively scalable, and there’s no need to run servers or set up load balancers to handle the traffic. You have the ability to attach Data Source that can pull data directly from DynamoDB, Elasticsearch, RDBMS, and HTTP endpoints. You can even build completely custom Data Sources using Lambda functions. As with any data-backed solution, you still have to worry about the scalability and availability of your underlying data sources. But overall, the GraphQL use case is solid.</p>
<h3>WebSockets</h3>
<p>Real time communication in web and mobile apps is becoming more common, and WebSockets are a great way to provide us with that capability. There are so many amazing things you can do with WebSockets, whether it’s chat functionality, multiplayer online games, or anything where you want to push data back and forth in real-time. Serverless WebSockets, however, can seem a bit perplexing since Lambda functions are event-driven and stateless.</p>
<p>API Gateway has the ability to initialize and maintain WebSocket connections with clients for you, and then only triggers a Lambda function when a message is sent from a client. This allows you to respond to a request serverlessly and let API Gateway do all that heavy lifting for you. You need to maintain a list of connections if you want to do broadcasts, for example, but it’s relatively straightforward using something like DynamoDB as a datastore.</p>
<p>At one of the startups I worked at several years ago, we built a real time commenting interface. We started using simple long polling (which was terribly inefficient) and then ended up building out an entire fleet of load balanced servers to support WebSockets. It worked really well, but took a huge investment to build, was expensive to run, and the maintenance was a nightmare. With API Gateway and Lambda, this would have taken a few hours to set up, and the ongoing maintenance and cost would be negligible.</p>
<h3>Capturing Clickstream Data</h3>
<p>Another common use case is capturing clickstream data from your users. API Gateway, with the right service integration, absolutely shines here. Using API Gateway with Kinesis Data Firehose, for example, allows you to reliably capture high-velocity clickstreams, convert the data in batches using Lambda functions, and then dump the data directly into an S3 bucket. You can then use Athena to quickly and cheaply query the data using standard SQL syntax. This whole pipeline is essentially 100% serverless and there’s no need to maintain a large data warehouse running 24/7 just for the occasional ad hoc query.</p>
<p>On one of my teams, we tried using Elasticsearch to store our clickstream data. After doing some projections and estimating the number of records collected per day, we realized that it would have been unjustifiably expensive. The serverless solution gave us similar flexibility at a fraction of the cost. In today’s world of unlimited options, it’s so important to understand what users are doing on your site. So whether you’re using clickstream data for personalization, A/B testing, or other types of optimization, serverless just handles it so well.</p>
<h3>Parallel Compute</h3>
<p>One of the things that I see quite often is people using the power of Lambda to run massive, parallel compute jobs. A great feature of Lambda is its single concurrency model, meaning that a Lambda function only handles one request at a time. If you have a thousand concurrent users, it spins up a thousand separate Lambda function containers. This not only gives you the ability to massively scale requests from things like APIs and WebSockets, but you can actually use it to fan out several processing jobs at once. As Gareth said, it’s the famed “Lambda supercomputer”, and you can get an enormous amount of parallelization with it.</p>
<p>It’s also incredibly cost effective. If you run a thousand concurrent Lambda functions, even at the maximum memory, and it takes five minutes to run your job, that’s maybe a couple of dollars every time it runs. Gareth mentioned the use case of simulating users for the purpose of load testing your application. I also spoke with Lynn Langit a few weeks ago, and she pointed out using this parallelization for genomics and bioinformatics research. Essentially, any job that can be broken down into parallel tasks, makes for a great fit here.</p>
<h3>Email Processing</h3>
<p>There are a ton of useful triggers for Lambda functions, but a really interesting one is processing email using an S3 or SNS trigger when an email is received by AWS SES (Simple Email Service). Gareth shared the example of an organization that handled requests for medical insurance, and their need for sifting and sorting those emails into a CRM system. Regardless of industry, this idea of receiving emails, dumping them into S3, and reading them in with Lambda has so many possible use cases. As Gareth mentions, this solution worked great for the organization from his example – so great, in fact, that the downstream CRM couldn’t initially handle the load.</p>
<p>If you were building a SaaS company that provided a ticketing component, for example, this use case would be perfect. I actually saw a similar use case a while ago called <a href="https://github.com/0x4447/0x4447_product_s3_email" target="_blank" rel="noopener">S3 Email</a> that built an entire email server using S3, SES and Lambda. There are so many cool things you can do with this, like handling and processing attachments, analyzing text, sending data into Comprehend to calculate sentiment, translating the email to a different language, and so much more.</p>
<h3>Peripheral/Cron Jobs</h3>
<p>Cron jobs are the Swiss army knife of developers. We use them for everything from cleaning up log files on a server to triggering ETL tasks to scheduling nightly email reports. They’re also a perfect use case for serverless (and probably the second most popular, says Gareth) especially if you want to run something peripheral to your main application.</p>
<p>Gareth explains that Lambda becomes incredibly useful here, because you can just schedule it, and then run a job that can access all of your AWS services, all without needing to set up, secure, and maintain a separate server. Gareth gave the simple example of periodically rebuilding an XML feed for Google Shopping. Lambda would run on a schedule, pre-render the XML, and save it to S3 so that it was available to the Google Shopping spider.</p>
<p>Using Lambda to do these types of jobs just makes a ton of sense, because it doesn’t touch the rest of your application. If you’re generating reports every night, or doing some other type of CPU or memory intensive computations, do you really want that running on the same systems that are handling requests from your users? And if you’re already using separate machines to do that processing, wouldn’t it be nice to only pay when the jobs were running and never have to worry about maintaining those servers? I know I would.</p>
<h3>Offline/Asynchronous Processing</h3>
<p>This use case ties into several that we’ve already discussed, but it’s such a powerful concept that it stands on its own. We mentioned the API Gateway to Simple Queue Service (SQS) service integration use case, but there are many different ways that Lambda functions can be triggered asynchronously. Whenever you have a request that requires a lot of processing or requires multiple steps, you should avoid handling it synchronously. You don’t want to generate a big PDF or convert a bunch of thumbnail images while the user is waiting on the other end of an API. You want that to happen in the background as a background task – and that’s where the idea of offline or asynchronous processing comes in.</p>
<p>Gareth mentioned a use case related to Jamstack. He refers to making changes to frontend web content, and instead of using a WordPress-style CMS, you can save content in a headless CMS system. That can then trigger a Lambda function to rebuild the page’s static HTML, JavaScript and CSS, and push it into S3. He explains that you have the entire power of a Jamstack that can manage this enormous amount of load, loading static content, but still have that asynchronous process to keep pages updated, which can be incredibly useful.</p>
<h3>Machine Learning</h3>
<p>Machine learning is the proverbial “thorn” in serverless’s side. Anytime you say serverless can do pretty much everything, there’s always that one person who responds with: “It can’t do machine learning.” Gareth and I both agreed that Lambda’s “Achille’s heel” when it comes to machine learning is Lambda’s minimal amount of disk space that’s available to you. But he says that serverless as an architectural concept isn’t necessarily just about Lambda functions either. He says there are a couple of angles in response to the “serverless can’t do machine learning” myth. He points to performing image recognition or doing text-to-speech using the managed services already available within the AWS ecosystem. There’s Lex for speech, Rekognition for image recognition, Comprehend for sentiment analysis – that’s machine learning. Those services are all there for you and just an API call away right from your Lambda function.</p>
<p>And there’s also Fargate. If you’re looking for something that can respond quickly to events like Lambda, then Fargate might not be the tool for you. However, if you’re building machine learning models, that’s less of a concern. In most cases, the models are already built for you, and you have many options for running them. If you have some really unique machine learning model that you need to build, there are still options to do that in a fairly serverless way or close-to-serverless way, just maybe not on Lambda functions.</p>
<h3>Final thoughts</h3>
<p>For those who are skeptical about serverless’s applicability to your team or organization’s needs, I hope this post provides some practical use cases to assuage those doubts. If you need no persuasion and are making the move to serverless, my advice to you is: <em>trust the services in the cloud instead of trying to reinvent the wheel</em>. There are so many great built-in features that add resiliency and relieve you from having to do all of it yourself.</p>
<p>Serverless is still maturing, and yes, there are still some rough edges here and there. But we’ve gotten to a point where most things can be implemented using a serverless architecture. If you want to learn more about serverless use cases, you can watch or listen to our Serverless Chats episodes (<a href="https://www.serverlesschats.com/45" target="_blank" rel="noopener">Part 1</a> and <a href="https://www.serverlesschats.com/46" target="_blank" rel="noopener">Part 2</a>).</p>
<p>Listen to the episodes:</p>
<p><iframe width="100%" height="180" class="c1" src="https://share.transistor.fm/e/69a31320/dark" frameborder="0" scrolling="no" seamless="true">[embedded content]</iframe></p>
<p><iframe width="100%" height="180" class="c1" src="https://share.transistor.fm/e/5ea178ed/dark" frameborder="0" scrolling="no" seamless="true">[embedded content]</iframe></p>
<p>Watch the episodes:</p>
<div class="iframe-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/Q3tbdlHH0Mg" frameborder="0" allowfullscreen="allowfullscreen">﻿</iframe></div>
<div class="iframe-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/5NXi-6SmZsU" frameborder="0" allowfullscreen="allowfullscreen">﻿</iframe></div>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/api-gateway/" rel="tag">api gateway</a>, <a href="https://www.jeremydaly.com/tag/aws-lambda/" rel="tag">aws lambda</a>, <a href="https://www.jeremydaly.com/tag/http-apis/" rel="tag">http apis</a>, <a href="https://www.jeremydaly.com/tag/lambda/" rel="tag">lambda</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a>, <a href="https://www.jeremydaly.com/tag/use-cases/" rel="tag">use cases</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c4">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c3">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c2" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<div class="footer-info">? This post was originally published on May 2, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/making-the-case-for-serverless-use-cases/</link>
      <guid>https://www.jeremydaly.com/making-the-case-for-serverless-use-cases/</guid>
      <pubDate>Sat, 02 May 2020 19:51:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #87]]></title>
      <description><![CDATA[<h2>Crossing the Chasm with Serverless… ?</h2>
<p>Welcome to <strong>Issue #87</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-86/">Last week</a>, we wondered why AppSync was so popular and saw a new serverless Redis solution. This week, we have too many releases from AWS to list, some really great EventBridge posts, and a debate by the InfoQ editors about where serverless is in the technology adoption lifecycle. Plus, we have lots of awesome content from the serverless community.</p>
<p>There is a ton to get to today, so let’s jump in!</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://www.datadoghq.com/dg/monitor/lambda/?utm_source=Advertisement&amp;utm_medium=Advertisement&amp;utm_campaign=OffbyNoneServerless-Newsletter" target="_blank" rel="noopener">Monitor all your Lambda functions, API Gateways, SQS queues, DynamoDB tables, and more, straight from Datadog</a><br />
Natively create real-time serverless metrics at one-second granularity for your errors, cold starts, memory used, estimated cost, and more. Datadog’s AWS Lambda integration enables you to monitor all of your serverless metrics, plus logs and traces in one, unified platform, so you can get full context when troubleshooting an issue. Try it for free today. Sponsored</p>
<p><a href="https://sdtimes.com/softwaredev/vercel-raises-21-million-to-transform-javascript-front-end-development/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Vercel raises $21 million to transform JavaScript front-end development</a><br />
It’s been fascinating watching what ZEIT (now Vercel) has done for serverless over the last few years, so this is exciting to see them get this round of funding. Definitely something to keep your eye on!</p>
<p><a href="https://medium.com/serverless-transformation/announcing-sls-dev-tools-v1-0-0-11e9ab01868e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Announcing sls-dev-tools v1.0.0!</a><br />
This tool has been on ? lately. Lots of great things you can do with this tool, so I’m happy to see the v1.0 designation. Check it out if you haven’t already.</p>
<p><a href="https://serverless.com/blog/announcing-http-api-monitoring?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Announcing HTTP API Troubleshooting</a><br />
More great features from the Serverless Framework Pro. Now you can get automatically instrumented monitoring and debugging tools on top of your HTTP APIs right out of the box.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@vinodhinic/lessons-i-learnt-while-building-slack-apps-3ecc6c929180?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Lessons I learnt while building Slack apps</a><br />
I really liked this article by Vinodhini Chockalingam (even though she trashed my lambda-warmer project ?) because it was a detailed account of her thought process when building a serverless backend. It’s interesting to get a look into how people approach solving problems with serverless.</p>
<p><a href="https://medium.com/@DSkoczny/japanese-with-aws-fargate-and-why-you-should-try-aws-rekognition-custom-labels-a63c038797cb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Japanese with AWS Fargate and why you should try AWS Rekognition Custom Labels</a><br />
Performing OCR and translating Japanese characters makes for an interesting serverless use case, but reading this post by Daniel Skoczny as he recounts his experimentation process and the joy he found with each small win, was a great reminder of why I love serverless so much.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://aws.amazon.com/blogs/devops/using-aws-codebuild-to-execute-administrative-tasks/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Using AWS CodeBuild to execute administrative tasks</a><br />
This is a really interesting use case by Gojko Adzic. Rather than using Lambda or Fargate to run occasional admin tasks, you can configure an AWS CodeBuild job to pull the scripts from your source control and execute them with a ton of processing power. He outlines some downsides too, but makes a compelling case otherwise.</p>
<p><a href="https://medium.com/medwing-engineering-product-design/using-lambda-edge-for-server-side-rendering-318d9422d76b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Using lambda@Edge for Server-Side Rendering</a><br />
Really well-written post by Mohamed Elfiky that shows how his team used Lambda@Edge to render React pages at the edge. Lots of good detail in here, and it also happens to be an excellent serverless use case.</p>
<p><a href="https://medium.com/@me.gordonlam.space/use-serverless-to-serve-your-server-side-rendering-project-vue-quasar-d40447225a4f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Use serverless to serve your server-side rendering project (Vue, Quasar)</a><br />
Like doing SSR on Lambda@Edge, using a regular Lambda function is also an option. In this post, Gordon Lam explains how to use SSR with a Vue.js app.</p>
<p><a href="https://medium.com/@kasunwpdimuthu/api-keys-protecting-with-serverless-functions-b92249260061?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Removing Vulnerability From API Keys Using Serverless Functions</a><br />
Here’s a super simple use case, using a serverless function as a proxy to keep an API Key hidden from the frontend. For something as straightforward as this, the author could have probably just used API Gateway as an HTTP PROXY and accomplished the same thing.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://aws.amazon.com/blogs/compute/decoupling-larger-applications-with-amazon-eventbridge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Decoupling larger applications with Amazon EventBridge</a><br />
Great post by James Beswick about Amazon EventBridge. There are lots of app workflows where Step Functions are required, but in many cases, loosely coupled systems choreographed with EventBridge will accomplish what you need with greater independence and autonomy.</p>
<p><a href="https://blog.thundra.io/building-blocks-for-aws-lambda?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Building Blocks for AWS Lambda</a><br />
Serkan Özal has a good post that gives you a quick firehose of serverless features, patterns, and limitations. It’s so easy to miss interesting serverless news, so reading quick reminder posts like this every now and again can’t hurt.</p>
<p><a href="https://medium.com/nordcloud-engineering/keep-track-on-your-cloud-computations-67dd8f172479?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Keep track of your cloud computations</a><br />
This article outlines a variation of the fan-out/fan-in pattern and uses an observer function to poll job status. This seems like a job for Step Functions, but the overall pattern is quite common in serverless architectures.</p>
<p><a href="https://medium.com/@prathameshmahadik2013/everything-we-are-doing-wrong-with-aws-lambda-def77020b611?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Everything we are doing wrong with AWS Lambda.</a><br />
I started reading this article with high hopes, but as soon as I got to the second point, the author started to lose me. Way too much to dissect here, but there is some good advice mixed with some really bad advice in this article. I’d suggest taking a look at the AWS Well-Architected Lens for Serverless before making some of these assumptions.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/better-programming/how-to-provide-static-ips-to-aws-lambdas-in-a-fault-tolerant-way-c42084a0dc81?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">How to Provide Static IPs to AWS Lambdas in a Fault-Tolerant Way</a><br />
It would be great to see a simpler static IP solution for Lambdas, but until then, this implementation from Ivam Luz seems like a fairly robust solution.</p>
<p><a href="https://medium.com/dev-jam/continuously-deploying-serverless-applications-b30e47fed84f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Continuously deploying Serverless Applications</a><br />
Another week, another serverless CI/CD pipeline design. This one from Sabarish Sekar uses CodePipeline and CodeBuild along with the AWS CDK.</p>
<p><a href="https://medium.com/@Michael_Timbs/deploying-serverless-backends-to-aws-with-gitlab-ci-cd-f81106b43709?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Deploying Serverless Backends to AWS with Gitlab CI/CD</a><br />
And here’s another CI/CD setup from Michael Timbs. This example uses the Serverless Framework and the Gitlab CI/CD system to deploy to AWS.</p>
<p><a href="https://medium.com/@j.kapuscik2/how-to-build-your-own-serverless-wetransfer-clone-on-aws-80ccab938731?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">How to build your own serverless WeTransfer clone on AWS?</a><br />
This is a great post by Jakub Kapuscik that gives you a full tutorial using the Amplify Framework to build a completely serverless front and backend application.</p>
<p><a href="https://aws.amazon.com/blogs/compute/building-an-automated-knowledge-repo-with-amazon-eventbridge-and-zendesk/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Building an automated knowledge repo with Amazon EventBridge and Zendesk</a><br />
This is an awesome tutorial that shows you how to implement a bidirectional event orchestration pattern between AWS services and Zendesk using Amazon EventBridge’s third-party integrations. In this example, it uses support ticket events to build a customer self-service knowledge repository.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://searchcloudsecurity.techtarget.com/tip/How-to-address-and-mitigate-serverless-security-issues?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">How to address and mitigate serverless security issues</a><br />
There are several good points in this article by Dave Shackleford, but I’m not a fan of the “sky is falling” approach to highlighting serverless security best practices. Event injection, denial of wallet, and other risks pointed out are certainly possible, but following good application practices and the principle of least privilege, will often put you in a much better security posture than more traditional architectures.</p>
<p><a href="https://www.zdnet.com/article/another-one-line-npm-package-breaks-the-javascript-ecosystem/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Another one-line npm package breaks the JavaScript ecosystem</a><br />
So this happened, and it highlights one of the main security concerns of serverless functions, third-party modules. This is certainly not an issue unique to serverless, but it should be a reminder that third-party modules can easily publish breaking changes, or worse, malicious code that can compromise your serverless functions. Package locks and regular dependency scans should be on your security checklist.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://pages.awscloud.com/GLOBAL-event-OE-serverless-first-function-2020-reg-event.html" target="_blank" rel="noopener">Register for the first-ever, completely free AWS Serverless-First Function</a><br />
The AWS Serverless-First Function is a set of two free-of-charge virtual events that offer the latest education and thought leadership material about serverless approaches on AWS. Happening on Thursday, May 21 and Thursday, May 28, the event agenda includes sessions with AWS leaders like VP of Serverless, David Richardson, VP of Cloud Architecture Strategy, Adrian Cockcroft, customer speakers like Workgrid Software Head of Cloud Engineering, Gillian McCann, and an introduction by Amazon CTO, Werner Vogels. Sponsored</p>
<p><a href="https://dev.to/trek10inc/3-big-things-i-wish-someone-had-told-me-when-i-started-using-aws-2d0n?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">3 Big Things I Wish Someone had Told Me When I Started Using AWS</a><br />
Great post by Jared Short that should provide comfort (and perhaps a little stress) to those that are starting their cloud journeys. The AWS ecosystem is a complex beast, and trying to understand it all is a full-time job in and of itself. Jared provides some excellent advice for anyone feeling overwhelmed by even the thought of it.</p>
<p><a href="https://medium.com/lego-engineering/functionless-s3-integration-inside-a-serverless-casserole-part-1-b300085eea78?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Functionless S3 Integration inside a Serverless Casserole-Part 1</a><br />
Sheen Brisals has started a new blog series on building “Functionless” applications with serverless components. Perhaps it’s too much self-isolation, or just a clever way to make it more relatable, but either way, I’m hungry for more functionless recipes after reading this post.</p>
<p><a href="https://dashbird.io/blog/well-architected-reconcile-resilience-cost-optimization/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Serverless Well-Architected – Reconciling Resilience and Cost-Optimization</a><br />
I’ve been enjoying these posts by Renato Byrro, and I think this is a good topic to consider when building out your serverless systems. I’ve seen more and more patterns that “modify” the infrastructure based on alerts or other triggers, and I’m still trying to decide if this is something we should be encouraging. On the one hand, I like the idea of dynamic infrastructure, but then again, lots of things can probably go wrong with this approach.</p>
<p><a href="https://www.infoq.com/articles/architecture-trends-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Software Architecture and Design InfoQ Trends Report—April 2020</a><br />
The editors of InfoQ kept serverless in the “Early Adopter” phase, which I tend to agree with. But this comment from Thomas Betts is mind boggling: “A year ago, people were talking about building systems that were entirely serverless, and that hype has diminished. Individual serverless features, such as AWS Lambda or Azure Functions, may have crossed the chasm, but completely serverless architecture has not, and possibly won’t ever achieve majority adoption.”</p>
<p><a href="https://winterwindsoftware.com/the-dynamodb-tools-gap/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">The DynamoDB Tools Gap</a><br />
This is a good article by Paul Swail that points out the recent surge in DynamoDB interest, and the lack of tooling available to developers to work with complex single table designs. There are libraries out there (like <a href="http://dynamodbtoolbox.com/" target="_blank" rel="noopener">DynamoDB Toolbox</a> ?) and tools like the NoSQL Workbench and Dynobase, but I do agree that more tools are always welcome.</p>
<p><a href="https://medium.com/@ozantunca/firebase-vs-vercel-aka-zeit-now-2020-7f5ab18d865f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Firebase vs. Vercel (aka Zeit) Now (2020)</a><br />
It’s probably super important to remember that there are <em>a lot</em> of serverless services and abstractions out there. This is a great article by Ozan Tunca that does an honest comparison of these two services.</p>
<h3>Podcasts and Videos…</h3>
<p><a href="https://www.serverlesschats.com/46?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Episode #46: Serverless Use Cases with Gareth McCumskey (Part 2)</a><br />
In this episode, I finish my chat with Gareth McCumskey about serverless use cases including parallel compute, email processing, cron jobs, offline/async processing, machine learning and more. <a href="https://www.youtube.com/watch?v=5NXi-6SmZsU&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://anchor.fm/serverless-transformation/episodes/LEGO-Group--Serverless-Transformation-Nicole-Yip--Sheen-Brisals-ed093e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Serverless Transformation Podcast</a><br />
Ben Ellerby chats with Nicole Yip and Sheen Brisals from The LEGO Group about deployment pipelines, EventBridge, TCO, tooling and much more.</p>
<p><a href="https://castbox.fm/episode/7%3A-Serverless-at-LifeWorks-with-Scott-Smethurst-and-Diana-Ionita-(Part-1)-id2644378-id251327909?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Real World Serverless – Episode #7/8: Serverless at LifeWorks with Scott Smethurst and Diana Ionita</a><br />
Great two part conversation from Yan Cui with Scott Smethurst and Diana Ionita about their work at LifeWorks. I love listening to these stories from developers on the frontlines!</p>
<p><a href="https://www.youtube.com/watch?v=EPyMWD3VmTc?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Keeping up with the Cloud with Jeff Barr – How to stay up to date with all the cloud launches?</a><br />
Marcia Villalba interviews the Wizard of AWS himself, Jeff Barr, about what he does to keep up-to-date with everything that AWS launches, plus how he got into developer relations.</p>
<h3>New from AWS ?</h3>
<p>AWS was busy last week. Here is just a handful of recent releases.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/aws-appsync-enables-support-for-generic-websockets-clients-graphql-real-time-subscriptions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">AWS AppSync enables support for generic WebSockets clients with GraphQL real-time subscriptions</a><br />
This sounds pretty cool: “AppSync allows to easily make any of its supported data sources real-time, with connection management, scaling, fan-out and data broadcasting handled automatically between the service and the clients, enabling developers to focus on the business differentiators for their real-time applications instead of WebSockets operations and infrastructure management.”</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/introducing-amazon-appflow/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Introducing Amazon AppFlow</a><br />
Amazon AppFlow is a fully managed integration service that enables you to securely transfer data between Software-as-a-Service (SaaS) applications like Salesforce, Marketo, Slack, and ServiceNow, and AWS services like Amazon S3 and Amazon Redshift, in just a few clicks. <a href="https://aws.amazon.com/blogs/aws/new-announcing-amazon-appflow/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Read more here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-kinesis-data-firehose-adds-support-for-streaming-data-delivery-to-amazon-elasticsearch-service-in-amazon-vpc/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Amazon Kinesis Data Firehose adds support for streaming data delivery to an Amazon Elasticsearch Service domain in an Amazon Virtual Private Cloud (VPC)</a><br />
Amazon Kinesis Data Firehose can now deliver streaming data to an Amazon Elasticsearch Service domain in an Amazon VPC.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/custom-dictionary-files-now-supported-on-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Custom dictionary files now supported on Amazon Elasticsearch Service</a><br />
Still not serverless, but Amazon Elasticsearch Service now offers support for adding custom dictionary files to your domains. Now you can specify synonyms, stop words, and segmentation files to improve your indexing, matching, and search relevancy.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/aws-chatbot-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">AWS Chatbot Now Generally Available</a><br />
AWS Chatbot is now generally available for all customers. AWS Chatbot is an interactive agent for “ChatOps” that makes it easy to monitor and interact with your AWS resources in your Slack channels and Amazon Chime chat rooms.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/aws-glue-now-supports-serverless-streaming-etl/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">AWS Glue now supports serverless streaming ETL</a><br />
This feature makes it easy to set up continuous ingestion pipelines that prepare streaming data on the fly and make it available for analysis in seconds. <a href="https://aws.amazon.com/blogs/aws/new-serverless-streaming-etl-with-aws-glue/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Read Danilo Poccia’s post</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-cloudwatch-synthetics-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Amazon CloudWatch Synthetics is now generally available</a><br />
Amazon CloudWatch Synthetics is a new feature that supports monitoring your REST APIs, URLs, and website content every minute, 24×7, and alerts you when your application endpoints don’t behave as expected. <a href="https://aws.amazon.com/blogs/aws/new-use-cloudwatch-synthetics-to-monitor-sites-api-endpoints-web-workflows-and-more/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Read Jeff Barr’s post</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/introducing-multi-region-user-pools/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Introducing Multi-Region User Pools</a><br />
The Multi-Region User Pools solution helps ensure reliability in the event of service or infrastructure disruptions by automatically provisioning and configuring the Cognito service in a multi-region, high reliability architecture.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-route-53-supports-domain-name-transfer-between-aws-accounts/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Amazon Route 53 supports Domain Name Transfer between AWS accounts</a><br />
Amazon Route 53 Domains now lets you transfer domain registrations between AWS accounts using the Route 53 API.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-keyspaces-for-apache-cassandra-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Amazon Keyspaces (for Apache Cassandra) is now generally available</a><br />
Amazon Keyspaces (formerly know as Amazon Managed Apache Cassandra Service during preview), is a scalable, highly available, and fully managed Apache Cassandra–compatible database service, and is now generally available.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://blog.thundra.io/improving-your-serverless-feedback-loop-with-sls-dev-tools?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Improving your Serverless feedback loop with sls-dev-tools</a><br />
We’ve been mentioning sls-dev-tools over the last few weeks (which is now at a stable v1.0 release) since the feature improvements keep coming. This post by Mansur Pasha outlines a few of the main features.</p>
<p><a href="https://blog.begin.com/a-new-view-for-begin-data-4b4668da789d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">A new view for Begin Data</a><br />
This is a useful tool for Begin users. Begin Data is a fast, durable key value store that runs on top of AWS DynamoDB. It provides a simplified data API that makes interacting with your data much easier.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/rafalwilinski/status/1253979761052975115?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">“First glance differences and similarities between @dynamodb and #Cassandra in @awscloud Keyspaces flavor, a thread!”</a> <strong>~ Rafal Wilinski</strong><br />
This thread by Rafal Wilinski gives a great overview of the differences between DynamoDB and the new Cassandra Keyspaces.</p>
<p><a href="https://twitter.com/JoeEmison/status/1253656950769942528?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">“All: if you were going to build a better AWS console (third party product), (1) web-based or electron? (2) which service(s) would you do first?”</a> <strong>~ Joe Emison</strong><br />
This post by Joe Emison sparked a really good conversation. Lots of insights for the AWS product teams, but also some thoughts around the value of building tooling to automate or simplify common workflows without needing the console.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>April 2-May 31, 2020 – </strong><a href="https://github.com/singledigit/sam-template-examples">Sessions with SAM: Live Twitch sessions by Eric Johnson (every Thursday at 10AM PDT)</a></p>
<p><strong>April 22, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-partner-OE-Stackery-DevOps-Q2-Webinar-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">From Monolithic to Modern: MasterStream’s Serverless Transformation with Stackery</a> (webinar)</p>
<p><strong>April 22, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0409-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Building Your First Application with AWS Lambda</a> (Tech Talk)</p>
<p><strong><del>April 23, 2020</del> –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a> (Rescheduled to September 24th)</p>
<p><strong><del>April 24, 2020</del> –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a> (Canceled)</p>
<p><strong>April 28, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0420-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Choosing Events, Queues, Topics, and Streams in Your Serverless Application</a> (Tech Talk)</p>
<p><strong>April 29, 2020 –</strong> <a href="https://virtual.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Virtual</a> (I’m hosting this!)</p>
<p><strong>May 4, 2020 –</strong> <a href="https://homeschool.dev/class/production-ready-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Production Ready Serverless – new instructor-led online workshop</a></p>
<p><strong>May 7, 2020 –</strong> <a href="https://jsvidcon.com/events/yan-cui/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Building a social network in under 4 weeks with Serverless and GraphQL</a></p>
<p><strong>May 16, 2020 –</strong> <a href="https://www.meetup.com/AmazonAWS-Delhi/events/270236307/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Patterns and Practices for Building Resilient AWS Serverless Applications</a></p>
<p><strong>May 21 &amp; 28, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-event-OE-serverless-first-function-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2387" target="_blank" rel="noopener">Serverless-First Function by AWS</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Nick Van Hoof</strong> (<a href="https://twitter.com/TheNickVanHoof" target="_blank" rel="noopener">@TheNickVanHoof</a>). Nick is a Cloud Developer at Cloudway, which helps companies by providing a cloud native approach to application development. Nick’s a former math teacher turned cloud evangelist who has spoken at the Serverless Architecture Conference and the API Conference, is part of the ServerlessDays Belgium virtual meet-up, and will be an upcoming speaker at ServerlessDays in Hamburg this fall. In addition to his prolific work on the serverless event circuit, Nick frequently writes about serverless and the cloud around the web, on his personal website, and on his new, aptly named blog, <a href="https://www.theclouddeveloper.io/" target="_blank" rel="noopener">The Cloud Developer</a>. Thank you, Nick, for living the serverless life! ?</p>
<h3>Final Thoughts ?</h3>
<p>Another week has gone by, and like the great Yogi Berra once said, “It’s deja vu all over again.” But even though we’re all stuck at home, it seems as though many in the serverless space have continued to be productive (especially the teams at AWS). Personally, I’ve been pouring my heart and soul into v0.2 of the <a href="http://dynamodbtoolbox.com/" target="_blank" rel="noopener">DynamoDB Toolbox</a>. Plus, I created the <a href="https://chrome.google.com/webstore/detail/route53-database-fixer/mcpogdflbkpechajfghoolagknmhgmig" target="_blank" rel="noopener">Route 53 Database Fixer</a> Chrome Extension just for fun.</p>
<p>Hopefully you’re all staying safe and healthy. Wishing you all another productive week!</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Cheers,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-87/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-87/</guid>
      <pubDate>Wed, 29 Apr 2020 02:36:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #86]]></title>
      <description><![CDATA[<h2>Why is AppSync suddenly so popular? ?</h2>
<p>Welcome to <strong>Issue #86</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-85/">Last week</a>, Fargate got an overhaul, we did some EventBridge storming, and we learned some rules for DynamoDB modeling. This week, we have an unusually high number of AppSync posts, some good serverless fundraising news, and a new serverless Redis solution. Plus, we have plenty of amazing posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://www.datadoghq.com/dg/monitor/lambda/?utm_source=Advertisement&amp;utm_medium=Advertisement&amp;utm_campaign=OffbyNoneServerless-Newsletter" target="_blank" rel="noopener">Monitor all your Lambda functions, API Gateways, SQS queues, DynamoDB tables, and more, straight from Datadog</a><br />
Natively create real-time serverless metrics at one-second granularity for your errors, cold starts, memory used, estimated cost, and more. Datadog’s AWS Lambda integration enables you to monitor all of your serverless metrics, plus logs and traces in one, unified platform, so you can get full context when troubleshooting an issue. Try it for free today. Sponsored</p>
<p><a href="https://dashbird.io/blog/serveless-monitoring-startup-raises-2-million/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Serverless monitoring startup Dashbird raises $2.1m and releases new features for serverless monitoring</a><br />
Congratulations to Taavi and the team over at Dashbird. It’s always great to see serverless vendors getting funding so they can continue to innovate and move the ball forward.</p>
<p><a href="https://medium.com/lambda-store/serverless-redis-is-here-34c2fa335f24?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Serverless Redis Is Here!</a><br />
I have yet to try this, but a Serverless Redis implementation has been needed for quite sometime. I’m still wondering if an HTTP interface might make more sense, but it’s hard to compete with native Redis speeds. I definitely need to take this thing for a spin.</p>
<p><a href="https://www.theregister.co.uk/2020/04/16/cloudflare_cobol/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Cloudflare goes retro with COBOL delivery service – Older coders: Who’s laughing now? Turns out we’re still vital</a><br />
Using the GNUCobol project, you can compile COBOL code to C and then use Emscripten to compile the C code to WebAssembly. Then you can run it on a Cloudflare Worker. How about that?</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@philsarin/how-serverless-tools-helped-us-make-good-architecture-decisions-under-time-pressure-4849016feab4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">How serverless tools helped us make good architecture decisions under time pressure</a><br />
Phil Sarin talks about a recent project he worked on and how they built it using a serverless stack on AWS in only two weeks. He also points out that besides the more well-known benefits of serverless, forcing yourself to think in terms of events, can make it easier to adopt event-driven architectures under time and budget pressure.</p>
<p><a href="https://medium.com/@nwpointer/lessons-learned-building-serverless-data-pipelines-362e60235e24?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Lessons learned building serverless data pipelines</a><br />
Nathan Pointer points out (sorry, couldn’t resist) a few lessons he’s learned while working with serverless data pipelines. The information is relatively straightforward, but the pun alone made it worth including. ?</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@NetflixTechBlog/netflix-images-enhanced-with-aws-lambda-9eda989249bf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Netflix Images Enhanced With AWS Lambda</a><br />
Resizing images is a classic serverless use case, but did you know that Netflix is now using it to generate their images? This is a great post that shows the comparison between their EC2 and Lambda approaches and why Lambda comes out on top with a landslide victory.</p>
<p><a href="https://medium.com/@mohd.lutfalla/how-to-trigger-aws-lambda-by-sms-866e589a6673?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">How to trigger AWS Lambda by SMS?</a><br />
Mohammed Lutfalla presents you with the simple use case of triggering a Lambda function with an SMS message received by AWS Pinpoint. Lots of ways to implement this, including using services like Twilio, but there are plenty of cool tools that could be built using this pattern.</p>
<p><a href="https://medium.com/@shouldroforion/recipe-for-resilient-engineers-resilient-scalable-cloud-native-aws-sftp-for-300-month-e0d844e80e94?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Recipe for Resilient Engineers: Resilient, Scalable, Cloud-Native AWS SFTP for &lt; $300/Month</a><br />
This is another really great use case that takes advantage of a number of AWS services. In this post, Mark Fowler shows you how to set up a fully-managed SFTP solution. I’m not sure how he’s calculating the costs exactly, but either way, for a system under heavy load, the TCO is quite attractive.</p>
<p><a href="https://medium.com/@tschoffelen/designing-a-serverless-video-streaming-pipeline-2d3828f3ccf8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Designing a serverless video streaming pipeline</a><br />
This is a very cool serverless use case. Thomas Schoffelen explains how he build a video conversion and streaming pipeline using serverless services from AWS.</p>
<p><a href="https://medium.com/@rootbin/export-cloudwatch-logs-to-s3-with-lambda-dd45cf246766?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Export CloudWatch Logs to S3 using Lambda</a><br />
Here’s a straightforward DevOps use case for serverless. Omar Dulaimi explains how to run a scheduled Lambda function to copy your CloudWatch Logs over to an S3 bucket.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://dev.to/matttyler/the-hitchhiker-s-guide-to-s3-access-controls-2h0a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">The Hitchhiker’s Guide to S3 Access Controls</a><br />
Awesome resource created by Matt Tyler that gives you pretty much all you need to know about S3 Access Controls as well as some strategies for choosing the right access level.</p>
<p><a href="https://winterwindsoftware.com/service-microservice-stack/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Services, Microservices and Stacks</a><br />
Like Paul Swail, I too tend to be a stickler for semantics, especially when it comes to communicating technical concepts. You won’t get all your questions answered with this post, but Paul does a good job giving us clear and useful definitions of these terms.</p>
<p><a href="https://medium.com/serverless-transformation/asynchronous-client-interaction-in-aws-serverless-polling-websocket-server-sent-events-or-acf10167cc67?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Asynchronous client interaction in AWS Serverless: Polling, WebSocket, Server-Sent Events or AppSync?</a><br />
Xavier Lefèvre shows us different ways to push data to your client applications. AppSync is one of the choices, but Xavier prefers WebSockets, and explains why in this post.</p>
<p><a href="https://dashbird.io/blog/why-serverless-apps-fail-and-how-to-design-resilient-architectures/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Why Serverless Apps Fail and How to Design Resilient Architectures</a><br />
Renato Byrro points out a common architectural design problem that often creeps up in serverless applications. When you have dependent downstream systems that do not have the same scaling characteristics, using proper mitigation techniques is essential.</p>
<p><a href="https://medium.com/@enrico.portolan/how-aws-lambda-retry-really-works-fb823e78b4a1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">How AWS Lambda Retry really works</a><br />
Enrico Portolan lays out some of the retry mechanisms that AWS makes available when interacting with Lambda functions. There’s a discussion of swallowing errors in there, plus the coupling effects of Step Functions. I wouldn’t suggest following all the guidelines in here, but the need to learn failure modes in the cloud is the big takeaway.</p>
<p><a href="https://medium.com/faun/how-to-tame-graphql-aws-appsync-amplify-and-cloudformation-to-the-rescue-58e900196cb3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">How to tame GraphQL: AWS AppSync, Amplify and Cloudformation to the rescue!</a><br />
This post gets into the weeds a bit, but is a good overall intro to GraphQL and AWS AppSync. I really love the idea of AppSync, but I still find it less than ideal for stitching together multiple microservices. I think I just need to spend some more time with it.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://www.serverlesschats.com/" target="_blank" rel="noopener">The Serverless Chats Podcast</a><br />
Geek out on everything serverless! Each week, Jeremy Daly, serverless advocate, AWS Serverless Hero, and Off-by-none founder, chats with another serverless champion to explore and do a deep-dive into specific topics in the serverless space. Sponsored</p>
<p><a href="https://www.trek10.com/blog/appsync-with-the-aws-cloud-development-kit?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">AppSync With The AWS Cloud Development Kit</a><br />
For more insight into AppSync, this post by Ken Winner gets into some of the challenges with building and maintaining AppSync configurations and how there are some tools that can help with that. Unfortunately, as you can see from the article, there’s still the need for some duct tape and popsicle sticks to use some of these features outside the CLI</p>
<p><a href="https://theburningmonk.com/2020/04/appsync-how-to-error-on-dynamodb-conditional-check-failures/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">AppSync: how to error on DynamoDB conditional check failures</a><br />
If you’re using AppSync to interact with DynamoDB, make sure you check out this post by Yan Cui. Apparently the resolver doesn’t throw an error when condition checks fail, so you have to deal with this in your response mapping template.</p>
<p><a href="https://itnext.io/deploy-an-angular-application-on-aws-using-serverless-5e099a851e92?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Deploy an Angular application on AWS using serverless</a><br />
Despite the fact that it’s using Angular as the frontend framework (kidding ?), this is a great little tutorial by Marco Zuccaroli that shows you how to deploy your SPA to CloudFront using the Serverless Framework and the single-page-app plugin. No Lambda functions required.</p>
<p><a href="https://dev.to/azure/refactor-your-node-js-and-express-apis-to-serverless-apis-with-azure-functions-355j?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Tutorial: Refactor Your Node.js and Express APIs to Serverless APIs with Azure Functions</a><br />
In this tutorial, John Papa shows you how to convert your Express.js API into Azure Functions. It’s another example of a monolithic function (Azure Functionlith?), but again, a straightforward way to get your serverless on.</p>
<p><a href="https://medium.com/@rebremer/how-to-create-a-selenium-web-scraper-in-azure-functions-f156fd074503?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">How to create a Selenium web scraper in Azure Functions</a><br />
If your AWS IP addresses get blocked, maybe you could build your web scraper using Azure Functions instead? ?‍♂️ René Bremer teaches you how.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.jeremydaly.com/important-lessons-from-the-dynamodb-book/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">12 Important Lessons from The DynamoDB Book</a><br />
I spoke with Alex DeBrie about his new DynamoDB Book, and we discussed twelve important lessons for anyone working with DynamoDB modeling. Lots of good lessons in here for anyone approaching DynamoDB.</p>
<p><a href="https://blog.bitsrc.io/building-a-serverless-webapp-why-you-should-consider-the-monolith-4f0105935589?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Building a Serverless Web App: Why You Should Consider the Monolith</a><br />
Ashan Fernando encourages the use of a Lambdalith as an easy path to serverless. I favor the single-purpose function approach, but this isn’t the worse pattern if you’re just getting started. Plus, he mentions my Lambda API project, so I don’t want to be overly critical. ?</p>
<p><a href="https://medium.com/devops-dudes/serverless-graphql-developer-nirvana-1ca3e7640cc6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Serverless + GraphQL = Developer Nirvana</a><br />
Hyperbole be damned! I obviously agree that serverless is a major game changer for speed and innovation, and clearly many companies have had great success with GraphQL. Although Tj Blogumas doesn’t mention it directly, I still think AppSync needs some work before it becomes my go-to.</p>
<p><a href="https://medium.com/@xywu333/4-things-you-must-know-before-using-firebase-cloud-firestore-in-2020-bc5cf10f2bd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">4 Things you must know before using Firebase Cloud FireStore in 2020</a><br />
I really appreciate this article by Shawn Wu, however, I think this type of developer confusion is becoming more prevalent as NoSQL databases like DynamoDB and Firebase become more popular. You <strong>can’t</strong> use NoSQL like a relational database, that’s not the point. So if you approach it with that mindset, like Shawn, you’re going to be sorely disappointed.</p>
<h3>Podcasts and Videos… ?</h3>
<p><a href="https://www.serverlesschats.com/45?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Serverless Chats – Episode #45: Serverless Use Cases with Gareth McCumskey (Part 1)</a><br />
In this episode, I chat with Gareth McCumskey about a number of production-ready serverless use cases including RESTful APIs, GraphQL, WebSockets, and capturing clickstream data in PART 1 of this two-part conversation. <a href="https://www.youtube.com/watch?v=Q3tbdlHH0Mg&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Watch on YouTube</a>!</p>
<p><a href="https://www.youtube.com/watch?v=tyFYq35RCb0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Foobar: Optimize Your Lambda Functions with Alex Casalboni</a><br />
Marcia Villalba hosts Alex Casalboni to talk about optimizing your Lambda functions to minimize costs and maximize performance.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/aws-x-ray-sdk-for-go-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">AWS X-Ray SDK for Go is now generally available</a><br />
AWS X-Ray SDK for Go is now generally available, enabling Go developers to get an end to end view of requests as they travel through their applications.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/exporting-http-apis-as-openapi-3-now-supported-by-amazon-api-gateway/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Exporting HTTP APIs as OpenAPI 3.0 Now Supported by Amazon API Gateway</a><br />
You can now export an OpenAPI 3.0 compliant API definition file from HTTP APIs in Amazon API Gateway.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-redshift-announces-general-availability-for-federated-querying/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Amazon Redshift announces general availability for federated querying</a><br />
This is really cool. With Amazon Redshift Federated Query, you can query live data in Amazon RDS for PostgreSQL and Amazon Aurora PostgreSQL and integrate it with the data in your Amazon Redshift and Amazon S3 environments.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/introducing-aws-elemental-link-a-device-to-send-live-video-to-aws/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Introducing AWS Elemental Link: A Device to Send Live Video to AWS</a><br />
I know it has nothing to do with serverless, but as someone who has been doing a lot with video lately, this thing looks pretty cool.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/@AlexBouchard/dealing-with-webhooks-sucks-but-theres-something-you-can-do-about-it-2a23ceb8c42?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Dealing With Webhooks Sucks But There’s Something You Can Do About It</a><br />
This actually looks like a great tool if you are dealing with lots of incoming webhooks. Add some throttling capabilities in there and this could be very useful for lots of people.</p>
<p><a href="https://medium.com/serverless-transformation/5-open-source-tools-to-improve-your-serverless-development-experience-8f2eaa89a2b5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">5 Open Source Tools to Improve Your Serverless Development Experience</a><br />
Ben Ellerby has a list of open source tools that will make your serverless development experience much better.</p>
<p><a href="https://medium.com/@georgemccreadie/run-multiple-instances-of-serverless-offline-like-a-pro-and-watch-for-changes-85271977b271?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Run multiple instances of Serverless Offline like a pro and watch for changes</a><br />
George McCreadie built a cool little tool called <code>serverless-offline-multi</code> that lets you run multiple serverless-offline emulators in the same shell. Running serverless locally is still a pain, but this might make it a little easier for you.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/AWSbrett/status/1252323377278119936?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">What’s your preferred way to reference DynamoDB Tables that have auto-generated names when the tables and functions are in separate stacks/#serverless services? Outputs? Environment Variables? Parameter Store?</a> <strong>~ Brett Andrews</strong><br />
Great discussion on this post by Brett. I think there are a lot of different factors to consider, but it seems that SSM Parameter Store has the most support.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>April 2-May 31, 2020 – </strong><a href="https://github.com/singledigit/sam-template-examples">Sessions with SAM: Live Twitch sessions by Eric Johnson (every Thursday at 10AM PDT)</a></p>
<p><strong>April 22, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-partner-OE-Stackery-DevOps-Q2-Webinar-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">From Monolithic to Modern: MasterStream’s Serverless Transformation with Stackery</a> (webinar)</p>
<p><strong>April 22, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0409-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Building Your First Application with AWS Lambda</a> (Tech Talk)</p>
<p><strong><del>April 23, 2020</del> –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a> (Rescheduled to September 24th)</p>
<p><strong><del>April 24, 2020</del> –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a> (Canceled)</p>
<p><strong>April 28, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0420-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2386" target="_blank" rel="noopener">Choosing Events, Queues, Topics, and Streams in Your Serverless Application</a> (Tech Talk)</p>
<p><strong>April 29, 2020 –</strong> <a href="https://virtual.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Virtual</a> (I’m hosting this!)</p>
<p><strong>May 4, 2020 –</strong> <a href="https://homeschool.dev/class/production-ready-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Production Ready Serverless – new instructor-led online workshop</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Brett Andrews</strong> (<a href="https://twitter.com/AWSbrett" target="_blank" rel="noopener">@AWSbrett</a>). Brett is a Staff Software Engineer at Wizeline where he helps improve the performance of software teams. Prior to Wizeline, Brett was a Front-End Engineer for AWS where he was instrumental in shaping the direction of serverless. He lead the UI teams for API Gateway and the Serverless Application Repository, along with the Open Source Software team for SAM and aws-serverless-express. In addition to his influential run at AWS, Brett has some great articles published on his <a href="https://www.halfstack.software/" target="_blank" rel="noopener">personal site</a> and LinkedIn, and can always be counted on to tweet about the latest in serverless. Thanks, Brett, for your part in the rise of serverless! ?</p>
<h3>Final Thoughts ?</h3>
<p>#StayAtHome, Day 342 ? (at least it feels like it). I just found out that the Stay at Home order has been extended in Massachusetts, and that schools are closed for the rest of this school year. At least I can look forward to learning some more <a href="https://twitter.com/jeremy_daly/status/1251899913178435586" target="_blank" rel="noopener">#COVIDskills</a> and forcing my daughters to make <a href="https://twitter.com/jeremy_daly/status/1251227849123602432" target="_blank" rel="noopener">thank you videos</a> for people who send us free stuff. Oh, and maybe I’ll be able to finish v0.2 of <a href="https://github.com/jeremydaly/dynamodb-toolbox" target="_blank" rel="noopener">this project</a> sooner rather than later.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Stay safe out there,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-86/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-86/</guid>
      <pubDate>Tue, 21 Apr 2020 21:15:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[12 Important Lessons from The DynamoDB Book]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book-1024x576.png 1024w" /></div>
<p>Fellow serverless advocate, and AWS Data Hero, <strong><a href="https://twitter.com/alexbdebrie" target="_blank" rel="noopener">Alex DeBrie</a></strong>, recently released <a href="https://www.dynamodbbook.com/" target="_blank" rel="noopener">The DynamoDB Book</a>, which ventures way beyond the basics of DynamoDB, but still offers an approachable and useful resource for developers of any experience level. I had the opportunity to read the book and then speak with Alex about it on <em><a href="https://www.serverlesschats.com/" target="_blank" rel="noopener">Serverless Chats</a></em>. We discussed several really important lessons from the book that every DynamoDB practitioner needs to know. Here are twelve of my favorites, in no particular order.</p>
<h3>1. Think in terms of item collections</h3>
<p>It’s always been helpful for me to think about partitions like folders on your computer, and items as the files within those folders. Alex thinks of partitions as collections of items and stresses that you really need to think about which collections and subset of items are required by your access patterns. The answer to questions like “How do I join data?” and “How do I represent things like one-to-many relationships?” ultimately comes down to properly organizing items into collections and understanding which groups of items you actually need to have available on the same partition. Alex does an excellent job explaining this in the book.</p>
<h3>2. Understand partitions and consistency</h3>
<p>While the underlying mechanics of DynamoDB may be abstracted away from you, Alex points out that understanding the basics of partitions and consistency is important to properly modeling your data. This is mainly due to how DynamoDB stores and looks up items, which is dramatically different from your traditional relational database systems. Most importantly, indexes create a <strong>new copy of the data</strong> (not just a reference), which means creating new lookup dimensions can add more replication overhead and additional storage costs. In terms of consistency, it’s useful to know that the data is written to multiple nodes (and there’s that whole CAP theorem thing). So it’s quite possible to access a node that hasn’t been replicated to yet. You can avoid this using more expensive strongly consistent reads, though I personally haven’t found a lot of use cases for them.</p>
<h3>3. Overload your keys and indexes</h3>
<p>If you’re doing a single table design (which you should be), you need to share your table’s partition key and sort key with items that represent multiple entity types. Because of this, your primary keys will often look quite different from one another, but this allows you to satisfy multiple access patterns using just the primary index. This same strategy works for your GSI and LSI attributes as well. This does create quite the eye chart when you view the raw data, but Alex recommends creating an entity chart when working through your modeling. This way you have a document that shows the pattern needed for each entity type, and provides a blueprint for how to construct the primary keys.</p>
<h3>4. Separate ‘application’ attributes from ‘indexing’ attributes</h3>
<p>Alex articulates the benefit of separating out attributes used by your application from attributes used by your indexes. This is something I had previously discussed with Rick Houlihan as being sort of an evolution in DynamoDB modeling thinking. As Alex points out, it is much easier to copy data into separate indexed attributes than it is to use a single, multipurpose attribute. Even if it is the exact same value in some cases, separate attributes give you much more control over the structure of the data used by your indexes. In the past, I’ve built tables with composite sort keys that would parse out specific values when I’d needed them in my application as well as attempt to use the same structure as part of multiple indexes. While it was possible to make this work, it was terribly inflexible, and there were always so many things that could go wrong.</p>
<p>Using this new strategy, I store each distinct value in its own attribute, and then generate my index attribute values using the appropriate pattern. This allows me to easily parse them out of the table without having to worry about what the partition key pattern is or what the sort key pattern is. Plus, I can easily recreate the index attributes at any time since I have all the data readily available.</p>
<h3>5. Add a ‘TYPE’ attribute to every item</h3>
<p>This was something that Alex had actually credited to me, but I’m quite sure I’m not alone in discovering this tactic. This idea occurred to me when I was building the DynamoDB toolbox. I was thinking ahead to single table designs that stored multiple entity types, and was trying to figure out how to correctly parse those when returned from a query. You can have a lot of overlapping attributes, and sometimes you can’t tell from just the partition and sort keys exactly what type of entity it is. By adding a “type” attribute to each item, you can easily distinguish between entities, making it simple to do things like unmarshall the data into a more readable format or route it properly in ETL tasks .</p>
<h3>6. Learn relational modeling strategies</h3>
<p>You can learn all the mechanics, but without understanding the proper strategies for modeling relational data, you can’t possibly leverage the full power of DynamoDB. In the past, there hasn’t been enough information out there that gives you well-documented strategies to be able to do that. The <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html" target="_blank" rel="noopener">DynamoDB Best Practices</a> guide on the AWS site offers some really good information, but doesn’t go into deep detail. Alex’s book does a great job filling in the missing pieces with a very thorough section on these strategies.</p>
<p><strong>Five ways to handle One-to-Many relationships<br /></strong>I highly recommend learning these strategies that Alex outlines in the book. He covers five different One-to-Many modeling strategies including denormalization using a complex attribute, denormalization by duplicating data, using a composite primary key with the Query API action, and using a secondary index with the Query API action. The fifth strategy, using a composite sort key with hierarchical data, is a really, really powerful one. Alex shares a use case involving store locations, using a hierarchy to represent locations – country, state, city, etc. I’ve used this strategy to create a number of very cool data structures, including ones with a nested item model.</p>
<p><strong>Four ways to handle Many-to-Many relationships<br /></strong>There are also a number of ways to represent Many-to-Many relationships within DynamoDB. Some of these do tend to get a bit more complicated, like adjacency lists and materialized graphs. These are typically hard to visualize when viewing the raw data, which is why using a tool like NoSQL workbench for DynamoDB can make things much easier. Both Alex and I are big fans. It allows you to create your indexes, use facets to define entity types, load up sample data, and then pivot that data so you can see how the relationships work. These patterns can be a little confusing, but Alex offers plenty of guidance along with helpful use cases.</p>
<p>Alex also mentions using normalization and multiple requests to model many-to-many relationships. While it’s a valid pattern, it’s one of those strategies you hope to avoid because you don’t want to be making all those requests. Strategies like this highlight the importance of caching your ‘GET’ requests. If you are constantly fetching the same data, the more you can rely on a cache, the less you’ll have to pay to retrieve it from the database. Having good timeouts or using a write-through cache will make sure that the data doesn’t get stale.</p>
<h3>7. Use sparse indexes</h3>
<p>Sparse indexes are a very powerful tool at your disposal. Alex shares a number of useful patterns, like how to filter by entity types or how to list just users marked as administrators. I love using sparse indexes simply because there are so many use cases. If you’re looking for things like error conditions, orders in a certain state, or tickets that have risen to some severity level, you can inexpensively copy that data into a sparse index. This gives you quick access to those lists without having to run slow and expensive scan operations.</p>
<p>Understanding how to use sparse indexes might also help you reconsider which access patterns the user-facing piece of your application actually needs. For example, modeling your application to get a list of all your users when it’s only used for internal reporting might be unnecessary use of DynamoDB’s power. You’d likely be better off replicating that data to something like MySQL using DynamoDB streams. Ask yourself, “What happens if I have thousands of users banging up against my table, and what do they need to do quickly?” That’s what I try to optimize for.</p>
<h3>8. Have a good sorting strategy</h3>
<p>DynamoDB gives you limited querying capabilities. You essentially request a partition and have some control over the contents of the sort key. The ‘begins_with’ option is the closest thing you have to true “search” capabilities. Other than that, you’re basically looking for sort keys that are between certain values, or perhaps greater than or less than some value. But because DynamoDB uses lexicographical sorting, there are some really handy use cases that become possible. The most frequent use case is likely needing to sort by a timestamp. However, epoch timestamps or ISO 8601 dates can lack uniqueness, are easy to guess, and aren’t always URL-friendly. Alex recommends using KSUIDs (K-Sortable Unique Identifiers) created by the team at Segment. This gives you data sortable IDs, but also the uniqueness required.</p>
<h3>9. Don’t be afraid of migrations</h3>
<p>When designing tables, we have a tendency to ask, “What if I need to change this thing down the road?” With a few thousand records, it doesn’t seem that difficult. But what if the table grows to hundreds of gigabytes? All of a sudden, the process of adding new access patterns or attributes, and changing the underlying data model, suddenly seems like an overwhelming endeavour. Changing a data model is never easy, but Alex dedicates an entire chapter that outlines some strategies that can make these types of migrations easier. For me, I started noticing a lot of flexibility once I started separating my application attributes from my indexing attributes.</p>
<h3>10. Parallel scans are your new best friend</h3>
<p>One way to make the aforementioned migrations easier is with parallel scans. Couple these with Lambda functions, and you can dial up the concurrency to process as much data as you want, and in relatively short order. Alex suggests using Step Functions to fan out parallel scans to Lambda workers. As soon as you figure out how to do that, all of a sudden, all these daunting ETL tasks are much more approachable.</p>
<h3>11. Ensure uniqueness across multiple attributes with transactions</h3>
<p>In the book, Alex gives a strategy for ensuring uniqueness across multiple attributes. I was glad that he mentioned this since I often need to deal with this in my own designs. In cases where you might require a unique username and email address, Alex points out that you don’t want to bake them both into the primary key, because that won’t work. Instead, you need to create two separate items and use a condition expression and a transaction. This way, if any of those operations fail, the entire operation will be rolled back.</p>
<h3>12. Precompute your reference counts</h3>
<p>Unfortunately, getting a count of items in a DynamoDB table isn’t as easy as running a <code>select count(*) from myTable</code> statement. The need to do this, however, is still critical for most applications. There are some bad ways to accomplish this, like scanning the entire table and counting the items that matched a certain criteria. Or maybe if I have the right indexes set up, I could run a query on a smaller subset of data. But either way, we need to understand that these methods are probably a terrible (and expensive) idea. Alex explains that if you need to maintain reference counts, it’s best to increment a counter in a parent item as new items are added or updated. This can be done using transactions (or even simple batch writes), or even using DynamoDB streams.</p>
<h3>Final Thoughts</h3>
<p>If you’re using (or thinking about using) DynamoDB, then Alex’s book is an absolute must-have. I’ve been using it as my go-to reference for pretty much everything DynamoDB, and I think it will make a great companion to anyone else exploring this awesome tool. To listen to Alex and me chat in greater detail about his book, listen to our <a href="https://www.serverlesschats.com/43" target="_blank" rel="noopener">Serverless Chats episode</a>. If you want a copy of the book, you can buy it at <a href="http://dynamodbbook.com/" target="_blank" rel="noopener">dynamodbbook.com</a>.</p>
<p>Listen to the episode:<br /><iframe width="100%" height="180" class="c1" src="https://share.transistor.fm/e/4f70cfc5/dark" frameborder="0" scrolling="no" seamless="true">[embedded content]</iframe></p>
<p>Watch the episode:</p>
<div class="iframe-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/GZTLFWlEnaw" frameborder="0" allowfullscreen="allowfullscreen">﻿</iframe></div>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/data-modeling/" rel="tag">data modeling</a>, <a href="https://www.jeremydaly.com/tag/dynamodb/" rel="tag">dynamodb</a>, <a href="https://www.jeremydaly.com/tag/nosql/" rel="tag">nosql</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c4">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c3">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c2" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<div class="footer-info">? This post was originally published on April 16, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/12-important-lessons-from-the-dynamodb-book/</link>
      <guid>https://www.jeremydaly.com/12-important-lessons-from-the-dynamodb-book/</guid>
      <pubDate>Fri, 17 Apr 2020 01:48:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[12 Important Lessons from The DynamoDB Book]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/04/12-important-lessons-from-the-dynamodb-book-1024x576.png 1024w" /></div>
<p>Fellow serverless advocate, and AWS Data Hero, <strong><a href="https://twitter.com/alexbdebrie" target="_blank" rel="noopener">Alex DeBrie</a></strong>, recently released <a href="https://www.dynamodbbook.com/" target="_blank" rel="noopener">The DynamoDB Book</a>, which ventures way beyond the basics of DynamoDB, but still offers an approachable and useful resource for developers of any experience level. I had the opportunity to read the book and then speak with Alex about it on <em><a href="https://www.serverlesschats.com/" target="_blank" rel="noopener">Serverless Chats</a></em>. We discussed several really important lessons from the book that every DynamoDB practitioner needs to know. Here are twelve of my favorites, in no particular order.</p>
<h3>1. Think in terms of item collections</h3>
<p>It’s always been helpful for me to think about partitions like folders on your computer, and items as the files within those folders. Alex thinks of partitions as collections of items and stresses that you really need to think about which collections and subset of items are required by your access patterns. The answer to questions like “How do I join data?” and “How do I represent things like one-to-many relationships?” ultimately comes down to properly organizing items into collections and understanding which groups of items you actually need to have available on the same partition. Alex does an excellent job explaining this in the book.</p>
<h3>2. Understand partitions and consistency</h3>
<p>While the underlying mechanics of DynamoDB may be abstracted away from you, Alex points out that understanding the basics of partitions and consistency is important to properly modeling your data. This is mainly due to how DynamoDB stores and looks up items, which is dramatically different from your traditional relational database systems. Most importantly, indexes create a <strong>new copy of the data</strong> (not just a reference), which means creating new lookup dimensions can add more replication overhead and additional storage costs. In terms of consistency, it’s useful to know that the data is written to multiple nodes (and there’s that whole CAP theorem thing). So it’s quite possible to access a node that hasn’t been replicated to yet. You can avoid this using more expensive strongly consistent reads, though I personally haven’t found a lot of use cases for them.</p>
<h3>3. Overload your keys and indexes</h3>
<p>If you’re doing a single table design (which you should be), you need to share your table’s partition key and sort key with items that represent multiple entity types. Because of this, your primary keys will often look quite different from one another, but this allows you to satisfy multiple access patterns using just the primary index. This same strategy works for your GSI and LSI attributes as well. This does create quite the eye chart when you view the raw data, but Alex recommends creating an entity chart when working through your modeling. This way you have a document that shows the pattern needed for each entity type, and provides a blueprint for how to construct the primary keys.</p>
<h3>4. Separate ‘application’ attributes from ‘indexing’ attributes</h3>
<p>Alex articulates the benefit of separating out attributes used by your application from attributes used by your indexes. This is something I had previously discussed with Rick Houlihan as being sort of an evolution in DynamoDB modeling thinking. As Alex points out, it is much easier to copy data into separate indexed attributes than it is to use a single, multipurpose attribute. Even if it is the exact same value in some cases, separate attributes give you much more control over the structure of the data used by your indexes. In the past, I’ve built tables with composite sort keys that would parse out specific values when I’d needed them in my application as well as attempt to use the same structure as part of multiple indexes. While it was possible to make this work, it was terribly inflexible, and there were always so many things that could go wrong.</p>
<p>Using this new strategy, I store each distinct value in its own attribute, and then generate my index attribute values using the appropriate pattern. This allows me to easily parse them out of the table without having to worry about what the partition key pattern is or what the sort key pattern is. Plus, I can easily recreate the index attributes at any time since I have all the data readily available.</p>
<h3>5. Add a ‘TYPE’ attribute to every item</h3>
<p>This was something that Alex had actually credited to me, but I’m quite sure I’m not alone in discovering this tactic. This idea occurred to me when I was building the DynamoDB toolbox. I was thinking ahead to single table designs that stored multiple entity types, and was trying to figure out how to correctly parse those when returned from a query. You can have a lot of overlapping attributes, and sometimes you can’t tell from just the partition and sort keys exactly what type of entity it is. By adding a “type” attribute to each item, you can easily distinguish between entities, making it simple to do things like unmarshall the data into a more readable format or route it properly in ETL tasks .</p>
<h3>6. Learn relational modeling strategies</h3>
<p>You can learn all the mechanics, but without understanding the proper strategies for modeling relational data, you can’t possibly leverage the full power of DynamoDB. In the past, there hasn’t been enough information out there that gives you well-documented strategies to be able to do that. The <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html" target="_blank" rel="noopener">DynamoDB Best Practices</a> guide on the AWS site offers some really good information, but doesn’t go into deep detail. Alex’s book does a great job filling in the missing pieces with a very thorough section on these strategies.</p>
<p><strong>Five ways to handle One-to-Many relationships<br /></strong>I highly recommend learning these strategies that Alex outlines in the book. He covers five different One-to-Many modeling strategies including denormalization using a complex attribute, denormalization by duplicating data, using a composite primary key with the Query API action, and using a secondary index with the Query API action. The fifth strategy, using a composite sort key with hierarchical data, is a really, really powerful one. Alex shares a use case involving store locations, using a hierarchy to represent locations – country, state, city, etc. I’ve used this strategy to create a number of very cool data structures, including ones with a nested item model.</p>
<p><strong>Four ways to handle Many-to-Many relationships<br /></strong>There are also a number of ways to represent Many-to-Many relationships within DynamoDB. Some of these do tend to get a bit more complicated, like adjacency lists and materialized graphs. These are typically hard to visualize when viewing the raw data, which is why using a tool like NoSQL workbench for DynamoDB can make things much easier. Both Alex and I are big fans. It allows you to create your indexes, use facets to define entity types, load up sample data, and then pivot that data so you can see how the relationships work. These patterns can be a little confusing, but Alex offers plenty of guidance along with helpful use cases.</p>
<p>Alex also mentions using normalization and multiple requests to model many-to-many relationships. While it’s a valid pattern, it’s one of those strategies you hope to avoid because you don’t want to be making all those requests. Strategies like this highlight the importance of caching your ‘GET’ requests. If you are constantly fetching the same data, the more you can rely on a cache, the less you’ll have to pay to retrieve it from the database. Having good timeouts or using a write-through cache will make sure that the data doesn’t get stale.</p>
<h3>7. Use sparse indexes</h3>
<p>Sparse indexes are a very powerful tool at your disposal. Alex shares a number of useful patterns, like how to filter by entity types or how to list just users marked as administrators. I love using sparse indexes simply because there are so many use cases. If you’re looking for things like error conditions, orders in a certain state, or tickets that have risen to some severity level, you can inexpensively copy that data into a sparse index. This gives you quick access to those lists without having to run slow and expensive scan operations.</p>
<p>Understanding how to use sparse indexes might also help you reconsider which access patterns the user-facing piece of your application actually needs. For example, modeling your application to get a list of all your users when it’s only used for internal reporting might be unnecessary use of DynamoDB’s power. You’d likely be better off replicating that data to something like MySQL using DynamoDB streams. Ask yourself, “What happens if I have thousands of users banging up against my table, and what do they need to do quickly?” That’s what I try to optimize for.</p>
<h3>8. Have a good sorting strategy</h3>
<p>DynamoDB gives you limited querying capabilities. You essentially request a partition and have some control over the contents of the sort key. The ‘begins_with’ option is the closest thing you have to true “search” capabilities. Other than that, you’re basically looking for sort keys that are between certain values, or perhaps greater than or less than some value. But because DynamoDB uses lexicographical sorting, there are some really handy use cases that become possible. The most frequent use case is likely needing to sort by a timestamp. However, epoch timestamps or ISO 8601 dates can lack uniqueness, are easy to guess, and aren’t always URL-friendly. Alex recommends using KSUIDs (K-Sortable Unique Identifiers) created by the team at Segment. This gives you data sortable IDs, but also the uniqueness required.</p>
<h3>9. Don’t be afraid of migrations</h3>
<p>When designing tables, we have a tendency to ask, “What if I need to change this thing down the road?” With a few thousand records, it doesn’t seem that difficult. But what if the table grows to hundreds of gigabytes? All of a sudden, the process of adding new access patterns or attributes, and changing the underlying data model, suddenly seems like an overwhelming endeavour. Changing a data model is never easy, but Alex dedicates an entire chapter that outlines some strategies that can make these types of migrations easier. For me, I started noticing a lot of flexibility once I started separating my application attributes from my indexing attributes.</p>
<h3>10. Parallel scans are your new best friend</h3>
<p>One way to make the aforementioned migrations easier is with parallel scans. Couple these with Lambda functions, and you can dial up the concurrency to process as much data as you want, and in relatively short order. Alex suggests using Step Functions to fan out parallel scans to Lambda workers. As soon as you figure out how to do that, all of a sudden, all these daunting ETL tasks are much more approachable.</p>
<h3>11. Ensure uniqueness across multiple attributes with transactions</h3>
<p>In the book, Alex gives a strategy for ensuring uniqueness across multiple attributes. I was glad that he mentioned this since I often need to deal with this in my own designs. In cases where you might require a unique username and email address, Alex points out that you don’t want to bake them both into the primary key, because that won’t work. Instead, you need to create two separate items and use a condition expression and a transaction. This way, if any of those operations fail, the entire operation will be rolled back.</p>
<h3>12. Precompute your reference counts</h3>
<p>Unfortunately, getting a count of items in a DynamoDB table isn’t as easy as running a <code>select count(*) from myTable</code> statement. The need to do this, however, is still critical for most applications. There are some bad ways to accomplish this, like scanning the entire table and counting the items that matched a certain criteria. Or maybe if I have the right indexes set up, I could run a query on a smaller subset of data. But either way, we need to understand that these methods are probably a terrible (and expensive) idea. Alex explains that if you need to maintain reference counts, it’s best to increment a counter in a parent item as new items are added or updated. This can be done using transactions (or even simple batch writes), or even using DynamoDB streams.</p>
<h3>Final Thoughts</h3>
<p>If you’re using (or thinking about using) DynamoDB, then Alex’s book is an absolute must-have. I’ve been using it as my go-to reference for pretty much everything DynamoDB, and I think it will make a great companion to anyone else exploring this awesome tool. To listen to Alex and me chat in greater detail about his book, listen to our <a href="https://www.serverlesschats.com/43" target="_blank" rel="noopener">Serverless Chats episode</a>. If you want a copy of the book, you can buy it at <a href="http://dynamodbbook.com/" target="_blank" rel="noopener">dynamodbbook.com</a>.</p>
<p>Listen to the episode:<br /><iframe width="100%" height="180" class="c1" src="https://share.transistor.fm/e/4f70cfc5/dark" frameborder="0" scrolling="no" seamless="true">[embedded content]</iframe></p>
<p>Watch the episode:</p>
<div class="iframe-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/GZTLFWlEnaw" frameborder="0" allowfullscreen="allowfullscreen">﻿</iframe></div>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws/" rel="tag">aws</a>, <a href="https://www.jeremydaly.com/tag/data-modeling/" rel="tag">data modeling</a>, <a href="https://www.jeremydaly.com/tag/dynamodb/" rel="tag">dynamodb</a>, <a href="https://www.jeremydaly.com/tag/nosql/" rel="tag">nosql</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c4">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c3">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c2" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<div class="footer-info">? This post was originally published on April 16, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/important-lessons-from-the-dynamodb-book/</link>
      <guid>https://www.jeremydaly.com/important-lessons-from-the-dynamodb-book/</guid>
      <pubDate>Fri, 17 Apr 2020 01:48:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #85]]></title>
      <description><![CDATA[<h2>Fargate says ‘goodbye’ to Docker Engine… ?</h2>
<p>Welcome to <strong>Issue #85</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-84/">Last week</a>, we shared some new books and a YouTube channel for serverless fanatics. This week, Fargate gets an overhaul, we do some EventBridge storming, and learn some rules for DynamoDB modeling. Plus, we’ve got a ton of great posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://www.thundra.io/aws-lambda-debugger?utm_source=JeremyDaly&amp;utm_medium=newsletter&amp;utm_campaign=Debugging&amp;utm_content=lp_debug" target="_blank" rel="noopener">Natively Debug AWS Lambda on your IDE!</a><br />
Thundra allows you to natively debug your serverless applications on the cloud with their own permissions. Thundra’s online-debugger sets up a secure bridge between your AWS Lambda environment and your IDE. VSCode and IntelliJ IDEA are natively supported with plugins. For other IDEs, Thundra provides a portable client to foster the integration with any IDEs. Start debugging Node.js, Python and Java functions for free today! Sponsored</p>
<p><a href="https://www.theregister.co.uk/2020/04/09/aws_revamps_fargate_serverless_containers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">AWS revamps Fargate serverless containers, but wait – where’s Docker Engine? Ah, ‘deemed unnecessary’</a><br />
No more Docker Engine and added support for EFS. If you’re building a containerized application, this is a good place to start.</p>
<p><a href="https://www.stackery.io/blog/stackery-expands-serverless-security-and-ci-cd/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Stackery Expands Serverless Security and Continuous Delivery Capabilities</a><br />
I love seeing platforms like Stackery starting to handle automated deployments. Setting up CI/CD with serverless always seems to be a patchwork of duct tape and popsicle sticks, so having trusted platforms manage it for you, is a huge win for any serverless developer.</p>
<p><a href="https://www.serverlessops.io/signup-good-morning-serverless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Good Morning Serverless Guest Signup</a><br />
Do you have something to say about serverless? Sign up to be a guest on on Tom McLaughlin’s Good Morning Serverless Show.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@etnishiyama/going-serverless-with-node-js-and-clean-architecture-a365208816ba?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Going Serverless with Node.js and Clean Architecture</a><br />
I like this post by Everton Nishiyama because it perfectly captures how I feel every time I start to build a new serverless application and am staring at a blank canvas. I have several standards and practices that I follow, but every app is an evolution for me, and I’ve yet to find myself using the exact same structure more than once.</p>
<p><a href="https://medium.com/serverless-transformation/reducing-your-serverless-integration-test-runtime-on-ci-from-40-minutes-to-7-a8982a47b655?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Reducing Serverless Integration Test Runtime on CI</a><br />
Rob Cronin recounts how his team dramatically reduced their integration tests from 40 minutes to only 7 by implementing strategies like stack reuse and parallelization.</p>
<p><a href="https://dev.to/madebygps/a-serverless-app-that-texts-me-positive-covid-19-news-1h6o?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">A serverless app that texts me positive COVID-19 news</a><br />
Gwyneth Pena takes you through her process for creating a serverless app using Azure Functions and Twilio to only text her COVID-19 stories with a positive sentiment.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://toberej.com/building-a-netlify-lambda-function-to-turn-twitter-lists-into-email-digests/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Building a netlify lambda function to turn twitter lists into email digests</a><br />
This is a great example of simple automation that’s a perfect use case for serverless. A little bit of Lambda and some managed services can produce all kinds of interesting tools.</p>
<p><a href="https://aws.amazon.com/blogs/mt/send-organizational-aws-health-events-to-amazon-chime-or-slack/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Send Organizational AWS Health Events to Amazon Chime or Slack</a><br />
This is another great solution that aggregates all your AWS Health alerts using a scheduled Lambda function and then sends them to your Chime or Slack channel.</p>
<p><a href="https://medium.com/@shantanuo/emailthis-bookmark-using-serverless-api-40146c35df07?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">emailThis bookmark using serverless API</a><br />
Thought this was a clever hack for circumventing ads within your link collector. Shantanu Oak created a simple bookmarklet and serverless API to forward urls to his bookmarking service.</p>
<p><a href="https://medium.com/flatsmith/host-a-podcast-with-airtable-and-serverless-framework-de2ebb4826ae?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Host a Podcast with Airtable and Serverless Framework</a><br />
I’m clearly partial to podcasts, so I like this use case using Airtable as the backend datastore. Not sure I’d want to build my own solution in this case, but there are plenty other things that an Airtable/Serverless duo could handle.</p>
<p><a href="https://medium.com/@arthurtruong.work/how-to-fix-cloudfront-cors-font-issue-with-aws-lambda-edge-rails-6-4d9f21b24099?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">How to fix Cloudfront CORS font Issue with AWS Lambda@Edge</a><br />
Highly specific use case here, but whether it’s Lambda@Edge, Cloudflare Workers, or any serverless edge provider, there are so many more possibilities beyond just simple header manipulation.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/@zaccharles/s3-uploads-proxies-vs-presigned-urls-vs-presigned-posts-9661e2b37932?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">S3 Uploads</a><br />
Very informative post by Zac Charles that fully explains different ways to handle S3 uploads and gives a comparison of proxies vs presigned URLs vs presigned POSTs.</p>
<p><a href="https://theburningmonk.com/2020/04/hit-the-6mb-lambda-payload-limit-heres-what-you-can-do/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Hit the 6MB Lambda payload limit? Here’s what you can do.</a><br />
If you’re interested in more info about uploading S3 files, check out Yan Cui’s post.</p>
<p><a href="https://medium.com/@manta.innovations/testing-serverless-workflows-5d0a2e04941b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Testing Serverless Workflows</a><br />
Joel Lutman makes the case for adding regression tests to your serverless applications and provides some detail as to how one might achieve that. I’ve always loved how easy it is to spin up separate test stacks with serverless.</p>
<p><a href="https://medium.com/@gj.denhertog/handling-large-step-function-payloads-a776f71d9c15?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Handling large Step Function payloads</a><br />
If you are passing really large payloads between transitions in Step Functions, G.J. den Hertog shows you a small trick to avoid hitting the 32,768 character limit.</p>
<p><a href="https://blog.thundra.io/lambda-data-stores-which-one-to-pick?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Lambda Data Stores: Which One to Pick</a><br />
Serkan Özal enumerates the datastore options that you can use with Lambda. Although this isn’t an exhaustive list, the major players are outlined. He also gives you a few guidelines for when you might use each.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/serverless-transformation/eventbridge-storming-how-to-build-state-of-the-art-event-driven-serverless-architectures-e07270d4dee?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">EventBridge Storming</a><br />
Great article by Ben Ellerby about “EventBridge Storming” to help teams define events and service boundaries for their serverless apps. I think I’ve tried every “method” for doing this, and ones similar to Ben’s workshop approach have been most effective.</p>
<p><a href="https://www.freecodecamp.org/news/getting-started-with-microsoft-azure/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Getting started with Microsoft Azure</a><br />
If AWS went away tomorrow, at least we’d have Azure. Amber Wilkie does an excellent job outlining the the basics of building serverless apps using Microsoft Azure. Great introduction if you want to see what Azure has to offer.</p>
<p><a href="https://medium.com/zolo-engineering/right-way-to-implement-a-serverless-node-js-application-on-aws-part-1-c91185c54007?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Right Way to implement a Serverless Node.js application on AWS (Part 1)</a><br />
So, I’m always suspicious of blog posts that describe the “right way” to do something, and my spidey sense was not wrong this time either. It’s good to see that the team at Zolo is starting to build serverless applications, but like many a first attempt, they are building Lambdaliths. Not the worst way to get started, but far from the “right way”, for many reasons.</p>
<p><a href="https://aws.amazon.com/blogs/compute/translating-documents-at-enterprise-scale-with-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Translating documents at enterprise scale with serverless</a><br />
Great use case from James Beswick. The best thing about posts like this are the repeating patterns that can be used for various types of workloads.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.trek10.com/blog/the-ten-rules-for-data-modeling-with-dynamodb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">The Ten Rules for Data Modeling with DynamoDB</a><br />
If you want to get a taste of the amazing content in Alex DeBrie’s new DynamoDB book, take a look at this post he wrote for the Trek10 blog.</p>
<p><a href="https://medium.com/@taibi.davide/platforms-for-serverless-at-edge-a-comparison-12f66f370c1a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Platforms for Serverless at Edge: A comparison</a><br />
Davide Taibi and his research team compare the characteristics and issues of the major edge computing platforms that provide serverless compute support, outline some considerations for each, and point out some open issues. Excellent read.</p>
<p><a href="https://medium.com/adobetech/i-o-runtime-and-the-future-of-serverless-at-adobe-2c647b43d3a7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">I/O Runtime and the Future of Serverless at Adobe</a><br />
I thought this was an interesting read to see how Adobe is thinking about serverless. There’s an incredibly important point they make, which is the need to move away from Docker to more densely pack compute (like Cloudflare and Fastly do). If you’ve been paying attention, you may have noticed that more and more “serverless” implementations are moving to this type of isolation model. Of course, there is still one very popular container orchestration system that isn’t following suit. ?‍♂️</p>
<p><a href="https://insights.project-a.com/open-source-worse-practices-d3ccba536ff?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Open source worse practices? Serverless Inc. as an example of what can go wrong when you don’t keep up with your developer community</a><br />
I think Stephan Schulze makes some valid points, but at the same time, there is more context that needs to be considered here. I’m a big fan of the Serverless Framework, and my experience has always been positive. I also know how hard it is to maintain an OSS project. The free version of the Framework is truly a gift to the serverless community, and like all startups, limited resources force you to make hard choices. Maybe a better protocol for faster responses is warranted, but I think the vast majority of developers are happy with the management of the framework.</p>
<h3>Videos, Podcasts, and Live Streams… ?</h3>
<p><a href="https://pages.awscloud.com/Optimizing-Lambda-Performance-for-Your-Serverless-Applications_2020_0316-SRV_OD.html?&amp;trk=el_a134p000006BwXzAAK&amp;trkCampaign=Daly_Newsletter_Lambda_optimization-tech-talk&amp;sc_channel=el&amp;sc_campaign=Off-by-none-sponsor-content-Lambda-Optimization-tech-talk&amp;sc_outcome=Product_Marketing&amp;sc_geo=mult&amp;sc_country=mult" target="_blank" rel="noopener">Watch at your leisure: Optimize Lambda Performance for your Serverless Applications – Tech Talk</a><br />
In less than 45 minutes, AWS Serverless expert James Beswick shows you how to fine-tune your Lambda functions to get the most out of your applications. He offers ways to improve your application throughput, reduce latency, and lower overall cost. He also dives in to some of the newest features that allow you to find the most precise fit for your application’s needs, including improved VPC networking and Provisioned Concurrency. Sponsored</p>
<p><a href="https://www.serverlesschats.com/44?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Serverless Chats – Episode #44: Data Modeling Strategies from The DynamoDB Book with Alex DeBrie</a><br />
In this episode, Jeremy chats with Alex DeBrie about why he wrote the DynamoDB Book, what are some key concepts to keep in mind when modeling data, and how using the right strategies can help you create more powerful single table designs. <a href="https://www.youtube.com/watch?v=GZTLFWlEnaw&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Watch on YouTube</a>.</p>
<p><a href="https://www.youtube.com/watch?v=JFyPFdSIM2A?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Foobar: Let’s practice together for the AWS Cloud Practioner Certification</a><br />
Marcia Villalba takes a group of live viewers through practice questions for the AWS Cloud Practitioner Certification. It was really fun to watch, so check out her channel to find out when the next one is.</p>
<p><a href="https://castbox.fm/episode/6%3A-Serverless-at-TotallyMoney-with-Nick-Blair-and-Steve-Westwood-id2644378-id248516647?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Real World Serverless – #6: Serverless at TotallyMoney with Nick Blair and Steve Westwood</a><br />
Another great episode with Yan Cui chatting with the team at TotallyMoney. Lots of really great info in here about troubleshooting Provisioned Concurrency.</p>
<p><a href="https://www.youtube.com/watch?v=-HQw-UK2bHc?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Migrating existing monolith to serverless in 8 steps</a><br />
Can’t get enough Yan Cui? Watch this excellent presentation that goes through the steps to migrate your existing monolithic application to serverless.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-cognito-identity-pools-now-supports-sign-in-with-apple/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Amazon Cognito Identity Pools now supports Sign in with Apple</a><br />
Amazon Cognito Identity Pools now supports Sign in with Apple, providing another social identity provider for customers who use Cognito for receiving temporary AWS credentials.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-ecs-aws-fargate-support-amazon-efs-filesystems-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Amazon ECS and AWS Fargate support for Amazon EFS File Systems now generally available</a><br />
Amazon Elastic Container Service (ECS) tasks running on both Amazon Elastic Compute Cloud (EC2) and AWS Fargate can now mount Amazon Elastic Filesystem (EFS) filesystems.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amplify-framework-announces-new-ui-component-library-and-modularized-javascript-library/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Amplify Framework announces new, rearchitected UI Component and modular JavaScript libraries</a><br />
A new, rearchitected Amplify UI component library that enables JavaScript developers to easily add authentication scenarios to their web apps is now available.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/aws-fargate-launches-platform-version-14/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">AWS Fargate launches Platform Version 1.4</a><br />
This latest version enables several new Fargate features including EFS endpoints, 20 GBs of ephemeral storage, and new network performance metrics in Amazon CloudWatch Container Insights.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-rds-proxy-with-postgresql-compatibility-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Amazon RDS Proxy with PostgreSQL Compatibility (Preview)</a><br />
Amazon RDS Proxy is now in preview for Aurora PostgreSQL and RDS PostgreSQL. I have some clients that’ll be very happy about this.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://dev.to/oconijn/off-to-a-great-start-with-aws-organizations-1i74?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Off to a great start with AWS Organizations</a><br />
This is a great article by Olaf Conijn that discusses strategies for setting up and managing AWS Organizations, but even better is the tool his team built for managing orgs using Infrastructure-as-Code.</p>
<p><a href="https://github.com/dabit3/api-gateway-lambda-in-various-runtimes?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Examples of various Lambda function integrations with API Gateway and CORS enabled</a><br />
Having trouble with CORS from your frontend apps? Nader Dabit open sourced starter functions with CORS enabled for GO, Node, Python, .NET, and Java.</p>
<p><a href="https://github.com/richardhboyd/Cloud9Bootstrap?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">SAR Application to Bootstrap an AWS Cloud9 IDE</a><br />
Need to bootstrap an AWS Cloud IDE? Thanks to Richard Boyd, there’s a SAR app for that.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/rts_rob/status/1249787191297019905?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">I’m stacking up a lot of #serverless content in the coming weeks across all levels, everything from getting started to the deepest of dives! I hope you’ll join me for some (or all!) of these sessions ~ Rob Sutter</a><br />
Rob always delivers amazing serverless content. This tweet lists out a bunch of upcoming things he’s working on and how/when you can access them.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>April 2-May 31, 2020 – </strong><a href="https://github.com/singledigit/sam-template-examples">Sessions with SAM: Live Twitch sessions by Eric Johnson (every Thursday at 10AM PDT)</a></p>
<p><strong>April 22, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-partner-OE-Stackery-DevOps-Q2-Webinar-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">From Monolithic to Modern: MasterStream’s Serverless Transformation with Stackery</a> (webinar)</p>
<p><strong><del>April 20, 2020</del> –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a> (Postponed – new date pending)</p>
<p><strong>April 21, 2020 –</strong> <a href="https://failover-conf.heysummit.com/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Failover CONF: A virtual event on reliability</a> ?</p>
<p><strong>April 21, 2020 –</strong> <a href="https://www.meetup.com/Stockholm-Serverless/events/269796168/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Nordic Serverless Observability Special Meetup (virtual)</a></p>
<p><strong><del>April 23, 2020</del> –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a> (Rescheduled to September 24th)</p>
<p><strong><del>April 24, 2020</del> –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a> (Canceled)</p>
<p><strong>April 29, 2020 –</strong> <a href="https://virtual.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Virtual</a></p>
<p><strong>May 4, 2020 –</strong> <a href="https://homeschool.dev/class/production-ready-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2385" target="_blank" rel="noopener">Production Ready Serverless – new instructor-led online workshop</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Metin Kale</strong> (<a href="https://twitter.com/awsserverless" target="_blank" rel="noopener">@awsserverless</a>). Metin is a Cloud Engineer at Generali Global Assistance North America, and an AWS Certified Developer. You might be familiar with Metin’s tweets (he’s the man behind the All Serverless Twitter account) posting about the latest news, tools, events, and other exciting developments happening in the serverless community. He’s also presented at AWS community events, and has been involved in various serverless meetups within the Chicago area. Thanks, Metin, for helping us grow the serverless community! ?</p>
<h3>Final Thoughts ?</h3>
<p>I hope you’re all staying safe out there. I know my family has started to go a bit stir crazy (and please don’t ask about the 2,000 piece puzzle we put together that was missing 10 pieces! ?), but hopefully we’ll see brighter days soon.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-85/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-85/</guid>
      <pubDate>Tue, 14 Apr 2020 23:15:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Takeaways from the State of Serverless Report]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="675" src="https://www.jeremydaly.com/wp-content/uploads/2020/04/takeaways-from-state-of-serverless-report-1200x675.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/04/takeaways-from-state-of-serverless-report.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2020/04/takeaways-from-state-of-serverless-report-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/04/takeaways-from-state-of-serverless-report-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/04/takeaways-from-state-of-serverless-report-1024x576.png 1024w" /></div>
<p>On a recent episode of <a href="https://www.serverlesschats.com/" target="_blank" rel="noopener">Serverless Chats</a>, I spoke with Stephen Pinkerton and Darcy Rayner of Datadog to dig into <a href="https://www.datadoghq.com/state-of-serverless/" target="_blank" rel="noopener">The State of Serverless</a> report, which was released at the end of February 2020. After frequently fielding customer questions about the topic, Datadog looked at its data and customer use cases, and examined how they were using serverless. Datadog’s report is a way to break it all down, but it’s also an opportunity for its customers (and serverless users alike) to see how other people are using serverless in a data-driven way. I discussed methodology, findings, and key takeaways with Stephen and Darcy, and thought it’d be worthwhile to consolidate and share that insight.</p>
<h3>Behind the Methodology</h3>
<p>Context is important, so before diving into the findings, let’s take a step back and look at how Datadog defined some of the classifications in the report. Most importantly, this report only includes data from Datadog customers, which are likely more cloud savvy than your average company. Also, even though the serverless world extends beyond AWS, the report only includes their AWS customers.</p>
<p>The report also specifically focuses on Lambda usage as an indication of serverless adoption. While both Stephen and Darcy agreed that serverless is much more than Functions-as-a-Service (FaaS), it’s still a good baseline to use. When it comes to its reference of Lambda adoption, Datadog includes any account in AWS running more than five Lambda functions a month, which it considers the point at which it’s regularly being run.</p>
<p>But this doesn’t mean that only large customers would end up qualifying; Datadog’s broader definition of AWS usage includes both anyone who’s currently using Lambda, but also any organization that has more than five EC2 instances running in a given month. Given that five EC2 instances is relatively low, this gives a nice broad perspective. When Datadog defines customers in this sense as “small,” “medium,” or “large,” it refers to the scale or “footprint” of the other infrastructure that they’re running. Now that we’ve got the basics covered, we can make our way to the findings and key takeaways.</p>
<h3>Finding #1: Half of AWS users have adopted Lambda</h3>
<p>When I asked Stephen about this statistic, he speculated that growing Lambda adoption comes down to the need for speed. Teams can move a lot faster with Lambda, especially because from a development perspective, there’s less red tape to cut through and teams can hit the ground running. For many, getting a Lambda function approved is much easier that other types of compute infrastructure.</p>
<p>Lambda usage by Datadog customers has more than doubled in two years — a trendline that seems to indicate that by 2022, the vast majority of customers will be using Lambda. This makes sense for a number of workloads and use cases, but Stephen thinks this trend isn’t just limited to Lambda. Instead, he thinks people are starting to realize the value of other serverless services like databases and message queues. The whole ecosystem is definitely here to stay, but the way that teams are running code is certainly changing.</p>
<h3>Finding #2: Lambda is more prevalent in large environments</h3>
<p>This finding seems like it could be due to a few factors: cloud sophistication and the serverless learning curve. Darcy observed that when there’s a large organization with several teams, there is this broader movement towards microservices, having team ownership boundaries of services, and giving engineers more autonomy. With that, there’s an increased likelihood of a few teams experimenting with and adopting serverless, with that being the ultimate gateway. Compare that to a smaller company, which may end up with more unified technology, but with less of a chance that they’ll have the time or resources to adopt new technologies.</p>
<p>The learning curve in getting people started with serverless could be another factor. Small organizations can’t take the same risks as larger enterprises, which often have the luxury of experimenting within smaller teams without having to implement company-wide at first. Many developers will first experiment with serverless on their own before bringing it to their teams.</p>
<h3>Finding #3: Container users have flocked to Lambda</h3>
<p>Clearly, customers are not going to abandon containers altogether, but the idea of being able to use Lambda functions to do some of the workloads has become increasingly appealing to companies. 80% of Datadog’s AWS container users have at least five Lambda functions running. Given these findings, it seems it’s become less important where you’re actually running your code. So if you’re already running in a microservice architecture, then it’s much easier to adopt serverless.</p>
<p>However, the data doesn’t suggest there’s a reduction in the use of containers while people are migrating their compute to Lambda functions. When coupled with findings from another Datadog report on containers, both Lambda function usage and container usage are growing steadily. Darcy speaks to the fact that there are so many opportunities for organizations to migrate from traditional internally-hosted infrastructure or even older cloud infrastructures to containers and serverless.</p>
<h3>Finding #4: Amazon SQS and DynamoDB pair well with Lambda</h3>
<p>This one does seem a bit obvious. You would think people who build serverless applications would want to use tools that are serverless themselves, or at least, tools that play really, really well with Lambda. But the finding is interesting, because it seems like even though pay-per-use downstream services are very popular with Lambda, there are still a lot of people using it to connect to relational databases like MySQL.</p>
<p>So it’s clear that companies aren’t necessarily moving away from SQL to DynamoDB. Darcy notes that it can come down to comfort level for some people, as they tend to prefer different databases for different solutions. He thinks we’ll see the story of using relational databases and having managed relational databases become easier and easier, and more of the scaling overhead being taken away from engineers.</p>
<p>It seems as though many Datadog customers are starting to embrace the idea of asynchronous thinking, especially seeing that SQS and Kinesis and SNS are so popular as Lambda triggers. Darcy noted that an event-driven microservices revolution is happening. It takes a long time for large organizations to really buy into that idea, but it’s still a growing trend in general.</p>
<h3>Finding #5: Node.js and Python dominate among Lambda users</h3>
<p>Since the number of “large” clients are seemingly adopting Lambda faster, I would have expected them to favor languages like Java. Instead, Python and Node.js are by far the most popular. This popularity could be because they’re not compiled; you can launch them so quickly, and the findings show that the cold start time was a factor, which corroborates that idea.</p>
<p>Darcy explained that use cases with Node and Python are really all over the map, but in particular, it’s very common to see a background job utilizing these languages. He said that some workloads aren’t necessarily entirely appropriate for services like Lambda, and something like ECS or Fargate would be more appropriate. I agree that not all workloads are a great fit, but as Lambda gets better, the use cases increase.</p>
<h3>Finding #6: The median Lambda function runs for 800 milliseconds</h3>
<p>While half of them run for less than 800 milliseconds, those longer running ones seem to suggest that there are other tasks they might be performing. Darcy thinks that people have probably decided to use Lambda in a way that is running more computationally heavy workloads. He anticipates that some of it is trying to convert a square workload into a circular hole — which you could boil down to a form of misusage.</p>
<p>Another part of this finding was that one-fifth of Lambda functions run for 100 milliseconds or less, which is interesting, because of course, that is the AWS unit of billing. I know there have been some calls (myself included) to get that granularity down maybe 50 milliseconds as opposed to 100 milliseconds.</p>
<h3>Finding #7: Half of Lambda functions have the minimum memory allocation</h3>
<p>Speaking of misusage, improper memory allocation would be near the top of the list. Darcy says that with memory allocation, it probably comes down to miseducation. People don’t spend a lot of time thinking about how to optimize these services. Serverless has removed so much of the thinking about overhead and infrastructure that he thinks developers are just putting things in Lambda and not even spending the time to tweak it and reduce latency, and potentially cut costs.</p>
<p>Stephen says that they frequently get the question: “How do I optimize my Lambda workloads?” He says even though Lambda lets people upload code to a cloud provider and hand off the responsibility for running it, there are still knobs that can be turned to adjust performance. However, there’s a lot of miseducation or complete lack of education around what these knobs actually do.</p>
<h3>Finding #8: Two-thirds of defined timeouts are under one minute</h3>
<p>This is one to note as a best practice: setting good timeouts. With Lambda functions, you’re paying while they’re processing. If you have something that hangs for some reason, and it just keeps running, then obviously you’re paying for something you don’t need. The fact that developers are setting low timeouts is likely due to defaults or API Gateway use cases, but overall, this finding is probably a good thing, and there’s likely more granularity in there. The one thing that concerned me, however, was that a lot of timeouts were set to 15 minutes, the maximum.</p>
<p>I personally tend to lean more towards this being used as a crutch, because I think the mentality there is: “I can let it run for 15 minutes. I’ll let it run for 15 minutes.” But I wonder about concerns with denial of wallet (DoW) attacks, this idea of flooding Lambdas or API Gateway with requests so that they just keep running. Stephen said that Datadog does get some security concerns occasionally similar to this, split between timeouts and concurrency limits, where they’re both things that can help to avoid starving resources in your account.</p>
<h3>Finding #9: Only 4 percent of functions have a defined concurrency limit</h3>
<p>I think for a lot of internal workloads, setting a function’s concurrency probably isn’t necessary, but not setting it on the ones that are customer-facing or processing off of queues, seem a little bit scary to me. Darcy speculates that it’s the promise of serverless and its scalability, and teams not asking themselves the right questions or planning for maximum capacity to their systems. And this promise could be a detriment, because teams might want to keep scaling and scaling, but nothing is infinitely scalable. Everything has limits at some point.</p>
<p>I’d guess that maybe this is an education thing too, because your average developer won’t necessarily know a lot about the underlying infrastructure. When it comes to things like Lambda functions, there’s just a lot of questions that that developer probably never had to ask before. Distributed systems in and of themselves are very difficult, and now when you start talking about breaking it down even further into all of these small building blocks, being able to understand where all the failures are happening is a hugely important thing.</p>
<h3>Final Thoughts</h3>
<p>While there’s a ton of information to sift through, it seems like no matter what technologies companies are using out there, serverless is likely a part of it. To listen to Stephen, Darcy and me continue the conversation, including the topic of “what comes after serverless,” listen to our <a href="https://www.serverlesschats.com/43" target="_blank" rel="noopener">Serverless Chats episode</a>.</p>
<p>Listen to the episode:<br /><iframe width="100%" height="180" class="c1" src="https://share.transistor.fm/e/b8b046e3/dark" frameborder="0" scrolling="no" seamless="true">[embedded content]</iframe></p>
<p>Watch the episode:</p>
<div class="iframe-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/VC1CjUsKqBI" frameborder="0" allowfullscreen="allowfullscreen">[embedded content]</iframe></div>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws/" rel="tag">aws</a>, <a href="https://www.jeremydaly.com/tag/dynamodb/" rel="tag">dynamodb</a>, <a href="https://www.jeremydaly.com/tag/lambda/" rel="tag">lambda</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a>, <a href="https://www.jeremydaly.com/tag/sqs/" rel="tag">sqs</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c4">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c3">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c2" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<div class="footer-info">? This post was originally published on April 9, 2020 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/takeaways-state-of-serverless-report/</link>
      <guid>https://www.jeremydaly.com/takeaways-state-of-serverless-report/</guid>
      <pubDate>Thu, 09 Apr 2020 15:35:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #84]]></title>
      <description><![CDATA[<h2>Take your DynamoDB knowledge to a whole new level… ?</h2>
<p>Welcome to <strong>Issue #84</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-83/">Last week</a>, we saw a comprehensive collection of serverless patterns and a new survey on technical debt. This week, we’ve got a couple of new books to share, a new YouTube channel for serverless fanatics, and plenty of awesome posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://www.thundra.io/aws-lambda-debugger?utm_source=JeremyDaly&amp;utm_medium=newsletter&amp;utm_campaign=Debugging&amp;utm_content=lp_debug" target="_blank" rel="noopener">Natively Debug AWS Lambda on your IDE!</a><br />
Thundra allows you to natively debug your serverless applications on the cloud with their own permissions. Thundra’s online-debugger sets up a secure bridge between your AWS Lambda environment and your IDE. VSCode and IntelliJ IDEA are natively supported with plugins. For other IDEs, Thundra provides a portable client to foster the integration with any IDEs. Start debugging Node.js, Python and Java functions for free today! Sponsored</p>
<p><a href="https://www.dynamodbbook.com/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">New Book: The DynamoDB Book by Alex DeBrie ?</a><br />
I had the opportunity to read an advanced copy of this book, and it has become my new go-to DynamoDB reference. I’ve spent so much time over the last few years scouring the Internet to find useful information about DynamoDB modeling, usually ending up empty-handed. Now Alex has a resource for you to get all of the (correct) information in one place.</p>
<p><a href="https://serverless.com/blog/serverless-components-ga?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Announcing Serverless Components GA</a><br />
I love the idea behind Serverless Components, and now the service is out of beta. There are some amazing features, including the new “serverless dev mode” that lets you develop on the cloud, but with an experience that looks and feels local.</p>
<p><a href="https://www.bluage.com/news/f0015an-serverless-cobol?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Serverless Cobol</a><br />
There has been a call for Cobol programmers recently, especially since the SBA loan system crashed the other day. I don’t know anything about Blu Age, but apparently they built a custom runtime for Lambda. So if you happen to learn (or know) Cobol, maybe your skills will be transferrable. ?‍♂️</p>
<p><a href="https://blog.symphonia.io/posts/2020-04-01_programming_aws_lambda_book/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">New Book: Programming AWS Lambda by Mike Roberts and John Chapin</a><br />
And here is another book for you. Mike and John over at Symphonia are serverless experts, so anything they write is guaranteed to be good.</p>
<p><a href="https://twitter.com/tmclaughbos/status/1244996559688908808?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">The Good Morning Serverless Show with Tom McLaughlin</a><br />
If you’re stuck at home, why not do a live morning show and chat about serverless? Tom McLaughlin is doing just that. The first episode was last Friday morning, but check out his Twitter to learn more about upcoming broadcasts.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/riskified-technology/500mb-of-memory-saved-us-60-in-our-dynamodb-bill-abd5424137f9?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">500MB of Memory Saved Us ~60% in our DynamoDB Bill</a><br />
Boris Cherkasky outlines how adding a simple write-through cache to their DynamoDB index tables reduced their bill by ~60%. DynamoDB is incredibly fast, but using a cache to read the same exact items over and over again is a great optimization.</p>
<p><a href="https://medium.com/opendoor-labs/cloudflare-workers-opendoor-landing-page-infrastructure-824853a34551?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Cloudflare Workers @ Opendoor: Landing Page Infrastructure</a><br />
Josiah Grace recounts how Opendoor used Cloudflare workers to run A/B across their infrastructure without needing to build complex logic into their application code. Very cool stuff.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/better-programming/lambda-sqs-trigger-and-concurrency-87131dad9a12?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Lambda SQS Triggers and Concurrency</a><br />
Shilpi Gupta revisits the often cited concurrency issues with Lambda SQS Triggers. I know I experienced this problem before I implemented AWS’s recommendations on the subject (which she mentions in the post), but since then, my throttled queues have performed as expected.</p>
<p><a href="https://medium.com/pocket-gems-engineering/running-unit-test-on-top-of-serverless-service-d8c223077512?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Running Unit Test on Top of Serverless Service</a><br />
Adinata Thayib explains how his engineering team parallelized their unit tests using a serverless infrastructure. This is an excellent use case for Lambda functions, though there are some great tools (like <a href="https://github.com/lambci/lambci" target="_blank" rel="noopener">LambCI</a>) that would make this process easier.</p>
<p><a href="https://medium.com/ssense-tech/serverless-framework-in-the-real-world-bd962635fb50?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Serverless Framework in the Real World</a><br />
Victorien Avon discusses a great use case for serverless that sends a Slack notification when certain conditions are triggered via an SNS notification. It also runs peripherally to their Kubernetes cluster, a common scenario we’re seeing when developers need these type of scalable, independent services.</p>
<p><a href="https://aws.amazon.com/blogs/machine-learning/deploying-machine-learning-models-as-serverless-apis/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Deploying machine learning models as serverless APIs</a><br />
There are still a lot of limitations with Lambda when it comes to Machine Learning use cases, but there have been some really great examples that show that certain implementations are still possible, especially around serving predictions. This post by Anders Christiansen shows you how to do just that.</p>
<p><a href="https://medium.com/@vsaravind007/sub-minute-lambda-invocations-using-cloudwatch-events-10a63f4f5426?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Sub-Minute Lambda Invocations Using Cloudwatch Events</a><br />
Oh no! Please don’t do this. I hate to criticize, because I know people are still figuring things out, and I appreciate people putting out content, but this post advocates long-running Lambdas to manage cron jobs with sub-minute accuracy. There are several ways to do this more efficiently, with my favorite being the use of SQS queues with message visibility delays.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://aws.amazon.com/blogs/compute/building-well-architected-serverless-applications-introduction/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Building well-architected serverless applications: Introduction</a><br />
Julian Wood is running a series of posts that address each of the questions within the Serverless Lens of the Well-Architected Tool. This should be a really useful resource, so be sure to bookmark this introduction page.</p>
<p><a href="https://www.youtube.com/channel/UC_vJsnqdpuEoRseFmlkHMkA?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">AWS Serverless – YouTube Channel</a><br />
The Serverless Team over at AWS put together a YouTube channel that is loaded with training videos, Twitch show episodes, playlists with talks from re:Invent and other conferences, and a whole lot more. If you’re looking for a treasure chest full of serverless doubloons, take a look at this resource.</p>
<p><a href="https://medium.com/@zaccharles/a-close-look-at-net-core-3-1-on-aws-lambda-9ccec4dd96be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">A Close Look At .NET Core 3.1 on AWS Lambda</a><br />
Zac Charles looks under the hood of the new .NET Core 3.1 release and compares the differences between AWS Lambda’s .NET Core 2.1 support. He also tests the performance and makes some recommendations for your implementations.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://www.stackery.io/?utm_source=Advertisement&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Supercharge Development, Delivery and Management of Serverless Applications</a><br />
Stackery empowers enterprise development teams to deliver Well-Architected serverless applications quickly, securely, and at scale— without the overhead of complex infrastructure and operations management. Accelerate overall development and secure delivery of serverless applications by up to 60x – so your team can focus on perfecting core business logic. Sponsored</p>
<p><a href="https://info.acloud.guru/resources/how-gurus-learn?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Pete’s tips for learning effectively online</a><br />
With most of us stuck at home, now could be the perfect time to level up your skills on something. Dr. Peter Sbarski’s got some tips to help you maximize the value of your online learning time.</p>
<p><a href="https://medium.com/@schmidphilipp1995/set-up-a-ci-cd-pipeline-for-aws-lambda-with-github-actions-and-serverless-in-under-5-minutes-fd070da9d143?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Set up a CI/CD Pipeline for AWS Lambda with Github Actions and Serverless in under 5 minutes</a><br />
I’ve got to spend some time with GitHub Actions, because this could dramatically simplify a lot of my workflows. In this post, Philipp Schmid shows you how to deploy an app using GitHub Actions and the Serverless Framework.</p>
<p><a href="https://medium.com/better-programming/how-to-build-both-kinds-of-aws-lambda-layers-yes-there-are-two-edb945979f17?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">How to Build Both Kinds of AWS Lambda Layers. (Yes, There Are Two)</a><br />
Allen Helton gives you a crash course in building and deploying AWS Lambda Layers for dependencies and functions. I still find the Layer process to be less manageable than using shared packages when it comes to sharing across microservices, but as soon as there’s a better abstraction layer, I’ll make the jump.</p>
<p><a href="https://medium.com/@amorenom/how-to-run-api-gateway-aws-lambda-and-dynamodb-locally-91b75d9a54fe?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">How to run API Gateway, AWS Lambda and DynamoDB locally</a><br />
It’s not an April Fools’ joke, you can actually run all this stuff locally if you really want to. Andres Moreno shows you how to set up your environment, point everything to the right endpoints, and even connect with the NoSQL Workbench for DynamoDB.</p>
<p><a href="https://www.crimsonmacaw.com/blog/2020/04/05/handling-multiple-lambda-event-types-with-go.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Handling Multiple AWS Lambda Events Types with Go</a><br />
Rob Bruce shows you how to use Go to dynamically detect and unmarshall different AWS event types. If Go isn’t your cup of tea, there are projects for other languages that do similar things. I do like the idea of Lambda reuse, so if you have the need to accept different event types, I think this approach is worth looking at.</p>
<p><a href="https://technology.customink.com/blog/2020/03/13/using-aws-sam-cookiecutter-project-templates-to-kickstart-your-ambda-projects-copy/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Using AWS SAM Cookiecutter Project Templates</a><br />
Ken Collins set out to learn more about Cookiecutter, and ended up building some tools to make it easier for the teams at Custom Ink to think “serverless-first”. Lots of really cool things baked into what he built, plus some details to help you build your own.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://itnext.io/scalable-serverless-microservice-demo-aws-lambda-kinesis-terraform-cbe6036bf5ac?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Scalable Serverless Microservice Demo AWS Lambda Kinesis Terraform</a><br />
Interesting series of posts by Kim Wuestkamp where he builds the same scalable microservice using different technology stacks. In this article, he uses Kinesis as his messaging bus, and with that choice, faces a number of shard scaling and throughput limitations. Looking at what he’s built, swapping in EventBridge would dramatically improve this system.</p>
<p><a href="https://medium.com/levarne/your-worst-case-serverless-scenario-part-i-invocation-hell-9cc80e192832?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Your Worst-case Serverless Scenario Part I: Invocation Hell</a><br />
This post by Niels van Bree recounts the nightmare scenario his team experienced. It seems like there were multiple things that were contributing factors, but the most glaring is the dangerousness of Lambdas reinvoking themselves. There are some good lessons in here.</p>
<p><a href="https://medium.com/lego-engineering/accelerating-with-serverless-625da076964b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Accelerating with Serverless!</a><br />
I always love reading Sheen Brisals’ posts. This time he writes about how the serverless journey of Lego has not only changed the way they solve problems, but how it’s allowed them to more quickly add customer value, help teams move faster, and even adopt new technologies into their stack. Oh the power of serverless.</p>
<p><a href="https://diginomica.com/forget-aws-lambda-kubernetes-fargate-need-beyond?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Forget AWS Lambda, Kubernetes AND Fargate – what we need is beyond all three</a><br />
Lee Atchison argues that we need a true Container-as-a-Service model to be the future of serverless. While I would love to see Fargate be an event-driven, auto-scaling, auto-managed service, I still think the standalone simplicity of Lambda will dominate most of the use cases.</p>
<p><a href="https://medium.com/cyberark-engineering/joel-is-wrong-and-it-costs-you-a-fortune-105924be8f01?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Joel is Wrong, and it costs you a fortune</a><br />
This is a good piece by Daniel Schwartzer about the old assumptions around rewriting codebases. There are A LOT of reasons <strong>not</strong> to rewrite code, but Daniel makes some great points about modern tools and services that solve problems much better and more reliably than code from several years ago. It’s definitely something to think about.</p>
<p><a href="https://medium.com/weareservian/choosing-a-suitable-aws-compute-product-a-decision-tree-1dc46caef824?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Choosing a suitable AWS compute product, a decision tree</a><br />
Here’s a fun decision tree by Marat Levit that helps you choose the best AWS compute option for your workload. I think they should all eventually end on AWS Lambda, but maybe that’s just me. ?</p>
<h3>For the commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/43?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Serverless Chats – Episode #43: The State of Serverless Report with Stephen Pinkerton and Darcy Rayner</a><br />
In this episode, I chat with Stephen Pinkerton and Darcy Rayner about how organizations are adopting serverless, what enterprises like DataDog are doing with it, and what comes after serverless. <a href="https://www.youtube.com/watch?v=VC1CjUsKqBI&amp;feature=share?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Watch it on YouTube</a>.</p>
<p><a href="https://castbox.fm/episode/4%3A-Understanding-risk-and-vendor-lock-in-at-Moneyou-id2644378-id243659306?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Real World Serverless – Episode #4: Understanding risk and vendor lock-in at Moneyou</a><br />
Yan Cui talks to the team at the Dutch bank about their journey towards serverless over the last 2 years. In part 2, they discuss the open-source tool they built, called org-formation, that helps you manage complex AWS Organizations setups.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-personalize-now-provides-scores-for-recommended-items/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Amazon Personalize now provides scores for recommended items</a><br />
These scores can help you understand the relative difference in the relevancy of recommendations, and help you apply additional business logic on the recommendations, such as filtering out recommendations below a threshold or balancing relevancy with other business objectives such as displaying sponsored content.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/aws-toolkit-for-visual-studio-code-supports-aws-step-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">The AWS Toolkit for Visual Studio Code now supports AWS Step Functions</a><br />
This is awesome. The AWS Toolkit for Visual Studio Code now supports AWS Step Functions, making it easier to create and visualize state machine based workflows without leaving your code editor.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/aws-serverless-application-repository-allows-sharing-public-applications-from-all-commercial-aws-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">AWS Serverless Application Repository allows sharing public applications from all commercial AWS regions</a><br />
Authors who publish serverless applications to the AWS Serverless Application Repository (SAR) can now make their applications publicly available from all commercial AWS regions (except China) where the service is available. No more needing to publish from a us-east master region.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amplify-cli-adds-support-for-additional-lambda-runtimes-and-cron-jobs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Amplify CLI adds support for additional Lambda runtimes (Java, Go, .NET and Python) and Lambda cron jobs</a><br />
With this release, Amplify CLI makes it easy to create Lambda functions running on Java, Go, .NET and Python runtimes with sample code and a guided creation, update and deployment process.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-cloudwatch-contributor-insights-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Amazon CloudWatch Contributor Insights is now generally available</a><br />
Contributor Insights analyzes time-series data to help you understand who or what is impacting your system and application performance by pinpointing outliers, finding the heaviest traffic patterns, and ranking the top system processes.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/receive-notifications-for-aws-codebuild-codecommit-codedeploy-codepipeline-in-slack/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Receive Notifications for AWS CodeBuild, AWS CodeCommit, AWS CodeDeploy, and AWS CodePipeline in Slack</a><br />
Customers can now receive and view notifications for AWS CodeCommit, AWS CodeBuild, AWS CodeDeploy, and/or AWS CodePipeline directly in Slack with a few clicks in the AWS console.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/aws-lambda-now-supports-net-core-3-1/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">AWS Lambda now supports .NET Core 3.1</a><br />
You can now develop AWS Lambda functions using .NET Core 3.1. This is the latest LTS release of .NET Core. It has new features like partial class support for razor components, support for shared queues, unwrapping of exceptions, and parameters passing to top-level components.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-detective-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Amazon Detective is now generally available</a><br />
Amazon Detective is a new service that makes it easy to analyze, investigate, and quickly identify the root cause of potential security issues or suspicious activities.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-cloudwatch-contributor-insights-for-amazon-dynamodb-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Amazon CloudWatch Contributor Insights for Amazon DynamoDB is now generally available</a><br />
CloudWatch Contributor Insights for DynamoDB is a diagnostic tool that provides an at-a-glance view of your DynamoDB tables’ traffic trends and helps you identify your tables’ most frequently accessed keys (also known as hot keys). <a href="https://aws.amazon.com/blogs/aws/cloudwatch-contributor-insights-for-dynamodb-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">More info here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/04/aws-deepcomposer-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">AWS DeepComposer is now generally available</a><br />
AWS DeepComposer is now generally available to all AWS customers, with exciting new feature additions. AWS DeepComposer gives developers a creative way to learn machine learning.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/serverless-transformation/whats-new-on-sls-dev-tools-db88d212eb96?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">What’s new on sls-dev-tools</a><br />
I love watching tools that just keep getting better and better, and sls-dev-tools is one that has been under heavy development. The new version has function deploy capabilities, EventBridge event injection, and more.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/alex_casalboni/status/1245003682439204866?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">“Hi Twitter, the first month at home is over and I’ve been publishing/recording some videos that you may have missed :)”</a> <strong>~ Alex Casalboni</strong><br />
Alex has a bunch of cool videos on serverless for you to check out. Maybe you can be inspired by him and create some yourself?</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>March 13-April 10, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Virtual-Workshop_2020_VW_s02-DAT.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Getting Started with Amazon DynamoDB (Virtual Workshops)</a></p>
<p><strong>April 2-May 31, 2020 – </strong><a href="https://github.com/singledigit/sam-template-examples">Sessions with SAM: Live Twitch sessions by Eric Johnson (every Thursday at 10AM PDT)</a></p>
<p><strong>April 14, 2020 –</strong> <a href="https://www.thundra.io/webinars/debugging-and-troubleshooting-serverless-applications?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Debugging and Troubleshooting Serverless Applications with Thundra</a> (webinar) ?</p>
<p><strong>April 22, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-partner-OE-Stackery-DevOps-Q2-Webinar-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">From Monolithic to Modern: MasterStream’s Serverless Transformation with Stackery</a> (webinar)</p>
<p><strong><del>April 20, 2020</del> –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a> (Postponed – new date pending)</p>
<p><strong>April 21, 2020 –</strong> <a href="https://failover-conf.heysummit.com/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Failover CONF: A virtual event on reliability</a> ?</p>
<p><strong>April 21, 2020 –</strong> <a href="https://www.meetup.com/Stockholm-Serverless/events/269796168/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2384" target="_blank" rel="noopener">Nordic Serverless Observability Special Meetup (virtual)</a></p>
<p><strong><del>April 23, 2020</del> –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a> (Rescheduled to September 24th)</p>
<p><strong><del>April 24, 2020</del> –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a> (Canceled)</p>
<p><strong>April 29, 2020 –</strong> <a href="https://virtual.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Virtual</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Danielle Heberling</strong> (<a href="https://twitter.com/deeheber" target="_blank" rel="noopener">@deeheber</a>). Danielle is currently a Software Engineer at Stackery, but has a diverse background that includes being a musician and public school teacher. As a self-taught coder, Danielle now works in the serverless space building serverless acceleration software for developers. Danielle has also spoken at ServerlessDays Nashville, Serverlessconf and AWS re:Invent, plus she has a great <a href="https://www.danielleheberling.xyz/" target="_blank" rel="noopener">blog</a> full of serverless content. Thank you Danielle for sharing your voice with the serverless community! ?</p>
<h3>Final Thoughts ?</h3>
<p>Another week of social distancing and #StayHome orders is in the books, and while the news still isn’t great, there are some encourage signs that these measures are having a positive effect. Fingers crossed that things will get better soon.</p>
<p>For many of us in the tech industry, things have been (sort of) business as usual, with those able to work from home still innovating, collaborating, and moving the ball forward with serverless. But if you’ve lost your job and are looking for work, please send me a tweet and I’ll retweet for reach.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Stay safe,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-84/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-84/</guid>
      <pubDate>Tue, 07 Apr 2020 21:47:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #83]]></title>
      <description><![CDATA[<h2>A Treasure Trove of Serverless Patterns… ?</h2>
<p>Welcome to <strong>Issue #83</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-82/">Last week</a>, we had new virtual conferences, a re:Invent 2020 wishlist, and several serverless podcasts. This week, we’ve got a comprehensive collection of serverless patterns, a new survey on technical debt, and a bunch of amazing posts from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://www.thundra.io/aws-lambda-debugger?utm_source=JeremyDaly&amp;utm_medium=newsletter&amp;utm_campaign=Debugging&amp;utm_content=lp_debug" target="_blank" rel="noopener">Natively Debug AWS Lambda on your IDE!</a><br />
Thundra allows you to natively debug your serverless applications on the cloud with their own permissions. Thundra’s online-debugger sets up a secure bridge between your AWS Lambda environment and your IDE. VSCode and IntelliJ IDEA are natively supported with plugins. For other IDEs, Thundra provides a portable client to foster the integration with any IDEs. Start debugging Node.js, Python and Java functions for free today! Sponsored</p>
<p><a href="https://serverless.com/blog/announcing-troubleshooting-monolambdas?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Announcing Troubleshooting Monolambdas with Express.js and Flask</a><br />
So this is pretty cool. While I don’t like to encourage monolithic Lambda functions (or Lambdaliths), they are still quite prevalent and create an easy path for initial serverless adoption. So whether you’re using ExpressJS, Flask, or even my open source project <a href="http://LambdaAPI.com" target="_blank" rel="noopener">Lambda API</a>, the Serverless Framework Pro now supports monitoring route level statistics using these frameworks.</p>
<p><a href="https://blog.paloaltonetworks.com/2020/03/cloud-native-security-platform-2/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Prisma Cloud Native Security Platform Embeds Security into DevOps Lifecycle</a><br />
The new release of the Prisma Cloud Native Security Platform from Palo Alto now has one click instrumentation of Lambda functions. This is all built off of the technology developed by our good friends from Puresec, so you know it’s going to be good.</p>
<p><a href="https://info.acloud.guru/resources/brazeal-in-praise-of-s3-the-greatest-cloud-service-of-all-time?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">S3 is the greatest cloud service of all time</a><br />
If you missed March Madness this year, but love using the cloud, then perhaps you were part of the A Cloud Guru voting for #CloudMadness. S3 was the winner, and Forrest Brazeal tells you why.</p>
<p><a href="https://www.linkedin.com/posts/forrestbrazeal_cloud-cloudcomputing-books-activity-6649300879247753217-8ofs?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">The Read Aloud Cloud: An Innocent’s Guide to the Tech Inside – Available for Pre-order</a><br />
Speaking of Forrest Brazeal, his first book is now available for pre-order! I love reading Forrest’s FaaS and Furious cartoons, and I’m really looking forward to seeing what he’s created with this.</p>
<p><a href="https://docs.google.com/forms/d/e/1FAIpQLSd376H-mkhlwNZGV53kqgkAplDTrR2GyxMqoj7pG87jQ66r7Q/viewform?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">SURVEY: Serverless – Testing and Technical Debt</a><br />
A few academics are running a survey to investigate technical debt in serverless functions. The goal is to understand how FaaS is tested and which technical factors can influence technical debt.</p>
<p><a href="https://www.zdnet.com/article/informatica-brings-serverless-compute-to-data-integration-cloud/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Informatica brings serverless compute to Data Integration Cloud</a><br />
If you can get through ZDNet’s mountain of ads, you might gain some insight into Informatica’s new serverless compute offering. Might be a bit hard to read between the lines, but you’ll see a lot more of this in the future, where platforms like Informatica are giving customers serverless functions to process data within their systems.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://www.linkedin.com/pulse/why-i-didnt-choose-serverless-framework-mandar-nilange/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Why I didn’t choose serverless framework?</a><br />
Mandar Nilange decided to write his own deployment scripts utilizing the AWS CLI and Bash scripts, which he says gives him more control and flexibility. IMO, this is a <em>very</em> bad idea. As developers, we often get the urge to build solutions ourselves (I get it, I’ve been there, and still am sometimes), but building custom tools to deploy your services adds zero customer value and creates brittle deployment systems that require ongoing maintenance.</p>
<p><a href="https://medium.com/@shrestha.tejash/think-twice-before-you-use-durable-functions-ce8d2cb1fb57?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Think twice before you use Durable Functions</a><br />
Tejash Shrestha had some issues scaling Durable Functions, and he writes about it in this post. I’m curious how much of this was an underlying issue with Durable Functions versus an implementation problem. Either way, cloud providers should take feedback like this very seriously.</p>
<p><a href="https://lumigo.io/blog/serverelss-continuous-integration-in-the-era-of-parallelism/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Serverless Continuous Integration in the era of parallelism</a><br />
Great post by Saar Tochner that discusses how Lumigo tweaked their serverless deployment system to achieve faster test results without compromising their testing suite.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://winterwindsoftware.com/serverless-brownfield-app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">The smallest way to introduce serverless into a brownfield application</a><br />
Paul Swail points out one of the best serverless use cases out there, especially if you already have a brownfield application that likely won’t be easy to migrate to serverless.</p>
<p><a href="https://medium.com/@mahfuzcse12/moving-laravel-artisan-commands-to-aws-lambda-2de69758eb53?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Moving Laravel Artisan Commands To AWS Lambda</a><br />
This use case by Mahfuzul Alam is a perfect example of offloading peripheral jobs to serverless.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/@taibi.davide/serverless-patterns-e1fb3f1d753e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Serverless Patterns</a><br />
Wow, wow, wow! Davide Taibi, Nabil El Ioini, Claus Pahl, and Jan Raphael Schmid Niederkofler wrote a research paper on Serverless Patterns and it is amazing. Lot of really cool patterns in here (including some of mine) for you to apply to your own serverless architectures.</p>
<p><a href="https://serverless.com/blog/official-guide-aws-http-apis?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">The Official Guide to AWS HTTP APIs</a><br />
Fernando Medina Corey put together an extensive guide to using the new AWS HTTP APIs. Lots of detail in here about use cases, drawbacks, pricing, and how they work with the Serverless Framework.</p>
<p><a href="https://towardsdatascience.com/serverless-tweaking-the-lambdas-de13507793e4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Serverless: Tweaking the Lambdas</a><br />
Anuradha Wickramarachchi offers a few suggestions for optimizing your Lambda functions. There is some good information in here about Node.js concurrency, and a simple trick to minimize simultaneous asynchronous calls in the event loop.</p>
<p><a href="https://medium.com/@dattatrayhkulkarni/aws-serverless-series-part-1-dynamodb-distilled-dbe659eee464?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">AWS Serverless Series Part 1 : DynamoDB Distilled</a><br />
In depth post by Dattatray Kulkarni that outlines the details of DynamoDB. He points out several limitations, but many are mostly limitations of NoSQL databases in general. Pagination is still my number one pet peeve, so 100% agree with him on that.</p>
<p><a href="https://medium.com/better-programming/how-to-migrate-your-rest-api-to-the-new-http-api-in-aws-2e986c326ce0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">How to Migrate Your REST API to the New HTTP API in AWS</a><br />
If you’ve yet to give AWS HTTP APIs a look, this article from Allen Helton will give you some details on what you’d need to do to migrate.</p>
<p><a href="https://dashbird.io/blog/what-is-the-ideal-retention-period-for-application-logs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">What is the ideal retention period for application logs?</a><br />
Renato Byrro has a few suggestions to answer this question.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://pages.awscloud.com/OTT-Learning-Path-How-to-Use-Amazon-EventBridge-to-Build-Decoupled-Event-Driven-Architectures.html?&amp;trk=el_a134p000006Br26AAC&amp;trkCampaign=FY20_2q_EventBridge_demo_learningpath&amp;sc_channel=el&amp;sc_campaign=Fy20_2q_JDalyNewsletter_ebdemovideos&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=mult" target="_blank" rel="noopener">New How-To Videos from AWS: Amazon EventBridge Learning Path</a><br />
Seven demo videos, 60 minutes, and a lot to learn about event-driven architectures. This highly visual learning path guides you through getting started with EventBridge, integrating with SaaS partners, and using advanced features like Schema Registry. It also provides additional resources to dive deep into EventBridge features and learn more about event-driven architectures. Sponsored</p>
<p><a href="https://www.jeremydaly.com/verifying-self-signed-jwt-tokens-with-aws-http-apis/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Verifying self-signed JWT Tokens with AWS HTTP APIs</a><br />
Since AWS HTTP APIs are all the rage, I decided to do a bit of poking around myself to see if I could migrate some existing projects. Turns out that the limited authentication methods were my biggest roadblock. But after some research, I was able to set up a way to easily verify self-signed JSON Web Tokens. In this post, I’ll show you how.</p>
<p><a href="https://medium.com/@andrez.moreno.m/how-to-build-a-serverless-api-in-aws-without-using-a-single-lambda-522ce43a6fb6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">How to build a Serverless API in AWS without using a single lambda</a><br />
It’s not right for everything, but bypassing Lambda altogether is certainly a possibility for certain workloads. In this post, Andres Moreno shows you how to do just that.</p>
<p><a href="https://medium.com/@gerard.sans/finding-the-nearest-locations-around-you-using-aws-amplify-part-1-ee4d6a14eec9?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Finding the nearest locations around you using AWS Amplify</a><br />
Gerard Sans has an awesome tutorial that will teach you how to enable GraphQL distance-aware searches using the @searchable GraphQL transform along with AWS Amplify.</p>
<p><a href="https://medium.com/@acmicrox/realize-asynchronous-slack-slash-command-with-aws-serverless-bb0d4110f436?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Realize asynchronous Slack slash command with AWS serverless</a><br />
Great tutorial by Chen-Che Huang that shows you how to use the AWS CDK to deploy a Slackbot that can help manage deployments in your AWS environment. Plenty of other use cases for this as well.</p>
<p><a href="https://tlvince.com/decorated-lambda-handlers?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Decorated Lambda handlers</a><br />
This post by Tom Vincent shows you how to take a lot of the repetitive boilerplate that’s added to Lambda functions and wrap them up in a simple, reusable decorator. This would be a great use case for Lambda Layers.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://securityboulevard.com/2020/03/apple-turns-the-anti-ad-thumbscrews-with-safari-cookie-blocking/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Apple Turns the Anti-Ad Thumbscrews With Safari Cookie Blocking</a><br />
Not entirely serverless here, but important information (and insight) into the state of privacy on the web and how it will affect lots of developers. I’ve always been a privacy advocate, but killing offline PWAs by reseting local storage every seven days seems like using a chainsaw versus a scalpel.</p>
<p><a href="https://medium.com/@IAMVISH/ddos-defence-aws-serverless-architecture-e3027f85278e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">DDoS Defence</a><br />
A quick summary of some DDoS defense tactics using AWS services and infrastructure.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/@adhorn/immutable-infrastructure-21f6613e7a23?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Immutable Infrastructure</a><br />
This is an amazing post by Adrian Hornsby (set aside at least 30 minutes to read and absorb it) that discusses the benefits of (or more realistically, the need for) immutable infrastructures in the cloud. Whether you’re developing serverless applications or traditional ones, applying this mindset could save you a lot of headaches in the future.</p>
<p><a href="https://info.acloud.guru/resources/brazeal-how-your-org-predicts-your-ci/cd-pipeline?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">How your org predicts your CI/CD pipeline</a><br />
I think Forrest Brazeal wins this month’s “prolificness” award. He has another excellent piece that outlines some common CI/CD patterns and explains how they map back to your engineering organization’s (likely broken and messy) structure.</p>
<p><a href="https://winterwindsoftware.com/dev-firm-multicloud-capability/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Should development firms support multiple clouds for their serverless client projects?</a><br />
Paul Swail has some thoughts on multi-cloud serverless deployments and why he thinks it’s a bad idea.</p>
<p><a href="https://blog.bitsrc.io/13-top-serverless-solutions-for-2020-c84157f8c9d7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">13 Top Serverless Solutions for 2020</a><br />
This post by Ashan Fernando gives a serverless solution for a number of different categories and then some alternatives for each. There’s a plug in here for something that I wouldn’t really consider “serverless”, so feel free to play the “one of these things is not like the other” game.</p>
<p><a href="https://thenewstack.io/knative-crowds-out-other-serverless-software-packages-and-other-cncf-survey-takeaways/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Knative Crowds out Other Serverless Software Packages (and Other CNCF Survey Takeaways)</a><br />
Lawrence Hecht does an awesome job digging into the number of the CNCF survey and offers up some additional insights (especially into the effect Knative is having on other installable serverless solutions).</p>
<h3>Serverless Videos and Podcasts… ?</h3>
<p><a href="https://www.serverlesschats.com/42?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Episode #42: Better Serverless Microservices using Domain Driven Design with Susanne Kaiser</a><br />
In this episode, I chat with Susanne Kaiser about the problems with poor software design, how Wardley Maps can help you focus on your core business domains, what are the patterns and practices of Domain Driven Design, and how they can help you build better serverless backends. Don’t forget that you can <a href="https://www.youtube.com/watch?v=eGYlTfBJBJQ?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">watch it on YouTube</a>!</p>
<p><a href="https://www.youtube.com/watch?v=D6uyh4nWyEs?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Streaming realtime data using Kinesis Firehose</a><br />
In this video, Marcia Villalba teaches you about AWS Kinesis Firehose, and then builds a demo that sends streaming data to it.</p>
<p><a href="https://www.twitch.tv/videos/579976920" target="_blank" rel="noopener">Happy Little APIs, Season 2: Episode 1</a><br />
A new season of Happy Little APIs with Eric Johnson. This episode features Ran Ribenzaft from Epsagon talking about Private Integrations with HTTP APIs. Catch new episodes every other Tuesday through May 31, 10 AM PDT.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-kinesis-data-streams-now-supports-scaling-up-to-10000-mbs-throughput-with-a-single-api-call/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Amazon Kinesis Data Streams now supports scaling up to 10,000 MB/s throughput with a single API call</a><br />
Starting today, you can use the UpdateShardCount API in Amazon Kinesis Data Streams to scale up to 10,000 shards for a single data stream. That is a lot of data.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/aws-global-accelerator-launches-tcp-termination-at-the-edge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">AWS Global Accelerator launches TCP Termination at the Edge</a><br />
This is a very cool feature if you have really low latency requirements. By creating TCP connections in parallel, the total connection time is reduced, increasing performance for workloads such as API calls, file uploads, or Voice over IP calls.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-documentdb-mongodb-adds-support-role-based-access-control/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Amazon DocumentDB (with MongoDB compatibility) Adds Support for Role-Based Access Control</a><br />
Amazon DocumentDB added support for Role-based Access Control (RBAC). RBAC gives you the ability to create users and attach built-in roles to restrict what operations the user has authorization to perform.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-managed-cassandra-service-now-helps-you-automate-the-creation-and-management-of-resources-by-using-aws-cloudformation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Amazon Managed Cassandra Service now helps you automate the creation and management of resources by using AWS CloudFormation</a><br />
You can now create and manage settings for resources in MCS based on CloudFormation templates. The templates enable you to specify the name of keyspaces and tables as well as the schema, read/write mode, and provisioned throughput settings for tables.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://www.stackery.io/?utm_source=Advertisement&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Supercharge Development, Delivery and Management of Serverless Applications</a><br />
Stackery empowers enterprise development teams to deliver Well-Architected serverless applications quickly, securely, and at scale— without the overhead of complex infrastructure and operations management. Accelerate overall development and secure delivery of serverless applications by up to 60x – so your team can focus on perfecting core business logic. Sponsored</p>
<p><a href="https://github.com/aws-samples/aws-serverless-ecommerce-platform?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Serverless Ecommerce Platform: a sample implementation of a serverless backend for an e-commerce website</a><br />
Nicolas Moutschen put together an incredible resource for devs and architects that want to learn how to build and connect serverless microservices. You can deploy this sample, or simply use it as a roadmap to architect your own solution.</p>
<p><a href="https://medium.com/@franmeriles/creating-serverless-application-effortlessly-with-laconiajs-464ea547a0f0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Creating Serverless Application effortlessly with LaconiaJS</a><br />
Haven’t played around with this, but it looks like a pretty solid library.</p>
<p><a href="https://github.com/s0enke/cloudformation-templates?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">s0enke/cloudformation-templates: A collection of common tasks automated with CloudFormation</a><br />
Soenke Ruempler just added two new CloudFormation templates that easily let you send AWS events to a Slack channel using AWS Chatbot. One sends health events, and the other sends CodePipeline events.</p>
<p><a href="https://medium.com/serverless-transformation/whats-new-on-sls-dev-tools-928d7da91c33?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">What’s new on sls-dev-tools ?</a><br />
Lots of new features have been added to sls-dev-tools, including expanded AWS authentication support, EventBridge monitoring, and a keyboard shortcut to open the AWS Console for a function.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>March 13-April 10, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Virtual-Workshop_2020_VW_s02-DAT.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Getting Started with Amazon DynamoDB (Virtual Workshops)</a></p>
<p><strong>April 2-May 31, 2020 – </strong><a href="https://github.com/singledigit/sam-template-examples">Sessions with SAM: Live Twitch sessions by Eric Johnson (every Thursday at 10AM PDT)</a></p>
<p><strong><del>April 6, 2020</del> –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a> (Postponed – new date pending)</p>
<p><strong>April 7, 2020 –</strong> <a href="https://kommunity.com/cloud-and-serverless-turkey/events/chaos-engineering-what-is-it-and-why-do-you-need-it-online-panel-in-english?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">Chaos Engineering: What is it and Why do you need it!</a> (panel discussion)</p>
<p><strong>April 22, 2020 –</strong> <a href="https://pages.awscloud.com/GLOBAL-partner-OE-Stackery-DevOps-Q2-Webinar-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2383" target="_blank" rel="noopener">From Monolithic to Modern: MasterStream’s Serverless Transformation with Stackery</a> (webinar)</p>
<p><strong><del>April 20, 2020</del> –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a> (Postponed – new date pending)</p>
<p><strong>April 21, 2020 –</strong> <a href="https://failover-conf.heysummit.com/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Failover CONF: A virtual event on reliability</a> ?</p>
<p><strong><del>April 23, 2020</del> –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a> (Rescheduled to September 24th)</p>
<p><strong><del>April 24, 2020</del> –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a> (Canceled)</p>
<p><strong>April 29, 2020 –</strong> <a href="https://virtual.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Virtual</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>John Demian</strong> (<a href="https://twitter.com/JohnDemian" target="_blank" rel="noopener">@JohnDemian</a>). John is a Software Engineer-turned-Marketer who very recently joined the team at Sematex, an organization building innovative cloud and on premise solutions. Prior to Sematex, John was a Developer Advocate at Dashbird, and a self-proclaimed part of the “serverless revolution.” John’s written many blog posts about serverless, and you can always count on him to share a tweet from discourse within the community. Thanks John for being an active part of the serverless dialogue! ?</p>
<h3>Final Thoughts ?</h3>
<p>These weeks in self-quarantine seem to be flying by, but at least the serverless content engine seems to be firing on all cylinders, so that’s good. Anyway, as we all continue to practice social distancing (which seems like it could last for quite some time), I hope you’re finding time to connect with new people online, learn new skills, and spend time with your loved ones. Crazy times we’re living in, but hopefully we can all use this time wisely.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Stay safe out there,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-83/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-83/</guid>
      <pubDate>Tue, 31 Mar 2020 22:50:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Serverless MySQL: v1.5.4 released]]></title>
      <description><![CDATA[<h3>Minor bug fix</h3>
<p>This update includes a minor bug fix that automatically handles reconnections when receiving the occasional <code>EPIPE</code> error. Special thanks to <a href="https://github.com/kernwig" target="_blank" rel="noopener">@kernwig</a> for the PR.</p>
<p><strong>Full Release Notes:</strong> <a href="https://github.com/jeremydaly/serverless-mysql/releases/tag/v1.5.4" target="_blank" rel="noopener">https://github.com/jeremydaly/serverless-mysql/releases/tag/v1.5.4</a></p>
<p><strong>NPM:</strong> <a href="https://www.npmjs.com/package/serverless-mysql">https://www.npmjs.com/package/serverless-mysql</a><br /><strong>GitHub: </strong><a href="https://github.com/jeremydaly/serverless-mysql">https://github.com/jeremydaly/serverless-mysql</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c3">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c2">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c1" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<p>Learn more about <a href="https://www.jeremydaly.com/projects/serverless-mysql/"><strong>Serverless MySQL</strong></a> or check out the other <a href="https://www.jeremydaly.com/current-projects"><strong>projects</strong></a> I'm working on.</p>]]></description>
      <link>https://www.jeremydaly.com/serverless-mysql-v1-5-4-released/</link>
      <guid>https://www.jeremydaly.com/serverless-mysql-v1-5-4-released/</guid>
      <pubDate>Mon, 30 Mar 2020 22:20:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Verifying self-signed JWT Tokens with AWS HTTP APIs]]></title>
      <description><![CDATA[<blockquote>
<p>“Trust no one.” Or at least that’s what Fox Mulder told me back in the 90s.</p>
</blockquote>
<p>With the recent GA of HTTP APIs for API Gateway, I decided to start evaluating my existing API Gateway REST APIs to see if I could migrate them over to take advantage of the decreased latency and reduced cost of the new HTTP APIs. Several of them were disqualified because they utilize service integrations (a feature that AWS is working to add), but for one of my largest applications, the lack of <strong>Custom Authorizers</strong> is what brought me to a dead end. Or so I initially thought. ?</p>
<p>After a bit of research (okay, it was actually several hours because I decided to read through a bunch of specs and blog posts and then run a ton of experiments), it turns out that hosting your own OIDC Conformant “server” to verify self-signed JSON Web Tokens with HTTP APIs is actually quite simple. So as long as you can use JWT for your bearer tokens, you can utilize your existing authentication service (and probably dramatically reduce your latency and cost).</p>
<p>In this post, I’ll show you everything you need to know to set this up yourself. We’ll generate certificates, create our OIDC discovery service, set up our HTTP API authorizers, generate and sign our JWTs, and protect routes with scopes.</p>
<h3>Why a custom authentication system?</h3>
<p>That’s a really, really good question. In a perfect world, using something like Cognito, Auth0, or Firebase to handle my app’s authentication would be my first choice. These are well-established, trusted solutions that provide drop-in authentication capabilities. They also all support JWT, making them a perfect fit for HTTP APIs for API Gateway.</p>
<p>Unfortunately, we don’t live in a perfect world. Sometimes we have legacy authentication systems that we need to use to control access, or additional regulations that need to be followed, or maybe very specific login or password reset flows that aren’t handled correctly by these providers. And if you have <em>a lot</em> of users, these services can get very expensive, very quickly.</p>
<p>So whatever your reason, it is possible that an off-the-shelf solution might not be right for you. If you find yourself in this situation, then keep reading.</p>
<h3>Why JWT?</h3>
<p>Well, first of all, that’s the only choice right now with HTTP API authorizers, so there’s that. Also, HTTP API authorizers utilize OpenID Connect discovery, which makes setup super easy (more on this in a bit). But the biggest reason is because JWTs allow for <em>stateless</em> authorization, making them a really good fit for serverless applications. I know, I know. You’ve read all the articles and posts about how JWTs are a terrible idea for session tokens because you can’t invalidate them without some sort of coordinated black list which defeats the purpose of being stateless in the first place. I (and many others) say, that’s a bunch of hogwash.</p>
<p>Sure, having the ability to invalidate tokens can be super useful, but in most cases, a JTW with some reasonable expiration will be just fine. If you’re familiar with OAuth2 (and if you’re working with a custom authentication system, then I really hope you are), long-lived <em>refresh tokens</em> can be used to generate new JWTs when old ones expire. So if you wanted to really limit the usage of a JWT, set a very short expiration, and refresh them. Your refresh endpoint can be used to invalidate any compromised tokens.</p>
<p>The data in JWTs <em>can</em> be encrypted, but most of the time this seems like overkill. You obviously don’t want to store unencrypted credit card info in a JWT, so a few claims (like name, email, etc.) and some scopes, are likely fine to leave unencrypted. Also, if your communicating your tokens over an SSL connection (which I hope you are), and your not saving them in a browser’s local storage (which I hope you’re not), then the likelihood of them getting stolen is very low.</p>
<p>And back to this stateless thing for a second. With API Gateway REST API Custom Authorizers, a Lambda function would need to be triggered to generate a policy document that would get cached (for a short while) and passed into your Lambda. In my case, I was just generating the same policy document over and over again, each time needing to lookup the token in DynamoDB to verify it. That’s a lot of extra overhead to get the same information that can easily (and confidently) be passed and verified in a JSON Web Token. This makes endpoint authorization super fast, and saves you all those Lambda invocations and database round trips.</p>
<p>Okay, that’s enough of a preamble. Let’s get building!</p>
<h3>Generating an RSA key pair</h3>
<p>The first thing we need to is generate our RSA key pair so that we can sign our JWTs and so that the HTTP API authorizers can verify the signatures. We can do this by running the following commands:</p>
<div id="crayon-5e7cff9e6c23d600092702" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">openssl genrsa -out private.key 4096
openssl rsa -in private.key -pubout -out public.key</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c23d600092702-1">1</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c23d600092702-2">2</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c23d600092702-1">openssl genrsa-out private.key4096</div>
<div class="crayon-line" id="crayon-5e7cff9e6c23d600092702-2">openssl rsa-inprivate.key-pubout-out public.key</div>
</div>
</td>
</tr></table></div>
</div>
<p>This will give you a <strong>PRIVATE</strong> key like this:</p>
<div id="crayon-5e7cff9e6c24a434911378" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar c5" data-settings="mouseover overlay hide">An RSA Private Key
<div class="crayon-tools crayon-button crayon-copy-button c5">
</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA3E7BTT9I18Yo1UX/UJrK4DXT6EHbFHvEgPsEHywn/D1zGxFZ
3XVpoeRYgLIZLFlCjt6etnbrkdaKJbM2FhWT8XexYHAXUafYxuUOQFRCHuYCMP9y
... (truncated for security) ...
YtySHxcptFht1xUW7W5KVvWNS7W+mYi2m6qbeSnLK8O5t8FYymDuFJBFkxp19EN1
SN+IQF2xb0vShXazMsMKhEYbzoGxco9Kwh3qcJPHd29Er7sa5AQAHlXJPSTh
-----END RSA PRIVATE KEY-----</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c24a434911378-1">1</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24a434911378-2">2</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24a434911378-3">3</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24a434911378-4">4</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24a434911378-5">5</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24a434911378-6">6</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24a434911378-7">7</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c24a434911378-1">-----BEGIN RSA PRIVATE KEY-----</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24a434911378-2">MIIJKQIBAAKCAgEA3E7BTT9I18Yo1UX/UJrK4DXT6EHbFHvEgPsEHywn/D1zGxFZ</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24a434911378-3">3XVpoeRYgLIZLFlCjt6etnbrkdaKJbM2FhWT8XexYHAXUafYxuUOQFRCHuYCMP9y</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24a434911378-4">... (truncated for security) ...</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24a434911378-5">YtySHxcptFht1xUW7W5KVvWNS7W+mYi2m6qbeSnLK8O5t8FYymDuFJBFkxp19EN1</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24a434911378-6">SN+IQF2xb0vShXazMsMKhEYbzoGxco9Kwh3qcJPHd29Er7sa5AQAHlXJPSTh</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24a434911378-7">-----END RSA PRIVATE KEY-----</div>
</div>
</td>
</tr></table></div>
</div>
<p>And a <strong>PUBLIC</strong> key like this:</p>
<div id="crayon-5e7cff9e6c24e711738162" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar c5" data-settings="mouseover overlay hide">An RSA Public Key
<div class="crayon-tools crayon-button crayon-copy-button c5">
</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3E7BTT9I18Yo1UX/UJrK
4DXT6EHbFHvEgPsEHywn/D1zGxFZ3XVpoeRYgLIZLFlCjt6etnbrkdaKJbM2FhWT
8XexYHAXUafYxuUOQFRCHuYCMP9yVyCcteNalStmcJ7Tm3KxTOgZh3Jslf7Myy3v
zND6i71vdaoslfjwFmqsblmq+xbOL7mv1/6yrGO1PPaGxumQM+7uafTgiUSue0Hw
yuJtf0rdb7dj5DUmekKVUIp0sfeTmXCcX/KLmstAyzroVveUcNEdMrKge53OfLT4
alWS8JLDUAJBCYzBXsswGOErR22GDWQxccochlqUh9Sn+kdyMVpfLYJP6aiAU0ag
86E9gvBXwKSF/qCahSs6LOcrGWiHdjlv2CdVU7W5XtXjUEiuegJkai/qGyM+ndJl
A3mtYl8eMxaQhABj8xNGXgu12KUlqPhmIySQeOPzGwnVCWDpB/LVPGNM1KPX4Che
r0P+6PCdIWmrFE6q6CsQHwrW/UzXmXlEm0Rzelnpoo80sB5kpVPUMT+vkYrNhwxy
dobcRHKKvz5giezbLhnoH/s/Tb5jVupF6xFBIutwfOKO5z8fEXix58DxduYHdSXM
vnB5iuS6QhQVNt6DZ+QIXk1bAt6B8/6/ZEeOshFsUfWi29pEhPE8fTwLCvxhXW/x
2erJTivf4xTcwBbnpdeQr+sCAwEAAQ==
-----END PUBLIC KEY-----</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-1">1</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-2">2</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-3">3</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-4">4</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-5">5</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-6">6</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-7">7</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-8">8</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-9">9</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-10">10</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-11">11</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-12">12</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-13">13</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c24e711738162-14">14</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-1">-----BEGIN PUBLIC KEY-----</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-2">MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3E7BTT9I18Yo1UX/UJrK</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-3">4DXT6EHbFHvEgPsEHywn/D1zGxFZ3XVpoeRYgLIZLFlCjt6etnbrkdaKJbM2FhWT</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-4">8XexYHAXUafYxuUOQFRCHuYCMP9yVyCcteNalStmcJ7Tm3KxTOgZh3Jslf7Myy3v</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-5">zND6i71vdaoslfjwFmqsblmq+xbOL7mv1/6yrGO1PPaGxumQM+7uafTgiUSue0Hw</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-6">yuJtf0rdb7dj5DUmekKVUIp0sfeTmXCcX/KLmstAyzroVveUcNEdMrKge53OfLT4</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-7">alWS8JLDUAJBCYzBXsswGOErR22GDWQxccochlqUh9Sn+kdyMVpfLYJP6aiAU0ag</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-8">86E9gvBXwKSF/qCahSs6LOcrGWiHdjlv2CdVU7W5XtXjUEiuegJkai/qGyM+ndJl</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-9">A3mtYl8eMxaQhABj8xNGXgu12KUlqPhmIySQeOPzGwnVCWDpB/LVPGNM1KPX4Che</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-10">r0P+6PCdIWmrFE6q6CsQHwrW/UzXmXlEm0Rzelnpoo80sB5kpVPUMT+vkYrNhwxy</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-11">dobcRHKKvz5giezbLhnoH/s/Tb5jVupF6xFBIutwfOKO5z8fEXix58DxduYHdSXM</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-12">vnB5iuS6QhQVNt6DZ+QIXk1bAt6B8/6/ZEeOshFsUfWi29pEhPE8fTwLCvxhXW/x</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-13">2erJTivf4xTcwBbnpdeQr+sCAwEAAQ==</div>
<div class="crayon-line" id="crayon-5e7cff9e6c24e711738162-14">-----END PUBLIC KEY-----</div>
</div>
</td>
</tr></table></div>
</div>
<p>Keep these keys handy, we’re going to need them in a few minutes.</p>
<h3>Creating your OIDC Conformant “Server”</h3>
<p>As I said earlier, HTTP APIs for API Gateway utilize OpenID Connect discovery documents to locate your <strong>PUBLIC</strong> key. An HTTP API authorizer will use your <strong>PUBLIC</strong> key to verify the signature of incoming JSON Web Tokens, and then pass the claims to your Lambda function. This is a relatively straightforward process, and only requires two <strong>STATIC</strong> files in order to work correctly. This means our OpenID Connect “server” can be any publicly accessible endpoint, like an S3 bucket.</p>
<p>The first file we need is our OpenID Connect <a href="https://openid.net/specs/openid-connect-discovery-1_0.html" target="_blank" rel="noopener">discovery document</a>. The OpenID spec describes lots of <em>required</em> fields, and you’re welcome to study this and follow it to the letter. However, HTTP API authorizers only verify the signature of our JWT, so all of that other stuff (at least in our case) is unnecessary. In fact, we only need two fields: <code>issuer</code> and <code>jwks_uri</code>.</p>
<p>The spec says we need to create a JSON document available at <code>/.well-known/openid-configuration</code>. Using the two fields we need for our authorizer, it should look like this:</p>
<div id="crayon-5e7cff9e6c252347677763" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar c5" data-settings="mouseover overlay hide">openid-configuration
<div class="crayon-tools c5">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
</div>
</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
  "issuer":"https://[my-domain-name]/",
  "jwks_uri":"https://[my-domain-name]/.well-known/jwks.json"
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c252347677763-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c252347677763-2">2</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c252347677763-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c252347677763-4">4</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c252347677763-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c252347677763-2">"issuer":"https://[my-domain-name]/",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c252347677763-3">"jwks_uri":"https://[my-domain-name]/.well-known/jwks.json"</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c252347677763-4">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>The <code>issuer</code> <strong>must</strong> match the domain where you are hosting these files. So if you were to put them in an S3 bucket named “my-jwt-test”, then the issuer should be <code>https://my-jwt-test.s3.amazonaws.com/</code> or your custom domain that is pointed to it.</p>
<p>You’ll also notice that this specifies the <code>jwks_uri</code> (that’s our JSON Web Key Set). This could be anything, but standard convention dictates that we name it <code>jwks.json</code> and put it in the <code>.well-known</code> directory. This file will contain our <strong>PRIVATE</strong> key and <strong>Key ID </strong>that will be used by the authorizer.</p>
<p>Before we move on, we should quickly cover JSON Web Key Sets. Of course, there is another <a href="https://tools.ietf.org/html/rfc7517#section-4" target="_blank" rel="noopener">spec</a> that you can read (or you can get a quick overview <a href="https://auth0.com/docs/tokens/references/jwks-properties" target="_blank" rel="noopener">here</a>), but for our purposes, we just need to know a few basics. There are two ways to add our <strong>PRIVATE</strong> key. We can either add the certificate (in its ASCII PEM format <em>sans whitespace characters</em>) in the X.509 Certificate Chain parameter (<code>x5c</code>), or provide the <strong>modulus</strong> and the <strong>exponent</strong> for the RSA public key in the <code>n</code> and <code>e</code> parameters respectively. You could also provide both, but HTTP API authorizers will use whichever one is available. I’ll show you how to get these in a minute.</p>
<p>The only other <em>required</em> parameter necessary for HTTP API authorizers to work is the <strong>Key ID</strong> (<code>kid</code>). This parameter is used to identify which key a JWT should use to verify its signature. It is possible to specify multiple certificates, so you can utilize this by passing it in the header of your JWTs. The value of your <strong>Key ID</strong> is actually completely arbitrary, meaning it can technically be whatever you want it to be, it just needs to be unique within your key set.</p>
<p>The HTTP API authorizers only requires these two parameters, however, adding some additional meta data (so you remember what this key is) isn’t a bad idea. I would add at least the <strong>Algorithm</strong> (<code>alg</code>), <strong>Key Type</strong> (<code>kty</code>), and <strong>Public Key Use</strong> (<code>use</code>) parameters as well. Okay, let’s create our <code>jwks.json</code> file.</p>
<p><strong>Adding our Public Key – Option #1:</strong></p>
<p>The first public key option (<code>x5c</code>) is super easy. Just open your <code>public.key</code> file we created earlier, and copy everything in between the <code>-----BEGIN PUBLIC KEY-----</code> and <code>-----END PUBLIC KEY-----</code>. Then, replace any whitespace and newlines so we end up with one big long string. The <code>x5c</code> parameter is an array, so we’ll add this key string as the first element (see below).</p>
<p><strong>Adding our Public Key – Option #2:</strong></p>
<p>The second option is a bit tricky if you’re not a cryptography junkie. You need to extract the <strong>modulus</strong> and <strong>exponent</strong> from your public key and base64 encode them. You can do this in the programming language of your choice <em>OR</em> you can use <a href="https://8gwifi.org/jwkconvertfunctions.jsp" target="_blank" rel="noopener">this site</a> to do it for you.  If you really want to go down the rabbit hole on this, <a href="https://coolaj86.com/articles/bigints-and-base64-in-javascript/" target="_blank" rel="noopener">this post</a> will get you started in Node.</p>
<p><strong>Just show me the darn file already!</strong></p>
<p>So below is what our final <code>jwks.json</code> file should look like (using option 1 for our key). We’re just using <code>'my-key-id'</code> for our <strong>Key ID</strong>, but as I said, this can be whatever you want.</p>
<div id="crayon-5e7cff9e6c256728631421" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover wrap">
<div class="crayon-toolbar c5" data-settings="mouseover overlay hide">jwks.json
<div class="crayon-tools c5">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
</div>
</div>
<div class="crayon-plain-wrap">
<textarea class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
  "keys": [
    {
      "alg": "RS256", 
      "kty": "RSA",
      "use": "sig",
      "kid": "my-key-id",
      "x5c": [ "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3E7BTT9I18Yo1UX/UJrK4DXT6EHbFHvEgPsEHywn/D1zGxFZ3XVpoeRYgLIZLFlCjt6etnbrkdaKJbM2FhWT8XexYHAXUafYxuUOQFRCHuYCMP9yVyCcteNalStmcJ7Tm3KxTOgZh3Jslf7Myy3vzND6i71vdaoslfjwFmqsblmq+xbOL7mv1/6yrGO1PPaGxumQM+7uafTgiUSue0HwyuJtf0rdb7dj5DUmekKVUIp0sfeTmXCcX/KLmstAyzroVveUcNEdMrKge53OfLT4alWS8JLDUAJBCYzBXsswGOErR22GDWQxccochlqUh9Sn+kdyMVpfLYJP6aiAU0ag86E9gvBXwKSF/qCahSs6LOcrGWiHdjlv2CdVU7W5XtXjUEiuegJkai/qGyM+ndJlA3mtYl8eMxaQhABj8xNGXgu12KUlqPhmIySQeOPzGwnVCWDpB/LVPGNM1KPX4Cher0P+6PCdIWmrFE6q6CsQHwrW/UzXmXlEm0Rzelnpoo80sB5kpVPUMT+vkYrNhwxydobcRHKKvz5giezbLhnoH/s/Tb5jVupF6xFBIutwfOKO5z8fEXix58DxduYHdSXMvnB5iuS6QhQVNt6DZ+QIXk1bAt6B8/6/ZEeOshFsUfWi29pEhPE8fTwLCvxhXW/x2erJTivf4xTcwBbnpdeQr+sCAwEAAQ=="]
    }
  ]
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-1">1</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-2">2</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-3">3</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-4">4</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-5">5</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-6">6</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-7">7</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-8">8</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-9">9</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-10">10</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c256728631421-11">11</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-1">{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-2">"keys":[</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-3">{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-4">"alg":"RS256",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-5">"kty":"RSA",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-6">"use":"sig",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-7">"kid":"my-key-id",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-8">"x5c":["MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3E7BTT9I18Yo1UX/UJrK4DXT6EHbFHvEgPsEHywn/D1zGxFZ3XVpoeRYgLIZLFlCjt6etnbrkdaKJbM2FhWT8XexYHAXUafYxuUOQFRCHuYCMP9yVyCcteNalStmcJ7Tm3KxTOgZh3Jslf7Myy3vzND6i71vdaoslfjwFmqsblmq+xbOL7mv1/6yrGO1PPaGxumQM+7uafTgiUSue0HwyuJtf0rdb7dj5DUmekKVUIp0sfeTmXCcX/KLmstAyzroVveUcNEdMrKge53OfLT4alWS8JLDUAJBCYzBXsswGOErR22GDWQxccochlqUh9Sn+kdyMVpfLYJP6aiAU0ag86E9gvBXwKSF/qCahSs6LOcrGWiHdjlv2CdVU7W5XtXjUEiuegJkai/qGyM+ndJlA3mtYl8eMxaQhABj8xNGXgu12KUlqPhmIySQeOPzGwnVCWDpB/LVPGNM1KPX4Cher0P+6PCdIWmrFE6q6CsQHwrW/UzXmXlEm0Rzelnpoo80sB5kpVPUMT+vkYrNhwxydobcRHKKvz5giezbLhnoH/s/Tb5jVupF6xFBIutwfOKO5z8fEXix58DxduYHdSXMvnB5iuS6QhQVNt6DZ+QIXk1bAt6B8/6/ZEeOshFsUfWi29pEhPE8fTwLCvxhXW/x2erJTivf4xTcwBbnpdeQr+sCAwEAAQ=="]</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-9">}</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-10">]</div>
<div class="crayon-line" id="crayon-5e7cff9e6c256728631421-11">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>Now we just upload these to our S3 bucket (or static hosting service of choice) and we’re ready to create our authorizers. If you are hosting these on S3, just make sure you set the <code>Content-Type</code> headers to <code>application/json</code> for both files.</p>
<h3>Setting up our HTTP API Authorizers</h3>
<p>Once you’ve <a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html" target="_blank" rel="noopener">created your HTTP API</a> and added a route, click on the “Attach authorizer” and fill in the info below.</p>
<figure id="attachment_2543" class="wp-caption aligncenter c6"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-authorizer.png"><img class="size-full wp-image-2543" src="https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-authorizer.png" alt="" width="1844" height="1506" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-authorizer.png 1844w, https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-authorizer-300x245.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-authorizer-768x627.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-authorizer-1024x836.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-authorizer-1200x980.png 1200w" /></a>
<figcaption class="wp-caption-text">Adding an HTTP API authorizer</figcaption></figure><p>Be sure to change the <strong>Issuer URL</strong> to the domain you set up above, and make sure you include the trailing slash. Then hit “Create and attach” and (assuming everything above was done correctly), it should attach the authorizer.</p>
<h3>Signing our JSON Web Tokens</h3>
<p>If you want to run some quick tests, you can encode your JWTs using the tools available at <a href="https://jwt.io/" target="_blank" rel="noopener">jwt.io</a>. If you’d like to do this programmatically, there are plenty of great libraries available that are also listed on the jwt.io site. For our example, we’ll use Node.js and the <code>jsonwebtoken</code> library by Auth0 (<a href="https://github.com/auth0/node-jsonwebtoken" target="_blank" rel="noopener">GitHub repo</a>).</p>
<p>First we’ll install the dependency:</p>
<div id="crayon-5e7cff9e6c25b968700143" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools crayon-button crayon-copy-button c7" data-settings="mouseover overlay hide">
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">npm install jsonwebtoken</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content crayon-num c2">1</div>
</td>
<td class="crayon-code">
<div class="crayon-pre crayon-line c3">npm install jsonwebtoken</div>
</td>
</tr></table></div>
</div>
<p>Then we’ll set up a quick script to generate and sign our tokens:</p>
<div id="crayon-5e7cff9e6c25e776438255" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c7" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">// Require token signer and file system
const jwt = require('jsonwebtoken')
const fs = require('fs')
// Load my private key
const privateKey = fs.readFileSync('./private.key')
// Create and sign the token
const token = jwt.sign({
    foo: 'bar', // this our payload
  },
  privateKey,
  { 
    algorithm: 'RS256',
    expiresIn: '2H',
    audience: 'my-audience', // same as in our HTTP API authorizer
    issuer: 'https://[my-domain-name]/',
    keyid: 'my-key-id' // same as in our jwks.json
  }
)
// return the token
console.log(token)</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-2">2</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-4">4</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-6">6</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-8">8</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-10">10</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-12">12</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-14">14</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-16">16</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-18">18</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-20">20</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-21">21</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c25e776438255-22">22</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c25e776438255-23">23</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-1">// Require token signer and file system</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-2">constjwt=require('jsonwebtoken')</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-3">constfs=require('fs')</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-5">// Load my private key</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-6">constprivateKey=fs.readFileSync('./private.key')</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-8">// Create and sign the token</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-9">consttoken=jwt.sign({</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-10">foo:'bar',// this our payload</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-11">},</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-12">privateKey,</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-13">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-14">algorithm:'RS256',</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-15">expiresIn:'2H',</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-16">audience:'my-audience',// same as in our HTTP API authorizer</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-17">issuer:'https://[my-domain-name]/',</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-18">keyid:'my-key-id'// same as in our jwks.json</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-19">}</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-20">)</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c25e776438255-22">// return the token</div>
<div class="crayon-line" id="crayon-5e7cff9e6c25e776438255-23">console.log(token)</div>
</div>
</td>
</tr></table></div>
</div>
<p>This should return a beautiful JWT like this:</p>
<div id="crayon-5e7cff9e6c261287593577" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover wrap">
<div class="crayon-toolbar c5" data-settings="mouseover overlay hide">A JSON Web Token
<div class="crayon-tools crayon-button crayon-copy-button c5">
</div>
<div class="crayon-plain-wrap">
<textarea class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Im15LWtleS1pZCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1ODUyNDY4OTksImV4cCI6MTU4NTI1NDA5OSwiYXVkIjoibXktYXVkaWVuY2UiLCJpc3MiOiJodHRwczovL1tteS1kb21haW4tbmFtZV0vIn0.SVuBvH2OhBrMkZ4sukgZzQnrJqCB1P_pCY916sJQ_vhZUvepby5SU2HCVEqjjSbiUl1rXLYhi_y_dv_SmegS3PupfOpNNcYMEswj0cgaJ_VQTUcUBJPYP5m10xCuCvsthdgO6djiP4ZlkhqyncLfYo7vvYxeNRBY_TEE4n1jjtrO9veipHi1nXDqVvnmT4C11xhVbkMNORGU02wXFC-OMP_6BAOREns3hJ0FKsLrwPxeYica_KJr5P5fhIfWyHtn8YKiEiGSHlDHEmmkJ0bSnXGhdj_Cx6G_y2-LoM6xNiljjSR5hEwi4rjwWtyuepye4DpJsJLB1TzqIEdIHJ3Qwjhbk8CLZmFPtUWbr9sgrkbEh2o3tPzHc76I-0bvMhPoPwdbbedEiQUEKUGd5v4HbOo_6U57HRhX5_fmMbAk97Z9k0qD9V164FVFS7F86hRWGuPpERa9v_13hWX225IML35O62Go41dikQKrw-MDlBYR5DMchZfNo-exVzEG3lUFbTm6vj0SGltPYaTldyXgyGhAwQHDRxsJriaNjbzeKU5MXKRQrZERgBiL8fnqV6lvapY3LL2vrR18nc9-kgZfwxL4BhgP2Y5Z8FMigVoM3HiJVdt8YxSVnyWtuwNdSYMNf7vRCSWHevpIN2dDZOQynUZYzV8SrOR5HxKsooDnlmU</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content crayon-num c2">1</div>
</td>
<td class="crayon-code">
<div class="crayon-pre crayon-line c3">eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Im15LWtleS1pZCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1ODUyNDY4OTksImV4cCI6MTU4NTI1NDA5OSwiYXVkIjoibXktYXVkaWVuY2UiLCJpc3MiOiJodHRwczovL1tteS1kb21haW4tbmFtZV0vIn0.SVuBvH2OhBrMkZ4sukgZzQnrJqCB1P_pCY916sJQ_vhZUvepby5SU2HCVEqjjSbiUl1rXLYhi_y_dv_SmegS3PupfOpNNcYMEswj0cgaJ_VQTUcUBJPYP5m10xCuCvsthdgO6djiP4ZlkhqyncLfYo7vvYxeNRBY_TEE4n1jjtrO9veipHi1nXDqVvnmT4C11xhVbkMNORGU02wXFC-OMP_6BAOREns3hJ0FKsLrwPxeYica_KJr5P5fhIfWyHtn8YKiEiGSHlDHEmmkJ0bSnXGhdj_Cx6G_y2-LoM6xNiljjSR5hEwi4rjwWtyuepye4DpJsJLB1TzqIEdIHJ3Qwjhbk8CLZmFPtUWbr9sgrkbEh2o3tPzHc76I-0bvMhPoPwdbbedEiQUEKUGd5v4HbOo_6U57HRhX5_fmMbAk97Z9k0qD9V164FVFS7F86hRWGuPpERa9v_13hWX225IML35O62Go41dikQKrw-MDlBYR5DMchZfNo-exVzEG3lUFbTm6vj0SGltPYaTldyXgyGhAwQHDRxsJriaNjbzeKU5MXKRQrZERgBiL8fnqV6lvapY3LL2vrR18nc9-kgZfwxL4BhgP2Y5Z8FMigVoM3HiJVdt8YxSVnyWtuwNdSYMNf7vRCSWHevpIN2dDZOQynUZYzV8SrOR5HxKsooDnlmU</div>
</td>
</tr></table></div>
</div>
<p>Now we can call our HTTP API endpoint and send this token in as the <code>Authorization</code> header (don’t forget to include <code>bearer</code> in there). You should get a <code>Status 200 OK</code>. If not, check the <code>www-authenticate</code> response header for more information on why it failed.</p>
<h3>Cool, now what?</h3>
<p>Assuming this is working for you, now you can do all kinds of cool things. First of all, the payload of your JWT is now available within the <code>requestContext.authorizer</code> of your event JSON passed to your Lambda function. It’ll look something like this:</p>
<div id="crayon-5e7cff9e6c265826845791" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c7" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
  "requestContext": {
    "authorizer": {
      "jwt": {
        "claims": {
          "aud": "my-audience",
          "exp": "1585252914",
          "foo": "bar",
          "iat": "1585245714",
          "iss": "https://[my-domain-name]/"
         },
         "scopes": null
       }
     }
  }
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-1">1</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-2">2</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-3">3</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-4">4</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-5">5</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-6">6</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-7">7</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-8">8</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-9">9</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-10">10</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-11">11</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-12">12</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-13">13</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-14">14</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-15">15</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c265826845791-16">16</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-1">{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-2">"requestContext":{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-3">"authorizer":{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-4">"jwt":{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-5">"claims":{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-6">"aud":"my-audience",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-7">"exp":"1585252914",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-8">"foo":"bar",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-9">"iat":"1585245714",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-10">"iss":"https://[my-domain-name]/"</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-11">},</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-12">"scopes":null</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-13">}</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-14">}</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-15">}</div>
<div class="crayon-line" id="crayon-5e7cff9e6c265826845791-16">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>Notice our <code>foo</code> parameter was passed in the <code>claims</code>. We can add all kinds of claims to our payload that can be used by our Lambda functions. There are some <a href="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" target="_blank" rel="noopener">reserved words</a>, but other than the top seven, you can likely use whatever you want.</p>
<p>Another really cool feature is HTTP API authorizer scopes. You can limit access to particular endpoints by adding an Authorization scope. In the console, you can go to the “Authorization” tab, select the route, and then add scopes using the provided form.</p>
<figure id="attachment_2549" class="wp-caption aligncenter c8"><a href="https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-scopes.png"><img class="size-full wp-image-2549" src="https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-scopes.png" alt="" width="1162" height="536" srcset="https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-scopes.png 1162w, https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-scopes-300x138.png 300w, https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-scopes-768x354.png 768w, https://www.jeremydaly.com/wp-content/uploads/2020/03/http-api-scopes-1024x472.png 1024w" /></a>
<figcaption class="wp-caption-text">HTTP API Scopes</figcaption></figure><p>This endpoint will now require the “admin” scope for access. Adding a scope to our JWT is as simple as adding a <em>space delimited</em> list of scopes to our payload. For example:</p>
<div id="crayon-5e7cff9e6c269230395281" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c7" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">// Create and sign the token
const token = jwt.sign({
    foo: 'bar',
    scope: 'admin user.id user.email' // these are our scopes
  },
  privateKey,
  { 
    algorithm: 'RS256',
    expiresIn: '2H',
    audience: 'my-audience', // same as in our HTTP API authorizer
    issuer: 'https://[my-domain-name]/',
    keyid: 'my-key-id' // same as in our jwks.json
  }
)</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c269230395281-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c269230395281-2">2</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c269230395281-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c269230395281-4">4</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c269230395281-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c269230395281-6">6</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c269230395281-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c269230395281-8">8</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c269230395281-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c269230395281-10">10</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c269230395281-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c269230395281-12">12</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c269230395281-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5e7cff9e6c269230395281-14">14</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c269230395281-1">// Create and sign the token</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c269230395281-2">consttoken=jwt.sign({</div>
<div class="crayon-line" id="crayon-5e7cff9e6c269230395281-3">foo:'bar',</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c269230395281-4">scope:'admin user.id user.email'// these are our scopes</div>
<div class="crayon-line" id="crayon-5e7cff9e6c269230395281-5">},</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c269230395281-6">privateKey,</div>
<div class="crayon-line" id="crayon-5e7cff9e6c269230395281-7">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c269230395281-8">algorithm:'RS256',</div>
<div class="crayon-line" id="crayon-5e7cff9e6c269230395281-9">expiresIn:'2H',</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c269230395281-10">audience:'my-audience',// same as in our HTTP API authorizer</div>
<div class="crayon-line" id="crayon-5e7cff9e6c269230395281-11">issuer:'https://[my-domain-name]/',</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c269230395281-12">keyid:'my-key-id'// same as in our jwks.json</div>
<div class="crayon-line" id="crayon-5e7cff9e6c269230395281-13">}</div>
<div class="crayon-line crayon-striped-line" id="crayon-5e7cff9e6c269230395281-14">)</div>
</div>
</td>
</tr></table></div>
</div>
<p>If a token has a valid scope for the endpoint, access will be authorized and the “scopes” will be available in the <code>requestContext.authorizer</code>.</p>
<div id="crayon-5e7cff9e6c26c250844511" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c4" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools crayon-button crayon-copy-button c7" data-settings="mouseover overlay hide">
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c1" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
  "requestContext": {
    "authorizer": {
      "jwt": {
        "claims": {
          "aud": "my-audience",
          "exp": "1585252914",
          "foo": "bar",
          "iat": "1585245714",
          "iss": "https://[my-domain-name]/"
         },
         "scopes": [
           "admin",
           "user.id",
           "user.email"
         ]
       }
     }
  }
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="hide">
<div class="crayon-nums-content c2">
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-1">1</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-2">2</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-3">3</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-4">4</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-5">5</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-6">6</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-7">7</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-8">8</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-9">9</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-10">10</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-11">11</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-12">12</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-13">13</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-14">14</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-15">15</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-16">16</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-17">17</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-18">18</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-19">19</div>
<div class="crayon-num" data-line="crayon-5e7cff9e6c26c250844511-20">20</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c3">
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-1">{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-2">"requestContext":{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-3">"authorizer":{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-4">"jwt":{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-5">"claims":{</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-6">"aud":"my-audience",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-7">"exp":"1585252914",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-8">"foo":"bar",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-9">"iat":"1585245714",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-10">"iss":"https://[my-domain-name]/"</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-11">},</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-12">"scopes":[</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-13">"admin",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-14">"user.id",</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-15">"user.email"</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-16">]</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-17">}</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-18">}</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-19">}</div>
<div class="crayon-line" id="crayon-5e7cff9e6c26c250844511-20">}</div>
</div>
</td>
</tr></table></div>
</div>
<h3>Should I actually do this?</h3>
<p>And here in lies the ultimate question. I did this as an experiment to see if I could make it work. I’m not using it in production (yet), but I think you should always think long and hard about the value that building a solution like this adds for your customers. If you can use Cognito or Auth0, then I say do that. If you have a need to do this yourself (and you’re willing to study up on cryptography and security), then go for it. After all, you’re still using the JWT standard to verify signatures, so as long as you keep your private keys safe, the solution is solid.</p>
<p>I’m sure that AWS will launch additional authorization methods in the future, but for now, this will allow me to use HTTP APIs with my legacy authentication components. I can also see this being extremely useful for signing tokens for internal communications too. I’m sure there are plenty of other use cases as well.</p>
<p>Hopefully you find this useful. Please feel free to let me know why this is such a bad idea in the comments. ?</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/api-gateway/" rel="tag">api gateway</a>, <a href="https://www.jeremydaly.com/tag/authorizers/" rel="tag">authorizers</a>, <a href="https://www.jeremydaly.com/tag/http-apis/" rel="tag">http apis</a>, <a href="https://www.jeremydaly.com/tag/jwt/" rel="tag">jwt</a>, <a href="https://www.jeremydaly.com/tag/security/" rel="tag">security</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c11">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c10">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<div class="footer-info">? This post was originally published on March 26, 2020 by Jeremy Daly.</div>
</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>]]></description>
      <link>https://www.jeremydaly.com/verifying-self-signed-jwt-tokens-with-aws-http-apis/</link>
      <guid>https://www.jeremydaly.com/verifying-self-signed-jwt-tokens-with-aws-http-apis/</guid>
      <pubDate>Thu, 26 Mar 2020 20:16:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #82]]></title>
      <description><![CDATA[<h2>Too early to think about re:Invent? ?</h2>
<p>Welcome to <strong>Issue #82</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-81/">Last week</a>, HTTP APIs from AWS went GA and NPM got acquired. This week, we’ve got new virtual conferences, re:Invent 2020 wishlists, and several serverless podcasts to fill your ears. Plus we’ve got a ton of great posts from the serverless community.</p>
<p class="p1">This is your <strong>LAST CHANCE</strong> to take the <a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener"><strong>Serverless Community Survey</strong></a>! We’ve had a few hundred completions, but we need <em>your</em> input too. It doesn’t matter your level of serverless usage, the more data we have, the better. It takes <strong>LESS THAN 15 MINUTES</strong> to complete. ?</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://epsagon.com/serverless-observability/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL" target="_blank" rel="noopener">End-to-End Observability for Serverless</a><br />
Instantly monitor and troubleshoot Lambda functions to get the full picture of what they’re doing and why they fail. Agentless and automated, Epsagon delivers full visibility for containers, VMs, FaaS, and more with no training, manual coding, tagging or maintenance required. Try free today! Sponsored</p>
<p><a href="https://docs.google.com/forms/d/e/1FAIpQLScYo133vugdBSFYF9l6l2u-Ia2k4YSOmvh2gruNKFCIERS92g/viewform?usp=embed_facebook&amp;usp=embed_facebook&amp;usp=embed_facebook&amp;usp=embed_facebook?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">ServerlessDays Virtual – Call for Papers</a><br />
What do you do when your local ServerlessDays event has been canceled? Go virtual! The new ServerlessDays Virtual conference is now accepting talk submissions. The first virtual conference is scheduled for April 29, 2020. More details to follow!</p>
<p><a href="https://azure.microsoft.com/en-us/updates/azure-functions-custom-handlers-are-now-in-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Azure Functions custom handlers are now in preview</a><br />
Azure has some more serverless innovation to share. Custom handlers let you implement a functions app in a language beyond the officially supported languages or runtimes. Plus you can have more granular control over the app execution environment.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://www.cloudzero.com/blog/ml-pipeline?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">How I Built a Machine Learning Pipeline on AWS for Under $7 a Day</a><br />
Adam Tankanow worked with his team at CloudZero to split up their ML workloads, put them on Lambda, and get the cost down to $2.15 per day. This is a great example of how a little experimentation (and rethinking how you build your systems) can result in some amazing serverless applications.</p>
<p><a href="https://medium.com/@dbutovetsky/how-to-go-bankrupt-trying-the-new-cheap-aws-http-api-service-692ae1a8bc98?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">How to go bankrupt trying the new cheap AWS HTTP API service</a><br />
Dennis Butovetsky apparently found out the hard way that detailed metrics on the AWS HTTP API service can quickly rack up some massive CloudWatch Metrics charges. It seems strange that url parameters would be considered unique routes, so perhaps there is something he’s missing?</p>
<p><a href="https://medium.com/@richardfan1126/how-i-handle-time-based-events-in-serverless-architecture-30a8155a712?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">How I handle time-based events in serverless architecture</a><br />
We’ve covered this topic many times, but it’s certainly worth repeating over and over again because it is such a powerful pattern. Richard Fan compares four ways to schedule events, and like most, comes to the conclusion that CloudWatch scheduled events plus SQS message delays work the best.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://towardsdatascience.com/5-minutes-to-create-an-aws-lambda-function-to-stay-updated-about-covid-19-in-your-area-88a4abe77a04?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">5 Minutes to Create an AWS Lambda Function to Stay Updated About COVID-19 in Your Area</a><br />
This is a great use case that shows how serverless can be used as an extension to existing services. You could use this to monitor a SaaS service’s status page, or check for new updates on an RSS feed, or yes, even use it to get up-to-date info on COVID-19.</p>
<p><a href="https://medium.com/@javame/how-to-automatically-create-cloudwatch-alerts-with-cloudtrail-lambda-and-serverless-62aca7bdac5b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">How to automatically create CloudWatch alerts with CloudTrail, Lambda, and Serverless</a><br />
Here’s another great use case, using serverless to alert your team whenever a new Lambda function is added to your AWS account. Antonio Terreno shows you how his team set us this simple way of detecting new functions that your CI/CD system or non-instrumented functions would miss.</p>
<p><a href="https://medium.com/@punjpuneet/serverless-framework-to-test-aws-microservices-575cbbc0823?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Serverless Framework To Test AWS Microservices</a><br />
This is an interesting use case from Puneet Punj, using serverless to run automated tests runners, upload the reports to S3, and use SNS to notify you of errors.</p>
<p><a href="https://medium.com/@tensung.namgyal/slack-messaging-from-aws-serverless-d593ad97eb9?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Slack Messaging from AWS Serverless</a><br />
Slackbots and serverless are like peanut butter and jelly. Krishnan Viswanath provides some simple scaffolding for building a Java-backed Slackbot using API Gateway and Lambda deployed with SAM. There are plenty of optimizations to be added, but the use case is solid.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://www.stackery.io/?utm_source=Advertisement&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Supercharge Development, Delivery and Management of Serverless Applications</a><br />
Stackery empowers enterprise development teams to deliver Well-Architected serverless applications quickly, securely, and at scale— without the overhead of complex infrastructure and operations management. Accelerate overall development and secure delivery of serverless applications by up to 60x – so your team can focus on perfecting core business logic. Sponsored</p>
<p><a href="https://medium.com/proud2becloud/a-comprehensive-analysis-of-aws-lambda-function-optimize-spikes-and-prevent-cold-starts-57942be5748e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">A comprehensive analysis of AWS Lambda function: optimize spikes and prevent cold starts</a><br />
Excellent post that discusses how Lambda Provisioned Concurrency works, how it relates to Reserved Concurrency and auto scaling groups, and even a code snippet to help you schedule Provisioned Concurrency when you expect spikes in your workloads.</p>
<p><a href="https://medium.com/better-programming/moving-messages-in-aws-super-fast-lambdas-use-batches-c34cae10e78d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Moving Messages in AWS: Super-Fast Lambdas Use Batches</a><br />
Good advice from Greg Farrow in here about using the available batching options provided by various AWS services when making calls from Lambda functions. If you need proof that it’s much faster, check out the tests he ran.</p>
<p><a href="https://medium.com/@george.mao/aws-http-apis-is-ga-here-are-my-favorite-features-63fc51ba7363?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">AWS HTTP APIs is GA. Here are my favorite features!</a><br />
We talked a lot about HTTP APIs last week, but George Mao outlines a few of his favorite features. Improved CORS, JWT authorizes, and auto-deploy are all ?!</p>
<p><a href="https://medium.com/serverless-transformation/eventbridge-the-key-component-in-serverless-architectures-e7d4e60fca2d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">EventBridge: The key component in Serverless Architectures</a><br />
Ben Ellerby gives you the lowdown on EventBridge and why it’s such an important tool for building event-driven architectures in serverless.</p>
<p><a href="https://winterwindsoftware.com/lambda-middleware/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Using middleware for cross-cutting concerns in your Lambda functions</a><br />
Someday (hopefully in the very near future) much of the boilerplate code we need to add to our Lambda functions will go away. Until then, using middleware (like Middy) to help you standardize some of those processes can help you keep your sanity. Paul Swail explains how.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://www.halfstack.software/configuring-serverless-framework-for-multiple-stages/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Configuring Serverless Framework for multiple stages</a><br />
Brett Andrews shows you a simple way to use <code>custom</code> variables in your serverless.yml to change values based on the current stage.</p>
<p><a href="https://medium.com/better-programming/how-to-deploy-a-local-serverless-application-with-aws-sam-b7b314c3048c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">How to Deploy a Local Serverless Application With AWS SAM</a><br />
Lorenz Vanthillo has a great tutorial that will get you up and running (locally) with the Serverless Application Model, and then show you how to move your work to the cloud.</p>
<p><a href="https://theburningmonk.com/2020/03/how-to-optimize-lambda-memory-size-during-ci-cd-pipeline/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">How to: optimize Lambda memory size during CI/CD pipeline</a><br />
Yan Cui has added Alex Casalboni’s aws-lambda-power-tuning to the <code>lumigo-cli</code> tool. Now you can easily tune your functions for the optimal memory setting, even as part of your CI/CD pipeline. Lots of considerations when doing this, but this makes it simple.</p>
<p><a href="https://medium.com/@willvelida/building-a-simple-streaming-app-with-azure-cosmos-db-event-hubs-and-azure-functions-3dd033979faf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Building a simple streaming app with Azure Cosmos DB, Event Hubs and Azure Functions</a><br />
Will Velida walks you though building an event-driven app using serverless tools on Azure. It doesn’t matter what cloud you’re using, embracing and learning distributed system techniques is critical to building modern serverless applications.</p>
<p><a href="https://www.twitch.tv/videos/570591689?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Defeating malicious code injection with IAM conditions</a><br />
Rob Sutter has an awesome video tutorial that shows you how to add a <code>Condition</code> statement to your IAM roles that can restrict item level access in your DynamoDB tables. This is super powerful for all us #SingleTableForLife peeps. This takes fine-grained security to the max. ?</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.thundra.io/aws-lambda-debugger?utm_source=JeremyDaly&amp;utm_medium=newsletter&amp;utm_campaign=Debugging&amp;utm_content=lp_debug" target="_blank" rel="noopener">Natively Debug AWS Lambda on your IDE!</a><br />
Thundra allows you to natively debug your serverless applications on the cloud with their own permissions. Thundra’s online-debugger sets up a secure bridge between your AWS Lambda environment and your IDE. VSCode and IntelliJ IDEA are natively supported with plugins. For other IDEs, Thundra provides a portable client to foster the integration with any IDEs. Start debugging Node.js, Python and Java functions for free today! Sponsored</p>
<p><a href="https://medium.com/@timawagner/tims-take-re-invent-2020-serverless-wishlist-7f0756da4cd0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Tim’s Take: A re:Invent 2020 Serverless Wishlist</a><br />
Tim Wagner (aka the father of Lambda) has a few #awswishlist items that he’d like the serverless teams at AWS to work on. Lots of really interesting ideas in here. My favorite is the idea of a shared in-memory cache (like Redis, only serverless). And let’s add serverless Elasticsearch to this list while we’re at it. ?</p>
<p><a href="https://www.siliconrepublic.com/people/serverless-liberty-it-dave-anderson?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Serverless computing: An ‘exciting space for engineers to play in’</a><br />
I love reading interviews with serverless engineers that just get it. And Dave Anderson from Liberty IT definitely gets it. Dave gives some really solid answers to a number of common serverless questions.</p>
<p><a href="https://medium.com/@serhatcan/why-global-infrastructure-matters-how-aws-helps-62e7f7e28eb0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Back to Basics: Why Global Infrastructure Matters</a><br />
Great read by Serhat Can that discusses why being able to deploy to multiple regions is so important. It’s really easy to think about single region deployments, but with the right planning (think IaC), service providers like AWS make multi-region deployments an attainable goal for most organizations.</p>
<p><a href="https://blog.softwaremill.com/abstractions-and-serverless-3dfaccaf85b6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Abstractions and serverless</a><br />
Adam Warski has an interesting piece that talks about (mis)handling abstractions and why we should be careful not to repeat the mistakes of the past as we continue to evolve serverless. I don’t agree with everything said (like building a non-trivial service with serverless is a high-risk), but I do agree that our current abstraction layers for serverless are not great.</p>
<h3>Serverless Videos, Podcasts, and more… ?</h3>
<p><a href="https://www.serverlesschats.com/41?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Serverless Chats – Episode #41: Communication Patterns in Serverless with Paul Swail</a><br />
In this episode, I chat with Paul Swail about the types of messaging systems available from AWS, how to use them with your serverless applications, and why thinking asynchronously is important to building resilient systems. <strong>ALSO:</strong> Serverless Chats is now on YouTube, so you can watch the episode <a href="https://www.youtube.com/watch?v=gf__z3K8LBI" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://www.lastweekinaws.com/podcast/screaming-in-the-cloud/serverless-evangelism-with-farrah-campbell/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Screaming in the Cloud: Serverless Evangelism with Farrah Campbell</a><br />
Corey Quinn chats with Farrah Campbell about the serverless community, her role as an AWS serverless hero, and how a serendipitous 20-minute car ride inspired her to make the jump into technology.</p>
<p><a href="https://castbox.fm/episode/3%3A-Building-a-fully-serverless-insurance-company-with-Joe-Emison-id2644378-id241394992?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Real World Serverless – Episode #3: Building a fully serverless insurance company with Joe Emison</a><br />
Part 2 of Yan Cui’s conversation with Joe Emison, who has been building serverless applications since 2015 with Firebase on GCP and then later with AWS Lambda.</p>
<p><a href="https://medium.com/@byrro/the-serverless-trilemma-building-high-quality-architectures-5b0bdbb8b3a5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">The Serverless Trilemma: Building High-Quality Architectures</a><br />
Quick video that gives a good overview of The Serverless Trilemma (paper about serverless function composition) and walks you through some examples of each of the three principles.</p>
<p><a href="https://www.youtube.com/watch?v=w9lGZanong4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Build a serverless real-time analytics pipeline with AWS managed services</a><br />
In this video, Marcia Villalba shows you how to get started building a serverless real-time analytics pipeline with AWS managed services and explains why we need analytics in our applications.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-managed-cassandra-service-preview-is-now-available-in-18-aws-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Amazon Managed Cassandra Service (preview) is now available in 18 AWS Regions</a><br />
For those of you who love Cassandra, but hate managing it, MCS is now available in a region near you.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-guardduty-price-reduction/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Amazon GuardDuty Price Reduction</a><br />
Amazon GuardDuty is reducing the price of threat detection by adding an additional volume discount tier and further optimizing its CloudTrail analysis. Effective March 1, 2020, GuardDuty pricing for VPC Flow Log and DNS Log analysis now includes a new top discount tier of $0.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-cloudwatch-dashboards-metric-quotas-increased/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Amazon CloudWatch dashboards metric quotas has increased</a><br />
Amazon CloudWatch now supports up to five times the number of metrics per graph and dashboard than before — up to 500 metrics per graph (from 100) and 2500 metrics per dashboard (from 500).</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-cloudwatch-now-provides-more-metric-data-faster-with-getmetricdata-quota-increase/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Amazon CloudWatch now provides more metric data, faster, with GetMetricData quota increase</a><br />
You can now retrieve more metric data from Amazon CloudWatch, faster. The quota for the bulk metric retrieval service GetMetricData has increased from 100 to 500 metrics per request.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/gojkoadzic/status/1240247170386857984?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">AWS NodeJS sdk protip: ‘new aws.S3({logger: console})’ – async errors suddenly become much easier to understand</a> <strong>~ Gojko Adzic</strong><br />
Awesome tip from Gojko. This lets you log all the request details when calling S3 via the AWS SDK. Also, this option is available on all the other services like SQS, SNS, and DynamoDB.</p>
<p><a href="https://twitter.com/andrewbrown/status/1242221175859826688?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Well, this changes everything. #AWSCertified. #aws #cloud</a> <strong>~ Andrew Brown</strong><br />
According to Andrew’s tweet, you can now take <em>all</em> AWS Certification exams with online proctoring. If you were looking for something to do during this lockdown, maybe an AWS certification would be a wise choice.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>March 13-April 10, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Virtual-Workshop_2020_VW_s02-DAT.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Getting Started with Amazon DynamoDB (Virtual Workshops)</a></p>
<p><strong>March 26, 2020 – </strong><a href="https://www.reddit.com/r/aws/comments/fjpe5w/aws_serverless_ama_thursday_march_26th/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">AWS Serverless AMA on Reddit</a></p>
<p><strong><del>March 27, 2020</del> –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> (Rescheduled to October 2nd)</p>
<p><strong>March 30, 2020 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0316-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Optimizing Lambda Performance for Your Serverless Applications (Online Tech Talk)</a></p>
<p><strong><del>April 6, 2020</del> –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a> (Postponed – new date pending)</p>
<p><strong><del>April 20, 2020</del> –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a> (Postponed – new date pending)</p>
<p><strong>April 21, 2020 –</strong> <a href="https://failover-conf.heysummit.com/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2382" target="_blank" rel="noopener">Failover CONF: A virtual event on reliability</a></p>
<p><strong><del>April 23, 2020</del> –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a> (Rescheduled to September 24th)</p>
<p><strong><del>April 24, 2020</del> –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a> (Canceled)</p>
<p><strong>April 29, 2020 –</strong> <a href="https://virtual.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Virtual</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Angela Timofte</strong> (<a href="https://twitter.com/AngelaTimofte" target="_blank" rel="noopener">@AngelaTimofte</a>).  Angela is a Tech Lead at Trustpilot, a global review platform that helps businesses collect and leverage customer reviews. Angela’s work has focused on building scalable solutions, and in particular, migrating from monolithic to serverless and event-driven architectures. Angela has also been active in the serverless community, speaking at ServerlessDays Stockholm and at AWS Community Day Nordics 2020 about DynamoDB. Thank you, Angela, for practicing and preaching about serverless! ?</p>
<h3>Final Thoughts ?</h3>
<p>I hope you are all doing well and staying healthy and sane during these crazy times. Many of us are lucky enough to be able to work from home and spend some extra time with our families, but I know that’s not the case for a lot of people out there right now. Wishing all of you well, and <a href="https://twitter.com/jeremy_daly/status/1241848062844325888" target="_blank" rel="noopener">sending a big thank you from my family</a> to the people on the frontlines of this crisis. Stay safe! ?</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-82/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-82/</guid>
      <pubDate>Tue, 24 Mar 2020 22:28:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #81]]></title>
      <description><![CDATA[<h2>HTTP APIs for the rest of us… ?</h2>
<p>Welcome to <strong>Issue #81</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-80/">Last week</a>, the Serverless Framework added Lambda Destination support, we saw some massive investment in serverless, and we introduced Yan Cui’s new serverless podcast. This week, we’re all about lightweight HTTP proxies to Lambda functions. Plus we’ve got some amazing posts from the serverless community.</p>
<p class="p1">Also, <strong>PLEASE</strong> don’t forget to take the <a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener"><strong>Serverless Community Survey</strong></a> and share it with all your coworkers, family, and friends! The data from this is super important and will help the community make serverless better!</p>
<h3>When you just need a simple HTTP proxy to your Lambda function… ?‍?</h3>
<p>This past week, AWS announced that HTTP APIs have become GA, which is pretty darn cool. For web-facing serverless applications, API Gateway was likely the main entry point, which forced developers to use a fairly complex (and sort of expensive) tool to solve a simple problem. With the release of HTTP APIs, HTTP proxying to Lambda functions is not only super simple, but also 71% cheaper and 60% faster. Plus there’s a ton of other really great features and some exciting things on the roadmap.</p>
<p>If you want to learn more, check out:</p>
<ul><li><a href="https://aws.amazon.com/blogs/compute/building-better-apis-http-apis-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Building faster, lower cost, better APIs – HTTP APIs now generally available</a> by Eric Johnson</li>
<li><a href="https://serverless.com/blog/ultimte-guide-aws-http-apis?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">The Ultimate Guide to AWS HTTP APIs</a> by Fernando Medina Corey</li>
<li><a href="https://lumigo.io/blog/http-api-goes-ga-today/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">HTTP API goes GA today!</a> by Yan Cui</li>
</ul><p>And if you want to hear from one of the Senior Project Managers on the API Gateway team, have a listen to this week’s <a href="https://www.serverlesschats.com/40?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">episode of Serverless Chats</a> featuring Eric Johnson and Alan Tan.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://epsagon.com/serverless-observability/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL" target="_blank" rel="noopener">End-to-End Observability for Serverless</a><br />
Instantly monitor and troubleshoot Lambda functions to get the full picture of what they’re doing and why they fail. Agentless and automated, Epsagon delivers full visibility for containers, VMs, FaaS, and more with no training, manual coding, tagging or maintenance required. Try free today! Sponsored</p>
<p><a href="https://pulse2.com/lightbend-25-million-funding-led-by-dell/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Lightbend Secures $25 Million In Funding Led By Dell</a><br />
Lightbend is the company that launched the CloudState spec initiative a while back that proposed adding state to serverless. It looks like whatever they are doing is getting attention from investors.</p>
<p><a href="https://www.prnewswire.co.uk/news-releases/tencent-cloud-faas-capability-was-evaluated-as-a-strong-performer--852620370.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Tencent Cloud FaaS capability was evaluated as a “strong performer”</a><br />
I know this is just a press release, but I think we should all keep our eyes on Tencent Cloud. I know that the Serverless Framework is working closely with them, and they appear to be bulking up their serverless offerings.</p>
<p><a href="https://blog.npmjs.org/post/612764866888007680/next-phase-montage?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Next Phase Montage</a><br />
Not really serverless news, but NPM is being acquired by GitHub (aka Microsoft). I think this will add more stability and security to NPM, which is a good thing, but the fact that Microsoft is buying another part of the backbone of the open source ecosystem seems a bit concerning. I should probably take off my tinfoil hat.</p>
<p><a href="https://www.stackery.io/blog/stackery-http-api-support/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Stackery Announces Support for AWS HTTP APIs service</a><br />
Stackery users can now implement the new HTTP APIs in their projects. And if it works for your API use case, you should definitely do this.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://devops-life.com/blog/2020/03/06/how-serverless-saved-us-for-$2-with-bref-sh/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">How Serverless Saved Us For $2.</a><br />
This is one of those serverless stories that should be sent to every naysayer out there. Generating 2,000 PDFs with a dedicated server takes up to 11 hours. With Lambda functions and SQS, it takes 2 minutes and costs $1.63.</p>
<p><a href="https://lumigo.io/blog/serverless-ci-cd-how-we-added-a-staging-step/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Serverless CI/CD: How we added a staging step</a><br />
I’ve never met the same serverless CI/CD process twice, and this one from the dev team at Lumigo is no exception. It’s always interesting to see how teams set these things up, so take a peek if you’re looking for some ideas.</p>
<p><a href="https://medium.com/better-programming/how-i-built-a-serverless-geo-search-app-with-dynamodb-491879233754?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">How I Built a Serverless Geo-Search App with DynamoDB</a><br />
Allen Helton recounts some of the bumps along the road when creating a completely serverless geo-search app. Some interesting notes in there about the constraints of third-party packages and the gotcha many people find when trying to update values in a DynamoDB table’s primary index.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@eoins/comparing-two-ways-to-trigger-lambda-from-s3-b5da8cfe1aee?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Comparing Two Ways to Trigger Lambda from S3</a><br />
Eoin Shanaghy compares S3 notifications versus EventBridge with CloudTrail to trigger a downstream Lambda function. While he notes the latency is higher with EventBridge, the decoupling is definitely a benefit.</p>
<p><a href="https://medium.com/@andrewngai9255/using-aws-sagemaker-and-lambda-function-to-build-a-serverless-ml-platform-f14b3ec5854a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Using AWS Sagemaker and Lambda function to Build a Serverless ML Platform</a><br />
Machines learning use cases with Lambda can be tricky, but throwing SageMaker in there can open up a whole new set of possibilities. This is a really great post that shows how to leverage serverless tools with SageMaker to build a really cool prediction algorithm.</p>
<p><a href="https://codeburst.io/price-tracking-with-telegram-bot-691d66ec7a37?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">? Price Tracking with Telegram Bot</a><br />
Periodically checking something and pushing data to a bot seems like a pretty good serverless use case to me. Leon Wee provides a full blown tutorial in here, so if you wanted to implement something like this for yourself, feel free to give it a try.</p>
<p><a href="https://medium.com/radix-ai-blog/artificial-intelligence-on-aws-lambda-9ef45ffe1309?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Can you use Serverless for Artificial Intelligence today?</a><br />
Rodolphe Cambier runs through two different types of AI use cases and examines whether or not they are a good fit for Lambda functions. I think we’ve been clear that many machine learning use cases are hindered by some of Lambda’s limitations, but I have a feeling that’s going to change at some point in the not so distant future.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://alexdebrie.com/posts/dynamodb-one-to-many/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">How to model one-to-many relationships in DynamoDB</a><br />
Another awesome post by Alex DeBrie on DynamoDB modeling. There are so many amazing things that can be done with NoSQL if the data is modeled correctly, and Alex gives you a very thorough lesson on a very useful pattern.</p>
<p><a href="https://www.slappforge.com/blog/3-things-to-consider-when-designing-a-serverless-api?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Designing Serverless APIs with AWS</a><br />
This is a good overview by Udith Gunaratna of the different ways to build APIs using API Gateway and Lambda functions. It outlines some pros and cons to single purpose versus fat Lambdas, along with a discussion on the different types of integrations. Of course, HTTP APIs is likely going to change you approach to this.</p>
<p><a href="https://medium.com/adobetech/best-practices-for-serverless-observability-a99d8dc8af5c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Best Practices for Serverless Observability</a><br />
Whenever the subject of observability comes up, Ran Ribenzaft’s always a great resource to turn to. This post will give you a great overview of what observability is, and how you should be applying it to your serverless applications.</p>
<p><a href="https://dev.to/stevelizcano/dynamodb-crash-course-concepts-modeling-your-schema-and-secondary-indexes-2pkg?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">DynamoDB Crash Course — Intro and Secondary Indexes</a><br />
If you’re looking for a more general overview of DynamoDB, take a look at this article by Stephen Lizcano. I’m loving the recent influx of articles and videos on DynamoDB. We have an entire generation of developers that need to start looking at NoSQL very seriously.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/serverlessguru/debug-aws-lambda-functions-with-thundra-online-debugging-b9160fb5fb66?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Debug AWS Lambda functions with Thundra Online Debugging</a><br />
The new Thundra Online Debugger is pretty sweet, so at the very least, you should give this thing a try. Ryan Jones walks you through the whole process from setting up your Thundra account, to installing the VS code plugin, to debugging your first Lambda function.</p>
<p><a href="https://winterwindsoftware.com/cloud-config-local-tests/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">How to access cloud resource configuration from your local tests</a><br />
This is a common task that many people end up banging their head against the wall trying to solve. Paul Swail teaches you his preferred method using the <code>serverless-export-env</code> plugin for the Serverless Framework.</p>
<p><a href="https://medium.com/@IODCloudTech/how-to-build-a-serverless-telegram-bot-with-aws-lambda-4a1fb2c611d5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">How to Build A Serverless Telegram Bot with AWS Lambda</a><br />
It seems Telegram Bot is popular this week. This post shows you how to implement a Lambda function to respond to bot requests.</p>
<p><a href="https://blog.thundra.io/mastering-the-aws-sam-cli?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Mastering the AWS SAM CLI</a><br />
There are lots of framework options out there for deploying serverless applications, but if you’re doing straight AWS, it’s hard to go wrong with SAM. Serkan Özal gives you a detailed overview of all the commands you need to know to be publishing serverless apps in no time.</p>
<p><a href="https://blog.begin.com/testing-serverless-apps-with-mocha-on-begin-8318f03e6311?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Testing serverless apps with Mocha on Begin</a><br />
I’m a big fan of Test-Driven Development (though I’m not always a strict practitioner), but any time I see workflows encourage and fully integrate testing, it’s worth sharing. Paul Chin Jr. shows you how this works with Begin using either Mocha or <a href="https://blog.begin.com/testing-serverless-apps-with-jest-on-begin-1408e1811e68?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Jest</a>.</p>
<p><a href="https://medium.com/@georgemccreadie/conditionally-deploy-serverless-services-only-when-modified-in-a-mono-git-repository-d7f49afeaa12?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Conditionally deploy Serverless services only when modified in a mono Git repository</a><br />
I’ve included this because I think it’s a creative approach to this common problem. I really like splitting out my services into separate repos, but this has bitten me more that a few times. There are more options now for serverless monorepo deployments, but it never hurts to open up the hood and see how this stuff works.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.thundra.io/aws-lambda-debugger?utm_source=JeremyDaly&amp;utm_medium=newsletter&amp;utm_campaign=Debugging&amp;utm_content=lp_debug" target="_blank" rel="noopener">Natively Debug AWS Lambda on your IDE!</a><br />
Thundra allows you to natively debug your serverless applications on the cloud with their own permissions. Thundra’s online-debugger sets up a secure bridge between your AWS Lambda environment and your IDE. VSCode and IntelliJ IDEA are natively supported with plugins. For other IDEs, Thundra provides a portable client to foster the integration with any IDEs. Start debugging Node.js, Python and Java functions for free today! Sponsored</p>
<p><a href="https://devops.com/why-organizations-are-adopting-or-avoiding-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Why Organizations Are Adopting or Avoiding Serverless</a><br />
Roger Magoulas has another wrap up article about the O’Reilly survey on serverless architecture adoption. Some interesting takeaways in here, especially the fact that “security concerns” was the top reason why organizations were avoiding serverless. Also, still seeing “vendor lock-in” way up on the list of challenges.</p>
<p><a href="https://www.datacenterknowledge.com/edge-computing/edge-computing-cloudflare-s-current-expansion-different?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Edge Computing: Cloudflare’s Current Expansion Is Different</a><br />
I know I’ve said this before, but if you’re wondering what comes <em>after</em> serverless, edge computing is probably it. Cloudflare’s strategy on this is really interesting, and while there is some competition, they’re certainly positioning themselves well to be the pioneers on this.</p>
<p><a href="https://www.informationweek.com/cloud/will-virtual-machines-fade-out-for-containers-and-serverless/a/d-id/1337307?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Will Virtual Machines Fade Out for Containers and Serverless?</a><br />
I thought this was a good piece by Joao-Pierre S. Ruth that highlights the importance of choosing the right technology for the right job. There’s no doubt that lifting and shifting to VMs is easier than containerizing your applications, and that taking the next step to serverless will require a complete refactor. So while new applications will obviously benefit from modern technologies, there are still plenty of reasons why we’ll be seeing VMs for quite some time.</p>
<p><a href="https://mikhail.io/2020/03/infinicache-distributed-cache-on-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">InfiniCache: Distributed Cache on Top of AWS Lambda (paper review)</a><br />
Mikhail Shilkov did an excellent job reviewing “InfiniCache: Exploiting Ephemeral Serverless Functions to Build a Cost-Effective Memory Cache”, a paper by Ao Wang et al. It’s always interesting to see what kinds of crazy ideas people come up with, and sometimes it things like this that can push providers to make their better products.</p>
<h3>For the audio/visual crowd… ?</h3>
<p><a href="https://www.serverlesschats.com/40?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Serverless Chats – Episode #40: HTTP APIs for API Gateway with Eric Johnson and Alan Tan</a><br />
In this episode, I chat with Eric Johnson and Alan Tan about why HTTP APIs should be your first choice, the path to REST API feature parity, how private integrations work, implementing CORS and authentication more easily, and so much more.</p>
<p><a href="https://www.youtube.com/watch?v=teutZpUALcE?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Using Environment Variables to Deploy to Different Environments with AWS CodePipeline</a><br />
Marcia Villalba shows you how to configure your SAM templates to create dynamic resource mappings when deploying your serverless applications using AWS CodePipeline.</p>
<p><a href="https://castbox.fm/episode/2%3A-The-case-for-monorepoes-with-Joe-Emison-id2644378-id239017445?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Real World Serverless #2: The case for monorepoes with Joe Emison</a><br />
Part 1 of Yan Cui’s conversation with Joe Emison, who has been building serverless applications since 2015 with Firebase on GCP and then later with AWS Lambda. They discuss the value of serverless, especially to startups, and why he has built Branch Insurance to be fully serverless.</p>
<p><a href="https://www.linkedin.com/pulse/serverless-lunch-chats-james-eventbridge-resources-james-beswick?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Serverless Lunch Chats with James: EventBridge resources</a><br />
James Beswick, Senior Developer Advocate for Serverless at AWS, did a Twitter Live chat the other day and discussed EventBridge. He posted some additional materials as well that will help you start building better event-driven applications.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-athena-now-publishes-cloudwatch-events-for-athena-query-state-transitions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Amazon Athena now publishes CloudWatch Events for Athena query state transitions</a><br />
This is an awesome new feature that can open up a ton of new data processing pipelines. Using these new events, you can create a rule that invokes an AWS Lambda function to post-process the query results when a query has reached the Successful terminal state. Very cool stuff.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-elasticache-for-redis-announces-global-datastore/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Amazon ElastiCache for Redis announces Global Datastore</a><br />
So, not really serverless, but Redis has become the go-to for many serverless apps that need reliable and fast caching. This new feature lets you replicate your cache to two different AWS regions, which could dramatically reduce latency for many applications that are still pulling data from a single region. More details <a href="https://aws.amazon.com/blogs/aws/now-available-amazon-elasticache-global-datastore-for-redis/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-athena-adds-support-for-managing-athena-workgroups-using-aws-cloudformation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Amazon Athena adds support for managing Athena Workgroups using AWS CloudFormation</a><br />
Athena has become an essential part of my serverless data infrastructure, so more repeatable CloudFormation configurations are always welcome.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-elasticsearch-service-announces-support-for-elasticsearch-versions-7.4/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Amazon Elasticsearch Service announces support for Elasticsearch versions 7.4</a><br />
Still not serverless, but like ElastiCache, Elasticsearch is another necessity in many “mostly” serverless applications. This new update adds support for the distance_feature query, some new range aggregations, plus a few updates to Kibana.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/new-aws-certification-validates-expertise-in-aws-databases/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">New AWS Certification validates expertise in AWS databases</a><br />
For those of you striving to become an AWS purpose-built database master, you can now attain blackbelt status with this new certification.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-s3-adds-tagging-support-for-s3-batch-operations-jobs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Amazon S3 adds tagging support for S3 Batch Operations jobs</a><br />
S3 Batch is pretty amazing, but it can also be a bit dangerous if anyone in your organization can trigger a job. With this new update, you can use tags to restrict access to specific jobs using IAM.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/you-now-can-update-your-amazon-dynamodb-global-tables-from-version-2017-11-29-to-the-latest-version-with-a-few-clicks-in-the-dynamodb-console/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">You now can update your Amazon DynamoDB global tables from version 2017.11.29 to the latest version with a few clicks in the DynamoDB Console</a><br />
If you are running old DynamoDB global table versions, you should consider doing this. It’s free, requires no table rebuilds, and will allow you to take advantage of the more modern replication features, higher availability, and access to additional regions.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-redshift-introduces-support-for-materialized-views/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Amazon Redshift introduces support for materialized views (Generally Available)</a><br />
Also not serverless, but this is a really cool feature. Lots of us have data in Redshift, even if it’s replicated from something like DynamoDB for analytics purposes. These new materialized views can help speed up query performance by pre-computing some of the more predictable workloads.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://lumigo.io/blog/10-essential-serverless-framework-plugins/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">10 Essential Serverless Framework Plugins</a><br />
The rich ecosystems of plugins is just another reason why the Serverless Framework is so powerful. Itay Herskovits calls out ten that are super useful in the serverless developer’s toolbox.</p>
<p><a href="https://medium.com/@Michael_Timbs/testing-dynamodb-offline-with-serverless-framework-4ed027bf9b5f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Testing DynamoDB offline with Serverless Framework</a><br />
Michael Timbs shows you how to implement testing using the <code>serverless-dynamodb-local</code> plugin. I’ve gone back and forth on the value of trying to replicate DynamoDB locally, and I tend to favor using a real cloud environment instead. However, if you have a reason for doing it this way, this post will point you in the right direction.</p>
<p><a href="https://blog.newrelic.com/product-news/debugging-event-sources-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Debugging Event Sources for AWS Lambda</a><br />
New Relic has always been a solid tool for monitoring applications, and since the team from IO Pipe joined them, the new features being churned out for serverless are quite amazing. Adam Johnson walks you through their event sources feature for Node.js and Python that lets you see which service invoked your Lambda function.</p>
<p><a href="https://medium.com/@kumologica/kumologica-first-low-code-development-tool-for-aws-lambda-8831b5237428?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2381" target="_blank" rel="noopener">Kumologica: First low-code development tool for AWS Lambda</a><br />
I don’t know anything about this company, but I came across this blog post and thought it looked like an interesting tool. I need to give it a more thorough look.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>March 13-April 10, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Virtual-Workshop_2020_VW_s02-DAT.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Getting Started with Amazon DynamoDB (Virtual Workshops)</a></p>
<p><strong><del>March 19, 2020</del> –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a> (Rescheduled to September 24th)</p>
<p><strong><del>March 24, 2020</del> –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> (Postponed – new date pending)</p>
<p><strong>March 24, 2020 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0304-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Introducing HTTP APIs: A Better, Cheaper, Faster Way to Build APIs (Online Tech Talk)</a></p>
<p><strong><del>March 27, 2020</del> –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> (Rescheduled to October 2nd)</p>
<p><strong>March 30, 2020 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0316-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Optimizing Lambda Performance for Your Serverless Applications (Online Tech Talk)</a></p>
<p><strong><del>April 6, 2020</del> –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a> (Postponed – new date pending)</p>
<p><strong>April 20, 2020 –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a></p>
<p><strong><del>April 23, 2020</del> –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a> (Rescheduled to September 24th)</p>
<p><strong><del>April 24, 2020</del> –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a> (Canceled)</p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Aviad Mor</strong> (<a href="https://twitter.com/AviadMor" target="_blank" rel="noopener">@AviadMor</a>). Aviad is the CTO and Co-Founder at Lumigo, a serverless intelligence platform. Aviad’s work extends beyond working on serverless tools that help in troubleshooting serverless applications though. He’s also spoken at ServerlessDays events, chatted with the Devops Chat podcast, and has a few blog posts on serverless that have appeared on the Lumigo blog and on The New Stack. Thank you, Aviad, for helping developers build more reliable serverless applications! ?</p>
<h3>Final Thoughts ?</h3>
<p>It’s been a bit of a strange week as the world adjusts to this new normal caused by COVID-19. I’m hoping that all this self-quarantining will lead to inspiration and we’ll see a bunch of really great serverless content and projects come from all this extra free time that people have. Maybe it’s time for you to write your first blog post? ?</p>
<p>However you decide to spend your time, please stay safe, take care of your loved ones, follow the advice of your local officials, and support health care workers and neighbors in whatever ways you can. We can do this.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Best,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-81/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-81/</guid>
      <pubDate>Wed, 18 Mar 2020 01:24:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #80]]></title>
      <description><![CDATA[<h2>Welcome to your Lambda Destination… ?</h2>
<p>Welcome to <strong>Issue #80</strong> of Off-by-none. Thanks for joining us!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-79/">Last week</a>, we met some new heroes, got HTTP APIs support in the Serverless Framework, and a GA version of NoSQL Workbench. This week, the Serverless Framework adds Lambda Destination support, we see a massive investment in serverless, and we get a new serverless podcast. Plus we have plenty of awesome posts from our friends in the serverless community.</p>
<p class="p1">⚠️ Before we begin, don’t forget to take the <a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener"><strong>Serverless Community Survey</strong></a>! And if you already took it, please share it with all your recently work-from-home (or self-quarantined ?) coworkers, family, and friends. ☣️</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://epsagon.com/serverless-observability/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL" target="_blank" rel="noopener">End-to-End Observability for Serverless</a><br />
Instantly monitor and troubleshoot Lambda functions to get the full picture of what they’re doing and why they fail. Agentless and automated, Epsagon delivers full visibility for containers, VMs, FaaS, and more with no training, manual coding, tagging or maintenance required. Try free today!. Sponsored</p>
<p><a href="https://serverless.com/blog/lambda-destinations?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">AWS Lambda Destination Support</a><br />
Praise [insert deity of your choice]! ?I cannot understate the importance (or my excitement of) Lambda Destinations. And now that the Serverless Framework supports them, I can go through all my recent projects and pull out those <code>AWS::Lambda::EventInvokeConfig</code>s from my resources.</p>
<p><a href="https://techcrunch.com/2020/03/04/netfily-nabs-53m-series-c-as-micro-services-approach-to-web-development-grows/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Netlify nabs $53M Series C as microservices approach to web development grows</a><br />
Another big money investment into the serverless space. Netlify is a great example of taking a serverless use case to the extreme and monetizing it. Happy to see this company keep growing and enabling more serverless sites.</p>
<p><a href="https://theburningmonk.com/2020/03/announcing-the-new-real-world-serverless-podcast/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Announcing the new Real-World Serverless podcast</a><br />
More serverless content for your commute! ?Yan Cui has launched a brand new podcast where he discusses real-world use cases and challenges with the engineers who are building serverless applications.</p>
<p><a href="https://www.cncf.io/blog/2020/03/04/2019-cncf-survey-results-are-here-deployments-are-growing-in-size-and-speed-as-cloud-native-adoption-becomes-mainstream/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">2019 CNCF Survey results are here: Deployments are growing in size and speed as cloud native adoption becomes mainstream</a><br />
The CNCF released the results of their cloud native survey from last year. Some of the big takeaways are that container usage is up (no surprise there), but 41% of respondents are using serverless, with AWS Lambda topping out the hosted solution (53%) and Knative being the most popular (34%) for installable software.</p>
<p><a href="https://finance.yahoo.com/news/triggermesh-joins-cloud-native-computing-140000464.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">TriggerMesh Joins the Cloud Native Computing Foundation</a><br />
I still think we need to have a separate “Cloud Native, but for real this time, Computing Foundation” that focuses only on serverless, but I guess having more contributors to the CloudEvents spec isn’t a bad thing.</p>
<p><a href="https://blog.thundra.io/putting-an-end-to-the-misery-of-serverless-application-debugging-with-thundra?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Putting an End to the Misery of Serverless Application Debugging With Thundra</a><br />
I saw a demo of the Thundra Debugger the other day and it is very, very cool. One of the biggest problems we have as serverless developers is needing to test code remotely, which often means republishing over and over and adding more logging. The way this tool integrates directly with your IDE changes everything.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@psiphi75/rust-and-serverless-with-a-focus-on-cloudflare-workers-342effbc4f85?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Rust and Serverless, with a focus on Cloudflare Workers</a><br />
Simon Werner has a good post that documents his experience trying to build a REST API with Rust and serverless. Lots of roadblocks right now, but given the future of WASM and serverless computing at the edge, this is something to keep your eye on.</p>
<p><a href="https://medium.com/@svyasrao22/how-to-build-a-scalable-cost-effective-event-driven-etl-solution-using-serverless-b407c14d4093?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">How to Build a Scalable, Cost-Effective Event-Driven ETL Solution using Serverless?</a><br />
Vyas Sarangapani has an awesome post that documents the architecture his team used to build a serverless ETL system. I love when people share their architectures. It’s always super instructive to see how others solve their problems.</p>
<p><a href="https://medium.com/@yurysmykalov/aws-lambda-with-static-outgoing-ip-a-complete-no-vpc-tutorial-8b994229dee4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">AWS Lambda With Static Outgoing IP</a><br />
Not every problem is easily solved with a serverless solution (though I’ve had success using a NAT Gateway as a proxy), so sometimes throwing an EC2 server into the mix might work for you. Yury Smykalov explains why EC2 plus tinyproxy worked for him.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://vacationtracker.io/blog/build-slack-home-tab-with-aws-lambda-and-eventbridge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Build Slack Home Tab in minutes using AWS Lambda and Amazon EventBridge</a><br />
Slobodan Stojanović has a great article that shows you how Vacation Tracker is using their SAR App to route their Slack commands through EventBridge and off to Lambda workers to handle the response. There are some very cool patterns in here, plus sample code if you want to implement some of this yourself.</p>
<p><a href="https://winterwindsoftware.com/aws-scheduling-primitives/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">AWS primitives for scheduling future tasks</a><br />
Paul Swail outlines a few strategies that can be used to schedule tasks with AWS. This has been written about extensively (and he includes some links to those articles), but it’s a common use case that creeps up from time to time. I personally like running a CloudWatch Event every 15 minutes and using an SQS with a DeliveryDelay to handle more precision, but everything has its tradeoffs.</p>
<p><a href="https://medium.com/@IODCloudTech/does-serverless-make-sense-for-your-organization-477918fbb1eb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Does Serverless Make Sense for Your Organization?</a><br />
This article lays out five different use cases for serverless that are being applied by a number of large companies. There are a few “other considerations” in here, but I feel like we’ve addressed those a thousand times over.</p>
<p><a href="https://medium.com/@sungkhum/monitor-servers-and-reboot-solusvm-via-aws-lambda-function-faf9a68eb25a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Monitor Servers and Reboot SolusVM via AWS Lambda Function</a><br />
Whether you’re running SolusVM or not, using a Lambda function to monitor servers or perform schedules maintenance is a great DevOps use case for serverless.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://lumigo.io/blog/5-reasons-why-you-should-use-eventbridge-instead-of-sns/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">5 reasons why you should use EventBridge instead of SNS</a><br />
Yan Cui outlines five reasons why EventBridge should be your new go-to over SNS. There are still plenty of reasons why you’d want to use SNS, but with all the capabilities being added to EventBridge (like content filtering), the majority of use cases will be satisfied.</p>
<p><a href="https://blog.acolyer.org/2020/03/02/firecracker/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Firecracker: lightweight virtualization for serverless applications</a><br />
If you ever wanted to do a deep dive on Firecracker, but didn’t want to dig through all the open source docs, Adrian Colyer has a treat for you. In this post, he summarizes the recently released NSDI’20 paper on Firecracker and gives you a great overview of its design and the problems it solves.</p>
<p><a href="https://medium.com/better-programming/5-steps-to-making-a-predictable-cost-model-for-aws-serverless-projects-78d78909bb82?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">5 Steps to Making a Predictable Cost Model for AWS Serverless Projects</a><br />
Great article by Allen Helton that points out a number of cost considerations when building serverless applications. Data transfer, execution time, CloudWatch logs, etc., all have costs associated with them. He also mentions cost modeling around business processes, which I’m a huge fan of. One of the super powers of serverless is knowing exactly how much a particular process will cost you, which makes calculating the value of that process much easier.</p>
<p><a href="https://www.databasejournal.com/features/mysql/introduction-to-firebase.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Introduction to Firebase</a><br />
You know I’m a big fan of the AWS ecosystem, but if you’ve never looked at Firebase, you definitely should. There are some great features and capabilities (like built-in auth) that make it a handy tool in your serverless arsenal.</p>
<p><a href="https://medium.com/volta-charging/lambdas-in-production-92f8e4ca70a2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Lambdas in Production</a><br />
Caleb Brewer has a nice “cheatsheet” of things to remember when running Lambdas in production. It’s not a long list, but each one is an absolute must.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://www.stackery.io/?utm_source=Advertisement&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Supercharge Development, Delivery and Management of Serverless Applications</a><br />
Stackery empowers enterprise development teams to deliver Well-Architected serverless applications quickly, securely, and at scale— without the overhead of complex infrastructure and operations management. Accelerate overall development and secure delivery of serverless applications by up to 60x – so your team can focus on perfecting core business logic. Sponsored</p>
<p><a href="https://medium.com/@keyurbhole/html-to-pdf-using-aws-lambda-functions-and-layers-with-serverless-92e70bb76a1a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">HTML to PDF conversion using Node.js runtime as AWS Lambda Functions</a><br />
Keyur Bhole shows you how to generate a PDF from HTML and CSS using the Node.js runtime on AWS Lambda Functions. He also provides you with the compiled executables to add to you Lambda Layers.</p>
<p><a href="https://winterwindsoftware.com/fff-aws-lambda-type-definitions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Add type definitions to your Lambda functions</a><br />
Great tip from Paul Swail about using the <code>@types/aws-lambda</code> library to add autocomplete and type checking to your IDE when developing with TypeScript.</p>
<p><a href="https://blog.begin.com/new-at-begin-add-and-manage-routes-via-manifest-file-24ced2e65a36?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">New at Begin: add and manage routes via manifest file</a><br />
I really like what Brian Leroux and his team are doing over at Begin. The Architect Framework is really powerful and super easy to use, and Begin ties it all together to let you build modern apps, “fast af.” ?</p>
<p><a href="https://medium.com/tysonworks/serverless-kubernetes-with-amazon-eks-a2d8fb0f8333?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Serverless Kubernetes with Amazon EKS</a><br />
I have absolutely no interest in doing this, but for those of you looking for a K8s alternative with the same basic semantics, this tutorial is for you.</p>
<p><a href="https://medium.com/@jrheling/using-serverless-framework-with-the-amplify-client-library-9f3a1e2ee24f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Using Serverless Framework with the Amplify Client Library</a><br />
If you want to take advantage of the Amplify Client Library, but you’d like more control over your serverless backend, Josh Heling can show you how.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://medium.com/swlh/egress-filtering-in-serverless-applications-25c2953a7290?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Egress Filtering in Serverless Applications</a><br />
I love me a good serverless security post. Dorian Smiley points out something that many people seem to overlook (besides the fact that most developers don’t think about security). Lambda functions that are not in a VPC have wide open “outbound” access to the public Internet. There are several reason why you would want this, but if you are using lots of NPM dependencies (and you know you are), then this can be a huge security risk. Dorian offers some mitigation strategies in here, but having the ability to disable outbound access from non-VPC Lambda functions has been on my #awswishlist for quite some time.</p>
<p><a href="https://medium.com/securing/serverless-in-security-8cd9555d0f22?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Serverless (in)security</a><br />
Pawel Rzepa rehashes the main concerns with security in serverless. As he says, it’s really all about application security. Don’t trust any inputs (even if generated by a cloud resource), use the Principle of Least Privilege, and be wary of third-party dependencies. That should get you most of the way there.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://siliconangle.com/2020/03/06/cloud-developers-falling-love-serverless-computing-soon/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Cloud developers are falling in love with serverless computing – and more soon should</a><br />
Jason English has a nice round up of some recent studies and reports about serverless that point to the adoption curve trajectory. We’ve commented in the past on the reports mentioned, and the underlying data certainly seems to show that people get it. Although, that <a href="https://jaxenter.com/kuberetes-cncf-169420.html" target="_blank" rel="noopener">recent CNCF survey</a> said 83% of cloud customers are running containers with 78% on Kubernetes.</p>
<p><a href="https://medium.com/xebia-engineering/11-reasons-why-you-are-going-to-fail-with-microservices-29b93876268b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">11 Reasons Why You Are Going To Fail With Microservices</a><br />
This isn’t specific to serverless, but I found the article to be quite interesting. I’m a huge fan of microservice architecture, especially using serverless, but it is very easy to get lots of things wrong. There are many excellent reasons to choose microservices, however, be cautious of the potholes along your journey.</p>
<p><a href="https://medium.com/@davidcarboni/serverless-is-not-functions-7758da8861f7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Serverless is not functions</a><br />
David Carboni has a thoughtful piece that discusses the “unlearning” that must happen as we move to a serverless mindset. He also recounts his “presentation-less” talk at ServerlessDays Cardiff (which I was lucky enough to see in person).</p>
<p><a href="https://www.idevnews.com/stories/7338/De-construct-the-Monolith-How-Serverless-Modernizes-Infrastructure-Refactors-Apps?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">De-construct the Monolith: How Serverless Modernizes Infrastructure &amp; Refactors Apps</a><br />
Another great post by Tim Zonca from Stackery. If you’re trying to get some decision makers to buy in on serverless, send them a link to this post.</p>
<h3>For the commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/39?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Serverless Chats Podcast – Episode #39: Big Data and Serverless with Lynn Langit</a><br />
In this episode, I chat with Lynn Langit about why big data is outgrowing traditional systems, how bioinformatics and genomics are generating the biggest data scale ever seen, and why serverless and the cloud are making it easy for researcher to process this data faster and more economically.</p>
<p><a href="https://www.youtube.com/watch?v=Xtnb8G12HiU?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">ServerlessDays Nashville 2020 – How to fail with Serverless by Jeremy Daly</a><br />
Here’s my talk from ServerlessDays Nashville. The cloud is designed for failure, and public cloud providers like AWS have several ways to deal with those failures in your applications. In this talk, I review the failure modes and retry policies that allow you to build resilient, highly-available systems.</p>
<p><a href="https://www.youtube.com/channel/UCmTd7LMlf05FovWaCBN0xnA?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Videos from ServerlessDays Nashville 2020</a><br />
And if you really want to dig deep, check out the YouTube playlist for all of the talks at ServerlessDays Nashville 2020.</p>
<p><a href="https://jaxenter.com/api-design-openapi-168735.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Why you should use OpenAPI for your API design</a><br />
Nick Van Hoof talks about how OpenAPI can make your life easier in a serverless world in his presentation from the API Conference.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/aws-serverless-application-repository-adds-support-for-sharing-applications-with-aws-organizations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">AWS Serverless Application Repository adds support for sharing applications with AWS organizations</a><br />
I really love the concept behind SAR, but multi-account sharing was always a bit of a pain. Now you no longer need to manually enter in account ids, but can share with your entire organization and never have to worry about updating your app configs again. Check out this great <a href="https://aws.amazon.com/blogs/compute/the-aws-serverless-application-repository-adds-sharing-for-aws-organizations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">post</a> by James Beswick.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-cloudwatch-now-allows-you-to-combine-multiple-alarms/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Amazon CloudWatch now allows you to combine multiple alarms</a><br />
You can now combine multiple alarms to reduce alarm noise and focus on critical operational issues. This is a pretty cool feature. For example, I have an alarm on ApproximateNumberOfMessagesVisible and another one on ApproximateAgeOfOldestMessage. I only need an alert if they both cross a certain threshold.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/aws-waf-adds-anonymous-ip-list-for-aws-managed-rules/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">AWS WAF adds Anonymous IP List for AWS Managed Rules</a><br />
Useful feature if you want to block users who attempt to hide their identity or evade geographic restrictions.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/build-k-nearest-neighbor-similarity-search-engine-with-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Build k-Nearest Neighbor (k-NN) similarity search engine with Amazon Elasticsearch</a><br />
This is a very cool new feature built in to Amazon Elasticsearch. While a relatively simple algorithm, k-NN is quite effective, and can be a super useful addition to your ES datasets.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-sagemaker-ground-truth-now-supports-multi-label-image-and-text-classification-and-cloudwatch-events/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Amazon SageMaker Ground Truth Now Supports Multi-Label Image and Text Classification and Amazon CloudWatch Events</a><br />
If you’ve ever actually built a machine learning application, you’ve likely had to set up an interface for human review (it’s okay, you can admit it). So having SageMaker Ground Truth at your disposal is pretty sweet. And now you can enable multi-classification and CloudWatch events to kick off additional workflows.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://aws.amazon.com/blogs/opensource/24-open-source-tools-for-the-serverless-developer-part-1/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">24 open source tools for the serverless developer: Part 1</a> &amp; <a href="https://aws.amazon.com/blogs/opensource/24-open-source-tools-for-the-serverless-developer-part-2/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Part 2</a><br />
Yan Cui has assembled a list of open source tools that help make serverless development easier.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/ben11kehoe/status/1234566297259655168?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">In this thread: more evidence AWS needs to build a circuit breaker state service, and integrate it deeply into Lambda. Customers arguing about the best way to implement something we all need to build for ourselves is a prime indicator of opportunity.</a> <strong>~ Ben Kehoe</strong><br />
Ben makes an extremely important point. If you’re not using circuit breakers, you should be, but the implementation (and the best practices) aren’t very obvious when it comes to Lambda functions. Also, depending on the invocation method, velocity, and throughput, there are different ways to approach the problem (think stream processing). Having an official built-in feature would be very nice.</p>
<p><a href="https://twitter.com/cloudfront/status/1235650978126258176?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">We recently made changes that reduced the time to ~5 min consistently. We’re not done yet as this continues to be a priority for us this year. When we say a config is deployed we reference p100 metrics; however, most edge locations are updated in seconds.</a> <strong>~ Amazon CloudFront</strong><br />
Um, so this is awesome news. I was not seeing these improvements the other day (still looking at 20+ minutes for initial deployments and 15+ for modifying updates), but the fact that this is being worked on and some changes have been made, is welcome news.</p>
<p><a href="https://twitter.com/kyleshevlin/status/1235269529694908416?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Friends, I’m just starting to get into and research AWS Lambdas, but as primarily a front-end dev, I don’t have a lot of use cases in mind. What are some of the ways you’re using Lambdas?</a> <strong>~ Kyle Shevlin</strong><br />
Kyle has been an awesome contributor to the JavaScript space, and it’s great to see him venturing into serverless. His post asks for use cases, and while I commented that you can use serverless for almost anything, there were several more specific responses that you might find helpful in the thread.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>March 10, 2020 – </strong><a href="https://pages.awscloud.com/GLOBAL-event-OE-Check-Point-March-Webinar-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">How Best Friends Animal Society Shifts-Left with Security Strategy on AWS Serverless Infrastructure (webinar)</a></p>
<p><strong>March 13-April 10, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Virtual-Workshop_2020_VW_s02-DAT.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Getting Started with Amazon DynamoDB (Virtual Workshops)</a></p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong>March 24, 2020 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0304-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Introducing HTTP APIs: A Better, Cheaper, Faster Way to Build APIs (Online Tech Talk)</a></p>
<p><strong><del>March 27, 2020</del> –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> (Rescheduled to October 2)</p>
<p><strong>March 30, 2020 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0316-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2380" target="_blank" rel="noopener">Optimizing Lambda Performance for Your Serverless Applications (Online Tech Talk)</a></p>
<p><strong><del>April 6, 2020</del> –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a> (Rescheduled – new date pending)</p>
<p><strong>April 20, 2020 –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a></p>
<p><strong>April 23, 2020 –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a></p>
<p><strong>April 24, 2020 –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Amy Arambulo Negrette</strong> (<a href="https://twitter.com/nerdypaws" target="_blank" rel="noopener">@nerdypaws</a>). Amy most recently started a role as Cloud Architect at Trek10, a company that designs, builds, and supports serverless and event-driven architectures for its customers. But before her recent move, Amy was a Cloud Software Engineer at CloudReach, and prior to that, came from the public sector where she designed enterprise scale solutions while updating them with serverless technologies. She’s even built web applications for names like Yahoo! Sports and NASA. Thank you, Amy, for all your work in serverless! ?</p>
<h3>Final Thoughts ?</h3>
<p>Lots of great stuff happening in the serverless space this past week. More tools, more investments, and more great content to help developers learn how to build better serverless applications. In other not-so-good news, the recent COVID-19 outbreak is wreaking havoc on people’s health and the world economy. So, stay safe out there, wash your hands, take care of your loved ones, and if you’ve got some extra time at home because you no longer need to commute to the office, use that time to learn more about serverless. ?</p>
<p>Also, please don’t forget to take the <a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener">Serverless Community Survey</a>! The more responses we get, the more valuable the data will be. We are sharing this data with everyone, so your input will help the community make serverless better.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Best,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-80/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-80/</guid>
      <pubDate>Wed, 11 Mar 2020 00:14:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #79]]></title>
      <description><![CDATA[<h2>Super Serverless Tuesday… ☑</h2>
<p>Welcome to <strong>Issue #79</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-78/">Last week</a>, we launched the <a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener">Serverless Community Survey</a> (don’t forget to take it and share it). This week, we meet some new heroes, welcome HTTP APIs support in the Serverless Framework, and upgrade our NoSQL Workbench. Plus we have loads of awesome content from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://epsagon.com/serverless-observability/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL" target="_blank" rel="noopener">End-to-End Observability for Serverless</a><br />
Instantly monitor and troubleshoot Lambda functions to get the full picture of what they’re doing and why they fail. Agentless and automated, Epsagon delivers full visibility for containers, VMs, FaaS, and more with no training, manual coding, tagging or maintenance required. Try free today!. Sponsored</p>
<p><a href="https://aws.amazon.com/blogs/opensource/introducing-a-dart-runtime-for-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Introducing a Dart runtime for AWS Lambda</a><br />
I’ve heard a lot of people championing Dart lately, though I’ve yet to spend any meaningful amount of time with it. But if you want to dive in with Dart, then this new custom runtime is for you.</p>
<p><a href="https://serverless.com/blog/aws-http-api-support?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Announcing Support for AWS HTTP APIs</a><br />
Awesome! HTTP APIs are a great (and much cheaper) alternative to many API workloads. Now that the Serverless Framework supports them (and we get closer to the HTTP APIs GA), I think we’ll see a massive uptick in adoption of this new service.</p>
<p><a href="https://medium.com/@faunadb/announcing-the-faunadb-extension-for-visual-studio-code-176d4f36844b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Announcing the FaunaDB Extension for Visual Studio Code</a><br />
This extension allows users to browse their FaunaDB databases, indexes, collections, documents, and functions from right inside of the VS Code sidebar.</p>
<p><a href="https://aws.amazon.com/blogs/aws/get-to-know-the-latest-aws-heroes-including-the-first-iot-heroes/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Get to know the latest AWS Heroes, including the first IoT Heroes!</a><br />
Congratulations to all the new AWS Heroes, including some new serverless ones!</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://levelup.gitconnected.com/handling-350k-requests-for-3-using-lambda-c258ace3da58?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Handling 350k Requests for $3 using Lambda</a><br />
Insightful post by Burak Karakan on how his browser extension side project is handling hundreds of thousands of API calls per month for less than $3. He makes a number of serverless criticisms as well, mostly around the common arguments of observability and vendor lock-in. While he does praise Lambda, he also argues for a limited set of use cases, then offers Docker and Kubernetes as an alternative. I find this a bit antithetical to his “set it and forget” and ease of “serverless deploy” arguments from earlier. Opinions are fine, but pigeonholing use cases makes adoption harder IMO.</p>
<p><a href="https://blog.thundra.io/the-serverless-path-to-devops?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">The Serverless Path to DevOps</a><br />
Excellent article by Sarjeel Yusuf about the DevOps use cases enabled by serverless tools and why implementing them is a no-brainer. I’ve always loved this approach to serverless adoption, because it has the immediate benefit of improving the reliability and resiliency of your entire infrastructure, even if you’re still running VMs.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/serverlessguru/amazon-api-gateway-http-apis-with-the-serverless-framework-7be95f305318?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Amazon API Gateway HTTP APIs with the Serverless Framework</a><br />
Eduardo Rabelo adds some additional detail about the differences between API Gateway REST and HTTP APIs, why you should choose one over the other, and some implementation details using the recently added Serverless Framework support.</p>
<p><a href="https://serverless.com/blog/serverless-auth-with-aws-http-apis?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Serverless Auth with AWS HTTP APIs</a><br />
Now that the Serverless Framework supports HTTP APIs, why not take advantage of the built-in authorizer support? This post from Fernando Medina Corey will show you how to use JSON Web Tokens to authorize your endpoints against Cognito.</p>
<p><a href="https://share.hsforms.com/1FWb0al81TuKt5wNP-ddcZgdxqe?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">“Serverless Transformation: at any scale” Preview Chapter</a><br />
Ben Ellerby from Theodo has started working on a book about transforming your organization to a serverless-first approach, and you can get a preview chapter for free.</p>
<p><a href="https://winterwindsoftware.com/serverless-inter-service-communication/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Inter-service communication channels for serverless microservices in AWS</a><br />
Paul Swail shares some pros and cons for using different methods to pass messages between serverless microservices. There is some good information in here. A key thing to remember with inter-service communication is making sure you have message durability and sound replay strategies.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://levelup.gitconnected.com/setup-aws-ci-cd-for-serverless-deployment-5d346e60bf96?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Setup AWS CI/CD for Serverless Deployment</a><br />
Another day, another way to setup a serverless CI/CD process. Jay Desai shows you step by step how he does it.</p>
<p><a href="https://medium.com/lambda-lego/build-a-global-serverless-application-in-30-minutes-with-aws-cdk-b80ec2e31f3c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Build a global serverless application in 30 minutes with AWS CDK.</a><br />
Brian Foody shows you how to use AWS CDK to deploy a multi-region serverless application, complete with Route 53 Latency-based routing and global DynamoDB tables.</p>
<p><a href="https://medium.com/@Michael_Timbs/getting-started-with-aws-serverless-typescript-8c172ccfec41?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Getting started with AWS, Serverless &amp; TypeScript</a><br />
Michael Timbs gives you a complete set of instructions, along with all the tools, plugins and tweaks you’ll need to set up your first Serverless Framework project on AWS with TypeScript.</p>
<p><a href="https://winterwindsoftware.com/fff-webpacking-lambdas/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Optimise your Lambda functions using Webpack</a><br />
This is something that should be built-in to every Node.js serverless deployment. I do this with all my projects, and I highly recommend you do as well.</p>
<p><a href="https://medium.com/@jgkingii/simple-firebase-authorization-for-aws-lambda-and-api-gateway-a59dacb607ba?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Simple Firebase Authorization for AWS Lambda and API Gateway</a><br />
Everyone’s jumping in on this HTTP APIs JWT authorizer capability. Joseph King shows you how to use Firebase as your issuer from both the console, and with IaC using the new support from the Serverless Framework.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.stackery.io/?utm_source=Advertisement&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Supercharge Development, Delivery and Management of Serverless Applications</a><br />
Stackery empowers enterprise development teams to deliver Well-Architected serverless applications quickly, securely, and at scale— without the overhead of complex infrastructure and operations management. Accelerate overall development and secure delivery of serverless applications by up to 60x – so your team can focus on perfecting core business logic. Sponsored</p>
<p><a href="https://dynobase.dev/dynamodb-cost-optimization/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">10 Tips to Optimize Your DynamoDB Costs</a><br />
I have some notes for a similar post, but until I can find time to finish it, Rafal Wilinski’s should hold you over. Lots of really good suggestions in here to cut down your total DynamoDB bill.</p>
<p><a href="https://medium.com/@jgilbert001/creating-stream-processors-with-aws-lambda-functions-ba1c5da233a3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Creating Stream Processors with AWS Lambda Functions</a><br />
John Gilbert discusses his approach to stream processing in Lambda using his aws-lambda-stream library. I think this is an interesting approach, but I think some of this complexity is better off handled by the cloud. I do really like some of the built in functional programming components.</p>
<p><a href="https://www.zdnet.com/article/catching-up-with-google-bigquery/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Catching up with Google BigQuery</a><br />
Informative post by Tony Baer about some of the recent moves made by GCP to add to their BigQuery offering. This idea of running ML models from SQL is something other clouds are working on too, but adding more powerful computation to the data engine enhances GCP’s already powerful serverless data offering.</p>
<p><a href="https://lumigo.io/blog/amazon-builders-library-in-focus-8-instrumenting-distributed-systems-for-operational-visibility/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">ABL in focus #8: Instrumenting distributed systems for operational visibility</a><br />
Efi Merdler-Kravitz shares is notes on David Yanacek’s post from the Amazon Builders’ Library. Lots of great bullet points in here with some practical advice from Efi himself.</p>
<p><a href="https://medium.com/serverlessguru/how-do-i-structure-a-monorepo-serverless-project-with-the-serverless-framework-79b22de0abb6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">How do I structure a monorepo serverless project with the Serverless Framework?</a><br />
Ryan Jones outlines how he sets up a monorepo for serverless projects. It’s such a tough call sometimes balancing the pros and cons of a mono- versus multi-repo setups, especially when it comes to CI/CD. But as he points out, the new Serverless Framework Pro can handle this quite nicely, which might make the choice easier.</p>
<h3>For the commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/38?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Serverless Chats Podcast – Episode #38: From Digital to Serverless Transformation with Ben Ellerby</a><br />
In this episode, I chat with Ben Ellerby about the evolution from digital to serverless transformation, why hands-on experience is important to understanding what serverless actually is, the current problems with complexity, and why you can’t be cloud native without embracing some form of lock-in.</p>
<p><a href="https://www.youtube.com/watch?v=TXh5oU_yo9M?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Intro to Amazon EventBridge</a><br />
James Beswick covers the challenges and benefits of implementing an event-driven design using EventBridge. It’s a relatively short video, but it is packed with lots of really useful information.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/nosql-workbench-for-amazon-dynamodb-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">NoSQL Workbench for Amazon DynamoDB is now generally available</a><br />
I really love this tool, so I’m glad to see that it’s now GA. I did give the latest version a test drive, and there are still a few things I’d like to see changed, but overall, it is really great to work with.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/automate-index-management-with-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Automate index management with Amazon Elasticsearch Service</a><br />
Now if they can just make it fully serverless! But seriously, these are great additions that certainly cut down some of the ongoing operational management.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-managed-cassandra-service-now-enables-you-to-add-new-columns-to-existing-tables/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Amazon Managed Cassandra Service now enables you to add new columns to existing tables</a><br />
I didn’t even know you couldn’t do this! Well, if this was holding you back, this update should make you happy. I prefer to stick with DynamoDB, but maybe that’s just me.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/amazon-athena-support-querying-data-s3-buckets-aws-iam-condition-key/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Amazon Athena adds support for querying data in S3 buckets using AWS Identity and Access Management’s aws:CalledVia condition key</a><br />
This is a nice security feature that was added to S3. I use Athena all the time, and making this work in the past forced you to skip some of the additional security controls available to you.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/aws-step-functions-supports-cloudwatch-logs-standard-workflows/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">AWS Step Functions now supports CloudWatch Logs for standard workflows</a><br />
You can now use AWS Step Functions to log workflow execution history to CloudWatch Logs, which make it faster and easier to monitor event-driven, serverless workflows.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/lambda-at-edge-node12-python38/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">AWS Lambda@Edge now supports Node 12.x and Python 3.8</a><br />
You can now use Node.js 12.x and Python 3.8 to develop functions in Lambda@Edge, but you still have to wait quite some time for your code changes to propagate. ?‍♂️</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-transcribe-now-supports-automatic-content-redaction/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">Amazon Transcribe now supports automatic content redaction</a><br />
This seems like a really cool feature for the right use cases. However, I stopped using Transcribe a while ago because the quality just wasn’t high enough, so I’d be interested in hearing how effective this is, especially when it eventually supports non-English languages.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/03/aws-control-tower-now-supports-single-step-account-provisioning/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">AWS Control Tower now supports single-step account provisioning</a><br />
This looks like another step in the right direction for Control Tower. You still need to set up a new master account to use Control Tower, so maybe a project for another day.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>March 10, 2020 – </strong><a href="https://pages.awscloud.com/GLOBAL-event-OE-Check-Point-March-Webinar-2020-reg-event.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2379" target="_blank" rel="noopener">How Best Friends Animal Society Shifts-Left with Security Strategy on AWS Serverless Infrastructure (webinar)</a></p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong><del>March 27, 2020</del> –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> (Rescheduled to October 2)</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<p><strong>April 20, 2020 –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a></p>
<p><strong>April 23, 2020 –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a></p>
<p><strong>April 24, 2020 –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Shingo Yoshida</strong> (<a href="https://twitter.com/yoshidashingo" target="_blank" rel="noopener">@yoshidashingo</a>). Shingo is the CTO of CYDAS, a cloud-based human resource empowerment platform, as well as the founder of Section-9, which, among many other things, helps companies with AWS migration and optimization. Shingo is actively involved in the serverless community, founding Serverless Community (JP), and is also a member of the Japan AWS User Group. Additionally, Shingo was named a 2019 <a href="https://aws.amazon.com/developer/community/heroes/shingo-yoshida/" target="_blank" rel="noopener">AWS Serverless Hero</a> for his contributions through community events, blog posts, and books focused on serverless. Thank you, Shingo, for being an advocate for serverless! ?</p>
<h3>Final Thoughts ?</h3>
<p>It’s bittersweet to think of the awesome time I had at ServerlessDays Nashville last week. The organizers put on a heck of a show in an amazing and vibrant city. My heart goes out to all the people affected by the recent tornado. I’m hoping their community can recover quickly. ?</p>
<p>In brighter news, please don’t forget to take the <a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener">Serverless Community Survey</a> and share it with all your friends, family, coworkers, neighbors, pets, etc. The data collected will be 100% open sourced and available to anyone that wants to use it. The more responses we get, the more valuable the data will be.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-79/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-79/</guid>
      <pubDate>Tue, 03 Mar 2020 23:53:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #78]]></title>
      <description><![CDATA[<h2>The Serverless Community Survey… ✅</h2>
<p>Welcome to <strong>Issue #78</strong> of Off-by-none. It’s great to have you here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-77/">Last week</a>, we looked at a few posts that explored the pros and cons of microservices versus monoliths. This week, we’ve finally launched the Serverless Community Survey, plus we have lots of amazing content from the community.</p>
<h3>When you want to get to know how people are using serverless…</h3>
<p>The <a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener">Serverless Community Survey</a> is now <strong>LIVE</strong>! ? I’ve been working with all of you for several weeks to put together a <a href="https://github.com/jeremydaly/serverless-community-survey-2020" target="_blank" rel="noopener">set of questions</a> that would help everyone in the community (serverless users, solution providers, software vendors, and cloud providers) get a better understand of how people are using serverless, what they’re building with it, and how we can make it better. The survey is finally open and accepting responses.</p>
<p>The team at <a href="https://www.nuweba.com/" target="_blank" rel="noopener">Nuweba</a> is helping sponsor the survey and will be giving away a number of prizes to survey participants. The complete set of results (minus any PII) will be made available for anyone to use once the survey is complete. Please share with your networks and <strong><a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener">CLICK HERE</a></strong> to take the survey!</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://epsagon.com/serverless/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL" target="_blank" rel="noopener">Modern monitoring for microservice &amp; serverless architectures</a><br />
Understand Lambda &amp; container-based applications in a truly unified platform. Epsagon’s automated, end-to-end tracing enables full visibility into your production in minutes without needing to install an agent. Try free today. Sponsored</p>
<p><a href="https://medium.com/google-cloud/an-app-modernization-story-part-4-serverless-microservices-f9acdb0d8370?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">An app modernization story</a><br />
As I’ve said before, I really like what Cloud Run is doing. And this story from Mete Atamel about migrating from monolithic containers to microservices running on Cloud Run is a great example of the ability to evolve to a serverless infrastructure (yes, even if you are still using containers). I’m still not down with the whole Knative portability argument, because as you’ll see from his final architecture, Cloud Storage, Cloud Pub/Sub, and Cloud Firestore are the real lock-in, not the commoditized compute layer.</p>
<p><a href="https://medium.com/@tetiana.matviichuk/decisions-in-the-world-where-computing-is-commoditized-our-serverless-tale-about-event-based-a92a5940ceca?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Decisions in the world where computing is commoditized — our serverless tale about event based project</a><br />
Interesting read that hits on a few major points when planning to build a new application. Time to market is critical, and without an (already in place) experienced Ops team, the choice to invest time in designing and building out infrastructure (cloud-based or not), just seems to be antithetical to modern application development. No one should be saying that “serverless is easy” (because it’s not), but I have never in my 20+ years of application development seen a way to deliver value so quickly.</p>
<p><a href="https://medium.com/lego-engineering/one-year-at-the-lego-group-as-an-application-engineer-770ebb53c315?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">One year at The LEGO Group as an Application Engineer</a><br />
I like to read stories about people who challenge themselves and grow as developers. Even better if they’re growing and applying their serverless knowledge.</p>
<p><a href="https://medium.com/@5tigerjelly/creating-a-work-visa-search-engine-f274b1eaa105?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Creating a Work Visa Search Engine</a><br />
Chris Oh discusses how he build Visatopia using a serverless architecture, why he made the decisions he made, and how he worked around some of the problems he faced.</p>
<p><a href="https://medium.com/nmc-techblog/going-serverless-a-real-use-case-1e40e80a2a9c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Going Serverless</a><br />
Ilai Malka from Nielsen Marketing Cloud explains the data processing platform they built using a serverless infrastructure, the cost savings they achieved, and some of the pitfalls they experienced.</p>
<p><a href="https://medium.com/@nicologasparini94/from-django-to-serverless-bb08c0a6414d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">From Django to Serverless</a><br />
Another modernization story, this one from Nicolò Gasparini.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@leonardas103/experimenting-with-webassembly-in-a-serverless-context-9e320a8b669f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Experimenting with WebAssembly in a Serverless context</a><br />
There are some super cool things going on with WASM and serverless, and it’s going to be interesting to see if and when this becomes the standard for compute at the edge. Perhaps even running directly on the client.</p>
<p><a href="https://medium.com/@pheath/aws-lambda-layers-for-sub-millisecond-static-cache-2378d759c48b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">AWS Lambda Layers for sub-millisecond Static Cache</a><br />
I’ve seen an optimization like this before, and depending on your use case, it might make sense. Paul Heath outlines how he uses a Lambda Layer to load static cache data into his Lambda functions.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://winterwindsoftware.com/call-lambda-function-from-another/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Is it ok to call one Lambda function from another?</a><br />
Paul Swail tries to answer the question that seems to plague most serverless developers from time to time. As with most things related to serverless best practices (or serverless in general), it’s complicated. He points out two times when he thinks this is okay, but there is a lot more context and nuance to function chaining, microservice communication patterns, and network configuration, that makes this question much more complicated than it seems.</p>
<p><a href="https://medium.com/@george.mao/developing-on-aws-lambda-part-2-understanding-aws-event-sources-c4c1dc9faf96?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Developing on AWS Lambda (Part 2): Understanding AWS event sources</a><br />
George Mao gives you some more detail on AWS event sources and how to invoke Lambdas programmatically or automatically. He also shows you how to use SAM’s built-in <code>generate-event</code> command to use for test invocations.</p>
<p><a href="https://winterwindsoftware.com/some-code-more-equal/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Some code is more equal than others</a><br />
Paul Swail’s recent prolificness is benefiting us all, this time with some pros and cons of a “functionless” approach to building serverless applications. There are definitely times when it makes sense, but sometimes having an easier paradigm to wrap one’s head around is the winning factor.</p>
<p><a href="https://alexdebrie.com/posts/dynamodb-transactions-performance/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">DynamoDB Transactions Performance Testing</a><br />
Alex DeBrie tests the theory that DynamoDB Transactions suffer from performance overhead. TLDR; they do, but it’s worth reading Alex’s post to see what impact transactions really have, and if they’re worth it given the right circumstances.</p>
<p><a href="https://epsagon.com/blog/aws-cloudwatch-alarms-and-alerts/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">AWS CloudWatch Part 2/3: Alarms and Alerts</a><br />
Ran Ribenzaft dives deeper into CloudWatch in part 2 of his series on the topic. This time he explains alarms and alerts and how you can implement anomaly detection, alerting a human, and more.</p>
<p><a href="https://blog.thundra.io/how-is-my-aws-lambda-triggered?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">How is my AWS Lambda triggered?</a><br />
Nothing wrong with the occasional refresher. Serkan Özal explains the ways in which a Lambda function can be triggered and what behavior you can expect.</p>
<p><a href="https://winterwindsoftware.com/fff-function-initialisation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Async Initialisation of a Lambda Handler</a><br />
There was a good question asked on Twitter about how to make asynchronous initialization calls from outside your Node Lambda handlers. Paul Swail captured the suggested solutions. It’s a common question, so probably worth knowing in case you ever run into a need for it.</p>
<p><a href="https://medium.com/serverlessguru/reusing-s3-bucket-for-multiple-serverless-framework-projects-deploy-828e3a45f713?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Reusing S3 bucket for multiple Serverless Framework projects deploy</a><br />
Eduardo Rabelo explains how to organize your deployment artifacts for your Serverless Framework projects to keep from exceeding your AWS S3 Bucket limits.</p>
<p><a href="https://www.velotio.com/engineering-blog/cloudflare-workers-and-cloudflare-kv-store?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">An Introduction To Cloudflare Workers And Cloudflare KV store</a><br />
Cloudflare Workers and the Cloudflare KV are very cool, and there are lots of interesting use cases that can be handled with them. Siddharth Shishulkar has a good piece that explains what they are, and what you can do with them.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://www.stackery.io/?utm_source=Advertisement&amp;utm_medium=newsletter&amp;utm_campaign=offbynone" target="_blank" rel="noopener">Supercharge Development, Delivery and Management of Serverless Applications</a><br />
Stackery empowers enterprise development teams to deliver Well-Architected serverless applications quickly, securely, and at scale— without the overhead of complex infrastructure and operations management. Accelerate overall development and secure delivery of serverless applications by up to 60x – so your team can focus on perfecting core business logic. Sponsored</p>
<p><a href="https://medium.com/@hyoeun93/adding-a-custom-domain-to-the-api-to-the-aws-cloud-ed1945b51845?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Adding a Custom Domain to the API in AWS Cloud</a><br />
Super simple step-by-step tutorial by Hyoeun Lee that shows you how to add a custom domain to your Serverless Framework projects using the <code>serverless-domain-manager</code> plugin.</p>
<p><a href="https://medium.com/@david.conde.marin/unit-testing-when-using-lambda-layers-bb906330b626?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Unit testing when using Lambda Layers</a><br />
David Conde Marin shows you a simple trick with Jest to make unit testing your Lambda Layers a bit easier.</p>
<p><a href="https://medium.com/@george.mao/super-easy-load-testing-for-your-serverless-apis-and-functions-efd8e27164e8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Super easy load testing for your Serverless APIs and Functions</a><br />
Doesn’t matter if it’s serverless, or some other type of application architecture, knowing how to load test your applications is important. George Mao has a tutorial that shows you how to use Artillery to do just that. He also shows you how to use the <code>sigv4</code> plugin to authenticate requests.</p>
<p><a href="https://medium.com/@crespo.wang/create-pdf-using-pdf-lib-on-serverless-aws-lambda-e9506246dc88?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Create PDF using Pdf-lib on Serverless AWS Lambda</a><br />
Crespo Wang has another post showing you how to create PDFs with AWS Lambda, this time he’s using the <code>pdf-lib</code> library.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://techbeacon.com/security/5-ways-make-your-serverless-functions-more-secure?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">5 ways to make your serverless functions more secure</a><br />
Eric Johnson (nope, not that one, and nope, not that one either) outlines a few key points to keeping your serverless applications safe. There hasn’t been a lot of security articles around serverless lately, and lots of these are just a rehashing of what has been said before. Nonetheless, I think we under appreciate the need for security in our serverless applications, so a reminder now and then can’t hurt.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.stackery.io/blog/serverless-more-than-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Serverless is more than AWS Lambda</a><br />
Tim Zonca from Stackery makes several important points in this post. He says that while Lambda (or really, event-driven ephemeral compute), is an important part of serverless applications, the abstraction and reduced friction of the architecture is what enables developers to move faster and focus on business logic. Plus, recognizing that non-serverless components are inevitable, and understanding how they fit into a serverless environment, will go a long way towards adoption.</p>
<p><a href="https://blog.webiny.com/crossing-the-serverless-chasm-58604df45690?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Crossing the Serverless Chasm</a><br />
Sven Al Hamad’s piece echoes the concerns of many in the serverless ecosystem, especially those of other vendors. Even as it’s gained steam, serverless remains a peripheral tool for many organizations. This makes it harder for innovative service providers and software vendors to target some of these early adopters that aren’t necessarily “all in” on serverless. But the work they are doing is critical to moving the ball forward.</p>
<p><a href="https://medium.com/young-coder/could-microsoft-azure-actually-win-the-cloud-18c78b8780fe?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Could Microsoft Azure Actually Win the Cloud?</a><br />
Interesting piece by Matthew MacDonald, and I have to say, he might not be wrong. We’ve seen the coupling effects of Amazon.com and AWS on vendor preference and selection, and as Matthew points out in the article, there are still <em>a lot</em> of Microsoft shops that haven’t made a foray into the cloud yet. If Azure can eventually compete on solutions, what’s the likelihood of AWS getting those contracts?</p>
<p><a href="https://siliconangle.com/2020/02/24/kubernetes-is-popular-complex-a-security-risk-and-destined-for-invisibility-thecube/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Kubernetes is popular, complex, a security risk – and destined for invisibility</a><br />
This article by Mark Albertson expands upon what Kelsey Hightower said in a <a href="https://twitter.com/kelseyhightower/status/1202010135213666304" target="_blank" rel="noopener">tweet</a> last December, “The cloud made the hypervisor disappear. Kubernetes will be next.” Kubernetes is a complex beast that requires so many configurations and add-ons, that most of us want nothing to do with managing it. I agree with Kelsey. The cloud will eventually reduce all that K8s complexity for you.</p>
<p><a href="https://thenewstack.io/question-the-current-dogma-is-kubernetes-hyper-scale-necessary-for-everyone/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Question the Current Dogma: Is Kubernetes Hyper-Scale Necessary for Everyone?</a><br />
Another important post by Tim Zonca. I know I’ve said this a thousand times, but compute has become more and more commoditized, and as Tim points out, “Hiring more people to manage and understand unnecessary plumbing doesn’t make sense.” I totally agree.</p>
<p><a href="https://www.serverlesschats.com/" target="_blank" rel="noopener">The Serverless Chats Podcast</a><br />
Geek out on everything serverless! Each week, Jeremy Daly, serverless advocate, AWS Serverless Hero, and Off-by-none founder, chats with another serverless champion to explore and do a deep-dive into specific topics in the serverless space. Sponsored</p>
<h3>For the commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/37?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Serverless Chats – Episode #37: The State of Serverless Education with Dr. Peter Sbarski</a><br />
In this episode, I chat with Dr. Peter Sbarski about why education is the key to serverless adoption, how certifications help build stronger teams, what traditional institutions need to do to adapt to the new cloud economy, and much more.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/aws-lambda-supports-ruby-2-7/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">AWS Lambda now supports Ruby 2.7</a><br />
For all you hardcore Ruby lovers, you can now enjoy support for new features like pattern matching, argument forwarding and numbered arguments. Also, the Ruby 2.7 runtime is built on top of Amazon Linux 2, so the performance should be much better as well.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/aws-lambda-metric-for-concurrent-executions-now-supports-all-functions-versions-and-aliases/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">AWS Lambda metric for Concurrent Executions now supports all functions, versions, and aliases</a><br />
The ConcurrentExecutions metric is now emitted for all functions, versions, and aliases. You can use this metric to review usage patterns of your Lambda functions to see which ones are using up your reserved concurrency.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/aws-lambda-participates-in-compute-savings-plans/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">AWS Lambda participates in Compute Savings Plans</a><br />
If you are using Lambda functions for heavy, sustained workloads, there’s now a way to potentially lower that cost by participating in the Compute Savings Plans. Here is some more info from <a href="https://aws.amazon.com/blogs/aws/savings-plan-update-save-up-to-17-on-your-lambda-workloads/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Jeff Barr</a>.</p>
<p><a href="https://aws.amazon.com/blogs/aws/aws-has-launched-the-activate-founders-package-for-startups-%F0%9F%9A%80/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">AWS has launched the Activate Founders package for Startups ?</a><br />
If you’re building an app and want $1,000 is AWS credits, take a look at this new program. I will say, if you try to build your startup on Kubernetes, then you’ll probably blow through that pretty quickly. On the other hand, with a serverless approach, you’ll likely have a much longer runway.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-managed-cassandra-service-now-enables-you-to-optimize-the-price-of-throughput-for-predictable-workloads/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Amazon Managed Cassandra Service now enables you to optimize the price of throughput for predictable workloads</a><br />
If you have predictable workloads and you’re using MCS, then this is for you. But seriously, this looks like it could save you quite a bit of cash.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://blog.thundra.io/offline-debugging-of-serverless-apps-with-thundra?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Offline debugging of Serverless Apps with Thundra</a><br />
This is a very cool feature that Thundra recently released. Debugging your serverless applications is consistently one of the biggest complaints I hear, so being able to jump directly to your code to see where issues are is a big deal.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/paulmeighan/status/1231038415887454209?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2378" target="_blank" rel="noopener">Why Object Lock is Cool: A Twitter Thread With all this talk about Veeam 10, I thought it would be good to take a step back and send out a note on why I am absurdly into S3 Object Lock</a> <strong>~ Paul Meighan</strong><br />
Great thread by Paul Meighan explaining what S3 Object Locks are and why you might need them.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> ?</p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong>March 27, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> ?</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<p><strong>April 20, 2020 –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a></p>
<p><strong>April 23, 2020 –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a></p>
<p><strong>April 24, 2020 –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Bret McGowen</strong> (<a href="https://twitter.com/BretMcG" target="_blank" rel="noopener">@BretMcG</a>). Bret is a Developer Advocate for Serverless at Google. As part of his role on the Google Cloud Platform team, Bret’s got his hands in some of your favorite serverless products like Cloud Run, Cloud Function, App Engine, and Firebase – just to name a few. He has vast experience in the cloud industry, and if you don’t bump into him at one of the many ServerlessDays he’s speaking at, make sure to check out his <a href="http://serverlesstoolbox.com/" target="_blank" rel="noopener">Serverless Toolbox</a> series on YouTube. Thank you, Bret, for teaching others about the cloud and serverless! ?</p>
<h3>Final Thoughts ?</h3>
<p>I’m off to Nashville, Tennessee tomorrow for the first ever Music City ServerlessDays conference. I’ll have plenty of stickers, so please come and find me if you want to chat about serverless. Also, please, please, please take the <a href="https://surveys.segmanta.com/7d628r" target="_blank" rel="noopener">Serverless Community Survey</a> and share it around. The data is 100% open source and will be available to anyone that wants to use it.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Until next time,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-78/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-78/</guid>
      <pubDate>Tue, 25 Feb 2020 22:48:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Lambda API: v0.10.5 Released]]></title>
      <description><![CDATA[<p>Lambda API v0.10.5 has been released to fix a few minor bugs around ALB query string decode (<a class="user-mention" href="https://github.com/AndrewBarba" data-hovercard-type="user" data-hovercard-url="/users/AndrewBarba/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self">@AndrewBarba</a>) and TypeScript definitions (<a class="user-mention" href="https://github.com/SergKam" data-hovercard-type="user" data-hovercard-url="/users/SergKam/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self">@SergKam</a>). Plus a new feature that allows you to disable error logging (<a class="user-mention" href="https://github.com/johannessjoberg" data-hovercard-type="user" data-hovercard-url="/users/johannessjoberg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self">@johannessjoberg</a>).</p>
<p>Your feedback is greatly appreciated, so please submit feature requests and <a href="https://github.com/jeremydaly/lambda-api/issues" target="_blank" rel="noopener">issues</a>. If you want to contribute, even better! Pull requests are always welcome.</p>
<p><strong>Full Release Notes:</strong> <a href="https://github.com/jeremydaly/lambda-api/releases/tag/v0.10.5">https://github.com/jeremydaly/lambda-api/releases/tag/v0.10.5</a></p>
<p><strong>NPM: </strong><a href="https://www.npmjs.com/package/lambda-api">https://www.npmjs.com/package/lambda-api</a><strong><br />
GitHub: </strong><a href="https://github.com/jeremydaly/lambda-api">https://github.com/jeremydaly/lambda-api</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c3">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c2">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c1" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<p>Learn more about <a href="https://www.jeremydaly.com/projects/lambda-api/"><strong>Lambda API</strong></a> or check out the other <a href="https://www.jeremydaly.com/current-projects"><strong>projects</strong></a> I'm working on.</p>]]></description>
      <link>https://www.jeremydaly.com/lambda-api-v0-10-5-released/</link>
      <guid>https://www.jeremydaly.com/lambda-api-v0-10-5-released/</guid>
      <pubDate>Sat, 22 Feb 2020 23:08:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #77]]></title>
      <description><![CDATA[<h2>Monoliths versus Microservices…</h2>
<p>Welcome to <strong>Issue #77</strong> of Off-by-none. Thanks for joining us! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-76/">Last week</a>, we looked at the new Serverless Lens for the Well-Architected Framework Tool. This week, we have a few posts that explore the pros and cons of microservices versus monoliths, plus plenty of excellent content from the community.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://epsagon.com/serverless/?utm_source=Advertisement&amp;utm_medium=nl&amp;utm_campaign=OBN-NL" target="_blank" rel="noopener">Modern monitoring for microservice &amp; serverless architectures</a><br />
Understand Lambda &amp; container-based applications in a truly unified platform. Epsagon’s automated, end-to-end tracing enables full visibility into your production in minutes without needing to install an agent. Try free today. Sponsored</p>
<p><a href="https://emshea.com/post/vocab-subscriber-backend?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Migrating to a serverless contact management backend</a><br />
This is a great post from Emily Shea that perfectly captures how serverless can allow you to build something quickly, prove its value, and then enhance it as your feature requirements grow. The first version of her architecture shows a heavy reliance on SendGrid to handle the undifferentiated processes of contact management and email delivery. But as more features are needed, the architecture evolves to support functionality that can provide unique business value to her app. There are a lot of really good lessons to be learned from her overall approach.</p>
<p><a href="https://medium.com/lego-engineering/why-the-why-matters-more-than-the-what-in-serverless-2ef56c397962?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Why the ‘WHY’ matters more than the ‘WHAT’ in Serverless!</a><br />
Sheen Brisals is getting tired of endless serverless definitions, and instead wants to focus more on “why” we should be building applications with it.</p>
<p><a href="https://medium.com/@chrisbcore/serverless-and-the-rds-data-api-a-journey-to-deployment-716c6a4ff35b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Serverless and the RDS Data API: A journey to deployment</a><br />
Chris Buonocore recounts his team’s all-too-familiar story of spiking database connections with Lambda functions connecting to RDS. They migrated to the RDS Data API and learned some lessons along the way.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://sanderknape.com/2020/02/building-a-static-serverless-website-using-s3-cloudfront/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Building a static serverless website using S3 and CloudFront</a><br />
Sometimes it’s those little nuances that really get you. Sander Knape points out a very important factor to consider when hosting static sites with S3 and CloudFront.</p>
<p><a href="https://blog.webiny.com/using-aws-lambda-to-create-a-mongodb-connection-proxy-2bb53c4a0af4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Using AWS Lambda to Create a MongoDB Connection Proxy</a><br />
Interesting approach here by the team at Webiny. The DB connection / FaaS concurrency issue is a real problem, but introducing another layer of Lambda functions seems like more overhead than it’s worth. I’d suggest using the same approach as serverless-mysql and managing connections using <code>db.serverStatus().connections</code> to get the current usage.</p>
<p><a href="https://medium.com/@tetiana.matviichuk/saga-patterns-inside-step-functions-world-b330c40fb9d5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Saga Patterns inside Step Functions world</a><br />
The team at Chaos Gears points out some standard practices for implementing Saga patterns with Step Functions. Interesting subtext in here about using Step Functions for communicating across distributed components/microservices, a topic I recently debated with Yan Cui.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/introducing-multi-region-asynchronous-object-replication-solution/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Introducing Multi-Region Asynchronous Object Replication Solution</a><br />
If you need to replicate S3 objects to different regions automatically, this new AWS Solution gives you everything you need to make it happen.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://itnext.io/serverless-framework-warming-up-aws-lambda-to-avoid-cold-start-2be579475531?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Serverless Framework: Warming up AWS Lambda to avoid “cold start”</a><br />
I appreciate the content from Michele Riso, but as someone who has written the <a href="https://github.com/jeremydaly/lambda-warmer" target="_blank" rel="noopener">Lambda Warmer</a> package, I can tell you that the pitfalls of this approach are grave. AWS now has an official solution to this problem with Provisioned Concurrency (so does Azure). So, if you <em>really</em> need to reduce cold starts (which in many cases you don’t), then take a look at some better, non-blocking solutions.</p>
<p><a href="https://epsagon.com/blog/tagging-traces-in-distributed-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Tagging Traces in Distributed Applications</a><br />
Monitoring distributed applications is hard. So any time there are features that give you the ability to both trace transactions, and classify them with tags to make it easier to investigate issues, I’m going to be a fan.</p>
<p><a href="https://winterwindsoftware.com/aws-async-message-services/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">7 ways to do async message processing in AWS</a><br />
Paul Swail has a great article that shows you seven different ways to send messages asynchronously between Lambda functions when building serverless applications. Lots of these are standard ways, but as he mentions at the end, you should consider using Step Functions if you have complex workflows that require lots of guarantees and rollbacks.</p>
<p><a href="https://alexdebrie.com/posts/dynamodb-transactions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">DynamoDB Transactions: Use Cases and Examples</a><br />
Everything you’ve ever wanted to know about DynamoDB Transactions (and even some things you probably didn’t ?). Alex DeBrie has another excellent in depth post that will show you how transactions work, when you should use them, and when you should be aware of their performance impact.</p>
<p><a href="https://lumigo.io/blog/amazon-builders-library-in-focus-7-going-faster-with-continuous-delivery/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Amazon Builders’ Library in focus #7: Going faster with continuous delivery</a><br />
In the seventh installment of Amazon Builders’ Library in focus series, Mike Roberts of Symphonia picks out the key insights from the article <em>Going faster with Continuous Delivery</em> by Mark Mansour. This is an excellent analysis with lots of lessons for teams looking to build and release quality software faster.</p>
<p><a href="https://blog.thundra.io/enhancing-distributed-tracing-with-business-context?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Enhancing Distributed Tracing with Business Context</a><br />
As with Epsagon’s tagging features, Thundra provides a similar functionality. Great stuff for understanding your distributed workloads.</p>
<p><a href="https://aws.amazon.com/blogs/compute/building-a-serverless-url-shortener-app-without-lambda-part-1/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Building a serverless URL shortener app without AWS Lambda</a><br />
Brilliant series of posts by Eric Johnson. I can almost guarantee that the built-in features of the cloud are much more secure, resilient, and reliable than any Lambda code you or I could write. This doesn’t mean we never need Lambda, but if you can evolve certain apps to reduce its synchronous usage, there are a lot of performance gains to be had.</p>
<p><a href="https://medium.com/@george.mao/where-do-you-store-secrets-for-aws-serverless-apps-2247130c6827?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Where do you store secrets for AWS Serverless apps?!?</a><br />
George Mao breaks down the Ease of Use, Level of Security, and Cost associated with the different approaches to secrets storage on AWS.</p>
<p><a href="https://www.serverlesschats.com/" target="_blank" rel="noopener">The Serverless Chats Podcast</a><br />
Geek out on everything serverless! Each week, Jeremy Daly, serverless advocate, AWS Serverless Hero, and Off-by-none founder, chats with another serverless champion to explore and do a deep-dive into specific topics in the serverless space. Sponsored</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/cyberark-engineering/painless-aws-chalice-application-debug-90534e33cf76?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Painless AWS Chalice Application Debug</a><br />
If you’re building your serverless applications with AWS Chalice, this post from Alex Gelman will show you how you can speed up your workflow and debug your applications locally.</p>
<p><a href="https://serverless.com/blog/cicd-promotion-pipelines?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Promotion Pipelines</a><br />
As I’ve said before, I really like what the Serverless Framework Pro is doing with CI/CD. In this post, Gareth McCumskey shows you how to “kind of” build promotion pipelines using a Gitflow strategy. I’m still waiting for actual promotion pipelines that reuse immutable artifacts, but I realize that it’s a more difficult problem to solve.</p>
<p><a href="https://medium.com/@fullstackpho/ensuring-usernames-are-unique-in-your-aws-amplify-app-6fff963274?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Ensuring Usernames are Unique in Your AWS Amplify App</a><br />
This seems like a really roundabout way to do username checks with AWS Amplify, but as of this writing, nobody has challenged it yet.</p>
<p><a href="https://dev.to/dabit3/building-a-serverless-jamstack-ecommerce-store-with-gatsby-aws-303f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Building a Serverless JAMstack ECommerce Store with Gatsby &amp; AWS Amplify</a><br />
Nader Dabit walks you through the building blocks needed to build a completely serverless, JAMstack ecommerce store using a static site generator and AWS Amplify.</p>
<p><a href="https://medium.com/@crespo.wang/create-pdf-using-pdfkit-on-serverless-aws-lambda-with-layer-721ca86724b2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Create PDF using PdfKit on Serverless AWS Lambda with Layer</a><br />
Crespo Wang shows you how to package PdfKit into a Lambda Layer and then use it to manipulate PDFs with your Lambda functions.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://medium.com/@ketacode/keeping-your-lambda-functions-safe-with-joi-48c364071bf2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Keeping your Lambda functions safe with Joi</a><br />
I really like what Tal Bereznitskey has done here to validate events being passed into Lambda functions. Event injection is a real thing, so having a standard way to sanitize those events can really up your security posture.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.itworld.com/article/3526480/whats-next-for-serverless-architecture.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">What’s next for serverless architecture?</a><br />
This is an excellent article by Brecht De Rooms that lays out the evolution of cloud computing and how eventually the edge will be the source of both compute and dynamic data. For those of you that are still holding on to the idea of monoliths, this is a good read for you. If edge is in fact the future of distributed applications, then the monolith is not going to hold up.</p>
<p><a href="https://www.infoq.com/news/2020/02/serverless-design-ddd-europe/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">How Serverless Impacts Design: Gojko Adzic at DDD Europe</a><br />
It’s always great to hear Gojko Adzic’s perspective on serverless. This article is a nice recap of his talk at DDD Europe and links to his slides as well.</p>
<p><a href="https://www.techrepublic.com/article/how-to-avoid-turning-microservices-into-distributed-spaghetti-code/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">How to avoid turning microservices into distributed spaghetti code</a><br />
Interesting post by Matt Asay. There has been a lot of talk lately about the value of monoliths versus microservices, particularly around the notion that most “microservices” are ending up as just distributed monoliths. This is likely an education and organization problem, but if you build a tightly coupled network of services, you’re going to feel the pain of that very quickly.</p>
<p><a href="https://containerjournal.com/topics/container-ecosystems/comparing-serverless-and-containers-which-is-best/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Comparing Serverless and Containers: Which is Best?</a><br />
“Containers are a more secure technology that can help support long-term cloud infrastructure.” If you feel like reading another Containers vs. Serverless post that’ll make you want to bang your head against a wall, please click here.</p>
<p><a href="https://www.jeffersonfrank.com/aws-blog/ask-the-expert-serverless-public-clouds-second-wave/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Ask the Expert: Serverless: Public cloud’s second wave</a><br />
Great post by Tim Wagner about the architectural shifts in cloud computing and how serverless is clearly becoming the new norm for developing cloud-based applications. He touches on some of the main pain points that have slowed serverless adoption, but also points out the hybrid approach taken by services like Fargate and Cloud Run that help with the inevitable transition.</p>
<p><a href="https://blog.webiny.com/the-serverless-supremacy-204fbf5add75?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">The Serverless Supremacy</a><br />
I’m glad Sven Al Hamad had the time to write this post, because I’m very much so in agreement with him. It wouldn’t be another day on the Internet without DHH defending his approach to application architecture. I’ve been doing this for a very long time, and I’ve never seen anything as promising as serverless and (properly designed) microservice architectures. Nothing is a panacea, and that most definitely includes Ruby on Rails and its monolithic approach.</p>
<h3>For the A/V enthusiast… ?</h3>
<p><a href="https://www.serverlesschats.com/36?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Episode #36: The Cloud Database Landscape with Suphatra Rufo</a><br />
In this episode, I chat with Suphatra Rufo about how enterprises are migrating data to the cloud, why the cloud database market is shifting to NoSQL, and the hybrid database strategy that companies need to adopt.</p>
<p><a href="https://www.youtube.com/watch?v=zysuUVNfhAE?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Choosing the right Infrastructure as Code framework – between CloudFormation, SAM, CDK and Amplify</a><br />
Marcia Villalba shares a brief description of CloudFormation, AWS SAM, AWS CDK, and AWS Amplify, and then shows you when and where you should use each of them.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/configure-fine-grained-data-access-with-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Configure fine-grained data access with Amazon Elasticsearch Service</a><br />
Until there is a serverless Elasticsearch service, we are still required to provision our own managed ES clusters. Setting up a new cluster for each service is expensive and a major pain, so giving us more control over who can access what in a shared environment is a very cool feature.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-msk-increases-the-default-broker-limit-per-cluster-to-30-brokers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Amazon MSK increases the default broker limit per cluster to 30 brokers</a><br />
If you are using Amazon Managed Streaming for Apache Kafka for your workloads and you need 30 brokers, good for you! That is some serious throughput.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-cognito-user-pools-service-now-supports-case-insensitivity-for-user-aliases/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Amazon Cognito User Pools service now supports case insensitivity for user aliases</a><br />
Hmm, I wonder if this helps solve the Amplify unique username issue from the post we mentioned earlier?</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/aws-cloudformation-stacksets-introduces-automatic-deployments-across-accounts-and-regions-through-aws-organizations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">AWS CloudFormation StackSets introduces automatic deployments across accounts and regions through AWS Organizations</a><br />
I really like what AWS is doing with StackSets, so having additional automation built in is a nice improvement.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-rekognition-now-detects-text-in-videos-and-lets-you-filter-results-by-region-bounding-box-size-and-confidence-score/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Amazon Rekognition now detects text in videos, and lets you filter results by region, bounding box size and confidence score</a><br />
I remember when I built a service that used an open source OCR tool to attempt text detection in images. It was pretty terrible, and it took me a very long time to do it. If I had a tool like Rekognition back in the day, who knows what the impact would have been if I had all that extra time to work on things that actually mattered to the business.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/you-can-now-restore-amazon-dynamodb-table-backups-as-new-tables-in-other-aws-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">You can now restore Amazon DynamoDB table backups as new tables in other AWS Regions</a><br />
I can see this being a handy feature, especially if you are running multi-region rollups through a single region pipeline.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://lumigo.io/blog/essential-open-source-serverless-code-libraries/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Essential Open Source Serverless Code Libraries</a><br />
Erez Berkner points you towards several open source libraries to use with your serverless applications. And thanks for the Lambda API mention.</p>
<p><a href="https://courses.learnserverless.dev/pages/coming_soon?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">LearnServerless.dev</a><br />
Jeremy Thomerson is putting together an online training course to teach you how to build a serverless REST API on AWS. I’m not sure if there is a cost associated with this, but you can sign up for the mailing list to get more info.</p>
<p><a href="https://dynobase.dev/dynamodb-pricing-calculator/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">DynamoDB Pricing Calculator</a><br />
Simple web-based tool for forecasting DynamoDB costs.</p>
<p><a href="https://blog.begin.com/make-a-serverless-express-api-with-openjs-architect-cab7a279762b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">Make a serverless Express API with OpenJS Architect</a><br />
Another way to migrate an existing Express API to serverless is now available via Architect’s Express migration middleware.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/ryanjonesirl/status/1228811236386586625?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2377" target="_blank" rel="noopener">I’ve been in a cave over the past few months working in silence. I’ve become much more aligned with “why” I started @serverlessgurux. One of the biggest reasons, empowering the community and giving back equally. Based on this, you will find 100% free templates, docs, training videos, deep dive articles, podcast episodes, meetups, webinars and so on all free.</a> <strong>~ Ryan Jones</strong><br />
Ryan has done some great work with serverless, so if you’re interested in checking out all the work he’s contributed, give his site a look.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>February 20, 2020 –</strong> <a href="https://adtmag.com/webcasts/2020/01/lightstep-february-20.aspx?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">The Complete Guide to Observability (webinar)</a></p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> ?</p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong>March 27, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> ?</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<p><strong>April 20, 2020 –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a></p>
<p><strong>April 23, 2020 –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a></p>
<p><strong>April 24, 2020 –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Ajay Nair</strong> (<a href="https://twitter.com/ajaynairthinks" target="_blank" rel="noopener">@ajaynairthinks</a>). Ajay is the Director of Product for Lambda at Amazon Web Services, which means he’s your guy for all things AWS Lambda. Ajay’s role is instrumental in driving the serverless product strategy at AWS and he leads a team of amazing individuals that keep propelling the product roadmap forward. Thank you Ajay for your work bringing the serverless features we need to life! ?</p>
<h3>Final Thoughts ?</h3>
<p>I spent the end of last week in Wales at the ServerlessDays Cardiff event, and it was a really great showing of serverless enthusiasts and newcomers to the community. The overall community is still relatively small, but seeing so many engaged developers, and listening to others talk about how serverless is having a hugely positive effect on their development processes, makes me think all this nonsense of monolith versus microservices is just a bunch of background noise. If you’ve yet to experience the power of serverless, I can understand your skepticism. But a new world order is coming, and spoiler alert, it’s not going to be monolithic Rails apps running on Heroku. ?‍♂️</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Until next time,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-77/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-77/</guid>
      <pubDate>Tue, 18 Feb 2020 23:34:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #76]]></title>
      <description><![CDATA[<h2>Building Well-Architected Serverless Applications… ?</h2>
<p>Welcome to <strong>Issue #76</strong> of Off-by-none. I’m glad you’re here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-75/">Last week</a>, we shared the results from Datadog’s serverless survey and loaded up on our DynamoDB knowledge. This week, we’ve got the new Serverless Lens for the Well-Architected Framework Tool, plus plenty of awesome content from the community.</p>
<h3>The Well-Architected Framework Tool (now with extra serverless)! ?</h3>
<p>The Well-Architected Framework was developed to help cloud architects build secure, high-performing, resilient, and efficient infrastructure for their applications. This is based on five pillars that include operational excellence, security, reliability, performance efficiency, and cost optimization. It was meant to provide a consistent approach to building and evaluating architectures that will scale over time.</p>
<p>The <a href="https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf" target="_blank" rel="noopener">Serverless Application Lens</a> was released some time ago (and has since been updated), and is a great resource for following the best practices from both AWS and the community. However, the Well-Architected Framework Tool, which guides you through evaluating and improving your application, didn’t incorporate these evolving serverless principles. Until now! Check out this blog post that explains how to use the <a href="https://aws.amazon.com/blogs/aws/new-serverless-lens-in-aws-well-architected-tool/?sc_channel=el&amp;sc_campaign=wellarchit2020_serverlesslens&amp;sc_publisher=off_by_none&amp;sc_medium=blog&amp;sc_content=awsnewsblog&amp;sc_country=global&amp;sc_geo=global&amp;sc_category=wellarchitectedtool&amp;sc_outcome=launch" target="_blank" rel="noopener">AWS Serverless Lens in the AWS Well-Architected Tool</a>. I think this will not only help people develop better serverless applications, but will be a great guide for those just starting with serverless.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://theburningmonk.com/2020/02/aws-heroes-united/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">AWS Heroes united!</a><br />
Couple of bits of news here. For one, Ant Stanley (AWS Serverless Hero and ServerlessDays Founder) has launched a new training platform called Senzo. And, Yan Cui is the first one to participate with his “Production-Ready Serverless” workshops.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@joel.tbarna/serverless-framework-with-terraform-a-firsthand-experience-ce127db3ac5b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Serverless Framework with Terraform: a firsthand experience</a><br />
Joel Barna argues that a hybrid approach to managing your serverless apps and AWS infrastructure is the way to go. There are certainly good reasons to manage shared infrastructure separately (and Terraform’s a good choice), but when it comes to deploying serverless apps, tools like the Serverless Framework and SAM are hard to beat.</p>
<p><a href="https://medium.com/@indrateja_62893/using-python-and-aws-lambda-to-send-automated-emails-317c9e8c0c46?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Using Python and AWS Lambda to send Automated Emails</a><br />
Indra Teja outlines the steps he took to create a serverless process to automate customized emails. There’s some good bits it there if you’re implementing something similar, but most of all, I appreciate that the experience was documented.</p>
<p><a href="https://medium.com/@swapnonil/lessons-learnt-using-serverless-lambda-functions-38f6ad697894?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Lessons learnt using Serverless Lambda Functions</a><br />
Sometimes real world implementations don’t meet the hype. Swapnonil Mukherjee explains some serverless lessons he learned and argues for a container-based approach instead. Is he right about all this? The teams developing serverless tech should take a good look at stories like this.</p>
<p><a href="https://medium.com/@glennhoran88/my-first-technical-conference-talk-at-the-superlative-inaugural-serverless-days-belfast-18690d96ab3f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">My first technical conference talk at the superlative inaugural Serverless Days Belfast</a><br />
Glenn Horan has a nice recap of ServerlessDays Belfast, plus some tips for first time conference speakers. If there is one thing that the serverless community values, it’s the acceptance of new ideas and perspectives. So thanks for stepping up and submitting to the CFP, Glenn. It was a great talk.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/@aeershardul/shenanigans-of-serverless-part-1-6d8317125479?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Shenanigans of Serverless- part 1</a><br />
Shardul Aeer points out some of the nuances of API Gateway and how it interfaces with Lambda. There are workarounds (as he outlines) for many of these, but his ultimate point is that serverless is “not as simple” as some people make it out to be. I totally agree, and things are only going to get more complex in the future.</p>
<p><a href="https://blog.webiny.com/serverless-side-rendering-e1c0924b8da1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Serverless Side Rendering</a><br />
If you have an afternoon free, take a look at Adrian Smijulj’s post about pre-rendering HTML for SEO in serverless environments and how Webiny is handling it. It is a long and in-depth post, but after reading it, you’ll walk away an expert on the subject.</p>
<p><a href="https://serverless.com/blog/preview-deployments?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">A Guide to Preview Deployments with Serverless CI/CD</a><br />
I really like what the team at Serverless, Inc. is doing with the Serverless Framework Pro, and the newly released “Preview Deployments” are another home run. Fernando Medina Corey walks you through how this feature works and how it can make testing your serverless applications much easier.</p>
<p><a href="https://medium.com/@asimnazir.uet/azure-durable-functions-ec535551751b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Azure Durable Functions</a><br />
If you’re venturing into the Microsoft Azure world, Durable Functions can make building stateful workflows a lot easier. Asim Nazir explains all the details for you.</p>
<p><a href="https://dashbird.io/blog/what-vending-machines-have-to-do-with-your-microservices-architecture/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">What Vending-Machines Have to Do With Your Microservices Architecture</a><br />
Renato Byrro explains why vending machines are like Finite-State Machines and how they relate to your microservices architecture. It may not be the most apt analogy, but the point is well taken.</p>
<p><a href="https://medium.com/@tetiana.matviichuk/dynamodb-streams-handy-and-tricky-as-well-2968b740a9b8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Dynamodb Streams — handy and tricky as well</a><br />
This post points out some of the “gotchas” when using DynamoDB Streams, particularly the case of my-function-is-not-catching-the-error-correctly-so-I-will-keep-trying-forever issue. Of course, these are typically because of coding errors, not that you ever make any of those. ?</p>
<p><a href="https://blog.thundra.io/serverless-and-chaos-engineering-is-it-possible?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Serverless and chaos engineering, is it possible?</a><br />
I’m a big fan of chaos engineering (if only we all had the time to utilize it). Emrah Samdan gives a good overview of what it is and how we can apply it to our serverless applications. There’s a small pitch for Thundra in there, but I will say, the service does make the process much easier.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/@sneaky_kiki/serverless-and-cloudformation-rebuilding-the-wild-rydes-app-938b151f0fab?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Serverless and CloudFormation: Rebuilding the Wild Rydes App</a><br />
What do you do if you want the AWS Wild Rydes app tutorial to be done with IaC? Build it yourself, that’s what Kiki Morgan did.</p>
<p><a href="https://medium.com/@puneeth1994/using-aws-lambda-to-scale-image-processing-8a4b3a77031c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Using AWS Lambda to scale Image Processing</a><br />
Probably one of the most iconic serverless use cases, and for good reason. This tutorial will walk you through the implementation.</p>
<p><a href="https://medium.com/@souri29/how-to-migrate-from-amazon-rds-aurora-or-mysql-to-amazon-aurora-serverless-55f9a4a74078?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">How to Migrate from Amazon RDS Aurora or MySQL to Amazon Aurora Serverless</a><br />
Aurora Serverless is great for the right type of workloads. Shouki Souri walks you through migrating your existing cluster to its serverless counterpart.</p>
<p><a href="https://medium.com/@brettandrews/handling-sqs-partial-batch-failures-in-aws-lambda-d9d6940a17aa?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Handling SQS partial batch failures in AWS Lambda</a><br />
Brett Andrews shows you how to deal with partial batch failures when polling SQS messages with Lambda. He shows you the easy way first, and then digs into the underlying mechanics.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://alexdebrie.com/posts/dynamodb-single-table/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">The What, Why, and When of Single-Table Design with DynamoDB</a><br />
Alex DeBrie has an excellent post about the benefits and downsides of Single-Table Designs. I offered some <a href="https://twitter.com/jeremy_daly/status/1225478326615203841?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">commentary</a> on the “downsides”, but the post is definitely a must read for all you DynamoDB fans.</p>
<p><a href="https://fauna.com/blog/faas-providers-in-2019-what-are-my-options?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">FaaS Providers in 2019, What are my Options?</a><br />
This is a good roundup by the team at Fauna. I think there is a lot more that goes into a “FaaS” decision, including what other supporting services are available in order to build out your application, but the detail here is great.</p>
<p><a href="https://www.itprotoday.com/hybrid-cloud/how-know-when-cloud-computing-trend-has-come-its-end?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">How to Know When a Cloud Computing Trend Has Come to Its End</a><br />
Serverless is on this list, which I obviously don’t agree with (especially considering the massive uptick over the last year), but it just goes to show how out-of-touch some holdouts are. The equation of “serverless” with “FaaS” is still astounding to me, but this is the battle we must continue to fight.</p>
<h3>For the commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/35?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Serverless Chats – Episode #35: Advanced NoSQL Data Modeling in DynamoDB with Rick Houlihan (Part 2)</a><br />
I continue my conversation with Rick Houlihan about NoSQL Data Modeling. We discuss why you likely don’t want to use LSIs, when sharding is necessary, the benefits of denormalization, how to efficiently store large document deltas, and much more.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/dynamodb-global-tables-are-now-available-in-the-asia-pacific-mumbai-canada-central-eu-paris-and-south-america-sao-paulo-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">DynamoDB global tables are now available in the Asia Pacific (Mumbai), Canada (Central), EU (Paris), and South America (Sao Paulo) Regions</a><br />
I usually don’t include region-based rollouts, but DynamoDB global tables are very cool. If you’re building a multi-region application, don’t ignore how powerful these things are.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/use-the-new-amazon-cloudwatch-metrics-for-amazon-dynamodb-accelerator-dax-to-gain-more-insights-into-your-dax-clusters-performance/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Use the new Amazon CloudWatch metrics for Amazon DynamoDB Accelerator (DAX) to gain more insights into your DAX clusters’ performance</a><br />
DynamoDB is getting more and more popular, but I think people overlook DAX because DynamoDB is so fast. However, if you have a high velocity read application on cacheable data, DAX is an awesome solution to speed up your app and likely lower costs. Plus it is a “write-through” cache, so it automatically handles updating the cache on misses.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-cognito-user-pools-now-supports-logging-for-all-api-calls-with-aws-cloudtrail/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Amazon Cognito User Pools service now supports logging for all API calls with AWS CloudTrail</a><br />
Amazon Cognito User Pools now supports logging for all of the actions listed on the User Pool Actions page as events in CloudTrail log files, making it easier for developers to record all actions taken by a user, role, or an AWS service.</p>
<p><a href="https://aws.amazon.com/blogs/aws/new-aws-vpn-client/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">New Desktop Client for AWS Client VPN</a><br />
AWS has been making it easier to connect to your VPCs, so this is another nice addition. This should simplify working with certain services locally.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/aws-appsync-releases-integration-with-aws-x-ray-and-graphql-info-object-support/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">AWS AppSync releases integration with AWS X-Ray and GraphQL Info object support</a><br />
You can now enable AWS X-Ray for your APIs in AWS AppSync, making it easier to trace and analyze user requests as they travel through the APIs to the backend data sources.</p>
<p><a href="https://aws.amazon.com/blogs/developer/aws-cli-v2-is-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">AWS CLI v2 is now generally available</a><br />
So this is pretty cool. I don’t know what I like more, the new wizards, or the autocompletion of resource names.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-rds-data-api-now-supports-aws-privatelink/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Amazon RDS Data API now supports AWS PrivateLink</a><br />
While it’s probably a cheaper (and more secure) alternative to NATs, I really wish there was a cleaner way to deal with these types of service integrations.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/introducing-content-filtering-amazon-eventbridge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Introducing content filtering for Amazon EventBridge</a><br />
This has been available for awhile, but maybe they just got around to announcing it. Anyway, this is an amazing addition. You can now filter based on numeric ranges, the existence or absence of attributes, string prefixes, and ‘anything-but’ comparisons. Plus rules can include multiple filters to create complex combinations in a single event pattern. Very cool stuff.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://dynobase.dev/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Dynobase – Professional GUI Client for DynamoDB</a><br />
Great new tool that’s been launched by Rafal Wilinski. There are a ton of cool features in here, so if you’re into DynamoDB, give it a look.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/nathangloverAUS/status/1226548481591930880?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Last week I converted my site(s) to #serverless… my estimated monthly cloud bill went from many money, to no money. This week I dine on the finest ramen.</a> <strong>~ Nathan Glover</strong><br />
Even if serverless is still not perfect for everything, the static site revolution is upon us. I still need to find time to do this for my blog, but if you’re not at least thinking about, you’re behind the times.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>February 12, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/workshops/slappforge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Remote debugging of live AWS Lambda functions (Workshop at ServerlessDays Cardiff)</a></p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a> ?</p>
<p><strong>February 18, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0204-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2376" target="_blank" rel="noopener">Controls for Managing Events in Serverless Applications (webinar)</a></p>
<p><strong>February 20, 2020 –</strong> <a href="https://adtmag.com/webcasts/2020/01/lightstep-february-20.aspx?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">The Complete Guide to Observability (webinar)</a></p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> ?</p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong>March 27, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> ?</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<p><strong>April 20, 2020 –</strong> <a href="https://serverless.org.nz/" target="_blank" rel="noopener">ServerlessDays Auckland</a></p>
<p><strong>April 23, 2020 –</strong> <a href="https://vienna.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Vienna</a></p>
<p><strong>April 24, 2020 –</strong> <a href="https://paris.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Paris</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>James Hood</strong> (<a href="https://twitter.com/jlhcoder" target="_blank" rel="noopener">@jlhcoder</a>). James is a Senior Software Developer at Amazon, where he’s the tech lead of the AWS Serverless Application Repository. His role within AWS has helped propel the serverless movement, not just with SAR, but also as a contributor to SAM (the Serverless Application Model). Thank you, James, for your continued work on serverless! ?</p>
<h3>Final Thoughts ?</h3>
<p>I’m just about to jump on a plane to speak at <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a>, but before I go, I wanted to mention the <a href="https://github.com/jeremydaly/serverless-community-survey-2020" target="_blank" rel="noopener">Serverless Community Survey</a> that I’m working on. I was hoping to launch it today, but we’re still finalizing a few things. If you have any feedback, please feel free to send it my way. I’m really looking forward to getting it out there and seeing the results.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Until next time,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-76/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-76/</guid>
      <pubDate>Tue, 11 Feb 2020 22:15:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #75]]></title>
      <description><![CDATA[<h2>The State of Serverless… ?</h2>
<p>Welcome to <strong>Issue #75</strong> of Off-by-none. It’s great to have you here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-74/">Last week</a>, we shared exciting news about several serverless companies that were recently funded, plus highlights from ServerlessDays Belfast. This week, we’ve got excellent serverless survey results from Datadog, some mind-blowing DynamoDB knowledge bombs, plus plenty of content from the community.</p>
<h3>If you’re curious about the current state of serverless… ✋</h3>
<p>Datadog just released <a href="https://www.datadoghq.com/state-of-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">The State of Serverless 2020</a> report. There is a ton of really interesting insights from their customers’ cloud usage in there, especially the fact that <strong>half of them</strong> are using AWS Lambda. The report doesn’t break down use cases or the percentage of serverless workloads, but it does point to the fact that many large enterprises (and container users) are starting to implement Lambda functions. This is certainly encouraging for the future of serverless adoption. There has already been some great commentary on this, so I’ll leave further analysis to <a href="https://twitter.com/chrismunns/status/1224452017529077762?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Chris Munns</a>, <a href="https://twitter.com/fintanr/status/1224456802227474434?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Fintan Ryan</a>, and <a href="https://winterwindsoftware.com/state-of-serverless-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Paul Swail</a>.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://serverless.com/blog/announcement-cicd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Announcing Serverless CI/CD</a><br />
CI/CD with serverless applications has oft been an exercise in creativity, leading to some cobbled together monstrosities that would put Mary Shelley to shame. ?‍♂️ I did some early testing on the new CI/CD feature in Serverless Framework Pro, and I was <em>very</em> impressed.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://www.capitalone.com/tech/cloud/serverless-streaming/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Scaling to Billions of Requests – The Serverless Way at Capital One</a><br />
Excellent post by Vijay Bantanur and the team over at Capital One about how they’ve built out their streaming systems using serverless components. Lots of useful information in here, and also a nice proof point for the big data use cases.</p>
<p><a href="https://medium.com/@fabianterh/how-i-built-heimdall-an-open-source-personal-email-guardian-68e306d172d1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">How I built Heimdall, an open-source personal email guardian.</a><br />
This project by Fabian Terh captures just how powerful serverless really is. His system utilizes cloud storage, email protocols, and event-driven compute, all without setting up, maintaining, or paying for servers. I’d also guess that this system costs pennies a month, and the fact that it was built and deployed in just over a week, shows how quickly we can prototype complex systems without massive investments in infrastructure.</p>
<p><a href="https://medium.com/@anupam.ncsu/serverless-small-business-expense-tracker-ca68f603255b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Serverless Small Business Expense Tracker</a><br />
While my typical advice would be to buy a solution like this, Anupam Mahapatra decided that building his own solution was a better choice. I will say, Google App Scripts is pretty cool, so if you use Google for Business, and you’ve got some automation tasks to do, definitely give it a look.</p>
<p><a href="https://medium.com/aws-educator/building-a-serverless-solutions-in-aws-for-0-07-f3abd514eec8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Building a Serverless Solution in AWS for $0.07</a><br />
While this post doesn’t go into a lot of detail about the inner workings of his application, Rob Larter does reiterate the fact that prototyping solutions like this are fast and inexpensive. The better point, even if it starts to receive a boatload of traffic, it’s already build to handle that scale.</p>
<p><a href="https://medium.com/traveloka-engineering/serverless-architecture-is-it-actually-possible-e5b1d76a78f0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Serverless Architecture: Is It Actually Possible?</a><br />
Another story of a development team moving to serverless and seeing a 90% cost reduction. There are so many stories like this, and almost all of them have some great tidbits of info in there that the cloud providers can learn from.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/comic-relief/starting-out-with-data-puddles-then-well-think-about-data-lakes-f103111946db?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Starting out with data puddles, then we’ll think about data lakes</a><br />
Awesome post by Adam Clark that outlines Comic Relief’s strategy for migrating to a serverless data lake. Best piece of advice in this article that should apply to most engineering decisions: “Sure, knitting’s fun for some people, but you’re on the company’s time, go buy the jumper from the store and don’t waste your time knitting a shitty one.” #truth</p>
<p><a href="https://medium.com/uk-hydrographic-office/creating-a-global-dataset-using-serverless-applications-and-deep-learning-c4e267fa810c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Creating a global data set: using serverless applications and deep learning</a><br />
Here’s a good use case for you, using a serverless pipeline to analyze satellite imagery to locate mangrove forests. Ciaran Evans has a great post that outlines what his team did, and how they have been evolving their application to provide for more control and execution insights.</p>
<p><a href="https://medium.com/lenskart-engineering/custom-caching-strategy-using-cloudflare-workers-ae7162400667?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Custom caching strategy using Cloudflare Workers</a><br />
Here is a deceptively simple use case by Akash Agrawal. One of the great features of Cloudflare Workers (and other edge-computing platforms) is the ability to manipulate the caching based on different attributes of the request as opposed to relying on simple caching strategies. Lots of very cool things that can be done with this.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/awesome-cloud/aws-serverless-services-and-serverless-computing-in-aws-a1298ace0e3c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">AWS – Serverless services on AWS</a><br />
I think we sometimes take for granted how much we know about a specific topic when we’re so deeply immersed in it. So for those that want a quick rundown of some popular “serverless” AWS products, Ashish Patel has put together a list for you.</p>
<p><a href="https://www.stackery.io/blog/best-practices-guide-for-local-prototyping/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Best Practices Guide for Local Prototyping of Serverless Applications</a><br />
Difficulty testing locally is a common complaint amongst serverless developers. Oftentimes people create a patchwork of local mocking solutions that seldom create parity with cloud environments, which can make local testing even more unreliable. Chase Douglas outlines a few best practices for working locally and highlights some of Stackery’s options to make things easier.</p>
<p><a href="https://dev.to/michabahr/how-to-analyse-and-aggregate-data-from-dynamodb-24p3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">How to analyse and aggregate data from DynamoDB</a><br />
Michael Bahr does a good job here laying out two popular aggregation use cases for DynamoDB Streams. There are several approaches to calculating aggregates with DynamoDB, and there likely is no one-size-fits-all solution. But hopefully, seeing posts like this will give you some ideas to optimize your own methods.</p>
<p><a href="https://a.l3x.in/2020/02/04/migrating-from-terraform-to-cdk.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Introducing AWS CDK with a real life Lambda and API gateway example</a><br />
Alexander Fortin gives a great overview of the AWS CDK and hits on some of the pros and the cons. He also references the discussion I had with Yan Cui on Serverless Chats about why we’re not particularly sold on it yet. But love it or hate it, it’s clear that many developers are finding it useful. And that’s not a bad thing.</p>
<p><a href="https://lumigo.io/blog/amazon-builders-library-in-focus-6-implementing-health-checks/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Amazon Builders’ Library in Focus #6: Implementing Health Checks</a><br />
Yan Cui shares his notes on the Amazon Builders’ Library in part six of his series. There are some interesting lessons here concerning health checks, something we need to think about when accessing “not-so-scalable” dependent systems from our serverless applications.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/@efreyreg/use-cloudflare-javascript-workers-to-deploy-you-static-generated-site-ssg-1c518e078646?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Use Cloudflare JavaScript Workers to Deploy your Static Generated Site (SSG)</a><br />
Ernesto Freyre shows you how to use a static site generator and Cloudflare Workers to automate the deployment of your static website. He also throws in some great tips for easily performing rollbacks and handling SPAs.</p>
<p><a href="https://medium.com/@billydharmawan/whitelist-ip-address-in-serverless-framework-7f5ede2dfc07?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Whitelist IP Address in Serverless Framework</a><br />
Billy Dharmawan presents you with a quick and easy way to whitelist IP addresses in API Gateway.</p>
<p><a href="https://medium.com/@george.mao/developing-on-aws-lambda-part-1-nodejs-and-the-aws-sdk-3c750e8ac6ed?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Developing on AWS Lambda (Part 1): NodeJS and the AWS SDK</a><br />
George Mao shows you how to handle asynchronous calls to the NodeJS AWS SDK in this quick tutorial.</p>
<p><a href="https://medium.com/@foxxor/building-your-own-sms-serverless-api-c8d09c0b65eb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Building your own SMS Serverless API</a><br />
Jorge Luis Vargas shows you how to build a simple Twilio clone to send SMS messages from your serverless applications.</p>
<h3>Cloud Security ?</h3>
<p><a href="https://medium.com/@fernando0stc/adopting-serverless-awesome-but-have-you-thought-about-how-to-keep-it-secure-1249954814fe?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Adopting serverless? Awesome! But have you thought about how to keep it secure?</a><br />
Fernando Cardoso outlines the five main security concerns of serverless, including misconfiguration, application layer protection, dependency tracking, monitoring and logging, and writing secure code.</p>
<p><a href="https://securityboulevard.com/2020/02/cyberattacks-are-changing-heres-how/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Cyberattacks Are Changing: Here’s How</a><br />
Despite the overwhelming amount of FUD around cybersecurity, there are still things that we actually need to worry about. Third-party dependency poisoning, DDoS/DDoW, misconfigurations, and human mistakes (e.g. phishing) are not going away. The cloud is handling most of the perimeter and network security for us, but while the sky might not be falling, it’s wise to take a look up every once in a while.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.stackery.io/blog/serverless-has-evolved/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Serverless Has Evolved in 2020</a><br />
While there’s no masking his pitch for Stackery here, I think Tim Zonca makes a number of extremely important points in this posts. As someone who reads A LOT of posts and articles about serverless, it’s frustrating to me to see the same old tired arguments from the past repeated over and over again. The technology has moved passed that, and it’s time for the holdouts to realize that they’re still living in the last decade.</p>
<p><a href="https://alexdebrie.com/posts/building-developer-community/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Building a developer community</a><br />
Though this article isn’t focused on serverless, I think Alex DeBrie makes a lot of points that will affect the serverless ecosystem. Serverless is moving rapidly, and keeping up with the changes might as well be a full-time job. This is exacerbated by the fact that lots of serverless content is spread across the Internet and not organized very well. If you are building serverless tools and services, heed Alex’s advice, otherwise you’re going to leave a lot of people behind.</p>
<p><a href="https://medium.com/@PurpleGreenLemon/what-does-a-robust-serverless-architecture-look-like-977a64fff980?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">What Does A Robust Serverless Architecture Look Like?</a><br />
Aphinya Dechalert argues that a robust serverless architecture requires that “the structure of code rests on a developer’s ability to create isolated solutions for a bigger picture,” which I think I agree with. She also points out the need for implementing permanency between triggers to avoid transient data loss, which I’m not 100% sure is necessary given the failure modes in the cloud. Either way, there are some interesting takes in here.</p>
<p><a href="https://blog.acolyer.org/2020/01/29/narrowing-the-gap/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Narrowing the gap between serverless and its state with storage functions</a><br />
Reading academic papers can be a bit, well, academic. Luckily for us, Adrian Colyer breaks it down and helps explain the intricacies of physically collocating storage and serverless compute.</p>
<h3>For the audio/visual crowd… ?</h3>
<p><a href="https://www.serverlesschats.com/34?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Serverless Chats Podcast – Episode #34: Advanced NoSQL Data Modeling in DynamoDB with Rick Houlihan (Part 1)</a><br />
In this episode, I chat with Rick Houlihan about the use cases for NoSQL, why single table designs are so powerful, ways to model relational data with GSIs, and so much more in PART 1 of this two-part conversation.</p>
<p><a href="https://www.twitch.tv/videos/544223958?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Build with DynamoDB – Ep 13: Single-Table Design Pros and Cons</a><br />
If you didn’t get a chance to see Rick Houlihan and Alex DeBrie go head-to-head in the live cage match on Twitch, it’s definitely worth the watch. There were no folding chairs being smashed, but the discussion about DynamoDB modeling was plenty interesting.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-managed-cassandra-service-now-supports-ordering-clauses-in-cql-queries-and-aws-cloudtrail-logging/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Amazon Managed Cassandra Service now supports ordering clauses in CQL queries and AWS CloudTrail logging</a><br />
Friends don’t let friends manage their own Cassandra ring. So if you’re still a Cassandra fan, make sure you check out MCS.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/02/amazon-redshift-supports-per-second-billing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Amazon Redshift now supports per-second billing</a><br />
So this is pretty cool. Now if we can just get Lambda functions to support per-millisecond billing, we can break out the champagne. ?</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://dev.to/motleydev/run-your-own-conf-the-serverless-way-3ghi?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Run your own conf, the serverless way</a><br />
If you’re looking to build your own conference app, take a look at this new open source starter project.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/danilop/status/1222923437129314305?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Did you try running machine learning workloads (inference, training) on AWS Lambda? I’d love to get your feedback on what worked, what not, which tools you used (or built). Thank you! #Serverless #MachineLearning</a> <strong>~ Danilo Poccia</strong><br />
We have seen several articles that discuss ML use cases in Lambda, so we know that some things are possible. I’m curious to see what Danilo will do with this data he is compiling, because I’m sure it’ll be extremely useful. If you have your own experiences, please share with him.</p>
<p><a href="https://twitter.com/jeremy_daly/status/1223012298861752320?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">Not so much for failures, but maybe for general #serverless we utilize the SPRITE framework I just made up: ? S – Single responsibility, P – Principle of Least Privilege, R – Repeatability of Deployments, I – Isolation of Environments, T – Tracing and Observability, E – Event-driven</a> <strong>~ Jeremy Daly</strong><br />
This was in response to a post by Tom McLaughlin about a threat model around serverless. My post was a bit tongue in cheek, but the discussion on this thread is very interesting. It might be time for the community to collaborate on something like this.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>February 6, 2020 –</strong> <a href="https://serverless.zoom.us/webinar/register/WN_7GpfDR5sT-qsUmovARuvrg?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Troubleshooting Serverless APIs (webinar)</a></p>
<p><strong>February 12, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/workshops/slappforge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Remote debugging of live AWS Lambda functions (Workshop at ServerlessDays Cardiff)</a></p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a> ?</p>
<p><strong>February 20, 2020 –</strong> <a href="https://adtmag.com/webcasts/2020/01/lightstep-february-20.aspx?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">The Complete Guide to Observability (webinar)</a></p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> ?</p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong>March 27, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> ?</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Dr. Donna Malayeri</strong> (<a href="https://twitter.com/lindydonna" target="_blank" rel="noopener">@lindydonna</a>). Donna is a Product Manager for Google Cloud Run, and a member of the Knative Steering Committee, which governs the Knative Project. Donna’s serverless experience extends back even before her role at Google though. She previously worked for Microsoft, and served as Senior Program Manager of Azure Functions. The community is lucky to have her expertise in product management for developer-facing technologies, her PhD from Carnegie Mellon, and all her past experience, tirelessly working to make serverless even better. Thank you, Donna! ?</p>
<h3>Final Thoughts ?</h3>
<p>It’s great to see real usage data from Datadog’s <a href="https://www.datadoghq.com/state-of-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2375" target="_blank" rel="noopener">State of Serverless</a> report, but I’m even more curious about serverless use cases, workload percentages, tools being used, etc. I’ve been working on a <a href="https://github.com/jeremydaly/serverless-community-survey-2020" target="_blank" rel="noopener">Serverless Community Survey</a> that I hope to launch next week with help from the team at Nuweba. I’m still accepting feedback on it, so please feel free to send your thoughts my way.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-75/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-75/</guid>
      <pubDate>Tue, 04 Feb 2020 23:53:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Serverless MySQL: v1.5.3 released]]></title>
      <description><![CDATA[<h3>Minor bug fixes</h3>
<p>This update includes a number of fixes from the community including exporting the <code>escape</code> function without needing a connection (@wviveiro), standardizing quotations in a maintenance query to ensure compatibility (@mxmzb), and adding a retry on <code>PROTOCOL_CONNECTION_LOST</code> errors  (@itrendsky) which should resolve the zombie cleanup race condition.</p>
<p><strong>Full Release Notes:</strong> <a href="https://github.com/jeremydaly/serverless-mysql/releases/tag/v1.5.3" target="_blank" rel="noopener">https://github.com/jeremydaly/serverless-mysql/releases/tag/v1.5.3</a></p>
<p><strong>NPM:</strong> <a href="https://www.npmjs.com/package/serverless-mysql">https://www.npmjs.com/package/serverless-mysql</a><br /><strong>GitHub: </strong><a href="https://github.com/jeremydaly/serverless-mysql">https://github.com/jeremydaly/serverless-mysql</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c3">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c2">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c1" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<p>Learn more about <a href="https://www.jeremydaly.com/projects/serverless-mysql/"><strong>Serverless MySQL</strong></a> or check out the other <a href="https://www.jeremydaly.com/current-projects"><strong>projects</strong></a> I'm working on.</p>]]></description>
      <link>https://www.jeremydaly.com/serverless-mysql-v1-5-3-released/</link>
      <guid>https://www.jeremydaly.com/serverless-mysql-v1-5-3-released/</guid>
      <pubDate>Fri, 31 Jan 2020 21:21:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #74]]></title>
      <description><![CDATA[<h2>Investors are throwing money at serverless… ?</h2>
<p>Welcome to <strong>Issue #74</strong> of Off-by-none. Thanks for joining us! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-72/">Last week</a>, we shared lots of great pieces to expand your serverless knowledge. This week, we’ve got some exciting news about the state of serverless funding, highlights from ServerlessDays Belfast, and plenty of content from the community.</p>
<h3>When you make some new “Norn Iron” serverless friends…</h3>
<p>I had the opportunity to speak at <a href="https://twitter.com/search?q=%23BFSServerless" target="_blank" rel="noopener">ServerlessDays Belfast</a> last week, and it was an incredible event. There were lots of great speakers, the hallway track was amazing, and the organization of the event was top-notch. Paul Swail wrote up some of his observations in <a href="https://winterwindsoftware.com/serverless-days-belfast-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">What I learned from ServerlessDays Belfast 2020</a>, and below I’ve included speaker decks that were made available after the event. If you haven’t been to a ServerlessDays event, do yourself a favor, and find one to go to.</p>
<p><strong>Speaker Decks</strong></p>
<ul><li><a href="https://speakerdeck.com/danilop/what-can-you-do-with-serverless-dot-dot-dot-in-2020?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">What Can You Do with Serverless …in 2020?</a> by Danilo Poccia</li>
<li><a href="https://speakerdeck.com/farrah32/leveling-up-with-serverless-bc80c1b3-fd39-4b9b-b0fb-0243883f70ba?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Leveling up With Serverless</a> by Farrah Campbell</li>
<li><a href="https://www.slideshare.net/SusanneKaiser3/designing-a-serverless-application-with-domain-driven-design?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Designing a Serverless Application with Domain Driven Design</a> by Susanne Kaiser</li>
<li><a href="https://www.slideshare.net/PaulSwail/top-8-mistakes-developer-teams-make-in-their-first-serverless-project?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Top 8 mistakes developer teams make in their first serverless project</a> by Paul Swail</li>
<li><a href="https://www.slideshare.net/JeremyDaly1/building-resilient-serverless-systems-with-nonserverless-components-belfast?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Building resilient serverless systems with non-serverless components</a> by me!</li>
<li><a href="https://www.slideshare.net/theburningmonk/beware-the-potholes-on-the-road-to-serverless-224107000?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Beware the potholes on the road to serverless</a> by Yan Cui</li>
</ul><h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://techcrunch.com/2020/01/22/thundra-nabs-4m-series-a-to-secure-and-troubleshoot-serverless-workloads/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Thundra announces $4M Series A to secure and troubleshoot serverless workloads</a><br />
Congrats to the team over at Thundra. They have been doing some really solid work in the world of monitoring, tracing, and (even) securing serverless applications. Looking forward to their continued contributions.</p>
<p><a href="https://siliconangle.com/2020/01/28/serverless-computing-provider-nuweba-raises-10-2m-funding/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Serverless computing provider Nuweba raises $10.2M in funding</a><br />
Another big win for the serverless community. Nuweba has done some really interesting things with FaaS, including support for GPUs with Lambda-like functions. It will be interesting to see how their tech might be applied to some of the more stubborn FaaS use cases.</p>
<p><a href="https://siliconangle.com/2020/01/27/data-science-company-iguazio-closes-24m-funding-round/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Data science company Iguazio closes on $24M funding round</a><br />
Iguazio is another company that has done some really innovate things in the way it has applied serverless to machine learning. Yes, it runs on Kubernetes (and someone needs to manage that), but the developer experience to interface with their platform gives data scientists a powerful way to build applications.</p>
<p><a href="https://www.forbes.com/sites/janakirammsv/2020/01/24/vapor-io-and-cloudflare-partner-to-bring-serverless-computing-to-the-edge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Vapor IO And Cloudflare Partner To Bring Serverless Computing To The Edge</a><br />
Vapor IO has a pretty audacious goal of turning every cellphone tower into an edge location. But in the meantime, their new partnership with Cloudflare will bring serverless Cloudflare Workes to all their North American micro datacenters. They also just raised <a href="https://pulse2.com/vapor-io-90-million-funding-and-cloudflare-partnership/" target="_blank" rel="noopener">$90 million</a> in funding.</p>
<p><a href="https://serverless.com/blog/serverless-framework-knative-integration?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">The Serverless Framework Knative Integration</a><br />
The Serverless Framework lets you deploy functions to Knative now. So if you love the complexity of Kubernetes, but also the simplicity of serverless, nows your chance to overcomplicate things even more! ? However, if someone is forcing you to use Knative, then at least this should make your life a bit easier.</p>
<p><a href="https://www.zdnet.com/article/mongodb-graphql-release-points-to-broader-revamp-of-serverless-platform/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">MongoDB GraphQL release points to broader revamp of serverless platform</a><br />
GraphQL in MongoDB Atlas with access from serverless functions on their Stitch platform. I’m wondering if this is meant to sweeten their FaaS product, or position themselves to compete against things like Firebase.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://lumigo.io/blog/serverless-cost-optimization-kinesis-streams-vs-firehose/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Serverless Cost Optimization: Kinesis Streams vs Firehose</a><br />
Uri Parush has a great post that explains the thought process that Lumigo used to decide whether Kinesis Streams or Firehose was right for their workloads. There are also some good insights in here to help you make the right choice for your applications.</p>
<p><a href="https://www.codegram.com/blog/serverless-for-front-end-developers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Serverless for front-end developers</a><br />
Núria Soriano has a nice “getting started” post that explains the journey taken by a frontend developer to build a simple serverless backend.</p>
<p><a href="https://medium.com/comic-relief/migrating-from-a-conventional-cms-to-a-decoupled-technology-stack-6114cb97aaf5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Migrating from a conventional CMS to a decoupled technology stack!</a><br />
Gus Liedke outlines how his team migrated the Comic Relief site from Drupal to a fully-serverless stack using a headless CMS and a static site generator.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://dev.to/themsaid/what-is-aws-lambda-and-how-laravel-vapor-uses-it-1j98?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">What is AWS Lambda, and how Laravel Vapor uses it</a><br />
Laravel Vapor launched last summer, and while it uses Lambdaliths to run your workloads, it makes it really easy to move existing Laravel projects into a serverless environment. Mohamed Said explains how it works in more detail.</p>
<p><a href="https://medium.com/@sgwooduk/filtering-linkedin-job-alerts-with-serverless-python-62bdd07cb81d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Filtering LinkedIn Job Alerts with Serverless Python.</a><br />
Stephen Wood discusses how he built a serverless system that translates job listing descriptions into English, and then sends him a filtered list. Grab data, translate it, filter it, etc., all without worry about servers. I can think of plenty of workloads for this.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://blog.thundra.io/a-step-towards-observability-with-lambda-destinations?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">A Step Towards Observability with Lambda Destinations</a><br />
Sarjeel Yusuf explains the benefits of Lambda Destinations and why this new feature gives us more observability with regards to asynchronous invocations. I personally love Lambda Destinations, and I agree that it is a major step forward to building more reliable and resilient cloud applications.</p>
<p><a href="https://medium.com/@rahatshaikh/cloud-design-patterns-explained-simply-113c788b33ff?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Cloud Design Patterns</a><br />
Some of these cloud concepts can be tricky for developers to understand. Rahat Shaikh does a great job explaining a number of these concepts, with some “explain it to me like I’m a five year old” analogies to help you wrap your head around them.</p>
<p><a href="https://alexdebrie.com/posts/aws-lambda-vpc/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Three ways to use AWS services from a Lambda in a VPC</a><br />
Alex DeBrie takes a break from DynamoDB, and tells you everything you need to know about running a Lambda in a VPC.</p>
<p><a href="https://medium.com/faun/decoupling-services-using-sqs-as-a-lambda-trigger-f23164ab97d0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Decoupling services using SQS as a Lambda Trigger</a><br />
The team at beSharp explains how to use SQS to decouple your services and configure Lambda subscriptions to process queue messages.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://serverless.com/blog/deploy-your-first-knative-service-with-the-serverless-framework?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Deploying Your First Knative Service with the Serverless Framework</a><br />
Fernando Medina Corey takes you through the entire process of setting up Kubernetes on GCP, getting Knative running, and deploying a function with the Serverless Framework.</p>
<p><a href="https://annacoding.com/article/52sptbnFRgUVpyiHUulYn2/AWS-API-Gateway-WebSocket-API-with-the-Serverless-Framework-to-Fulfill-Front-end-Real-time-Update?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">AWS API Gateway WebSocket API with the Serverless Framework to Fulfill Front-end Real-time Update</a><br />
This tutorial shows you how to implement WebSockets using API Gateway and the Serverless framework. You’ll learn how to implement a broadcast function that broadcasts messages to other online users in real-time.</p>
<p><a href="https://www.gorillastack.com/news/optimizing-your-lambda-cold-starts-with-serverless-webpack/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Optimizing your Lambda cold starts with serverless-webpack</a><br />
Package size still has an effect on cold starts, so Chris Armstrong shows you how to use Webpack with the Serverless framework to optimize the size of your Lambda function deployments.</p>
<p><a href="https://medium.com/@asafadar55/aws-lambda-layer-in-java-ad67ce5d94b4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">AWS Lambda layer in Java</a><br />
Asaf Adar shows you how to create Lambda Layers in Java. According to him, it’s a real pain, but may be a necessary evil if you’re migrating your Java apps over to Lambda.</p>
<p><a href="https://medium.com/@techinscribed/authenticated-serverless-websockets-using-api-gateway-golang-lambda-6e661216638?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Authenticated Serverless Websockets using API Gateway &amp; Golang Lambda</a><br />
If you’d prefer to power your WebSockets with Go, Praveen Raj’s tutorial will get you sorted.</p>
<p><a href="https://epsagon.com/blog/aws-lambda-and-java-spring-boot-getting-started/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">AWS Lambda and Java Spring Boot: Getting Started</a><br />
Plan on building a Java app on AWS Lambda? I offer you my sympathies. ? But if you really need to, this post by Ran Ribenzaft will walk you through getting it set up and monitored correctly.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://blog.cloudflare.com/javascript-libraries-are-almost-never-updated/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">JavaScript Libraries Are Almost Never Updated Once Installed</a><br />
This isn’t a post about serverless, but I think the point it makes ties into the idea of serverless security and third-party vulnerabilities. The data in this article shows that once a library is added to a site, the likelihood of updating it is very, very low. Hopefully, the trend isn’t as bad with third-party modules included in our serverless applications, but I’m guessing it’s not better by much. Just a friendly reminder to keep those packages current.</p>
<p><a href="https://www.forbes.com/sites/forbestechcouncil/2020/01/22/securing-data-on-the-cloud-requires-focused-privileged-access-strategies/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Securing Data On The Cloud Requires Focused Privileged Access Strategies</a><br />
Vibhuti Sinha outlines four design principles to help keep your cloud data secure.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://redmonk.com/jgovernor/2020/01/24/triggermesh-serverless-integration-meets-message-oriented-middleware/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">TriggerMesh: serverless integration meets message oriented middleware</a><br />
It’s certainly interesting what TriggerMesh is doing (reminds me a lot of <a href="https://serverless.com/event-gateway/" target="_blank" rel="noopener">Serverless, Inc.’s Event Gateway</a>). There’s no doubt that massively scalable and reliable event buses are going to be needed for modern cloud applications, but it seems as though this has been tried before. Maybe the market wasn’t ready for it.</p>
<p><a href="https://www.datacenterknowledge.com/open-source/explaining-knative-project-liberate-serverless-cloud-giants?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Explaining Knative, the Project to Liberate Serverless from Cloud Giants</a><br />
Maybe I’m alone on this, but comparing Knative on K8s to serverless is a fundamental misunderstanding of what “serverless” actually is. This article (like others) explains serverless simply as “functions-as-a-service”. The problem with this, is that the FaaS pieces of my serverless applications are dwarfed by the array of managed services that are used. To think of serverless as merely FaaS, is a major miscalculation.</p>
<p><a href="https://medium.com/@javier.ramos1/scaling-my-app-serverless-vs-kubernetes-cdb8adf446e1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Scaling My App: Serverless vs Kubernetes</a><br />
This was a really thoughtful article that does a good job outlining the pros and cons of both approaches. More importantly, it doesn’t make the claim that Kubernetes is serverless, which is a breath of fresh air. I certainly get the cost concerns pointed out, but Javier Ramos writes that serverless “can become expensive in certain cases, not because of FaaS but because of the integrations.” But then goes on to write that “it is very common to have your Kubernetes cluster interacting with Serverless Databases and messaging services provided by the cloud.” So wouldn’t K8s then suffer from those same expenses (on top of the management requirements)?</p>
<p><a href="https://diginomica.com/three-reasons-why-multi-cloud-back-and-here-stay?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Three reasons why multi-cloud is back – and here to stay</a><br />
Interesting take on “multi-cloud” by Dominic Wellington. While I believe his underlying point still revolves around portability, I think “multi-cloud” has evolved past the idea of parity, and is now simply the realization that our hyper-connected cloud providers give us the option to pick and choose the services that make the most sense for our business. If that requires a network call, so be it.</p>
<p><a href="https://medium.com/better-programming/why-you-should-build-your-new-startup-on-kubernetes-278bfcc2bc1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Why You Should Build Your New Startup on Kubernetes</a><br />
?Robert Quinlivan makes his case for running your own Kubernetes cluster for your startup, even if you are just hosting a small web app on it. He also suggests <em>not</em> running stateful workloads like databases and message brokers on your K8s cluster, but to favor managed services instead (you know, for things like easier management of automatic backups, scaling, and monitoring). Personally, I can’t imagine having to spend more than a few minutes setting up something that is as commoditized as compute. But maybe that’s just me. ?‍♂️</p>
<h3>For the audio/visual learner… ?</h3>
<p><a href="https://www.serverlesschats.com/33?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Episode #33: The Frontlines of Serverless with Yan Cui</a><br />
In this episode, I chat with Yan Cui (aka theburningmonk) about how companies are adopting and implementing serverless, the current state of frameworks and developer tools, and what we should expect from serverless in the future.</p>
<p><a href="https://www.youtube.com/watch?v=SXmgSXtEk9k?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">CODING A SERVERLESS APP USING GLOBAL SECONDARY INDEXES WITH DYNAMODB</a><br />
Marcia Villalba continues coding a simple serverless application using DynamoDB and focuses on getting all the global secondary indexes working.</p>
<p><a href="https://serverless.com/learn/tutorial/dynamodb-create-table?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Adding a DynamoDB Table (Free Video Tutorial)</a><br />
This free video tutorial shows you how to add DynamoDB tables to your Serverless Framework services.</p>
<h3>New from AWS ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-eks-announces-price-reduction/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Amazon EKS Announces a 50% Price Reduction</a><br />
Well, if you’re going to run Kubernetes, you might as well get a nice price break.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/aws-control-tower-introduces-lifecycle-event-notifications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">AWS Control Tower introduces lifecycle event notifications</a><br />
Lifecycle events are recorded as AWS CloudTrail events and delivered to Amazon EventBridge as events, and the event log states if the Control Tower action completed successfully or not. Great way to add some additional automation and observability into your AWS Organization management.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-cloudwatch-synthetics-available-13-additional-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Amazon CloudWatch Synthetics is now available in 13 additional regions</a><br />
I haven’t played around with this yet, but it’s on my list. Good to know that it’s available in more regions.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/announcing-amazon-relational-database-service-snapshot-export-to-s3/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Announcing Amazon Relational Database Service (RDS) Snapshot Export to S3</a><br />
This is pretty cool. I can see some interesting use cases for offloading historical data that far too many people thought a relational database would be a good place for. ?</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/aws-codepipeline-enables-stopping-pipeline-executions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">AWS CodePipeline Enables Stopping Pipeline Executions</a><br />
Incredibly handy feature. You no longer have to disable transitions or wait for an active action execution to time out.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/new-digital-course-architecting-serverless-solutions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">New Digital Course: Architecting Serverless Solutions</a><br />
Learn to “think serverless” with this free training course from AWS. In this intermediate, three-hour digital course, you will learn how to combine AWS Lambda and Amazon API Gateway in event-driven patterns to power scalable and secure serverless applications.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://github.com/serverless-operations/jeffy?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Jeffy (Beta)</a><br />
Jeffy is Serverless “Application” Framework for Python, which is a suite of utilities for Lambda functions to make it easy to develop serverless applications.</p>
<p><a href="https://runtimes.bref.sh/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Bref runtime versions</a><br />
If you’re using Bref, there is a handy new landing page that will give you a quick reference to all the available PHP runtimes.</p>
<p><a href="https://github.com/graphboss/graphboss-cli?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">graphboss cli</a><br />
Generate a CloudFormation stack/SAM application from the GraphQL schema using the AWS Amplify code generator.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/ShortJared/status/1221519779183366144?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Apparently “Classic Serverless” and “Neo-Serverless” are a thing? Not sure I would consider SQLite serverless at all. It misses pretty big on the “at any scale” on distributed systems in the traditional sense. ~ Jared Short</a><br />
As if the term “serverless” wasn’t overloaded enough, now it refers to services that run on the same server but don’t require a separate process or thread? Maybe we should have picked a different term.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>January 30, 2020 –</strong> <a href="https://twitter.com/dynamodb/status/1221793737531109378" target="_blank" rel="noopener">Rick Houlihan vs. Alex DeBrie: DynamoDB Single Table Design Cage Match</a> (I may be overselling this)</p>
<p><strong>January 31, 2020 –</strong> <a href="https://awscommunitynordics.org/communityday/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">AWS Community Nordics</a></p>
<p><strong>February 6, 2020 –</strong> <a href="https://serverless.zoom.us/webinar/register/WN_7GpfDR5sT-qsUmovARuvrg?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2374" target="_blank" rel="noopener">Troubleshooting Serverless APIs (webinar)</a></p>
<p><strong>February 12, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/workshops/slappforge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Remote debugging of live AWS Lambda functions (Workshop at ServerlessDays Cardiff)</a></p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a> ?</p>
<p><strong>February 20, 2020 –</strong> <a href="https://adtmag.com/webcasts/2020/01/lightstep-february-20.aspx?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">The Complete Guide to Observability (webinar)</a></p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> ?</p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong>March 27, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> ?</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Emrah Şamdan</strong> (<a href="https://twitter.com/emrahsamdan" target="_blank" rel="noopener">@emrahsamdan</a>). Emrah is VP of Product at Thundra, where he works with their development team to help the serverless community improve their debugging and monitoring abilities. Emrah is an organizer of the Cloud and Serverless Turkey meetup, bringing members of the community together for monthly free events and to discuss topics like microservices and event-driven architectures. He’s also a regular conference speaker and contributor to the <a href="https://blog.thundra.io/author/emrah-samdan" target="_blank" rel="noopener">Thundra blog</a>. Thanks, Emrah, for sharing your serverless knowledge and helping to make the lives of serverless development teams everywhere easier! ?</p>
<h3>Final Thoughts ?</h3>
<p>Lots of serverless service companies adding to their funding over these past few weeks, which is exciting news for the serverless ecosystem. It’s always exciting to see what startups can do with a little support, and what types of innovations will emerge. This is also a great indicator of adoption. More and more companies are seeking the services of these providers, and it looks like investors are betting on that potential. Exciting times.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Best,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-74/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-74/</guid>
      <pubDate>Wed, 29 Jan 2020 04:13:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #73]]></title>
      <description><![CDATA[<h2>Wait, there are servers in serverless? ?‍♂️</h2>
<p>Welcome to <strong>Issue #73</strong> of Off-by-none. I’m glad you’re here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-72/">Last week</a>, we shared a bunch of great DynamoDB resources and several serverless concept deep-dives. This week, we’ve got more great pieces to expand your serverless knowledge, lots of awesome posts from the community, and perhaps one of the best articles I’ve ever read that makes the case for serverless.</p>
<p>Let’s get right to it!</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://techstartups.com/2020/01/16/epsagon-secures-16-million-series-provide-automate-monitoring-cloud-microservices/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Epsagon secures $16 million in Series A to provide automate monitoring for cloud microservices</a><br />
Congrats to the team at Epsagon. Even though they now support Kubernetes ?, I’m still a big fan of the work that Nitzan Shapira and Ran Ribenzaft have done. Good luck!</p>
<p><a href="https://www.wsj.com/articles/nasdaq-cio-sees-serverless-computing-as-a-2020-tech-trend-11579213416?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Nasdaq CIO Sees Serverless Computing as a 2020 Tech Trend</a><br />
The Nasdaq CIO gets it, and so do many others. This is my favorite quote from the article: “A better client experience for a lower price point is on offer for those willing to understand the technology.” Couldn’t agree more. You just need to be <em>willing</em> to understand the technology.</p>
<p><a href="https://siliconangle.com/2020/01/21/developer-first-security-firm-snyk-raises-150m-funding/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Developer-first security firm Snyk raises $150M funding round</a><br />
It’ll be interesting to see where Snyk goes from here. Third-party vulnerabilities are probably the biggest security issue facing serverless, so having a powerful solution to detect and fix those issues should be in high demand.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://dev.to/netguru/commentable-rs-building-a-serverless-comment-system-in-rust-5egb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Commentable.rs – Building a Serverless Comment System in Rust</a><br />
Wojciech Olejnik and his team weren’t satisfied by the current Comment System solutions out there, so they decided to build their own using Rust and Lambda.</p>
<p><a href="https://medium.com/@matratze/5-things-to-consider-before-using-aws-sam-and-lambdas-cce9f2d4bf87?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">5 Things to consider before using AWS SAM and Lambdas</a><br />
I like reading posts that give some insights into the decisions teams make when going serverless. This post is mostly about the challenges they faced, but there’s another argument for the Lambdalith in here.</p>
<p><a href="https://medium.com/@cplankey/publishing-an-app-to-aws-serverless-application-repo-my-experience-16c1badba250?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Publishing an App to AWS Serverless Application Repo</a><br />
Chris Plankey built his first app with SAM and published it to SAR. He gives some thoughts on the process, and offers up the resources that helped him get started.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@kittymarley723/serverless-data-driven-testing-with-dynamodb-9d7f13f30296?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Serverless Data Driven Testing With DynamoDb</a><br />
Travis White shares an interesting use case that combines DynamoDB, Lambda, and TestRail to create automated tests that can run through hundreds of data permutations and store the results for easy debugging.</p>
<p><a href="https://aws.amazon.com/blogs/compute/using-artificial-intelligence-to-detect-product-defects-with-aws-step-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Using artificial intelligence to detect product defects with AWS Step Functions</a><br />
Here’s a use case that uses SageMaker and a few serverless components to stitch together a really powerful utility for monitoring product quality. The future is now. ?</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://alexdebrie.com/posts/dynamodb-filter-expressions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">When to use (and when not to use) DynamoDB Filter Expressions</a><br />
Alex DeBrie hits us with another great article that explains the power (and penalties) of DynamoDB Filter Expressions. Frequency of access patterns are important here.</p>
<p><a href="https://www.trek10.com/blog/ten-commandments-for-cloud-decision-makers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Ten Commandments for Cloud Decision-Makers</a><br />
As Forrest Brazeal steps away from Trek10 to join the A Cloud Guru/Linux Academy team, he leaves us with this excellent post that outlines ten important considerations for anyone building in the cloud.</p>
<p><a href="https://lumigo.io/blog/7-tips-for-rock-solid-serverless-cicd/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">7 Tips for Rock-Solid Serverless CICD</a><br />
Excellent overview by Erez Berkner on maintaining sanity with your CI/CD processes. I will say, there are products (e.g. Seed.run and Serverless Framework Pro) that make the monorepo with multiple services much easier to deal with.</p>
<p><a href="https://levelup.gitconnected.com/5-serverless-architecture-best-practices-with-aws-lambda-a707206c098c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">5 Serverless Architecture Best Practices with AWS Lambda</a><br />
Austin Loveless gives a high-level overview of serverless and the AWS Well-Architected Framework, then digs into some best practices when architecting serverless applications.</p>
<p><a href="https://lumigo.io/blog/amazon-builders-library-in-focus-4-avoiding-insurmountable-queue-backlogs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Amazon Builders’ Library in focus #4: Avoiding insurmountable queue backlogs</a><br />
Yan Cui’s fourth article in his series on the Amazon Builders’ Library. This one focuses on a number of strategies to deal with queue backlogs in multi-tenant systems. There’s some really good stuff in here.</p>
<p><a href="https://www.trek10.com/blog/fargate-lambda-comparison/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Fargate vs Lambda</a><br />
This post by Jeff Carter should give you some insight into what may be the inevitable intersection of Fargate and Lambda. He explains where they differ, where they overlap, and what the cost implications of each are when applied to consistent workloads.</p>
<p><a href="https://dev.to/dashbird/production-ready-microservices-composition-and-orchestration-37jn?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Production-ready: Microservices Composition and Orchestration</a><br />
This post from Renato Byrro will give you a lesson on different ways to compose Lambda functions to accomplish complex tasks.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://dev.to/larswww/real-world-serverless-part-3-cloudfront-reverse-proxy-no-cors-cgj?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Real World Serverless Part 3: CloudFront Reverse Proxy === no CORS!</a><br />
Part 3 of an in-depth tutorial that uses Serverless Framework Components to launch a static website and backend API. I’ve always been a fan of the CloudFront proxy approach with API Gateway, just be sure to use a Regional API so you’re not deploying two CloudFront distributions.</p>
<p><a href="https://medium.com/@caseyvanroose/serverless-contact-form-for-a-static-site-4477c77898f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Serverless Contact form sending for a static site.</a><br />
Casey van Roose shows you a simple way to set up a contact form on a static site using a simple Lambda function and SES. This is one of those super simple use cases for serverless that make any other solution seem crazy. Imagine needing to spin up a server for this?</p>
<p><a href="https://medium.com/panther-labs/aws-serverless-application-repository-lambda-and-beyond-fa4e652b9c75?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">AWS Serverless Application Repository: Lambda and Beyond</a><br />
Kartikey Pandey gives a detailed tutorial for creating SAR applications, plus some thoughts on the serverless ecosystem.</p>
<p><a href="https://medium.com/@george.mao/all-aws-serverless-developers-should-know-fn-transform-aws-include-44e55430079f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">All AWS Serverless developers should know (Fn::Transform + AWS::Include)</a><br />
George Mao gives you some quick tips on how to insert dynamic values from your CloudFormation or SAM templates into your Swagger or OpenAPI specs.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://blog.thundra.io/how-to-secure-serverless-applications-1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">How to Secure Serverless Applications – Part One</a> &amp; <a href="https://blog.thundra.io/how-to-secure-serverless-applications-2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Part Two</a><br />
Thundra is creeping into the serverless security space. Serkan Özal shares his thoughts on securing serverless applications with existing AWS features, and then explains how Thundra can help extend control even further.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.gustavwengel.dk/serverless-or-not?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">To Serverless or Not To Serverless</a><br />
This is an extremely thoughtful piece that weighs the pros and cons of adopting serverless. There are a lot of really good points in here, and I think many organizations are making these considerations as well, which ultimately could be slowing down the adoption of serverless.</p>
<p><a href="https://www.networkworld.com/article/3514188/serverless-computing-ready-or-not.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Serverless computing: Ready or not?</a><br />
Wow, this might be the most coherent, well-written, properly researched, honest article about the benefits and drawbacks of serverless that I’ve ever read. Of course, someone had to mention that there “are still servers in serverless”, but since it was buried amongst a ton of other great information, I’ll allow it. ?This article is worth sharing.</p>
<p><a href="https://aws.amazon.com/blogs/compute/icymi-serverless-q4-2019/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">ICYMI: Serverless Q4 2019</a><br />
If you’re looking for a consolidated list of every feature release, blog post, and video produced by the serverless teams at AWS in the last few months, your search is over.</p>
<p><a href="https://winterwindsoftware.com/give-developers-own-aws-account/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Give developers their own AWS account</a><br />
I’m a big fan of setting up developer sandboxes with serverless, and as Paul Swail explains, it’s often a prerequisite for serverless development. I’m not sure individual accounts are always necessary, but devs definitely need a place to kick the tires and try things out.</p>
<p><a href="https://devops.com/trends-and-benefits-of-serverless-computing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Trends and Benefits of Serverless Computing</a><br />
(heavy sigh) So, I read articles like this and I don’t know how to feel about them. On the one hand, the article is pro-serverless and makes plenty of compelling (though slightly wandering) arguments in support of it. On the other hand, it makes wild assumptions about Kubernetes ultimately powering the underlying infrastructure, but then argues that containers are inefficient. I appreciate the effort here, but misinformation is misinformation. Thoughts?</p>
<p><a href="https://www.techfunnel.com/hr-tech/small-business-entrepreneurs-tips/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">5 Tips for Small Business Entrepreneurs in 2020</a><br />
I was excited that this post mentioned serverless, until I read this: “But serverless doesn’t mean there is no Docker – in fact, Docker is serverless. Serverless is actually a technique for building distributed apps, while Docker is the ideal platform to build them on.” ?See my previous comment on misinformation.</p>
<p><a href="https://www.zdnet.com/article/a-serverless-journey-begins-with-several-first-steps-actually/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">A serverless journey begins with several first steps, actually</a><br />
This post recaps some thoughts given by Matt Brayley-Berger, global business development manager for Serverless Compute at Amazon Web Services, on how to start using serverless in your organization. Good advice.</p>
<h3>For those that prefer Prime Video… ?</h3>
<p><a href="https://www.serverlesschats.com/32?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Serverless Chats – Episode #32: Customizing Serverless for Custom Ink with Ken Collins</a><br />
In this episode, I chat with Ken Collins about Custom Ink’s approach to adopting serverless, why they built Lamby to enable Ruby on Rails on Lambda, and why best practices don’t always equal customer value.</p>
<p><a href="https://www.youtube.com/watch?v=28B4L1fnnGM?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Deep Dive on Amazon EventBridge – AWS Online Tech Talks</a><br />
This is from late last year, but I realized I never shared it. Nick Smit from the EventBridge team gives an excellent presentation that shows how powerful EventBridge is for building serverless microservices. My advice, watch this.</p>
<p><a href="https://www.youtube.com/watch?v=5hQSrWaErK8&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">4 STEPS TO MODEL DATA FOR DYNAMODB – Find your access patterns and get the most efficient data model</a><br />
Marcia Villalba teaches you the four steps that are recommended by DynamoDB Principal Engineer, Rick Houlihan. These steps will help you find your access patterns and get the most efficient data model.</p>
<p><a href="https://www.youtube.com/watch?v=0OF5EhxyeQk&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">START CODING A SERVERLESS APP USING DYNAMODB – Using Infrastructure as Code, AWS SDK and AWS SAM</a><br />
Marcia Villalba shows you how to code a simple serverless application with a DynamoDB backend. You’ll learn all the basics using infrastructure as code, AWS SDK and AWS SAM.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>January 24, 2020 –</strong> <a href="https://belfast.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Belfast</a> ?</p>
<p><strong>January 27, 2020 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0118-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Device Hacking 101: Build a Serverless Application for an IoT Device</a></p>
<p><strong>January 31, 2020 –</strong> <a href="https://awscommunitynordics.org/communityday/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">AWS Community Nordics</a></p>
<p><strong>February 12, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/workshops/slappforge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Remote debugging of live AWS Lambda functions (Workshop at ServerlessDays Cardiff)</a></p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a> ?</p>
<p><strong>February 20, 2020 –</strong> <a href="https://adtmag.com/webcasts/2020/01/lightstep-february-20.aspx?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">The Complete Guide to Observability (webinar)</a></p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> ?</p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong>March 27, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> ?</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Linda Nichols</strong> (<a href="https://twitter.com/lynnaloo" target="_blank" rel="noopener">@lynnaloo</a>). Linda is a Cloud Solution Architect at Microsoft, a serverless advocate, a regular conference speaker, and one of the only people to have ever seen Bill &amp; Ted’s Bogus Journey. But she’s also done some amazing things for her local community in Virginia. She’s an organizer and co-founder of <a href="https://norfolkjs.org/" target="_blank" rel="noopener">Norfolk.js</a>, Norfolk, Virginia’s Javascript user group, and a board member and co-founder of RevolutionVA, a local non-profit that unites developers and runs conferences such as <a href="https://revolutionconf.com/" target="_blank" rel="noopener">RevolutionConf</a>. As part of these organizations, she has organized workshops, events, and other community engagement activities that bring developers together and allow people to learn from each other. Thank you, Linda, for your passion in bringing together the community and sharing your knowledge of serverless! ?</p>
<h3>Final Thoughts ?</h3>
<p>As per usual, I read through <em>a lot</em> of “what is serverless?” and “is serverless the next big thing?” articles this week. While most are rather pedestrian (and I try to save you from them), I was pleasantly surprised by a few that make me think people are really starting to get it. <a href="https://www.networkworld.com/article/3514188/serverless-computing-ready-or-not.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2373" target="_blank" rel="noopener">Serverless computing: Ready or not?</a> stood out the most, and while other articles point out that there are still plenty of hurdles to serverless adoption, lots of forward thinkers are realizing that this is the future of cloud computing. I find this incredibly encouraging.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Take Care,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-73/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-73/</guid>
      <pubDate>Wed, 22 Jan 2020 03:12:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #72]]></title>
      <description><![CDATA[<h2>Suddenly everyone’s interested in DynamoDB…</h2>
<p>Welcome to <strong>Issue #72</strong> of Off-by-none. Thanks for being here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-71/">Last week</a>, we shared a number of tutorials and some thought-provoking serverless reads. This week, we have a bunch of great DynamoDB resources, several serverless concept deep-dives, and plenty of great posts from the community.</p>
<h3>News &amp; Announcements ?</h3>
<p><a href="https://theburningmonk.com/2020/01/breaking-news-production-ready-serverless-workshop-is-coming-to-a-city-near-you/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Production-Ready Serverless workshop is coming to a city near you</a><br />
AWS Serverless Hero, Yan Cui, is taking his Production-Ready Serverless workshop on the road. There are multiple locations being offered in Europe.</p>
<p><a href="https://www.aithority.com/computing/slappforge-incorporates-us-entity-and-announces-new-ceo/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">SLAppForge Incorporates US Entity and Announces New CEO</a><br />
SLAppForge, the serverless technology startup, has announced the incorporation of its US entity SLAppForge Inc. and the appointment of Wallace Wilhoite as its new CEO.</p>
<p><a href="https://theburningmonk.com/2020/01/new-course-learn-you-some-lambda-best-practice-for-great-good/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">New course – Learn you some Lambda best practice for great good!</a><br />
Yan Cui also has a new course out. If you like video courses and want to learn some best practices for Lambda, take a look at this.</p>
<p><a href="https://lumigo.io/blog/lumigo-announces-iso-27001-27799-certification/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Lumigo announces ISO 27001 &amp; 27799 certification</a><br />
Congrats to the team over at Lumigo. This most definitely shows a commitment to user security.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://emshea.com/post/vocab-app-database?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Integrating DynamoDB in my Chinese vocab app</a><br />
Emily Shea outlines how she added DynamoDB to her serverless Chinese vocabulary app in order to store the list of words that users were sent. With all the complex DynamoDB use cases we discuss, the thought of tackling a project with it can be overwhelming. This is a nice straightforward implementation that gets the job done for pennies a month.</p>
<p><a href="https://medium.com/anna-coding/lessons-learned-from-a-legacy-serverless-app-e96db727e3d7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Lessons Learned From a Legacy Serverless App</a><br />
Mahdi Azarboon had to take a “legacy” serverless application that was built with no tooling, IaC, or documentation, and bring it up to modern development standards. There are also some good points in this post about the variations between cloud providers, and why developers might want to take some time to understand the differences.</p>
<p><a href="https://medium.com/expedia-group-tech/how-aws-lambda-solved-a-major-photo-bug-2aeac2cc59f9?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">How AWS Lambda Solved a Major Photo Bug</a><br />
Quinn Flagg from the Expedia Group explains how his team used a Lambda function and S3 notifications through SNS to quickly solve an image orientation bug.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://serverless.pub/webhooks-with-evenbridge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Handling webhooks with EventBridge, SAM and SAR</a><br />
Slobodan Stojanović built a generic webhook-to-EventBridge SAR application for you to easily launch serverless-scale webhooks and use all the magic of EventBridge to do your event routing. The post also contains some great insights into the architectural choices.</p>
<p><a href="https://medium.com/@manta.innovations/serverless-big-data-pipelines-eee4a33ac767?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Big Data Pipelines as Serverless Microservice’s</a><br />
Big Data pipelines are becoming the norm, rather than the exception. Joel Lutman shows you how his team used Step Functions, Lambda, S3, and several other services to coordinate a rather sophisticated architecture.</p>
<p><a href="https://medium.com/@djheru/fun-with-aws-image-recognition-the-twitter-account-activity-api-f7f13eab21a6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Fun with AWS Image Recognition &amp; the Twitter Account Activity API</a><br />
If you’ve got some time on your hands, check out Philip Damra’s incredibly lengthy tutorial that shows you how to build a Twitter bot that will process tweeted images with AWS Rekognition, and tweet back what it identifies.</p>
<p><a href="https://medium.com/@griggheo/running-a-fargate-task-from-a-lambda-python-function-to-automate-pull-request-creation-e49dafac51b0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Running a Fargate task from a Lambda Python function to automate Pull Request creation</a><br />
I’m sure this is a fine solution to the problem, but I thought it was a bit ironic that they are using a Lambda function to automate pull requests for their Kubernetes cluster configurations. ?</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://alexdebrie.com/posts/dynamodb-no-bad-queries/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">SQL, NoSQL, and Scale: How DynamoDB scales where relational databases don’t</a><br />
Alex DeBrie has put together an excellent post that explains why NoSQL databases are better at scaling than RDBMS. There are lots of considerations when choosing your operational datastore, and Alex does a great job pointing out all the intricacies. It’s a very long article, but worth the read.</p>
<p><a href="https://adamdelong.com/serverless-environment-variables/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Serverless Environment Variables – A Comprehensive Guide</a><br />
Everything you ever wanted to know about using environment variables with the Serverless Framework and AWS from Adam DeLong.</p>
<p><a href="https://medium.com/@shouldroforion/aws-cloudformation-doesnt-do-that-yet-no-problem-fdd1ff01839?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">AWS CloudFormation Doesn’t Do That Yet?! No Problem</a><br />
Mark Fowler gives you a complete run down on the why, what, where, when, and how of AWS CloudFormation Custom Resources.</p>
<p><a href="https://lumigo.io/blog/amazon-builders-library-in-focus-3-avoiding-fallback-in-distributed-systems/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Amazon Builders’ Library in focus #3: Avoiding fallback in distributed systems</a><br />
Yan Cui has another post in his series of notes on the Amazon Builders’ Library. In this installment, he outlines Amazon’s strategy for avoiding fallback mechanisms, why fallbacks are a bad idea, and what are some better alternatives.</p>
<p><a href="https://blog.thundra.io/aws-lambda-canary-deployments-with-api-gateway?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">AWS Lambda Canary Deployments with API Gateway</a><br />
Serkan Özal explains how canary deployments can improve the stability of your web applications by using traffic shifting with API Gateway to verify new releases.</p>
<p><a href="https://searchcloudcomputing.techtarget.com/tip/AWS-Serverless-Application-Repository-explained?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">AWS Serverless Application Repository explained</a><br />
There hasn’t been a lot of buzz about the Serverless Application Repository lately, but it’s a great way to package, share, and reuse serverless application patterns. Ernesto Marquez gives a quick overview of what it is and what you can do with it.</p>
<p><a href="https://lumigo.io/blog/how-to-optimize-aws-lambda-performance/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">How to optimize AWS Lambda performance</a><br />
Efi Merdler-Kravitz has a great post that explains some ways to tweak your settings to get better performance out of your Lambda functions.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://medium.com/voice-tech-podcast/alexa-node-js-skill-serverless-integration-d2d09238ef11?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Alexa Node JS skill Serverless Integration</a><br />
I think voice interface technology is going to be the next big thing, so if you want a crash course in building an Alexa skill with Serverless, take a look at this tutorial by Renjith Chandran.</p>
<p><a href="https://medium.com/@serverlessguru/supercharging-your-development-workflow-with-serverless-framework-pro-ae84ae6cc38b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Supercharging Your Development Workflow with Serverless Framework Pro</a><br />
If you haven’t been paying attention to all the new features being added to the Serverless Framework Pro, take a few minutes and review it. The Serverless Framework has been a staple for many serverless developers over the years, and the new features make managing the full lifecycle of your applications super easy.</p>
<p><a href="https://medium.com/swlh/setup-ci-cd-pipeline-for-aws-lambda-using-github-travis-ci-9812c8ef7199?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Setup CI/CD Pipeline for AWS Lambda using Github &amp; Travis CI</a><br />
Another serverless application, another unique CI/CD setup. Luke Mwila shares another way to automate the deployment of AWS Lambda functions.</p>
<p><a href="https://www.matthewbonig.com/2020/01/11/creating-constructs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">How to Create CDK Constructs</a><br />
Thinking about building your own AWS CDK constructs? Matt Bonig has a simple tutorial to get you started.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.linkedin.com/pulse/why-born-cloud-nosql-services-win-rick-houlihan?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Why ‘Born in the Cloud’​ NoSQL Services will win</a><br />
I recently came across this article by Rick Houlihan. He says, “In the end, people who actually scale NoSQL databases learn fast that NoSQL is about simple queries that facilitate CPU conservation so performance is driven by proper denormalized data modeling and not fancy query API’s.” This is an incredibly important point that developers choosing NoSQL have to be aware of.</p>
<p><a href="https://siliconangle.com/2020/01/08/serverless-its-how-things-get-done-but-what-is-it-cubeconversations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Serverless: It’s how things get done. But what is it?</a><br />
Apologies for the self promotion, but after I was interviewed by Stu Miniman about serverless, Betsy Amy-Vogt wrote a great follow up piece. TLDR; serverless is getting harder, so we need better abstractions, and multi-cloud doesn’t make sense for most companies.</p>
<p><a href="https://medium.com/@florian.martens22/dont-go-brainless-into-serverless-8f90d483798?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Don’t Go Brainless Into Serverless</a><br />
I always appreciate reading a differing point of view. Florian Martens has a really harsh criticism of serverless that is worth taking a look at, even though I believe his underlying arguments are based on misleading and/or outdated information. There is no doubt that AWS can become expensive (this has been an ongoing criticism with their data transfer and managed database pricing), but there is a very large gap between companies that can afford to hire the necessary expertise to reliably and securely run applications at scale, and those that can’t. This is a much longer discussion, but one worth having.</p>
<p><a href="https://www.stackery.io/blog/six-people-on-the-cutting-edge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Six people on the cutting edge of serverless modernization</a><br />
This was a nice post by Toby Fee highlighting several people who are making an impact in the serverless space. It’s an honor to be on this list with so many amazing people.</p>
<p><a href="https://techround.co.uk/interviews/2020-enterprise-technology-predictions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">2020 enterprise technology predictions: cloud, serverless computing, compliance and beyond</a><br />
Sanjay Castelino makes a good point that companies will “need to prioritise understanding consumption models because those models will have a significant impact on their business.” Pay-per-use sounds great to most of us, procurement departments not included.</p>
<h3>Serverless Podcasts and Videos ?</h3>
<p><a href="https://www.serverlesschats.com/31?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Serverless Chats Podcast – Episode #31: Voice Automation with Serverless with Aleksandar Simovic</a><br />
In this episode, I chat with Aleksandar Simovic about the evolution and predictability of voice interface technology, how serverless helped commoditize it for home and business use cases, and what the future of conversations with intelligent agents will look like.</p>
<p><a href="https://www.youtube.com/watch?v=Tb8Cw3TUDRM?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">All you need to know to use DynamoDB as a pro</a><br />
In this video, Marcia Villalba teaches you the basic concepts that you need to know in order to use DynamoDB. She reviews concepts such as primary keys, partition keys, sort keys, global secondary indexes, and local secondary indexes.</p>
<p><a href="https://softwareengineeringdaily.com/2020/01/09/nosql-optimization-with-rick-houlihan/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">SE Daily Podcast – NoSQL Optimization with Rick Houlihan</a><br />
Rick Houlihan is interviewed on the Software Engineering Daily Podcast and shares lots of great insights into building applications with NoSQL.</p>
<h3>What the teams at AWS have been working on… ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-sqs-now-supports-1-minute-cloudwatch-metrics-in-all-commercial-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Amazon SQS Now Supports 1-Minute CloudWatch Metrics In All Commercial Regions</a><br />
Yay! SQS launched support for 1-minute Amazon CloudWatch metrics back in December in just a few regions. Now you can set up Amazon CloudWatch metrics at 1-minute intervals at no additional cost in all commercial regions. This is great for alarming on queue issues much earlier.</p>
<p><a href="https://aws.amazon.com/blogs/aws/urgent-important-rotate-your-amazon-rds-aurora-and-documentdb-certificates/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Urgent &amp; Important – Rotate Your Amazon RDS, Aurora, and DocumentDB Certificates</a><br />
Just in case you somehow missed all the alerts, make sure you rotate your AWS database certificates as soon as possible.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/the-amazon-builders-library-is-now-available-in-16-languages/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">The Amazon Builders’ Library is Now Available in 16 Languages</a><br />
The Amazon Builders’ Library is an amazing resource for cloud engineers to learn from the masters. Having it published in a multitude of languages is a great way to help spread the knowledge to more people.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-cognito-supports-cloudwatch-usage-metrics/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Amazon Cognito now supports CloudWatch Usage Metrics</a><br />
This is a nice little add. You can now monitor things like SignUpSuccesses, SignInSuccesses, FederationSuccesses, and more from your Cognito Pools.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-translate-introduces-batch-translation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Amazon Translate introduces Batch Translation</a><br />
You now have the option to translate a large collection of text or HTML documents stored in a folder in Amazon Simple Storage Service (S3) bucket using the new asynchronous Batch Translation service.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/cloudfront-kenya-bulgaria-greece-hungary-romania/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">Amazon CloudFront launches in five new countries – Bulgaria, Greece, Hungary, Kenya, and Romania</a><br />
Viewers in these countries will now see, on average, up to a 50% reduction in first-byte latency when accessing content through CloudFront. In addition, CloudFront also launched its first Edge location in Dusseldorf, Germany, bringing totals up to 216 Points of Presence in 84 cities across 42 countries.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://github.com/cdk-patterns/serverless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">AWS CDK Serverless Architecture Patterns</a><br />
I’m not sold on the CDK, but if <em>you</em> are, here is a repo that promises to contain all of the official AWS Serverless architecture patterns built with CDK for developers to use.</p>
<p><a href="https://twitter.com/ckarmstrong/status/1216145911451017216?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">dynaglue now has basic <code>UpdateItem</code> and adjacency list support for DynamoDB</a><br />
Chris Armstrong has released some additional updates to his dynaglue project.</p>
<p><a href="https://github.com/Sleavely/dynamo-plus" target="_blank" rel="noopener">Dynamo Plus</a><br />
Extend and supercharge your DynamoDB DocumentClient with promises, retries, and more.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/WellPaidGeek/status/1213875338062827523?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">In the days when I was a back end dev, all you needed to know was some PHP and MySQL. Now you need to know: * Authentication (IAM) * File Storage (S3, Cloud Front) * Serverless (Lambda) * Databases * Orchestration * Containers (k8s) * Messaging (SQS)</a><strong> ~ WellPaidGeek</strong><br />
I don’t think developers need to learn K8s, but if you’re building modern applications, many of these skills (and more) are quite necessary. Especially with serverless, understanding the “backend” becomes critically important. Just because you don’t need to manage it, doesn’t mean you don’t have to know the impact of your architectural choices.</p>
<p><a href="https://twitter.com/brandonsavage/status/1216055766752354305?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2372" target="_blank" rel="noopener">You’re looking at a $200/mo SaaS but decide to build it yourself. It takes a $100,000/yr engineer 3 months to build, + 2 weeks a year to maintain. Congratulations. You saved $2400 but spent $28,846 building it yourself. The most expensive solution ever is writing your own code</a> <strong>~ Brandon Savage</strong><br />
☝️This. 100% this! This is also why serverless makes so much sense. Even if certain managed services only get you 80% there, the time and money savings can be huge.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>January 20, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0101-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">End Cold Starts in Your Serverless Apps with AWS Lambda Provisioned Concurrency</a></p>
<p><strong>January 24, 2020 –</strong> <a href="https://belfast.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Belfast</a> ?</p>
<p><strong>January 27, 2020 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0118-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Device Hacking 101: Build a Serverless Application for an IoT Device</a></p>
<p><strong>January 31, 2020 –</strong> <a href="https://awscommunitynordics.org/communityday/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">AWS Community Nordics</a></p>
<p><strong>February 12, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/workshops/slappforge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Remote debugging of live AWS Lambda functions (Workshop at ServerlessDays Cardiff)</a></p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a> ?</p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> ?</p>
<p><strong>March 19, 2020 –</strong> <a href="https://zurich.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Zürich</a></p>
<p><strong>March 24, 2020 –</strong> <a href="https://helsinki.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Helsinki</a> ?</p>
<p><strong>March 27, 2020 –</strong> <a href="https://hamburg.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Hamburg</a> ?</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>John Chapin</strong> (<a href="https://twitter.com/johnchapin" target="_blank" rel="noopener">@johnchapin</a>). John’s experience extends well over a decade in software development and engineering, but these days he’s a Partner at <a href="https://www.symphonia.io/" target="_blank" rel="noopener">Symphonia</a>, a serverless and cloud technology consultancy based in NYC. At Symphonia, John shows teams how they can unlock untapped potential (and success) through serverless and modern Agile practices. John shares great resources on serverless through Symphonia’s <a href="https://medium.com/the-symphonium" target="_blank" rel="noopener">blog</a>, as a speaker at conferences, and with open source software published on <a href="https://github.com/symphoniacloud" target="_blank" rel="noopener">GitHub</a>. Thanks for all you do to help teams be better with serverless, John! ?</p>
<h3>Final Thoughts ?</h3>
<p>I came across a lot of DynamoDB content this past week (which may be because I have been <a href="https://twitter.com/jeremy_daly/status/1216047248506748928" target="_blank" rel="noopener">geeking out</a> over it lately), but there has certainly been an uptick in interest over the last few months. There is a lot to explore there, and plenty of tools being released that are helping make NoSQL modeling and runtime interactions easier. I’m hoping this trend will continue!</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Best,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-72/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-72/</guid>
      <pubDate>Wed, 15 Jan 2020 00:29:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #71]]></title>
      <description><![CDATA[<h2>Starting off 2020 with a serverless bang… ?</h2>
<p>Welcome to <strong>Issue #71</strong> of Off-by-none. Thanks for joining us! ??</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-70/">Last week</a>, we looked at the most popular links from 2019 and I shared some of my plans for 2020. This week, we’ve got lots of great tutorials and some thought-provoking serverless reads, plus plenty of other excellent posts from the serverless community.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@kevinlinxc/troubleshooting-while-turning-a-pycharm-project-into-an-aws-lambda-function-windows-cec052e6b01c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Troubleshooting While Turning a Pycharm Project into an AWS Lambda Function (Windows)</a><br />
I really like reading stories like this. Kevin Lin documents the trials and tribulations of converting a project to serverless and, for the new serverless developer, the experience seems to be consistent.</p>
<p><a href="https://medium.com/finimize-engineering/building-serverless-workflows-with-aws-step-functions-89eca69a93f3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Building Serverless workflows with AWS Step Functions</a><br />
Mark Carrington has a very detailed post that outlines how Finimize automated database syncing using AWS Step Functions. Lots of code examples and great explanations in here.</p>
<p><a href="https://medium.com/@tunatore/how-mycrypto-tools-uses-aws-lambda-serverless-architecture-b5603df10443?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">How mycrypto.tools uses AWS Lambda Serverless Architecture? And the overview of AWS products/services. (Do you really need Servers?)</a><br />
Tuna Tore of mycrypto.tools outlines and explains the serverless architecture and tools he used to build his service. I love when people are willing to share the details of their architecture like this, so please keep these coming.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://scaledynamix.com/blog/scaling-wordpress-servers-vs-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Scaling WordPress: Servers vs Serverless</a><br />
I know that people love WordPress, but jamming it into ephemeral compute still seems like a terrible idea to me. While some traditional architectures can be ported, WordPress, IMO, definitely isn’t one of them. If you’re still running WordPress (like me ?unfortunately), put it behind CloudFront until you can find a more cloud native solution.</p>
<p><a href="https://dev.to/elthrasher/exploring-aws-cdk-loading-dynamodb-with-custom-resources-jlf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Exploring AWS CDK – Loading DynamoDB with Custom Resources</a><br />
Matt Morgan uses the AWS CDK to create a custom resource that pre-populates data into an DynamoDB table. Interesting use case, especially when you are spinning up new environments that store configuration data used in your applications.</p>
<p><a href="https://medium.com/@crespo.wang/create-pdf-using-chromium-puppeteer-in-serverless-aws-lambda-685906df62d5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Create PDF using Chromium Puppeteer in Serverless AWS Lambda</a><br />
Puppeteer is an excellent utility for controlling the headless version of Chromium. Crespo Wang has updated his demo for using it with Lambda.</p>
<p><a href="https://medium.com/@michabahr/how-to-use-s3-to-share-media-with-your-friends-fc768fe889f5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">How to use S3 to share media with your friends</a><br />
Never really thought of using S3 to share files with friends and family, but Michael Bahr outlines a pretty simple use case that might even let your non-techie family members use it.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://lumigo.io/blog/amazon-builders-library-in-focus-2-using-load-shedding-to-avoid-overload/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Amazon Builders’ Library in focus #2: Using load shedding to avoid overload</a><br />
The AWS Builders’ Library is an amazing resource for cloud architects that want to learn directly from the people who have been building massively scalable systems at Amazon for over a decade. Yan Cui has a new series that is helping to summarize the posts for you. Here is the second post in that series.</p>
<p><a href="https://dev.to/zahidulislam/deep-dive-3-ways-to-invoke-aws-lambda-function-5a37?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Deep dive: 3 ways to invoke AWS Lambda Function</a><br />
Zahidul Islam gives a good overview of three different invocation models for Lambda: synchronous, asynchronous, and poll-based.</p>
<p><a href="https://medium.com/lego-engineering/the-power-of-amazon-eventbridge-is-in-its-detail-92c07ddcaa40?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">The power of Amazon EventBridge is in its detail</a><br />
Sheen Brisals put together an excellent primer on EventBridge that will show you all the available options for transforming events and passing the data to consumers.</p>
<p><a href="https://medium.com/@bluntjackson/the-serverless-api-efe153c2694a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">The Serverless API</a><br />
Blunt Jackson has an intro into building a serverless API with API Gateway, Lambda, and DynamoDB. Good read for the newbies out there.</p>
<p><a href="https://medium.com/@jlaitio/tracing-requests-in-serverless-architectures-with-aws-cloudwatch-servicelens-7821c5dba133?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Tracing Requests in Serverless Systems with AWS CloudWatch ServiceLens</a><br />
Helpful post by Joonas Laitio that gives some insights into how the new CloudWatch ServiceLens works, where it’s useful, and where it falls short.</p>
<h3>Serverless Tutorials ?‍♀️</h3>
<p><a href="https://dev.to/dabit3/10-minute-tutorial-creating-a-serverless-express-web-server-api-29j7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">⏱ 10 Minute Tutorial: Creating a Serverless Express Web Server &amp; API</a><br />
If you want to build a serverless Express app by practically doing nothing, take a look at this tutorial by Nader Dabit. He uses the Amplify Framework, which pretty much does everything for you.</p>
<p><a href="https://medium.com/@dorian599/serverless-aws-parameter-store-with-python-811e44c6d40?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">AWS Parameter Store with Python</a><br />
This seems like a helpful tool for Python developers that need to retrieve multiple parameters at once. The SDKs have a <a href="https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#getParametersByPath-property" target="_blank" rel="noopener">getParametersByPath</a> method that allows you to do this as well, but solving this with a layer might make your life easier.</p>
<p><a href="https://aws.amazon.com/blogs/compute/building-an-aws-iot-core-device-using-aws-serverless-and-an-esp32/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Building an AWS IoT Core device using AWS Serverless and an ESP32</a><br />
Here’s something for the true serverless and IoT geek! Moheeb Zara has a great post that shows you how to use serverless and IoT Core to build a device with bi-directional communication. ?</p>
<p><a href="https://mechanicalrock.github.io/2020/01/06/github-actions-for-sam.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Build &amp; Release Serverless Apps with Github Actions</a><br />
Matt Tyler’s post walks you through setting up an entire CI pipeline using serverless and Github Actions. This could be a very useful alternative to using CodePipeline.</p>
<p><a href="https://aws.amazon.com/blogs/mobile/building-a-real-time-stock-monitoring-dashboard-with-aws-appsync/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Building a real-time stock monitoring dashboard with AWS AppSync</a><br />
Very cool post by Jan Michael Go Tan that shows you how to use the Amplify Framework and AWS AppSync to build a real-time serverless application.</p>
<p><a href="https://medium.com/@manideepreddy1116/serverless-web-application-55b1924edd3f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Serverless Web Application</a><br />
Manideep Reddy Gillela shows you how to build a serverless web app, running a simple Python flask API in AWS Fargate and serving content from AWS S3.</p>
<p><a href="https://medium.com/@houzier.saurav/private-api-endpoints-with-api-gateway-authorizers-and-cognito-249c288b0ab8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Private API endpoints with API Gateway Authorizers and Cognito. Part 3</a> &amp; <a href="https://medium.com/@houzier.saurav/part-4-serverless-b0b7c8bdbd0a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Part 4</a><br />
Saurav Verma’s posts add to his series about building serverless APIs that utilize Cognito authorizers. In parts 3 and 4 he explains private API endpoints and federated identities to provide users temporary access to AWS resources.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://aws.amazon.com/blogs/compute/orchestrating-a-security-incident-response-with-aws-step-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Orchestrating a security incident response with AWS Step Functions</a><br />
Benjamin Smith shows you how to implement the callback pattern of an AWS Step Functions Standard Workflow to add a manual approval step into an automated security incident response framework.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/@sjatkins/serverless-is-problematic-3335ffaabc44?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Serverless is problematic</a><br />
This is perhaps one of the most well articulated criticisms of serverless that I’ve ever read. Samantha Atkins lays out a number of highly logical arguments as to why serverless isn’t the silver bullet that many purport it to be. There are several things that I don’t agree with (such as not being able to take advantage of previous invocations, brittleness, and runtime efficiency), but there are lots of things that I <em>do</em> agree with. Most notably, the fragility of the developer toolchain and the maintainability argument. It is most definitely worth the read.</p>
<p><a href="https://forrestbrazeal.com/2020/01/05/code-wise-cloud-foolish-avoiding-bad-technology-choices/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Code-wise, cloud-foolish</a><br />
Another incredibly insightful edition of Cloud Irregular by Forrest Brazeal. In this piece, he explains why many short term (and short-sighted) architectural and code choices can lead to painful tech debt in the future. He does an excellent job making his case, so be sure to give this a read.</p>
<p><a href="https://www.jeffersonfrank.com/aws-blog/ask-the-expert-8-challenges-teams-face-when-doing-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Ask the Expert: 8 challenges teams face when doing serverless</a><br />
This is a great post that outlines a number of challenges that teams need to consider when adopting serverless. For me, the two most important on this are “underestimating the learning curve” and “not embracing new architectural patterns.” Serverless can get very complex, very quickly, and holding on to old ways of thinking will dramatically slow down your journey.</p>
<p><a href="https://medium.com/theburningmonk-com/all-my-serverless-content-in-2019-8e59aa8974b6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Yan Cui: All my serverless content in 2019</a><br />
Yan Cui is probably the most prolific man in serverless, and if you don’t believe me, just check out the treasure trove of serverless posts he produced in 2019.</p>
<p><a href="https://www.cloudzero.com/blog/simple-aws-serverless-patterns?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Simple AWS Serverless Patterns for Building Cost Effective and High Performing Applications</a><br />
Bill Buckley from CloudZero discusses a few patterns that can be used to build serverless applications. Key here is not to try and “lift and shift” your existing applications to Lambda functions, because this won’t give you the results you’re hoping for.</p>
<h3>For the A/V fans… ?</h3>
<p><a href="https://www.serverlesschats.com/30?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Episode #30: What to expect from serverless in 2020 with James Beswick</a><br />
In this episode, I chat with James Beswick about the most popular serverless tools and services that companies are adopting, how built-in cloud features are making apps more resilient, and what serverless will look like in 2020.</p>
<p><a href="https://www.youtube.com/watch?v=htGE2MK7qWs&amp;feature=youtu.be" target="_blank" rel="noopener">Jeremy Daly | CUBEConversation January 2020</a><br />
Hey look, Ma! I’m on TV (well, sort of). I sat down with Stu Miniman of theCUBE and talked about the future of serverless, and why multi-cloud is a bad idea for most companies.</p>
<h3>New from AWS… ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/introducing-aws-systems-manager-change-calendar/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Introducing AWS Systems Manager Change Calendar</a><br />
AWS announces Systems Manager Change Calendar is a new capability that helps you prevent changes to your AWS resources during important business events. This feels like it was borne out of experience, so I have a feeling someone pushed some code when they shouldn’t have.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-ses-now-lets-you-use-your-existing-ip-address-ranges-to-s/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Amazon SES now lets you use your existing IP address ranges to send email</a><br />
You can now BYOIP (Bring Your Own IP) to Amazon SES, which is important for organizations that have already built a reputation around their mail delivery services. It requires a Class C address, so still no dice if you want to move from another provider that issued you a single IP.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-quicksight-launches-new-analytical-functions-athena-workgroup-and-presto-vpc-connector-support/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Amazon QuickSight launches new analytical functions, Athena Workgroup and Presto VPC connector support</a><br />
Amazon QuickSight added some cool new math functions (if you’re into that sort of thing), including logarithms, exponents, and square roots. Plus it now supports Athena Workgroups, so you can tie report generation costs back to teams and business units.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-comprehend-launches-multi-label-custom-classification/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Amazon Comprehend launches multi-label custom classification</a><br />
The Comprehend custom classification was a very cool feature, but limiting it to single labels with multi-class classifications excluded lots of use cases. Now with multi-label, documents can return multiple classifications, opening up lots of possibilities.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://dynobase.dev/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Dynobase</a><br />
I didn’t even know this tool existed. Dynobase is described as a modern, flexible and fast DynamoDB editor. I have to spend some time looking at this.</p>
<p><a href="https://www.youtube.com/watch?v=4ViJ8m7CEZU?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Peeking into an AWS EventBridge bus</a><br />
Yan Cui demonstrates the new AWS EventBridge features in the lumigo-cli tool.</p>
<p><a href="https://github.com/0x4447/0x4447_product_s3_email?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">S3 Email</a><br />
This is super cool. S3 Email is an unmanaged email server with unlimited email addresses that also offers the benefit of easily organizing messages by adding the <code>+</code> character to the email names. It uses S3, SES and Lambda and is 100% serverless.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/rts_rob/status/1212540137474801664?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Predictions for #serverless in 2020 ~ Rob Sutter</a><br />
Rob makes the point that “FaaS fades into the background as service integrations become king.” I think this will happen eventually, but there are still too many people coming into the space that feel more comfortable writing code. IMO, FaaS will remain an important part of serverless for quite some time.</p>
<p><a href="https://twitter.com/edjgeek/status/1213237116869607424?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Hey #Serverless folks. Tell me, how do YOU use #AWSLambda in DevOps or Operations? I am curious. ~ Eric Johnson</a><br />
Good discussion started by Eric here. Lots of interesting DevOps use cases here that are completely peripheral to the monolith. Could give you some ideas for bringing serverless into your organization.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>January 20, 2020 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0101-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">End Cold Starts in Your Serverless Apps with AWS Lambda Provisioned Concurrency</a></p>
<p><strong>January 24, 2020 –</strong> <a href="https://belfast.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Belfast</a> (I’m speaking here!)</p>
<p><strong>January 27, 2020 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2020_0118-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Device Hacking 101: Build a Serverless Application for an IoT Device</a></p>
<p><strong>January 31, 2020 –</strong> <a href="https://awscommunitynordics.org/communityday/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">AWS Community Nordics</a></p>
<p><strong>February 12, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/workshops/slappforge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2371" target="_blank" rel="noopener">Remote debugging of live AWS Lambda functions (Workshop at ServerlessDays Cardiff)</a></p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a> (And here!)</p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> (And also here!)</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Rowan Udell</strong> (<a href="https://twitter.com/elrowan" target="_blank" rel="noopener">@elrowan</a>). Rowan is the Cloud Practice Director at Versent, an AWS Premier Consulting Partner in the Asia Pacific region. At Versent, he works with customer and internal teams to deliver change at scale and speed using serverless and AWS native services. Rowan has published video courses on AWS, been a guest on Serverless Chats, and his book, the AWS Administration Cookbook, is filled with great recipes to help you build and administer your cloud environment with AWS. Thank you, Rowan, for your work with AWS and educating the serverless community! ?</p>
<h3>Final Thoughts ?</h3>
<p>2020 is already off to quite an incredible start. I was interviewed on theCUBE, I’ve been accepted to speak at several ServerlessDays events, I’ve started recording a number of Serverless Chats episodes (with some awesome guests), and I’ve begun work on a bunch of serverless content and projects. And it’s only January 7th! Lots to come in 2020 that I’m excited to share with all of you, so stay tuned.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Cheers,<br /><em>Jeremy</em></p>
<p><strong>P.S.</strong> If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-71/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-71/</guid>
      <pubDate>Wed, 08 Jan 2020 00:38:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #70]]></title>
      <description><![CDATA[<h2>Happy (Serverless) New Year! ?</h2>
<p>Welcome to <strong>Issue #70</strong> of Off-by-none. Thanks for spending 2019 with us! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-69/">Last week</a>, we shared some interesting serverless reads for your holiday reading list. This week, we’ll look back at the most popular links from 2019, I’ll share some of my plans for 2020, and we’ve got some great posts from the serverless community as well.</p>
<h3>Looking back at 2019… ?</h3>
<p>A lot happened with serverless in 2019, so there were always plenty of stories, use cases, and tutorials to share. Last year I shared over <strong>2,500 links</strong> to amazing content produced by the serverless community. I’ve analyzed the data, and here are the most popular links for 2019.</p>
<p>We started off the year with Forrest Brazeal’s excellent <a href="https://www.trek10.com/blog/dynamodb-single-table-relational-modeling/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">from relational DB to single DynamoDB table: a step-by-step exploration</a> post. Then I showed you <a href="https://www.jeremydaly.com/how-to-use-sns-and-sqs-to-distribute-and-throttle-events/" target="_blank" rel="noopener">How To Use SNS and SQS to Distribute and Throttle Events</a>. Mikhail Shilkov gave us insights into running <a href="https://blog.binaris.com/serverless-at-scale/" target="_blank" rel="noopener">Serverless at Scale</a> and I shared a pattern for <a href="https://www.jeremydaly.com/throttling-third-party-api-calls-with-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Throttling Third-Party API calls with AWS Lambda</a>.</p>
<p>Berkeley published their <a href="https://www2.eecs.berkeley.edu/Pubs/TechRpts/2019/EECS-2019-3.pdf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">View on Serverless Computing</a> and said that “serverless computing will grow to dominate the future of cloud computing.” Then AWS released their <a href="https://aws.amazon.com/solutions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Solutions</a> site with vetted, technical reference implementations designed to help you solve common problems.<br />
Rob Gruhl released a two-part series about <a href="https://medium.com/tech-at-nordstrom/adventures-in-event-sourced-architecture-part-1-cc21d06187c7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Event-sourcing at Nordstrom</a> and Kyle Galbraith explained <a href="https://dev.to/kylegalbraith/how-a-monolith-architecture-can-be-transformed-into-serverless-8l4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">How a Monolith Architecture Can Be Transformed into Serverless</a>.</p>
<p>Ryan Jones outlined some <a href="https://medium.com/@serverlessguru/best-practices-for-serverless-development-d13061b3593e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Best Practices for Serverless Development</a>, The New Stack told us that <a href="https://thenewstack.io/static-site-revolution-top-websites-built-with-gatsby/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Static Sites with Gatsby</a> were all the rage, and Ben Kehoe said that <a href="https://read.acloud.guru/serverless-is-a-state-of-mind-717ef2088b42?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Serverless is a State of Mind</a>. Peter Swain shared <a href="https://hackernoon.com/the-aws-serverless-tools-you-cant-live-without-7cafd19be1e4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">the AWS Serverless Tools You Can’t Live Without</a>, AWS introduced <a href="https://aws.amazon.com/blogs/compute/enriching-event-driven-architectures-with-aws-event-fork-pipelines/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Event Fork Pipelines</a>, and Danilo Poccia gave us his <a href="https://sbd.danilop.net/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Serverless By Design</a> tool. While the <a href="https://medium.com/@TechMagic/serverless-vs-docker-what-to-choose-in-2019-80cb80f4b680?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Serverless versus Containers</a> debate raged on, Chris Munns told us that AWS <a href="https://twitter.com/chrismunns/status/1124369763273256960?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">shaved 1/3 off the p99 on the Lambda service’s overhead latency</a>.</p>
<p>The <a href="https://www.serverlesschats.com" target="_blank" rel="noopener">Serverless Chats</a> podcast was launched, Trek10 took a <a href="https://www.trek10.com/blog/pragmatic-enterprise-cicd/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">pragmatic approach</a> to Enterprise CI/CD on AWS, and I gave <a href="https://www.jeremydaly.com/aurora-serverless-data-api-a-first-look/" target="_blank" rel="noopener">an (updated) First Look</a> at the Aurora Serverless Data API (which is pretty sweet). Chris Munns attempted to share <a href="https://www.slideshare.net/AmazonWebServices/thirty-serverless-architectures-in-30-minutes-mad202-chicago-aws-summit?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">thirty serverless architectures in 30 minutes</a> and Forrest Brazeal shared <a href="https://dev.to/trek10inc/ci-cd-aws-and-serverless-5-tips-i-learned-the-hard-way-223p?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">5 tips he learned the hard way</a> about CI/CD, AWS, and Serverless. I offered up some advice on <a href="https://www.jeremydaly.com/how-to-switch-from-rdbms-to-dynamodb-in-20-easy-steps/" target="_blank" rel="noopener">how to switch from RDBMS to DynamoDB in 20 easy steps</a> and <a href="https://blog.pulumi.com/introducing-pulumi-crosswalk-for-aws-the-easiest-way-to-aws?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Pulumi announced Crosswalk for AWS</a>.</p>
<p>AWS announced EventBridge and told you how <a href="https://aws.amazon.com/blogs/apn/extending-saas-application-data-into-your-aws-environment-with-amazon-eventbridge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">extending SaaS Application Data into Your AWS Environment</a> will end the need for webhooks. Many people (including me) thought that it was a game changer. Jared Short thought it was <a href="https://www.trek10.com/blog/amazon-eventbridge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">the biggest thing since AWS Lambda itself</a>, and Paul Johnston said it <a href="https://medium.com/@PaulDJohnston/why-amazon-eventbridge-will-change-the-way-you-build-serverless-applications-647ea87436f6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">will change the way you build serverless applications</a>. Philipp Müns even shared some <a href="https://serverless.com/blog/eventbridge-use-cases-and-tutorial/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Use Cases and Examples</a> with us.</p>
<p>Trek10 gave us an <a href="https://trek10inc.github.io/aws-event-sources-wizard/" target="_blank" rel="noopener">AWS Event Source Wizard</a> tool, Justin Pirtle told us <a href="https://aws.amazon.com/blogs/architecture/ten-things-serverless-architects-should-know/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">10 Things Serverless Architects Should Know</a>, and Gojko Adzic shared a trick for <a href="https://serverless.pub/sar-layers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Publishing Lambda Layers using SAR</a>. AWS announced <a href="https://aws.amazon.com/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">improved VPC networking for AWS Lambda functions</a> just as Einar Egilsson complained that serverless was <a href="http://einaregilsson.com/serverless-15-percent-slower-and-eight-times-more-expensive/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">15% slower and 8x more expensive</a>.</p>
<p>AWS showed us how they <a href="https://aws.amazon.com/blogs/opensource/real-world-serverless-application/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">built a production service using serverless technologies</a>, and then Forrest Brazeal opined that there was <a href="https://www.trek10.com/blog/examining-aws-serverless-apps/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">no magic, just thorough execution</a>. I shared my <a href="https://www.jeremydaly.com/the-dynamic-composer-an-aws-serverless-pattern/" target="_blank" rel="noopener">Dynamic Composer pattern</a>, Paul Swail <a href="https://winterwindsoftware.com/dynamodb-modelling-single-vs-multi-table/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">compared multi and single table approaches to designing a DynamoDB data model</a>, and Ben Arena shared some thoughts on <a href="https://medium.com/@benarena/error-handling-in-aws-lambda-and-api-gateway-35bf38fa6e83?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Error Handling in AWS Lambda and API Gateway</a>.</p>
<p>The Dashbird launched a <a href="https://dashbird.io/blog/knowledge-base-launch/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Cloud Knowledge Base</a> and Toby Hede published some <a href="https://serverlesspatterns.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Serverless Patterns</a>. Serverless, Inc. covered the <a href="https://serverless.com/blog/november-2019-lambda-releases?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">New Lambda Features</a> from pre:Invent, Rafal Wilinski shared some <a href="https://servicefull.cloud/blog/dynamodb-single-table-design-lessons/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">lessons learned using Single-table design with DynamoDB and GraphQL in production</a>, and I released the <a href="https://github.com/jeremydaly/dynamodb-toolbox?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">DynamoDB Toolbox</a>.</p>
<p>There were plenty of re:Invent serverless announcement recaps (like <a href="https://serverless.com/blog/reinvent-2019-serverless-announcements?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">this one</a> and <a href="https://dashbird.io/blog/aws-reinvent-2019-serverless-announcements-recap/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">this one</a>), plus some good deep dives like Yan Cui’s <a href="https://lumigo.io/blog/the-end-of-the-cold-start-as-we-know-it/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">The end of cold starts as we know it</a>, Fernando Medina Corey’s post about <a href="https://serverless.com/blog/api-gateway-v2-http-apis?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">AWS API Gateway v2 for HTTP</a>, and Jared Short’s <a href="https://www.trek10.com/blog/lambda-destinations-what-we-learned-the-hard-way/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Lambda Destinations: What We Learned the Hard Way</a>.</p>
<p>Alex DeBrie put together an <a href="https://github.com/alexdebrie/awesome-dynamodb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Awesome DynamoDB</a> repo and I shared my <a href="https://www.jeremydaly.com/takeaways-from-dynamodb-deep-dive-advanced-design-patterns-dat403/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">takeaways from AWS re:Invent 2019’s Amazon DynamoDB Deep Dive: Advanced Design Patterns</a> talk by Rick Houlihan. We got an introduction to <a href="https://blog.bitsrc.io/serverless-microfrontends-in-aws-999450ed3795?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Serverless Microfrontends in AWS</a>, we saw the <a href="https://medium.com/aws-tutor/an-introduction-to-aws-cognito-pros-cons-and-use-cases-5268f17bcb6f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">the pros and cons and use cases of Cognito</a>, and we went <a href="https://www.youtube.com/watch?v=xmacMfbrG28&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Under the hood of AWS Lambda</a>.</p>
<p>I also put together a <a href="https://www.serverlesschats.com/29" target="_blank" rel="noopener">Best of 2019 episode</a> of Serverless Chats that shares some of my favorite moments.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/@rlenaha2/developing-a-serverless-twitter-streamer-and-performing-sentiment-analysis-58b096623a10?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Developing a Serverless Twitter Streamer and Performing Sentiment Analysis</a><br />
2020 is going to be the year of use cases for serverless, and I think ones surrounding data processing are going to be extremely important. This post by Ryan Lenahan will show you how easy it is to start adding sentiment analysis to your data streams.</p>
<p><a href="https://completecoding.io/the-ultimate-guide-to-backend-serverless-development/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">The Ultimate Guide to Backend Serverless Development</a><br />
Sam Williams has put together the Ultimate Guide to Backend Serverless Development. If you’re looking for a thorough primer, this is worth taking a look at.</p>
<p><a href="https://securityboulevard.com/2019/12/serverless-etls-easy-data-lake-transformations-using-aws-athena/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Serverless ETLs? Easy Data Lake Transformations using AWS Athena</a><br />
I’m a big fan of Athena and what it allows you to do with massive amounts of data. It takes some planning to get your data stored correctly, but it’s worth the exercise and is a lot cheaper than running something like Redshift.</p>
<p><a href="https://medium.com/@shouldroforion/re-invent-2019-a-very-late-recap-on-tech-highlights-conversations-observations-news-f0e55139e78a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">re:Invent 2019: A Very Late Recap on Tech Highlights, Conversations, Observations &amp; News</a><br />
This is a great post by Mark Fowler that echos many of my thoughts around re:Invent. His point about education is spot on. There is way too much to learn, and the average developer simply will not have the time. If companies want to get serious about the cloud, they’re going to need to find that time for their devs.</p>
<p><a href="https://blog.thundra.io/provisioned-concurrency-the-silver-bullet-to-aws-lambda-cold-starts?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Provisioned Concurrency: The Silver Bullet to AWS Lambda Cold Starts</a><br />
Sarjeel Yusuf has the lowdown on the new Provisioned Concurrency for Lambda. Chances are you’ll never need to use this feature, but it’s good to know that it’s there if you do.</p>
<p><a href="https://medium.com/@JalelTounsi/monolith-soa-microservices-or-serverless-43dd60e29756?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Monolith, SOA, Microservices, or Serverless?</a><br />
If you’re interested in the different architectural approaches, Jalel Tounsi does a good job explaining them… until he gets to serverless. While the information is mostly accurate, the idea of using “serverless” for only client-heavy apps or that long-running tasks is a problem, goes to show that serverless is evolving so fast that the content can’t keep up.</p>
<p><a href="https://medium.com/@michalyanko/how-many-ways-are-there-to-schedule-a-task-bd1cc7b57f28?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">How Many Ways are there to Schedule a Task?</a><br />
Michal Yanko’s post describes several ways to schedule tasks, and for some specialty cases, I’d generally agree. She even provides a nice little flow chart at the end to help you choose. However, for me, I default <em>everything</em> to a serverless solution first. If that doesn’t fit, then I’d look at other alternatives.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/mulligan/status/1210278934220136450?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener"><strong>Startup Guidance 2010s:</strong><br />
• Work 120 hours a week • Ignore profitability • Grow at all costs  • Bay Area or bust • Hustle or die trying<br /><strong>2020s:</strong><br />
• Work however much feels right • Focus on revenue • Build a sustainable company • Hire remote teams • Take care of yourself</a> <strong>~ Brenden Mulligan</strong><br />
I can’t express how much I love this tweet. There is no doubt that hard work and dedication are important factors to success, but there’s something to be said about slow and steady. Over my 20+ year career, I’ve found that focus and simplicity are the things that get you ahead. I just wish I had taken my own advice sooner.</p>
<p><a href="https://twitter.com/theburningmonk/status/1210299885272129536?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2370" target="_blank" rel="noopener">Hypothetically, if one is to write a book about #serverless architectures on #AWS in 2020, what kind of content would you be most interested in? A runthrough of service features? Architectural patterns? Mini-projects to follow along? Learnings from real-world architectures?</a> ~ <strong>Yan Cui</strong><br />
Hypothetically, I would be very interested in this book. My only concern with books on topics like “serverless”, however, is that what was true yesterday, may no longer be true today.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>January 24, 2020 –</strong> <a href="https://belfast.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Belfast</a></p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a></p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a></p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<h3>Final Thoughts (of the decade) ?</h3>
<p>This past year, I published <strong>52 issues</strong> of the <a href="https://offbynone.io/" target="_blank" rel="noopener">Off-by-none</a> newsletter, <strong>29 episodes</strong> of the <a href="https://www.serverlesschats.com/" target="_blank" rel="noopener">Serverless Chats</a> podcast, several <a href="https://github.com/jeremydaly" target="_blank" rel="noopener">open source projects</a>, and a bunch of <a href="https://www.jeremydaly.com/" target="_blank" rel="noopener">blog posts</a>. I also worked with a number of <a href="https://www.jeremydaly.com/consulting/" target="_blank" rel="noopener">consulting</a> clients to help them on their serverless journeys. It was incredibly busy, but also extremely rewarding. I was honored to be named an <a href="https://aws.amazon.com/developer/community/heroes/jeremy-daly/" target="_blank" rel="noopener">AWS Serverless Hero</a> and to be able to speak at several conferences around the world. Now the question is, how do I maximize my time and help the most people I can in 2020?</p>
<p>I’m excited to announce that I will be shifting the majority of my time and attention in 2020 to this newsletter and the Serverless Chats podcast, along with time dedicated to open source contributions, writing, and other forms of serverless content production. I’ll also be doing plenty of consulting, so if you need help with any of your serverless projects, please feel free to <a href="https://www.jeremydaly.com/about/" target="_blank" rel="noopener">contact me</a>. I’m ridiculously excited about all the opportunities this will bring, and I’m looking forward to sharing more with all of you in 2020.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>Happy New Year, ??<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-70/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-70/</guid>
      <pubDate>Tue, 31 Dec 2019 22:24:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #69]]></title>
      <description><![CDATA[<h2>Serverlessly celebrating the holidays… ❄️</h2>
<p>Welcome to <strong>Issue #69</strong> of Off-by-none. Thanks for being here, and happy holidays to all of you! ☮️</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-68/">Last week</a>, we looked at more great content and video recommendations from re:Invent. This week, we’ve got some interesting serverless reads for your holiday reading list, plus plenty of other great content from the serverless community.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://www.wsj.com/articles/cloud-and-serverless-computing-techs-unsung-heroes-11577109600?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Cloud and Serverless Computing: Tech’s Unsung Heroes</a><br />
Not really “news”, but serverless got a nice mention in the Wall Street Journal. “One important technology that is adding business value but hasn’t generated much buzz is serverless computing… Serverless computing can modernize applications while reducing the costs necessary to run and support them.”</p>
<p><a href="https://aws.amazon.com/blogs/compute/icymi-serverless-reinvent-recap-2019/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">ICYMI: Serverless re:Invent re:Cap 2019</a><br />
If you still have a re:Invent hangover and can’t remember all the amazing serverless announcements, here’s a great recap with links to plenty of serverless-related session videos.</p>
<p><a href="https://fauna.com/blog/announcing-udf-in-console?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">FaunaDB: Announcing UDF in Console</a><br />
FaunaDB is another product on my list of things to take a deeper look at. If you’ve had experience with it, I love to hear your feedback.</p>
<p><a href="https://blog.begin.com/deno-runtime-support-for-architect-805fcbaa82c3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Deno runtime support for Architect</a><br />
There is now experimental support for Deno in OpenJS Architect by way of a custom runtime for Lambda.</p>
<p><a href="https://twitter.com/lamb_ci/status/1209320654853541889?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">LambCI version 0.11.0 is out – Updated to Node.js 12</a><br />
Lots of updates in this new version, including upgrades to the Ruby/Python/PHP/Go/gcc versions, and it’s now available via the Serverless Application Repository (SAR).</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://codeburst.io/tech-stack-how-i-quickly-developed-and-launched-a-successful-product-as-a-solo-developer-f38975224f1e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Tech Stack: How I quickly developed and launched a successful product as a solo developer</a><br />
Thomas Thelliez created Pixelixe using Firebase and a few other managed services, all by himself. I like this story for several reasons, but perhaps the point that stands out the most, is how he leveraged the web browser to do most of the “compute” for him. With the rise of WASM, expect to see much more of this type of “client compute” in the future.</p>
<p><a href="https://medium.com/@rewundo/how-rewundo-minimizes-costs-by-using-the-serverless-architecture-1727cd6c1dfb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">How rewundo minimizes costs by using the Serverless Architecture</a><br />
The team at Rewundo is a self-funded, early-stage startup that is using serverless to iterate quickly and fail fast. This is a short piece, but captures the “serverless for startups” superpower quite well.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@jlaitio/generating-pdfs-with-aws-lambda-nodejs-10-runtimes-the-hard-and-easy-way-5316062dd253?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Generating PDFs with AWS Lambda NodeJS 10+ Runtimes</a><br />
Classic use case for generating reports, invoices, etc. Joonas Laitio presents you with the hard way AND the easy way to do this with AWS Lambda.</p>
<p><a href="https://codeburst.io/how-to-build-a-serverless-e-commerce-portal-48cdb6d49474?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">How to build a serverless e-commerce portal</a><br />
Want to take Amazon.com down a notch? Build your own serverless ecommerce portal on AWS. ?</p>
<p><a href="https://philmassie.github.io/post/20191220/serverless_ml/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Serverless ML</a><br />
Phil Massie has a very in-depth post that shows you how to get a simple weather prediction algorithm up and running on AWS Lambda. I’ve been meaning to try one of these Towards Data Science tutorials, but after re:Invent, I think I’m just going to spend more time learning all the new SageMaker stuff.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/brain-bites/monitoring-multi-aws-environments-serverless-application-9f0ccdca4a37?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Monitoring Serverless Applications Across Multiple AWS environments</a><br />
There are a number of solutions for log shipping, including rolling your own. Zamira Jaupaj details how to build a flexible system that can ingest logs from multiple accounts and send them to Elasticsearch for analytics.</p>
<p><a href="https://medium.com/@cresloga_68978/couple-of-minutes-serverless-microservices-communication-b5175c6fea67?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Couple of Minutes: Serverless Microservices Communication</a><br />
Loganathan Murugesan has a good post that explains the different types of microservice communications used in serverless applications. Take note of the cascading effect of chaining Lambda functions with synchronous calls.</p>
<p><a href="https://epsagon.com/blog/distributed-tracing-in-asynchronous-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Distributed Tracing in Asynchronous Applications</a><br />
Ran Ribenzaft explains the complexity involved with performing distributed tracing in modern async applications. There are a lot of “out-of-the-box” solutions out there, so implementing this yourself creates a lot of undifferentiated heavy lifting.</p>
<h3>Serverless Tutorials ?‍?</h3>
<p><a href="https://medium.com/@ca.ortiz.pacheco/connect-your-relational-database-mysql-using-lambda-api-gateway-and-the-serverless-framework-7e86ee25b564?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Connect your relational database (MySQL) using Lambda, API Gateway and the Serverless framework.</a><br />
This tutorial technically <em>works</em>, but I’m including it because it highlights one of my biggest frustrations with serverless. Things are moving really quickly, which is great from an innovation standpoint, but also makes it really difficult to stay current. There is now the Data API, RDS Proxy, Aurora Serverless, Secrets Manager, Parameter Store, Async/Await, and other new features that will make this example more robust, resilient and secure. This tutorial is from YESTERDAY, but (likely unbeknownst to the author) communicates outdated practices that should be avoided if possible. I don’t fault the author for writing this, as I believe sharing information and experience is extremely important. However, I’m not sure how we should address this as a community.</p>
<p><a href="https://medium.com/@yia333/how-to-ocr-text-in-pdf-and-image-files-with-amazon-textract-b9213bcc3995?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">How to OCR Text in PDF and Image Files with Amazon Textract</a><br />
Here’s a great tutorial by Yi Ai that shows you how to stitch together some services and build a serverless OCR text extractor.</p>
<p><a href="https://medium.com/@KowalskiTom/connecting-a-node-js-client-to-the-new-serverless-cassandra-offering-by-aws-a56c5f4a6d8d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Connecting a Node.js client to the new serverless Cassandra offering by AWS</a><br />
It would be nice if the AWS SDK handled all this for you, but for now, it looks like you need to jump through a few hoops to get the new Amazon Managed Apache Cassandra Service running with your apps.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://techobserver.in/2019/12/22/securing-serverless-platforms-will-be-most-challenging-for-network-security-in-2020-barracudas-klaus-gheri/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Securing serverless platforms will be most challenging for network security in 2020</a><br />
Klaus Gheri predicts that misconfigurations by humans and outdated third-party libraries will continue to cause security headaches with cloud deployments. The solution, he posits, is a shift towards cloud automation and cloud-based compliance posture automation.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://containerjournal.com/topics/container-ecosystems/ibm-cto-sees-smaller-container-platforms-ahead/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">IBM CTO Sees Smaller Container Platforms Ahead</a><br />
This is another “can you see the writing on the wall” piece by Mike Vizard. K8s is a beast, and the future (as seen by Chris Ferris of IBM), is reducing the size of containers and letting them run as close to bare metal as possible (hello Margaret, it’s me, Fargate). And as mentioned, this leads to the eventuality of pushing compute to the edge and then down to the devices connected to it.</p>
<p><a href="https://lumigo.io/blog/amazon-builders-library-in-focus-1-timeouts-retries-and-backoff-with-jitter/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">AWS Builders’ Library in focus #1: Timeouts, retries, and backoff with jitter</a><br />
The AWS Builder’s Library is an amazing resource for cloud architects that want to learn directly from the people who have been building massively scalable systems at Amazon for over a decade. Yan Cui has a new series that is helping to summarize the posts for you.</p>
<p><a href="https://dev.to/aaron_osborne_/managing-separately-stateful-and-stateless-serverless-stacks-4mia?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Managing separately stateful and stateless Serverless Stacks</a><br />
This is a great post by Aaron Osborne that articulates the current trend for building serverless microservices, separating your stateful and stateless components into separate stacks for easier management, better security, and more control over your environments. He also highlights the important point of being able to reuse existing tools as part of your serverless transformation. If you use Terraform to deploy other cloud resources, keep using that, but then use a more purposeful tool to deploy your serverless business logic.</p>
<p><a href="https://medium.com/lego-engineering/serverless-engineer-where-are-you-323ae727f4d2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Serverless Engineer, where are you?</a><br />
Sheen Brisals is convincing the naysayers to think serverless-first. He outlines six traits of a “serverless engineer”, and through a conversation with the status quo, gently argues why these will be the ones that matter most.</p>
<p><a href="https://jaxenter.com/2020-predictions-edge-serverless-166076.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">New toolkits and platforms will bring maturity to edge and serverless in 2020</a><br />
This time of year is always filled with prediction pieces, but this one by Kris Beevers resonates with me. Edge computing and its relationship with serverless is definitely something to pay attention to. He casually mentions WebAssembly, but I see this becoming a major piece of serverless edge systems (including browser-based compute). Lots of unanswered questions, but very promising.</p>
<p><a href="https://medium.com/serverless360/top-20-azure-serverless-blogs-of-2019-a1a889388ece?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Top 20 Azure Serverless Blogs of 2019</a><br />
Don’t forget that Microsoft has lots of serverless things too. Surya Venkat curated the top 20 Azure Serverless blogs from 2019 for you.</p>
<h3>For those who want an audio/visual experience ?</h3>
<p><a href="https://www.serverlesschats.com/28?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Episode #28: Amplifying Serverless with Nader Dabit</a><br />
In this episode, I chat with Nader Dabit about the AWS Amplify team’s philosophy around full-stack development, what the Amplify framework is empowering developers to do, and how new features like the Amplify Datastore are making it even easier to build full-scale serverless applications.</p>
<p><a href="https://newrelic.com/resources/webinar/reInvent-serverless-stocking-stuffers-webinar?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Serverless Stocking Stuffers: The 12 things you missed about serverless at this year’s re:Invent</a><br />
Adam Johnson and James Beswick discuss all the serverless goodness from re:Invent.</p>
<h3>What the teams at AWS have been working on ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/nosql-workbench-for-amazon-dynamodb-adds-support-for-aws-identity-and-access-management-iam-roles-and-temporary-security-credentials/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">NoSQL Workbench for Amazon DynamoDB adds support for AWS Identity and Access Management (IAM) roles and temporary security credentials</a><br />
This is a nice new feature that should make it easier for teams to work with DynamoDB tables from NoSQL Workbench.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/aws-waf-improves-logging-context-around-matched-rules/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">AWS WAF improves request logging for context around matched rules</a><br />
I can’t believe this feature didn’t exist before, but now you can review the area within a request deemed to be suspicious by SQLi or XSS detection rules. This will make analyzing false-positives and whitelisting a lot easier.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-textract-is-now-pci-dss-certified-and-extracts-even-more-data-from-tables-and-forms/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Amazon Textract is now PCI DSS certified and extracts even more data from tables and forms</a><br />
Probably not an overly exciting announcement for most, but this opens up a lot of use cases for any workflows that include highly sensitive data.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/neiman-marcus-tech/psm-serverless-configuration-management-c681e93db37a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">PSM: Serverless Configuration Management</a><br />
PSM, short for Parameter Store Manager, is a security enabled simple REST service to manage application configuration in AWS SSM Parameter Store.</p>
<p><a href="https://www.npmjs.com/package/failure-lambda?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">failure-lambda</a><br />
failure-lambda is a small Node module for injecting failure into AWS Lambda. It offers a simple failure injection wrapper for your Lambda handler where you then can choose to inject failure by setting the failureMode to latency, exception or statuscode.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/theburningmonk/status/1208542765971378176?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2369" target="_blank" rel="noopener">Here’s a timely reminder why you should use the lumigo-cli if you use AWS and Lambda. Reason #1 – it lets you powertune (i.e. find the best memory setting) functions with a single command #aws #awslambda #serverless</a> <strong>~ Yan Cui</strong><br />
Lots of good reasons to take a look at the <code>lumigo-cli</code> in this thread by Yan Cui.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>January 24, 2020 –</strong> <a href="https://belfast.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Belfast</a> (I’m speaking here!)</p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a> (And here!)</p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> (And also here!)</p>
<p><strong>April 6, 2020 –</strong> <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Rodric Rabbah</strong> (<a href="https://twitter.com/rabbah" target="_blank" rel="noopener">@rabbah</a>). Rodric is the co-founder and CTO of Nimbella, a company that aims to help developers overcome the challenges they face when adopting serverless. Rodric was also a founder and lead technical contributor to Apache OpenWhisk, an open-source, advanced, and production-ready serverless computing platform offered as a hosted service from IBM and Adobe. While he was at IBM, Rodric and his team laid the groundwork for what we know today as IBM Cloud Functions, and even operated the earliest internal offering of serverless within IBM. Thank you for all you’ve done to contribute to the serverless ecosystem, Rodric! ?</p>
<h3>Final Thoughts ?</h3>
<p>This week we announced that <a href="https://boston.serverlessdays.io" target="_blank" rel="noopener">ServerlessDays Boston</a> will be on Monday, April 6, 2020. Hopefully you can join us, <a href="https://www.papercall.io/serverlessboston2020" target="_blank" rel="noopener">give a talk</a>, or sponsor the event. Tickets go on sale January 1st.</p>
<p>Beside that, I will have more (hopefully exciting) news to share in the upcoming days as well. Until then, here’s wishing all of you safe and happy holidays. Thanks for being part of this amazing community.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Happy Holidays,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-69/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-69/</guid>
      <pubDate>Tue, 24 Dec 2019 19:03:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #68]]></title>
      <description><![CDATA[<h2>Sorry, we’re still talking about re:Invent… ?‍♂️</h2>
<p>Welcome to <strong>Issue #68</strong> of Off-by-none. Thanks for being here!</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-66/">Last week</a>, we looked at a few of the big serverless announcements from re:Invent. This week, we’ve got some more great content and video recommendations from re:Invent, plus some awesome stuff from the serverless community.</p>
<p>Let’s get right to it! ?</p>
<h3>Yup, there’s more stuff from re:Invent…</h3>
<p><a href="https://aws.amazon.com/events/events-content/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">AWS Events Content</a><br />
Didn’t get to go to all the sessions you wanted to at re:Invent? Well, you’re in luck, because hundreds of slide decks are now available on the AWS site. Most of the videos are available on <a href="https://www.youtube.com/user/AmazonWebServices" target="_blank" rel="noopener">YouTube</a> as well.</p>
<p><a href="https://www.youtube.com/watch?v=xmacMfbrG28&amp;feature=youtu.be?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">AWS re:Invent 2019: A serverless journey: AWS Lambda under the hood (SVS405)</a><br />
If you’re overwhelmed by the re:Invent session catalog and want some help choosing something to watch, I highly recommend taking a look at Holly Mesrobian and Marc Brooker’s presentation of AWS Lambda under the hood. Pay special attention to how Holly explains the error handling and retry mechanisms built into Lambda. Then architect your system to use them and let the cloud manage it for you.</p>
<p><a href="https://www.infoq.com/news/2019/12/aws-reinvent-2019/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Recap of AWS re:Invent 2019</a><br />
I’m sure you’re sick of reading re:Invent recaps, but this one by Richard Seroter gives a great overview of all the main announcements (along with links) and will leave you feeling like you didn’t miss anything (which you probably did).</p>
<p><a href="https://www.youtube.com/playlist?list=PLGyRwGktEFqfDNLX3di052k0YE-4WBZkN" target="_blank" rel="noopener">LaunchMas</a><br />
Marcia Villalba shares all her favorite serverless launches from re:Invent in this awesome series of videos.</p>
<p><a href="https://read.acloud.guru/aws-re-invent-2019-swag-review-177f8f7ce58e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">AWS re:Invent 2019 Swag Review</a><br />
And finally, the really important stuff from re:Invent… swag. I spent a grand total of about 3 hours in the expo hall and only grabbed a few shirts and some stickers. Nick Triantafillou, on the other hand, somehow managed to document the offerings of all 12 million vendors (give or take). If you need to give your marketing team some ideas, forward them this link.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://techcrunch.com/2019/12/12/atlassian-launches-new-serverless-cloud-development-platform/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Atlassian launches new serverless cloud development platform</a><br />
“Forge will empower developers to more easily build and run enterprise-ready cloud apps that integrate with Atlassian products.” Oh yeah, and it’s powered by AWS Lambda.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/flowingis/deploy-a-symfony-application-with-aws-lambda-in-depth-analysis-on-advanced-use-3ad271049b93?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Deploy a Symfony application with AWS Lambda: in-depth analysis on advanced use</a><br />
If you <em>really</em> want to run Symfony with AWS Lambda, then Alessandro Minoccheri shows you how to extend the basic application with more details on using the tmp folder, environment variables, and event triggers.</p>
<p><a href="https://medium.com/aws-tutor/an-introduction-to-aws-cognito-pros-cons-and-use-cases-5268f17bcb6f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">An Introduction to AWS Cognito</a><br />
This is a good summary of the pros and cons of AWS Cognito. As with most opinionated systems, the lack of control can be an issue, but the use cases (especially being able to provide authentication to other AWS resources) makes it a compelling choice for the right types of workloads.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://www.trek10.com/blog/lambda-destinations-what-we-learned-the-hard-way/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Lambda Destinations: What We Learned the Hard Way</a><br />
Jared Short and Forrest Brazeal spent some time banging on the new Lambda Destinations feature in AWS Lambda. There are some interesting complexities that you need to be aware of, and thanks to this post, now you will be.</p>
<p><a href="https://blog.thundra.io/is-it-possible-to-debug-lambdas-locally?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Is it possible to debug Lambdas locally?</a><br />
There seems to be a million ways to test, deploy, and manage your Lambda functions now. But even with all these tools, serverless development workflows still feel a bit clunky. Serkan Özal outlines a few different ways to structure code for local testing as well as explains how you can use cloud debugging for tracing more complex data flows.</p>
<p><a href="https://medium.com/montrose-software/tips-on-unit-testing-aws-lambdas-sns-sqs-communication-with-node-ec75c0a7e646?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Tips on unit testing AWS lambda’s SNS/SQS communication with Node</a><br />
Marek Krzynówek gives you some ideas for testing your asynchronous Lambda functions. If you read this article and think, “wow, this looks really complicated,” you’re not alone. Testing shouldn’t be this hard.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://medium.com/@mostafamoradian/microvm-another-level-of-abstraction-for-serverless-computing-5f106b030f15?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">microVM: Another Level of Abstraction for Serverless Computing</a><br />
When AWS released Firecracker as an open source project last year, I heard many rumblings that nobody would do anything with it besides AWS. Mostafa Moradian has built a project that makes it easier to work with directly. I’m not sure exactly what I would do with it, but I bet there are a few of you out there that will come up with something really interesting.</p>
<p><a href="https://medium.com/@ravi.aakula/aws-serverless-application-model-for-asp-net-core-apps-1ce03e0e389d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">AWS Serverless Application Model for ASP.Net Core Apps</a><br />
If you are looking to go serverless with your ASP.Net Core apps, Ravi Aakula has a full walkthrough for you.</p>
<p><a href="https://towardsdatascience.com/tensorflow-image-recognition-tutorial-using-serverless-architecture-node-js-69eb1a3ce110?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">TensorFlow Image Recognition Tutorial using Serverless Architecture</a><br />
Here’s another mind-bending machine learning tutorial from the Towards Data Science blog. This time, Raghav Prabhu uses a Convolutional Neural Network’s MobileNet model to perform image recognition with AWS Lambda. Yeah, I don’t know what that means either.</p>
<p><a href="https://medium.com/adobetech/serverless-graphql-on-adobe-i-o-runtime-e221d2a8e215?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Serverless GraphQL on Adobe I/O Runtime</a><br />
I’m a big fan of Adobe’s (and other SaaS platforms’) strategy around enabling ephemeral compute for their customers. Lots of interesting things can be done to enhance and optimize your workflows within a provider’s ecosystem. This article shows how they implement GraphQL with schema delegation on the I/O Runtime. Cool stuff.</p>
<p><a href="https://itnext.io/serverless-application-development-with-node-js-on-aws-platform-using-serverless-framework-63e79fcf9409?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Serverless application development with Node.js on AWS platform using Serverless framework</a><br />
It’s been a while since I’ve included a getting started tutorial, so here’s something for the newbies. Gökhan Olgun has a very detailed article that walks you through the basics of building out a serverless API with a DynamoDB backend. Couple of minor nits: don’t use <code>scan</code> and use the <code>DocumentClient</code> to marshall/unmarshall those hideous DynamoDB type mappings.</p>
<p><a href="https://dev.to/dvddpl/how-to-write-and-test-a-serverless-plugin-3152?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">How to write and test a serverless plugin</a><br />
Davide de Paolis has a helpful article that can get you writing your own Serverless Framework plugins in no time.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://devops.com/waging-a-winning-war-in-aws/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Waging a Winning WAR in AWS</a><br />
Ignoring the hard sell at the end, this article makes a pretty good case for doing an AWS Well-Architected Review on your critical workloads.</p>
<p><a href="https://portswigger.net/daily-swig/alexa-hack-my-serverless-technology-attacking-web-apps-with-voice-commands?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">‘Alexa, hack my serverless technology’ – attacking web apps with voice commands</a><br />
There’s no substitute for good coding practices, and certainly, serverless applications are no exception. Event-driven applications (like serverless) offer many more sources of user supplied data. While we may not have WAFs to protect us, implementing some good old fashioned data validation can go a long way.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/serverless-transformation/in-defence-of-serverless-the-term-764514653ea7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">In Defence of “Serverless” —the term</a><br />
Ben Ellerby defends the word <em>serverless</em> and attempts to define the boundaries of the term. Reminds me of my <a href="https://www.jeremydaly.com/stop-calling-everything-serverless/" target="_blank" rel="noopener">rant</a> from last year that ended up turning into a <a href="https://www.youtube.com/watch?v=vuWiB3vNiHc" target="_blank" rel="noopener">keynote</a>. In the words of Yogi Berra, “It’s like déjà vu all over again.”</p>
<p><a href="https://containerjournal.com/topics/container-ecosystems/aws-to-meld-containerd-and-fargate/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">AWS to Meld Containerd and Fargate</a><br />
If you’re curious why Fargate running on micro-vms is so amazing, this article by Mike Vizard will give you a good summary of Claire Liguori’s explanation from re:Invent.</p>
<p><a href="https://searchdatamanagement.techtarget.com/news/252475492/Amazon-Managed-Apache-Cassandra-Service-stokes-competition?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Amazon Managed Apache Cassandra Service stokes competition</a><br />
On the list of databases that could benefit from being fully-managed and serverless, Cassandra was definitely near the top of the list. This article gets some perspective from others in the Cassandra ecosystem, with some hoping that a rising tide raises all ships. Ultimately for AWS, this was an incredibly smart move, and I think taking away the pains of managing your own Cassandra ring is probably worth missing out on a few features.</p>
<h3>For the commuter… ?</h3>
<p><a href="https://www.serverlesschats.com/27?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Serverless Chats – Episode #27: ServerlessDays Going Global with Ant Stanley</a><br />
In this episode, I chat with Ant Stanley about the history of ServerlessDays, how the serverless-focused conference has grown over the last few years, and what the global organizing team is doing to make it easier for new organizers to host an event.</p>
<h3>What the teams at AWS have been working on… ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-cloudwatch-contributor-insights-for-amazon-dynamodb-preview-is-now-available-in-15-additional-aws-regions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Amazon CloudWatch Contributor Insights for Amazon DynamoDB (Preview) is now available in 15 additional AWS Regions</a><br />
This is a super cool tool, so it’s good to see it being offered in more regions.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-mq-introduces-throughput-optimized-message-brokers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Amazon MQ introduces throughput-optimized message brokers</a><br />
Amazon MQ now supports throughput-optimized message brokers, backed by Amazon Elastic Block Store. Throughput-optimized brokers reduce the number of required brokers and the cost of operating high-volume applications.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/aws-security-hub-integrates-with-amazon-detective/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">AWS Security Hub integrates with Amazon Detective</a><br />
AWS Security Hub now integrates with Amazon Detective (preview). Amazon Detective makes it easy to analyze, investigate, and quickly identify the root cause of security findings or suspicious activities.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/aws-cloudformation-updates-for-api-gateway-codepipeline-s3-iam-ecs-rds-es-lambda-and-more/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">AWS CloudFormation updates for Amazon API Gateway, AWS CodePipeline, Amazon S3, AWS IAM, Amazon ECS, Amazon RDS, Amazon ES, AWS Lambda and more</a><br />
AWS CloudFormation adds support for over two dozen new and updated CloudFormation resource types. These include the new HTTP API, Provisioned Concurrency, Lambda Destinations, and many more.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-sqs-now-supports-1-minute-cloudwatch-metrics/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Amazon SQS Now Supports 1-Minute CloudWatch Metrics</a><br />
Seems like a simple thing, but if you’ve ever had a queue backup, then you’ll welcome the added granularity.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/aws-codebuild-now-supports-cross-account-resource-sharing/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">AWS CodeBuild Now Supports Cross-Account Resource Sharing</a><br />
Need to take a closer look at this, but I’m hoping I can ditch the cross-account roles in a shared services account and trigger CodeBuild projects in target accounts from shared CodePipelines.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/cloudfront-detailed-logs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Amazon CloudFront now provides seven new data fields in access logs</a><br />
Ooh, I like the new <code>time-to-first-byte</code> metric.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/serverless-transformation/introducing-sls-dev-tools-improving-the-serverless-developer-experience-69161d49a0b6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2368" target="_blank" rel="noopener">Introducing sls-dev-tools</a><br />
This looks like a promising project from Ben Ellerby and the team over at Theodo. They say it is “Chrome Dev Tools for the Serverless World.”</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>December 20, 2019 – </strong><a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2019_1215-SRV.html?&amp;trk=el_a131L0000058gpPQAQ&amp;trkCampaign=December_2019_1215-SRV&amp;sc_channel=el&amp;sc_campaign=pac_Q4-2019_exlinks_PMM_OTT_12DGAB&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=NAMER&amp;sc_country=mult" target="_blank" rel="noopener">Using Relational Databases with AWS Lambda – Easy Connection Pooling (Webinar)</a></p>
<p><strong>January 24, 2020 –</strong> <a href="https://belfast.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Belfast</a> (I’m speaking here!)</p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a> (And here!)</p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a> (And also here!)</p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Adam Johnson</strong> (<a href="https://twitter.com/adjohn" target="_blank" rel="noopener">@adjohn</a>). Adam is currently the Principal Product Manager for Serverless at New Relic, but you might know him from his days at the helm of IOpipe, where he was co-founder and CEO. IOpipe helped developers and engineering teams get real-time visibility into the detailed behaviors of their serverless applications. Adam and the IOpipe team have since joined forces with New Relic, and I look forward to the innovations his new team will make to the serverless ecosystem. Thank you for helping to build great tools for serverless, Adam! ?</p>
<h3>Final Thoughts ?</h3>
<p>It is amazing how long it takes to get back to normal after re:Invent, but I think I’m finally there. This past week has been a whirlwind of great discussions and follow ups from re:Invent. Lots happening, so I should have a bunch of great stuff to announce soon (including the date of ServerlessDays Boston). 2020 looks like it’ll be a great year for serverless.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Until next week,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-68/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-68/</guid>
      <pubDate>Wed, 18 Dec 2019 04:21:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Serverless MySQL: v1.5.2 released]]></title>
      <description><![CDATA[<h3>Minor bug fix and security patch</h3>
<p>Added a retry for another error that is resetting connections (this should fix the issues in #57 and #62) as well as some minor documentation and dependency updates.</p>
<p><strong>Full Release Notes:</strong> <a href="https://github.com/jeremydaly/serverless-mysql/releases/tag/v1.5.2" target="_blank" rel="noopener">https://github.com/jeremydaly/serverless-mysql/releases/tag/v1.5.2</a></p>
<p><strong>NPM:</strong> <a href="https://www.npmjs.com/package/serverless-mysql">https://www.npmjs.com/package/serverless-mysql</a><br /><strong>GitHub: </strong><a href="https://github.com/jeremydaly/serverless-mysql">https://github.com/jeremydaly/serverless-mysql</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c3">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c2">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c1" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<p>Learn more about <a href="https://www.jeremydaly.com/projects/serverless-mysql/"><strong>Serverless MySQL</strong></a> or check out the other <a href="https://www.jeremydaly.com/current-projects"><strong>projects</strong></a> I'm working on.</p>]]></description>
      <link>https://www.jeremydaly.com/serverless-mysql-v1-5-2-released/</link>
      <guid>https://www.jeremydaly.com/serverless-mysql-v1-5-2-released/</guid>
      <pubDate>Sat, 14 Dec 2019 22:35:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Data API Client: v1.0.1 Released]]></title>
      <description><![CDATA[<p>There was an issue with batch records via standard queries versus those wrapped in transactions. v1.0.1 includes a patch that checks the arguments and conditionally flattens the array for proper handling in each context.</p>
<p>Your feedback is greatly appreciated, so please submit feature requests and <a href="https://github.com/jeremydaly/data-api-client/issues" target="_blank" rel="noopener">issues</a>. If you want to contribute, even better! Pull requests are always welcome.</p>
<p><strong>Full Release Notes:</strong> <a href="https://github.com/jeremydaly/data-api-client/releases/tag/v1.0.1" target="_blank" rel="noopener">https://github.com/jeremydaly/data-api-client/releases/tag/v1.0.1</a></p>
<p><strong>NPM: </strong><a href="https://www.npmjs.com/package/data-api-client" target="_blank" rel="noopener">https://www.npmjs.com/package/data-api-client</a><strong><br />
GitHub: </strong><a href="https://github.com/jeremydaly/data-api-client" target="_blank" rel="noopener">https://github.com/jeremydaly/data-api-client</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c3">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c2">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c1" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<p>Learn more about <a href="https://www.jeremydaly.com/projects/data-api-client/"><strong>Data API Client</strong></a> or check out the other <a href="https://www.jeremydaly.com/current-projects"><strong>projects</strong></a> I'm working on.</p>]]></description>
      <link>https://www.jeremydaly.com/data-api-client-v1-0-1-released/</link>
      <guid>https://www.jeremydaly.com/data-api-client-v1-0-1-released/</guid>
      <pubDate>Thu, 12 Dec 2019 17:54:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #67]]></title>
      <description><![CDATA[<h2>re:Covering from re:Invent… ?</h2>
<p>Welcome to <strong>Issue #67</strong> of Off-by-none. I’m so glad you joined us.</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-66/">Last week</a>, I was at AWS re:Invent in Las Vegas. It was a five day assault on the senses, but loaded with great announcements and amazing people! In this issue, we’ll look at a few of the big serverless announcements from the big show, and as always, share plenty of content from the serverless community.</p>
<p>Let’s get to it! ?</p>
<h3>When you want someone to catch you up on everything that happened at re:Invent 2019… ?</h3>
<p><a href="https://aws.amazon.com/new/reinvent/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Explore all the new features and services announced at AWS re:Invent 2019</a><br />
Who better to get all the info from re:Invent from than AWS themselves? Every year AWS puts together a site that wraps up all the major announcements and even makes them searchable. So if you want a source of truth, here it is.</p>
<p><a href="https://www.jeremydaly.com/takeaways-from-dynamodb-deep-dive-advanced-design-patterns-dat403/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Takeaways from AWS re:Invent 2019’s Amazon DynamoDB Deep Dive: Advanced Design Patterns (DAT403)</a><br />
Rick Houlihan delivered another mind-bending edition of his Advanced Design Patterns for DynamoDB talk at re:Invent this year. I had some thoughts on it and provided 12 key takeaways.</p>
<p><a href="https://dashbird.io/blog/aws-reinvent-2019-serverless-announcements-recap/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">AWS re:Invent 2019 – Serverless Announcements Recap</a><br />
Renato Byrro covers all the major serverless announcements in this post. It also includes some links to more detailed posts about some of the items.</p>
<p><a href="https://serverless.com/blog/amazon-rds-proxy?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Amazon RDS Proxy makes it easier to use SQL in Serverless</a><br />
Alex DeBrie from Serverless, Inc. shares why the Amazon RDS Proxy is an important improvement for lots of serverless users. He argues (rightfully so, IMO) that RDBMS starts to lose a bit of the serverless feel, and maybe DynamoDB is still a better first choice.</p>
<p><a href="https://serverless.com/blog/api-gateway-v2-http-apis?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">re:Invent 2019 – AWS API Gateway v2 for HTTP</a><br />
This was another release that had several people talking. Fernando Medina Corey explains what is changing with resources, authorizers and CORS.</p>
<h3>When you really want Provisioned Concurrency… ⏱</h3>
<p>There was a ton of buzz around the release of Provisioned Concurrency. So much so, that I think everyone wrote something about it. Yan Cui’s post, <a href="https://lumigo.io/blog/the-end-of-the-cold-start-as-we-know-it/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">It’s the end of the cold start as we know it</a>, is definitely my favorite. There were several others as well, all with varying perspectives:</p>
<ul><li><a href="https://epsagon.com/blog/development/control-your-aws-lambda-with-provisioned-concurrency/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Control your AWS Lambda with Provisioned Concurrency</a></li>
<li><a href="https://blog.thundra.io/provisioned-concurrency-the-last-cold-start-blender?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Provisioned Concurrency: The Last Cold Start Bender!</a></li>
<li><a href="https://serverless.com/blog/aws-lambda-provisioned-concurrency?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Provisioned Concurrency: What it is and how to use it with the Serverless Framework</a></li>
<li><a href="https://www.trek10.com/blog/provisioned-lambda-concurrency/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">The hidden cost of Lambda provisioned concurrency pricing</a></li>
<li><a href="https://devclass.com/2019/12/04/aws-warms-lambda-devs-hearts-promises-end-to-cold-starts/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">AWS warms Lambda devs’ hearts, promises end to cold starts</a></li>
<li><a href="https://dashbird.io/blog/aws-lambda-provisioned-concurrency/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Solve The Cold Start Issue with Lambda Provisioned Concurrency</a></li>
</ul><p>Thinking outside the box, as he tends to do, Michael Hart figured out some insane trickery to use provisioned currency and the 10 seconds of free init time to save you a ton of money. Even though this works, Michael suggests not using it for production. It’s worth the read: <a href="https://medium.com/@hichaelmart/shave-99-93-off-your-lambda-bill-with-this-one-weird-trick-33c0acebb2ea?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Shave 99.93% off your Lambda bill with this one weird trick</a>.</p>
<h3>Serverless News &amp; Announcements ?</h3>
<p><a href="https://blog.webiny.com/launching-webiny-serverless-form-builder-eac50948174f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Launching Webiny Serverless Form Builder</a><br />
The team at Webiny continues to add improvements to their platform. The latest enhancement brings us a serverless form builder that supports everything from simple contact forms, to more complex lead generation forms.</p>
<p><a href="https://azure.microsoft.com/en-us/updates/announcing-go-live-release-for-azure-functions-v3/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Azure Functions 3.0 go-live release is now available</a><br />
The go-live release for Azure Functions 3.0 is now available, so it’s now possible to build and deploy 3.0 functions in production. Functions 3.0 brings new capabilities including the ability to target .NET Core 3.1 and Node 12.</p>
<p><a href="https://medium.com/@richardyoung00/browser-functions-a-new-serverless-platform-using-web-browser-execution-engines-31d2293e650b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Browser Functions: A new serverless platform using Web Browser execution engines</a><br />
This is pretty cool. The project still looks a bit early, and there are several limitations, but the concept is very interesting.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@childnick/halving-our-aws-lambda-bill-with-parallel-processing-in-python-822e31c706a3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Halving our AWS Lambda bill with parallel processing in Python</a><br />
There are a lot of use cases like this where sometimes little tricks can end up saving a lot of time and money. In a perfect world, these Lambda functions could just be run as separate parallel processes, but given the current billing model, I think “hacks” like this work just fine.</p>
<p><a href="https://medium.com/comic-relief/bringing-our-comic-relief-values-to-life-with-iot-and-serverless-782fb5f9ae5e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Bringing our Comic Relief Values to life with IoT, Amplify and Serverless</a><br />
I love the idea of this use case. Anything that gives you a chance to play with IoT toys and serverless has got to be worth it, right? I’m sure there are ways to adapt this use case using just the buttons, but with more sophisticate IoT devices, the possibilities are endless.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://blog.bitsrc.io/serverless-microfrontends-in-aws-999450ed3795?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Serverless Microfrontends in AWS</a><br />
I keep hearing more and more about “microfrontends”, and in this article, Ashan Fernando specifies some ways to host them using serverless AWS technology.</p>
<p><a href="https://medium.com/@chuqiaoshen/fine-tuning-your-lambdas-b6a3df526203?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Fine-tuning your Lambdas</a><br />
Catherine Shen has a great post that outlines some ways to troubleshoot and reduce the iterator age of your Kinesis streams.</p>
<p><a href="https://blog.thundra.io/migration-to-serverless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Migration to Serverless – microservices use case</a><br />
Serkan Özal walks you through a hypothetical migration to serverless. I always like to see how people envision serverless representations of microservices.</p>
<p><a href="https://github.com/alexdebrie/awesome-dynamodb?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Awesome DynamoDB ?</a><br />
Interested in all things DynamoDB? Alex DeBrie keeps trying to one up me and win Rick Houlihan’s favor. This time he created an Awesome DynamoDB repo on GitHub with links to all the greatest DynamoDB resources. There are a lot of very useful links in here.</p>
<p><a href="https://medium.com/@jgilbert001/how-do-you-test-serverless-functions-3403fdca3071?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">How Do You Test Serverless Functions?</a><br />
Lots of things stay the same when testing serverless applications, but it’s also possible to do some pretty amazing things. John Gilbert outlines the tools and processes he uses to test his serverless applications.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://medium.com/zoisays/microservices-with-serverless-aws-lambda-layers-a-walkthrough-b85ed35e0229?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Microservices with Serverless &amp; AWS Lambda Layers</a><br />
Markus Wagner shows you how to build a microservice using Lambda Layers to store and share your dependencies. I think Lambda Layers work really well within a single microservice, but not so well when you start sharing them across microservices. This is mainly due to the way they’re versioned.</p>
<p><a href="https://medium.com/@tmaximini/building-a-serverless-graphql-api-with-node-js-aws-lambda-and-apollo-b5796ab24727?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Building a serverless GraphQL API with Node.js, AWS Lambda and Apollo</a><br />
Not everyone wants to use AppSync (although you should definitely look at it if you haven’t yet), so sometimes building your own serverless Apollo server makes sense. Thomas Maximini gives you all the details in his post.</p>
<p><a href="https://medium.com/@zdenulo/using-system-packages-and-custom-binaries-in-google-cloud-functions-f2df7be926a3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Using system packages and custom binaries in Google Cloud Functions.</a><br />
Google Cloud Functions and Lambda share some similarities, one of them being that they are just running on top of an OS that can execute custom binaries and system packages. We’ve seen a lot of posts about this for Lambda, but this is the first one that caught my eye on GCP.</p>
<p><a href="https://medium.com/@ratulsaha/how-to-model-amazon-dynamodb-databases-with-nosql-workbench-bdb1bdbb6fcc?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">How to model Amazon DynamoDB databases with NoSQL Workbench</a><br />
Ratul Saha uses the example given in Alex DeBrie’s excellent talk from re:Invent to show us how to use the new NoSQL Workbench for DynamoDB.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://medium.com/@timawagner/not-using-serverless-yet-why-you-need-to-care-about-re-invent-2019s-serverless-launches-c26fa0263d77?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Why Container Devs Need to Care about re:Invent 2019’s Serverless Launches</a><br />
Strap in for Tim Wagner’s take on what all the serverless launches at re:Invent mean, why they’re important to the adoption of serverless, and what was missing.</p>
<p><a href="https://redmonk.com/sogrady/2019/12/06/reinvent-2019/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Five Things to Take Away From re:Invent 2019</a><br />
Nothing really about serverless in here, but an important read nonetheless.</p>
<p><a href="https://medium.com/wasm/the-m-shape-of-software-bddcb369c0f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">The M-shaped software</a><br />
If you haven’t been paying attention to Web Assembly, now might be the time. Michael Yuan explains why WASM could be the middleware that connects software with specialized hardware.</p>
<p><a href="https://medium.com/@worldsoup/what-ive-learned-in-4-years-at-aws-re-invent-89faf8ed5895?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">What I’ve Learned in 4 years at AWS re:Invent</a><br />
Thinking about going to re:Invent next year? This piece from Nick Gottlieb sums up re:Invent perfectly, so it might convince you, or change your mind.</p>
<p><a href="https://github.com/stojanovic/random/issues/1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Lambda Destinations for synchronous invocations · Issue #1 · stojanovic/random</a><br />
Slobodan Stojanovic put together a compelling argument for letting Lambda Destinations handle “synchronous” invocations as well. Lots of interesting use cases in here with some insights as to how they solve them now.</p>
<p><a href="https://www.stackery.io/blog/human-side-serverless/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Reflecting on re:Invent — The Human Side of Serverless</a><br />
If you’ve never met Farrah Campbell from Stackery, make a point of it. She’s a wonderful human being that is doing a world of good for the serverless community. She also makes a great co-host for serverless parties at re:Invent. ?</p>
<h3>When you prefer a multimedia experience… ?</h3>
<p><a href="https://www.serverlesschats.com/26?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Serverless Chats – Episode #26: re:Inventing Serverless with Chris Munns</a><br />
In this episode, I chat with Chris Munns about all the new serverless product releases from AWS re:Invent 2019, the ongoing feature improvements AWS continues to make, and how his team plans to bring serverless to everyone in 2020.</p>
<p><a href="https://channel9.msdn.com/Shows/The-Cloud-Native-Show/Where-Does-Serverless-Fit-in-Cloud-Native?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Where Does Serverless Fit in Cloud Native?</a><br />
Shayne Boyer talks with Jeff Hollan about how serverless fits into this whole cloud native thing. There is a healthy mix of skepticism from Shayne, but Jeff does a great job laying out the benefits and discussing the tools that are available through Azure to make it easier.</p>
<h3>When the teams at AWS can finally get some sleep… ?</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-api-gateway-offers-faster-cheaper-simpler-apis-using-http-apis-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Amazon API Gateway Offers Faster, Cheaper, Simpler APIs Using HTTP APIs (Preview)</a><br />
HTTP APIs are BIG! Besides the massive cost reduction, the latency is much lower. There are limitations with this new product, but I think we’ll see those eased over time. And for the majority of use cases, this will work just fine.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/aws-lambda-announces-provisioned-concurrency/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">AWS Lambda announces Provisioned Concurrency</a><br />
Here is another big one. I think it’s a stop gap, trying to provide counter-arguments to the serverless naysayers, but there will be use cases for this that could open up a whole new set of low-latency, synchronous applications.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-rds-proxy-available-in-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Introducing Amazon RDS Proxy (Preview)</a><br />
I want my, I want my, I want MySQL. I still love RDBMS, as do millions of developers around the world. So the ability to use connection pooling from Lambda functions (so we don’t flood our databases with unnecessary connections) is a game-changer. Expect to see lots of other RDS-compliant database engines working with this soon.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-aws-step-functions-express-workflows/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Introducing AWS Step Functions Express Workflows</a><br />
I’ve shied away from Step Functions for many use cases simply because of the cost and throughput limitations. Express Workflows changes that (with some caveats, of course), making orchestration, function composition, and other state machine capabilities much more accessible.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-amplify-datastore/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Introducing the Amplify DataStore, a persistent storage engine that synchronizes data between apps and the cloud</a><br />
A queryable, on-device data store for web, IoT, and mobile developers using iOS, Android, and React Native. Plus it has some amazingly smart cloud synching.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-amazon-sagemaker-studio-the-first-integrated-development-environment-ide-for-machine-learning/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Introducing Amazon SageMaker Studio – the first integrated development environment (IDE) for machine learning</a><br />
If you’ve been puzzled by machine learning, this new SageMaker Studio could be your saving grace. I haven’t tried it yet, but the docs make it look incredibly easy. Just be careful not to accidentally build Skynet with it. ?</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/aws-announces-ultrawarm-preview-for-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">AWS announces UltraWarm (preview) for Amazon Elasticsearch Service</a><br />
It’s still not serverless Elasticsearch, but it is a big improvement to the daunting costs that was the typical hot storage. The analysis capabilities on ES are great, so it might be worth taking another look if you dismissed it in the past.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-amazon-builders-library/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Introducing The Amazon Builders’ Library</a><br />
No excuses. Drop everything that you are doing and go read these documents. Your future self will thank you.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/aws-launches-fargate-spot-save-up-to-70-for-fault-tolerant-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">AWS launches Fargate Spot, save up to 70% for fault tolerant applications</a><br />
This might be as important an announcement as spot instances were for EC2. You need to orchestrate them with ECS, but for the right kinds of workloads, this could be very, very useful.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/dynamodb/status/1203370578356264961?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">Here’s a YouTube playlist of DynamoDB-related sessions from AWS re:Invent 2019… And we’re waiting for a few more videos to be uploaded.</a> <strong>~ @DynamoDB</strong><br />
There were a bunch of great session on DynamoDB at re:Invent this year. If you love DynamoDB (or want to), this YouTube playlist will give you a ton of insight.</p>
<p><a href="https://twitter.com/dabit3/status/1203351752046567425?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2367" target="_blank" rel="noopener">If you’re looking to get started with #serverless, I’ve put together a body of work over the past year that starts with functions &amp; expands much deeper, going into philosophy &amp; building serverless apps leveraging things like auth, db, &amp; storage. Check out these resources…</a> <strong>~Nader Dabit</strong><br />
Nader Dabit had a good thread that links to all the resources he’s worked on over the years about serverless. Lots of really great stuff in here.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>December 14, 2019 –</strong> <a href="https://fukuoka.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Fukuoka Japan</a></p>
<p><strong>January 24, 2020 –</strong> <a href="https://belfast.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Belfast</a></p>
<p><strong>February 13, 2020 –</strong> <a href="https://cardiff.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Cardiff</a></p>
<p><strong>February 21, 2020 –</strong> <a href="https://rome.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Rome</a></p>
<p><strong>February 27, 2020 –</strong> <a href="https://serverlessnashville.io/" target="_blank" rel="noopener">ServerlessDays Nashville</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Eric Hammond</strong> (<a href="https://twitter.com/esh" target="_blank" rel="noopener">@esh</a>). Eric is one of the OG AWS Serverless Heroes and a legend among early AWS adopters with his work on community AMIs and the creation of user-data scripts for EC2. Way back when serverless first became a thing, Eric started writing and sharing serverless tips and insights via his <a href="https://alestic.com/" target="_blank" rel="noopener">blog</a>, <a href="https://github.com/alestic" target="_blank" rel="noopener">GitHub</a> and Twitter. Five years later, he’s still front and center at all the most important serverless re:Invent talks, live tweeting and sharing his knowledge with the community. But the thing I really love about Eric’s work, is just how thoughtful his posts and Tweets are. He constantly shares other people’s work and builds people up. Thank you for all you do, Eric. We need more of this in the world!?</p>
<h3>Final Thoughts ?</h3>
<p>This was only my second re:Invent, but I somehow ended up being even more exhausted this year! I met with a number of great AWS teams and am now even more excited about the future of serverless. EventBridge is becoming an absolute staple, Lambda Destinations is moving us closer to the promise of “only writing business logic”, and new products, like RDS Proxy, Express Workflows, and HTTP APIs, are starting to open up a whole new world of possibilities. There is a lot of complexity being added with all this, but 2020 could be the breakout year for better abstractions.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-67/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-67/</guid>
      <pubDate>Wed, 11 Dec 2019 03:03:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Takeaways from AWS re:Invent 2019’s Amazon DynamoDB Deep Dive: Advanced Design Patterns (DAT403)]]></title>
      <description><![CDATA[<div class="post-thumbnail"><img width="1200" height="599" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/fourth-dimensionally-1200x599.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/fourth-dimensionally-1200x599.png 1200w, https://www.jeremydaly.com/wp-content/uploads/2019/12/fourth-dimensionally-300x150.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/fourth-dimensionally-768x383.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/fourth-dimensionally-1024x511.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2019/12/fourth-dimensionally.png 1300w" /></div>
<p><strong>AWS re:Invent 2019</strong> is a wrap, but now the real work begins! There are hundreds of session videos <a href="https://www.youtube.com/results?search_query=%22aws+re%3Ainvent+2019%22" target="_blank" rel="noopener">now available</a> on YouTube. So when you have a few days (or weeks) of downtime, you can dig in to these amazing talks and learn about whatever AWS topics you fancy.</p>
<p>I was only able to attend a few talks this year, but one that I knew I couldn’t miss in person, was Rick Houlihan’s <a href="https://www.youtube.com/watch?v=6yqfmXiZTlM" target="_blank" rel="noopener">DAT403: Amazon DynamoDB deep dive: Advanced design patterns</a>. At the last two re:Invents, he gave similar talks that explored how to use single-table designs in DynamoDB… and they blew my mind! ? These videos were so mind-bending, that they inspired me to immerse myself in NoSQL design and write my <a href="https://www.jeremydaly.com/how-to-switch-from-rdbms-to-dynamodb-in-20-easy-steps/">How to switch from RDBMS to DynamoDB in 20 easy steps</a> post. I was hoping to have a similar experience with this year’s edition, and <em><strong>I WAS NOT DISAPPOINTED</strong></em>.</p>
<p>As expected, it was a 60 minute firehose of #NoSQL knowledge bombs. There was <strong>A LOT</strong> to take away from this, so after the session, I wrote a <a href="https://twitter.com/jeremy_daly/status/1201685262432006145" target="_blank" rel="noopener">Twitter thread</a> that included some really interesting lessons that stuck out to me. The video has been posted, so definitely watch it (maybe like 10 times ?‍♂️), and use it to get started (or continue on) your DynamoDB journey.</p>
<p>Here is the video, as well as my <strong>12 key takeaways</strong> from the talk. Enjoy!  </p>
<p><iframe width="840" height="473" src="https://www.youtube.com/embed/6yqfmXiZTlM?feature=oembed" frameborder="0" allowfullscreen="allowfullscreen">[embedded content]</iframe></p>
<h2>12 Key Takeaways</h2>
<div>
<h3>1. DynamoDB performance gets BETTER with scale</h3>
<p>Yup, you read that correctly, the busier it gets, the faster it gets. This is because, eventually, every event router in the fleet caches your information and doesn’t need to look up where your storage nodes are. ?</p>
<figure id="attachment_2383" class="wp-caption aligncenter c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-performance-at-any-scale.png"><img class="size-full wp-image-2383" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-performance-at-any-scale.png" alt="" width="1168" height="659" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-performance-at-any-scale.png 1168w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-performance-at-any-scale-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-performance-at-any-scale-768x433.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-performance-at-any-scale-1024x578.png 1024w" /></a>
<figcaption class="wp-caption-text">Performance at any scale – as the request volume increases, the latency goes down</figcaption></figure><h3>2. Big documents are a bad idea!</h3>
<p>It’s better to split data into multiple items that (if possible) are less than 1 WCU. This will be a lot cheaper and cost you less to read and write items. You can join the data with a single query on the partition key.</p>
<p>Rick <a href="https://twitter.com/houlihan_rick/status/1201979611359268864" target="_blank" rel="noopener">clarified</a> this statement for me on Twitter by adding, <em>“I prefer to say keep items as small as possible by structuring to contain only data that is relevant when they are accessed, e.g. don’t store immutable data in the same item as data that changes frequently. Use two items sharing a PK and write to one, query the PK to read both.”</em></p>
<figure id="attachment_2379" class="wp-caption aligncenter c2"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-indexing-efficiently-in-nosql.png"><img class="size-full wp-image-2379" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-indexing-efficiently-in-nosql.png" alt="" width="1166" height="657" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-indexing-efficiently-in-nosql.png 1166w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-indexing-efficiently-in-nosql-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-indexing-efficiently-in-nosql-768x433.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-indexing-efficiently-in-nosql-1024x577.png 1024w" /></a>
<figcaption class="wp-caption-text">Indexing efficiently in NoSQL – big documents require heavy reads and writes</figcaption></figure><h3>3. You don’t want to denormalize highly mutable data</h3>
<p>Data that is likely to change often should probably be referenced, which can then be retrieved with a separate query (when necessary). Immutable data (like DOB, name, email, etc.) can be denormalized for optimizing data shapes.</p>
<figure id="attachment_2380" class="wp-caption aligncenter c2"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-modeled-joins-in-nosql.png"><img class="size-full wp-image-2380" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-modeled-joins-in-nosql.png" alt="" width="1166" height="651" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-modeled-joins-in-nosql.png 1166w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-modeled-joins-in-nosql-300x167.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-modeled-joins-in-nosql-768x429.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-modeled-joins-in-nosql-1024x572.png 1024w" /></a>
<figcaption class="wp-caption-text">Modeled joins in NoSQL – an inverted index on PK/SK lets you query by actor name</figcaption></figure><h3>4. Don’t use auto-generated primary keys as partitionKeys if they are not used by your primary access pattern</h3>
<p>If your application doesn’t use those ids directly (meaning you’re using them just as a reference id), then you are creating a “dead index.” This will require the creation of additional GSIs just to index meaningful references (like email or username). Forget third-normal form and other relational patterns.</p>
<h3>5. Avoid running aggregation queries, because they don’t scale</h3>
<p>Use DynamoDB streams to process data and write aggregations back to your DynamoDB table and/or other services that are better at handling those types of access patterns. Lambda functions make great decoupled, asynchronous stored procedures that can process data changes without affecting database performance.</p>
<figure id="attachment_2384" class="wp-caption aligncenter c2"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-serverless-and-event-driven-architecture.png"><img class="size-full wp-image-2384" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-serverless-and-event-driven-architecture.png" alt="" width="1166" height="658" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-serverless-and-event-driven-architecture.png 1166w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-serverless-and-event-driven-architecture-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-serverless-and-event-driven-architecture-768x433.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-serverless-and-event-driven-architecture-1024x578.png 1024w" /></a>
<figcaption class="wp-caption-text">Serverless &amp; event-driven architecture – DynamoDB streams + Lambda functions = decoupled stored procedures</figcaption></figure><h3>6. Build idempotency into your DynamoDB stream processors</h3>
<p>DynamoDB streams <em><strong>guarantee</strong></em> “at-least-once” delivery, which means your Lambda <em>could</em> receive the same event twice. Plan for that by building idempotency into your Lambda functions or downstream services.</p>
<h3>7. When you need to add a new access pattern, “You don’t necessarily have to remodel everything and throw the baby out with the bathwater.”</h3>
<p>This was the first time I’ve ever heard Rick say that there <em>could</em> be some flexibility with your NoSQL single-table designs. If you need to add a new access pattern, or change an existing one, Rick suggested that you run an ETL task to decorate existing items or change some values. Maybe add a new GSI if necessary.</p>
<h3>8. When possible, push certain logic down to the client</h3>
<p>Rather than filtering out old versions or calculating availability by diff’ing existing items, let the client do that math instead of your application layer. #RickProTip</p>
<h3>9. Use write sharding to store large indexes with low cardinality</h3>
<p>Rick gave the example of languishing support tickets. Write these to multiple partitions on a GSI (using some hashing) and then use a once-a-day look up to decorate other items. Parallelization is an added benefit when you are processing these records.</p>
<h3>10. Use an attribute versioning pattern to store deltas for large items with minimal changes between mutations</h3>
<p>Don’t duplicate a massive item every time some small part changes. Instead, store each attribute as an item with the same partitionKey. This allows you to optimize writes to small records versus having to rewrite the entire document. (see takeaway #2)</p>
<figure id="attachment_2382" class="wp-caption aligncenter c3"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-optimized-for-writes.png"><img class="size-full wp-image-2382" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-optimized-for-writes.png" alt="" width="1165" height="657" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-optimized-for-writes.png 1165w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-optimized-for-writes-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-optimized-for-writes-768x433.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-optimized-for-writes-1024x577.png 1024w" /></a>
<figcaption class="wp-caption-text">Optimized for writes – use versioning to store parts of a larger record to dramatically reduce WCUs</figcaption></figure><h3>11. Use NoSQL Workbench for DynamoDB</h3>
<p>You can model your table, add indexes, and pivot your data visualizations. Plus, Rick uses it to model his tables and create the diagrams for his slide decks. Do you really need another reason? Download it <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/workbench.settingup.html" target="_blank" rel="noopener">here</a>!</p>
<figure id="attachment_2381" class="wp-caption aligncenter c1"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-nosql-workbench-for-dynamodb.png"><img class="size-full wp-image-2381" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-nosql-workbench-for-dynamodb.png" alt="" width="1168" height="658" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-nosql-workbench-for-dynamodb.png 1168w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-nosql-workbench-for-dynamodb-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-nosql-workbench-for-dynamodb-768x433.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-nosql-workbench-for-dynamodb-1024x577.png 1024w" /></a>
<figcaption class="wp-caption-text">NoSQL Workbench for DynamoDB – NoSQL data modeling is hard, this tool makes it easier</figcaption></figure><h3>12. Your workload most likely fits into a single DynamoDB table ?</h3>
<p>Rick’s latest example shows <strong>23 access patterns</strong> using only <strong>THREE GSIs</strong>. Is it easy? Not really. Can it be done? Yes, and I have faith in you. ? #SingleTableForEveryone</p>
<p>Here are the 23 access patterns along with the table schema and GSIs used to build the “Employee Portal” he outlines in the video (starting at 41:31). The slides are below for quick reference, but I suggest you watch him walk through and explain them in the <a href="https://www.youtube.com/watch?v=6yqfmXiZTlM&amp;feature=youtu.be&amp;t=2491" target="_blank" rel="noopener">video</a>.</p>
<figure id="attachment_2385" class="wp-caption aligncenter c4"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-final-result.png"><img class="size-full wp-image-2385" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-final-result.png" alt="" width="1167" height="658" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-final-result.png 1167w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-final-result-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-final-result-768x433.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-final-result-1024x577.png 1024w" /></a>
<figcaption class="wp-caption-text">The final result – 23 access patterns using just three GSIs (global secondary indexes)</figcaption></figure></div>
<figure id="attachment_2390" class="wp-caption aligncenter c2"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-table.png"><img class="size-full wp-image-2390" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-table.png" alt="" width="1166" height="658" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-table.png 1166w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-table-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-table-768x433.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-table-1024x578.png 1024w" /></a>
<figcaption class="wp-caption-text">The table design – this is the primary index using the table’s partitionKey and the sortKey</figcaption></figure><figure id="attachment_2387" class="wp-caption aligncenter c2"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi1.png"><img class="size-full wp-image-2387" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi1.png" alt="" width="1166" height="656" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi1.png 1166w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi1-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi1-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi1-1024x576.png 1024w" /></a>
<figcaption class="wp-caption-text">The index schema (GSI1) – this uses the GSI1pk and GSIsk attributes to create the first additional index</figcaption></figure><figure id="attachment_2388" class="wp-caption aligncenter c5"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi2.png"><img class="size-full wp-image-2388" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi2.png" alt="" width="1169" height="657" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi2.png 1169w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi2-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi2-768x432.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi2-1024x576.png 1024w" /></a>
<figcaption class="wp-caption-text">The index schema (GSI2) – this uses the GSI2pk and GSIsk attributes to create the second global index</figcaption></figure><figure id="attachment_2389" class="wp-caption aligncenter c2"><a href="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi3.png"><img class="size-full wp-image-2389" src="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi3.png" alt="" width="1166" height="655" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi3.png 1166w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi3-300x169.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi3-768x431.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/12/DAT403-the-index-schema-gsi3-1024x575.png 1024w" /></a>
<figcaption class="wp-caption-text">The index schema (GSI3) – this uses the GSI3pk and GSI3sk attributes to create the final index</figcaption></figure><p>Something to study in the example above is how Rick not only <strong>denormalizes</strong> data across items, but also <strong>duplicates</strong> attributes in the <strong>SAME ITEM</strong>. The storage costs related to these patterns are very low, but this benefits the efficiency and total size of the indexes because it makes use of <strong>sparse indexes</strong> to minimize what data gets indexed.</p>
<h2>Where do we go from here?</h2>
<p>The sky’s the limit! There were a ton of excellent talks related to DynamoDB at re:Invent, and lucky for us, there is a <a href="https://www.youtube.com/playlist?list=PL_EDAAla3DXWy4GW_gnmaIs0PFvEklEB7" target="_blank" rel="noopener">YouTube Playlist</a> that has them listed for you. One of these talks is from my good friend <a href="https://twitter.com/alexbdebrie" target="_blank" rel="noopener">Alex DeBrie</a>, which you should totally <a href="https://www.youtube.com/watch?v=DIQVJqiSUkE" target="_blank" rel="noopener">check out</a>. He walks you through a single-table design with just <em>five access patterns</em>, but utilizes different strategies for each. This should give you something very powerful, but with less brain-melting caused by Rick’s examples.</p>
<p>You can also check out <a href="https://www.youtube.com/watch?v=Rmf8mrJ3X2s" target="_blank" rel="noopener">Build On DynamoDB | S1 E2 – Intro to NoSQL Data Modeling with Amazon DynamoDB</a> and <a href="https://www.youtube.com/watch?v=KlhS7hSnFYs" target="_blank" rel="noopener">Build with DynamoDB | S1 E3 – NoSQL Data Modeling with Amazon DynamoDB</a> from the teams at AWS. There’s a great post by Forrest Brazeal called <a href="https://www.trek10.com/blog/dynamodb-single-table-relational-modeling/" target="_blank" rel="noopener">From relational DB to single DynamoDB table: a step-by-step exploration</a> that walks through an example using the Northwind design from MS Access. Alex DeBrie also has a great resource at <a href="https://www.dynamodbguide.com/" target="_blank" rel="noopener">DynamoDBGuide.com</a> and he’s <a href="https://www.dynamodbbook.com/" target="_blank" rel="noopener">writing a book</a> about DynamoDB modeling that I’m super excited about.</p>
<p>If you want to get hands on, check out the new <a href="http://dynamodbtoolbox.com/" target="_blank" rel="noopener">DynamoDB Toolbox</a> open source project that I’m working on. It’s a simple set of tools for working with Amazon DynamoDB and the DocumentClient. It lets you define your data models (with typings and aliases) and map them to your DynamoDB table. You can then generate parameters to <code>put</code>, <code>get</code>, <code>delete</code>, and <code>update</code> data by passing in a JavaScript object. The DynamoDB Toolbox will map aliases, validate and coerce types, and even write complex <code>UpdateExpression</code>s for you. There’s been a lot of great feedback so far, so hopefully this will help you out.</p>
<p>There is a tremendous amount of power that DynamoDB (and single-table designs) gives you. Not just from a scalability standpoint, but also from an efficiency, disaster recovery, and maintenance standpoint. I know it’s hard to wrap your head around, but didn’t you feel the same way when you first encounter SQL JOINs and third-normal form? NoSQL data modeling is a hugely valuable skill, so if you’ve got the time (and the stomach) for it, I highly encourage you to learn it.</p>
<hr /><p><em><strong>Please note:</strong> All slide images were used with express permission from Rick Houlihan and Amazon Web Services.</em></p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws/" rel="tag">aws</a>, <a href="https://www.jeremydaly.com/tag/databases/" rel="tag">databases</a>, <a href="https://www.jeremydaly.com/tag/dynamodb/" rel="tag">dynamodb</a>, <a href="https://www.jeremydaly.com/tag/nosql/" rel="tag">nosql</a>, <a href="https://www.jeremydaly.com/tag/reinvent/" rel="tag">reinvent</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c8">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c7">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c6" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<div class="footer-info">? This post was originally published on December 7, 2019 by Jeremy Daly.</div>]]></description>
      <link>https://www.jeremydaly.com/takeaways-from-dynamodb-deep-dive-advanced-design-patterns-dat403/</link>
      <guid>https://www.jeremydaly.com/takeaways-from-dynamodb-deep-dive-advanced-design-patterns-dat403/</guid>
      <pubDate>Sun, 08 Dec 2019 03:21:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #66]]></title>
      <description><![CDATA[<h2>Live from AWS re:Invent… ?</h2>
<p>Welcome to <strong>Issue #66</strong> of Off-by-none. Thanks for join us! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-64/">Last week</a>, we looked at the firehose of AWS pre:Invent announcements. This week, I’m at re:Invent and still trying to digest all of the recent launches and updates while also trying to keep up with all the new ones. In this issue, I’ve included some of the more exciting <em>new</em> AWS announcements, and included a bunch of content from the serverless community.</p>
<p class="p1">I also want to thank the sponsors of the <a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone</a> <a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Community Party @ AWS re:Invent 2019</a> again. <a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego (now Check Point)</a>, <a href="https://serverless.com" target="_blank" rel="noopener">Serverless, Inc.</a>, <a href="https://www.edrans.com/en" target="_blank" rel="noopener">Edrans</a>, and <a href="https://www.iopipe.com/" target="_blank" rel="noopener">New Relic Serverless</a> have made this entire event possible.</p>
<p>Let’s jump in!</p>
<h3>When you realize that you’ve been really busy… ?‍♂️</h3>
<p>I’ve was running around like crazy last week trying to finish up some projects before re:Invent. I did end up publishing a beta version of the new <a href="https://github.com/jeremydaly/dynamodb-toolbox?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">DynamoDB Toolbox</a> that gives you a whole set of tools that makes it much easier to work with data in DynamoDB. Take a look and let me know what you think.</p>
<p>Since I’ve been at re:Invent, I managed to meet up with several people, and share <a href="https://twitter.com/jeremy_daly/status/1201572942985015297?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">some thoughts on the EventBridge Schema Registry</a> that was announced at Midnight Madness. Lots of interesting possibilities with this.</p>
<p>I also got a chance to attend a few sessions yesterday, including Rick Houlihan’s DynamoDB Advanced Modeling Session. Lots of amazing information in there, so I <a href="https://twitter.com/jeremy_daly/status/1201685262432006145?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">recapped some important takeaways and lessons</a> in a Twitter thread for you.</p>
<h3>Serverless News &amp; Product Announcements <img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/11/svg/1f4e3.svg" alt="?" /></h3>
<p><a href="https://serverless.com/blog/reinvent-2019-serverless-announcements?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">All the Serverless announcements at re:Invent 2019</a><br />
There are a ton of serverless announcements at re:Invent, so luckily the team over at Serverless, Inc. is compiling them all for us!</p>
<p><a href="https://www.checkpoint.com/press/2019/check-point-extends-leadership-in-cloud-security-with-unmatched-serverless-protection?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Check Point Extends Leadership in Cloud Security with Unmatched Serverless Protection</a><br />
Check Point Software Technologies has acquired Protego. Congrats to TJ, Hillel, and the rest of the team.</p>
<p><a href="https://dev.to/azure/merry-and-bright-with-azure-advocates-25-days-of-serverless-1hi0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Merry and Bright with Azure Advocates’ 25 Days of Serverless</a><br />
I like challenges that engage developers like this. Microsoft is running a serverless coding challenge every day for 25 days. Solve it in the programming language of your choice and submit your solution via GitHub. Then they’ll showcase the best solutions every week.</p>
<p><a href="https://blog.webiny.com/november-update-5aa276b4e934?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Webiny – November Update</a><br />
Lots of cool things happening in the serverless CMS world. The team at Webiny published a summary of the highlights and new things they launched in the last few weeks.</p>
<h3>Serverless Concepts <img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/11/svg/1f3d7.svg" alt="?" /></h3>
<p><a href="https://servicefull.cloud/blog/dynamodb-single-table-design-lessons/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Lessons learned using Single-table design with DynamoDB and GraphQL in production</a><br />
Great post by Rafal Wilinski that recounts some of the important lessons learned when building single-table designs in DynamoDB.</p>
<p><a href="https://medium.com/simplyanvil/our-serverless-blueprint-the-step-by-step-guide-af4c9d25ea4c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Our Serverless Blueprint: The step-by-step guide</a><br />
Ivan Breet outlines how his team at Simply Anvil creates and structures serverless applications.</p>
<p><a href="https://medium.com/@cresloga_68978/couple-of-minutes-serverless-microservices-decomposition-eef603a2e7b5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Couple of Minutes: Serverless Microservices Decomposition</a><br />
This short post by Loganathan Murugesan highlights an important concept when building microservices with serverless. Using the single responsibility principle, it’s likely that a single Lambda does not provide an entire business capability. Serverless microservices are structured as a collection of Lambdas and other resources that work together to provide the capability.</p>
<p><a href="https://medium.com/@benhoyt/fast-cloudfront-log-queries-using-aws-athena-and-serverless-ef117393c5a6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Fast Cloudfront log queries using AWS Athena and Serverless</a><br />
Great post by Ben Hoyt that shows the power Athena and a simple Lambda function have to make querying massive amounts of log data fast and inexpensive.</p>
<h3>Serverless Reads <img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/11/svg/1f913.svg" alt="?" /></h3>
<p><a href="https://medium.com/@adhorn/adrians-top-aws-updates-nov-27th-2019-16ad3a2fd84e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Adrian’s top AWS updates</a><br />
Adrian Hornsby summarizes some of his favorite announcements from AWS over the last few weeks.</p>
<p><a href="https://medium.com/amaro-tech/a-less-server-data-infrastructure-solution-for-ingestion-and-transformation-pipelines-part-2-e679e326f5a4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">A “Less Server” Data Infrastructure Solution for Ingestion and Transformation Pipelines</a><br />
Michael Triska outlines how serverless architecture patterns and services like Snowflake, AWS Glue, and AWS Fargate have changed the way we build ETL pipelines.</p>
<p><a href="https://analyticsindiamag.com/how-dynamodb-is-gaining-popularity-in-the-developer-community/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">How DynamoDB Is Gaining Popularity In The Developer Community</a><br />
Nothing incredibly insightful in here, but this is a trend we’re starting to see. And of course, I think it’s a good thing.</p>
<p><a href="https://serverless.com/blog/eventbridge-schema-registry?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">EventBridge Schema Registry — what it is and why it matters for Serverless applications</a><br />
Alex DeBrie has some thoughts on the new EventBridge Schema Registry.</p>
<p><a href="https://www.itpro.co.uk/cloud/microsoft-azure/354230/microsoft-not-amazon-is-going-to-win-the-cloud-wars?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Microsoft, not Amazon, is going to win the cloud wars</a><br />
I think there is plenty of market share to spread around in the public cloud business. I like what Microsoft is doing with its serverless offerings, but IMO, the winners of the “cloud wars” will be consumer choice. Multi-cloud is going to mean something a lot different in a few years, and simply supporting deployments, won’t be a winning strategy.</p>
<h3>For the audio enthusiast… <img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/11/svg/1f3a7.svg" alt="?" /></h3>
<p><a href="https://www.serverlesschats.com/25?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Episode #25: Using Serverless to Transform Careers and Communities with Farrah Campbell and Danielle Heberling</a><br />
In this episode, I chat with Farrah Campbell and Danielle Heberling about how they found their way into tech, how serverless connected them, and the serverless project they built to help expand the community.</p>
<h3>Just a handful of AWS re:Invent announcements…</h3>
<p><a href="https://aws.amazon.com/blogs/compute/introducing-amazon-eventbridge-schema-registry-and-discovery-in-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Introducing Amazon EventBridge schema registry and discovery – In preview</a><br />
These are new developer tool features, which allow you to automatically find events and their structure, or schema, and store them in a shared central location.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-supports-max-retry-attempts-event-age-asynchronous-invocations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">AWS Lambda Now Supports Maximum Event Age and Maximum Retry Attempts for Asynchronous Invocations</a><br />
AWS Lambda now supports two new features to provide developers additional controls on how to process asynchronous invocations: Maximum Event Age and Maximum Retry Attempts.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-rds-data-api-client-library-supports-java-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Amazon Relational Database Service (RDS) Data API Client Library Supports Java (Preview)</a><br />
You can use the Amazon Relational Database Service (Amazon RDS) Data API Client Library with support for Java, now available in preview, to quickly and easily build applications for Amazon Aurora Serverless.</p>
<p><a href="https://aws.amazon.com/blogs/aws/amazon-sagemaker-autopilot-fully-managed-automatic-machine-learning/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Amazon SageMaker Autopilot – Automatically Create High-Quality Machine Learning Models With Full Control And Visibility</a><br />
Amazon SageMaker Autopilot automatically creates the best classification and regression machine learning models, while allowing full control and visibility.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-amazon-detective/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Introducing Amazon Detective</a><br />
Amazon Detective is a new service in Preview that makes it easy to analyze, investigate, and quickly identify the root cause of potential security issues or suspicious activities.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-aws-identity-and-access-management-access-analyzer/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Introducing AWS Identity and Access Management (IAM) Access Analyzer</a><br />
AWS Identity and Access Management (IAM) Access Analyzer is a new feature that makes it simple for security teams and administrators to check that their policies provide only the intended access to resources.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/aws-announces-amazon-codeguru-for-automated-code-reviews-and-application-performance-recommendations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">AWS announces Amazon CodeGuru for automated code reviews and application performance recommendations</a><br />
Amazon CodeGuru is a new machine learning service for development teams who want to automate code reviews, identify the most expensive lines of code in their applications, and receive intelligent recommendations on how to fix or improve their code.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/announcing-amazon-managed-apache-cassandra-service-now-in-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Announcing Amazon Managed Apache Cassandra Service – Now in Preview</a><br />
Amazon Managed Apache Cassandra Service (MCS) is a scalable, highly available, and managed Apache Cassandra-compatible database service. Amazon MCS is serverless, so you pay for only the resources you use and the service automatically scales tables up and down in response to application traffic.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-access-analyzer-for-amazon-s3-to-review-access-policies/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Introducing Access Analyzer for Amazon S3 to review access policies</a><br />
Access Analyzer for S3 is a new feature that monitors your access policies, ensuring that the policies provide only the intended access to your S3 resources.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/run-serverless-kubernetes-pods-using-amazon-eks-and-aws-fargate/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Run Serverless Kubernetes Pods Using Amazon EKS and AWS Fargate</a><br />
You can now use Amazon Elastic Kubernetes Service (EKS) to run Kubernetes pods on AWS Fargate, the serverless compute engine built for containers on AWS. This makes it easier than ever to build and run your Kubernetes applications in the AWS cloud.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-amazon-eventbridge-schema-registry-now-in-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Introducing the Amazon EventBridge Schema Registry – Now In Preview</a><br />
The Amazon EventBridge schema registry stores event structure – or schema – in a shared central location and maps those schemas to code for Java, Python, and Typescript so it’s easy to use events as objects in your code.</p>
<p><a href="https://aws.amazon.com/blogs/aws/announcing-ultrawarm-preview-for-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">Announcing UltraWarm (Preview) for Amazon Elasticsearch Service</a><br />
UltraWarm is a fully managed, low-cost, warm storage tier for Amazon Elasticsearch Service.</p>
<h3>Thoughts from Twitter <img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/11/svg/1f426.svg" alt="?" /></h3>
<p><a href="https://twitter.com/forrestbrazeal/status/1201315481665376257?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2366" target="_blank" rel="noopener">To be clear: I don’t advocate single-table DDB for nearly the breadth of cases that the AWS docs seem to (and the linked post has some helpful context on why). I think it’s a useful design pattern for a well-defined, narrow-ish workload, but pretty far up the hierarchy of needs.</a> <strong>~ Forrest Brazeal</strong><br />
I appreciate the different perspectives on this, but I’m still sticking with #TeamSingleTable. I agree with Forrest on many points, but as Rick Houlihan has shown us over and over again, this design pattern supports a very broad set of workloads (if you can understanding the modeling behind it, that is).</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>December 3, 2019 – </strong><a href="https://www.portal.reinvent.awsevents.com/connect/search.ww#loadSearch-searchPhrase=%22Taco+Tuesday%22&amp;searchType=session&amp;tc=0&amp;sortBy=abbreviationSort&amp;p=" target="_blank" rel="noopener">Taco Tuesday with the AWS Heroes</a></p>
<p><strong>December 4, 2019 – </strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></p>
<p><strong>December 14, 2019 –</strong> <a href="https://fukuoka.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Fukuoka Japan</a></p>
<h3>Final Thoughts ?</h3>
<p>re:Invent is keeping me extremely busy, so pardon the lightness of this week’s newsletter. Hopefully next week I’ll have some more time to share additional insights with you all.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Find me at re:Invent,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-66/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-66/</guid>
      <pubDate>Tue, 03 Dec 2019 21:32:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #65]]></title>
      <description><![CDATA[<h2>Serverless is a journey, not an event destination… ?</h2>
<p>Welcome to <strong>Issue #65</strong> of Off-by-none. It’s great to have you here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-63/">Last week</a>, we looked at the first major batch of announcements and feature launches leading up to re:Invent. This week, there were about a thousand more (give or take ?)! We’ll try and cull that list down for you, plus we still have plenty of content from the serverless community.</p>
<p class="p1">Before we jump in, I just want to thank the sponsors of the <strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></strong>. <a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego</a>, <a href="https://serverless.com" target="_blank" rel="noopener">Serverless, Inc.</a>, <a href="https://www.edrans.com/en" target="_blank" rel="noopener">Edrans</a>, and <a href="https://www.iopipe.com/" target="_blank" rel="noopener">New Relic Serverless</a> have made this entire event possible.</p>
<p>Okay, now prepare for serverless announcement overload! ?</p>
<h3>Guides to at Serverless re:Invent ?</h3>
<p>re:Invent is going to be a nonstop onslaught of information, technical sessions, product announcements, parties and more. Here are some guides to help you plan your time. (BTW, if you’re not going to re:Invent, take note of some of these sessions and watch the videos once they’re posted.)</p>
<p><a href="https://www.protego.io/aws-reinvent-serverless-survival-guide/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS re:Invent Serverless Survival Guide</a><br />
Trisha Paine provides a list of can’t miss re:Invent sessions for developers, cloud architects, and security folks.</p>
<p><a href="https://reinvent.awsevents.com/learn/guides/eric_hammond/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">re:Invent Guide: Advanced Serverless</a><br />
I’m including Eric Hammond’s excellent guide to Advanced Serverless sessions again. Great stuff in here.</p>
<p><a href="https://www.youtube.com/watch?v=Lj4XQuJ-eVs" target="_blank" rel="noopener">Serverless at re:Invent</a><br />
I had a chat with Farrah Campbell, Chase Douglas, Serhat Can, and Emrah Şamdan about some of our favorite upcoming re:Invent sessions.</p>
<p><a href="https://reinvent.awsevents.com/learn/guides/robert_koch?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">re:Invent Guide: Databases</a><br />
This isn’t exclusively serverless, but there are a few DynamoDB sessions in here that should be super interesting.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@atardadi/how-small-startups-move-incredibly-fast-with-serverless-afb4b5be79a0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">How Small Startups Move Incredibly Fast With Serverless</a><br />
Serverless and startups go together like peanut butter and jelly. Dadi Atar recounts why serverless was the right decision for his latest startup journey.</p>
<p><a href="https://medium.com/@aletheia/serverless-big-data-ee47694835c7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Serverless Big Data: lessons learned building an event ingestion pipeline on Amazon Web Services</a><br />
Luca Bianchi dives into the details of building a big data ingestion pipeline with serverless.</p>
<p><a href="https://medium.com/@bala.dutt/how-we-saved-xxx-usd-in-1hour-on-lamdba-8c5e474018f9?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Story of serverless (Lambda) to move large data from DynamoDB</a><br />
Always love seeing experiments like this. Bala Dutt and Sachin Maheshwari discuss their experiment that got to processing 7k records per second using DynamoDB and Lambda.</p>
<p><a href="https://medium.com/@pedroob221/using-codepipeline-to-automate-serverless-applications-deployment-b23e01b15bd1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Using CodePipeline to Automate Serverless Applications Deployment</a><br />
Pedro Lourenço shows you how to build a fully automated CI/CD pipeline with CodePipeline and CodeBuild. He then explains why after using it for six months, his team outgrew it.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://winterwindsoftware.com/lambda-vpc-internet-access-no-nat-gateway/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">How to access VPC and internet resources from Lambda without paying for a NAT Gateway</a><br />
Paul Swail points out a workaround for synchronous Lambda workflows needing VPC access <em>and</em> Internet access. Lambdas calling Lambdas, yup, sometimes it just makes sense.</p>
<p><a href="https://medium.com/serverlessguru/what-are-serverless-components-7c654e85f836?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">What are Serverless Components?</a><br />
Ryan Jones has a series of articles on Serverless Components from the makers of the Serverless Framework. These are definitely worth knowing about. Also see: <a href="https://medium.com/serverlessguru/what-are-the-benefits-of-serverless-components-c4ea35da66f3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">What are the benefits of Serverless Components?</a> and <a href="https://medium.com/serverlessguru/how-to-use-serverless-components-7ddd58987aac?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">How to use Serverless Components?</a></p>
<p><a href="https://serverless.com/blog/api-gateway-troubleshooting?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Take the legwork out of API Gateway troubleshooting</a><br />
This is a great new feature in Serverless Framework Pro. Verne Lindner explains why tracking down API Gateway errors can be hard, and how the new request explorer makes corresponding logs easier to find.</p>
<p><a href="https://serverless.com/blog/aws-lambda-supported-languages-and-runtimes?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">The State of AWS Lambda Supported Languages &amp; Runtimes (Updated November 2019)</a><br />
AWS has released several new Lambda runtimes, Fernando Medina Corey gets you up to speed on all the latest ones.</p>
<p><a href="https://blog.thundra.io/data-analytics-with-serverless-services?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Data Analytics with Serverless Services</a><br />
Emrah Samdan outlines the pros and cons of building a serverless analytics pipeline.</p>
<p><a href="https://vgaltes.com/post/serverless-patterns-implemented-sls-dlq/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Serverless Patterns implemented: using an SQS queue as a DLQ for a SNS topic</a><br />
Vicenç García has implemented another pattern from my serverless patterns post. This time he tackles the Notifier pattern with the added benefit of the recently released SNS DLQs.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://medium.com/dzolo38/https-medium-com-dzolo38-implement-the-new-stripe-checkout-workflow-with-a-react-amplify-project-serverless-78eccaac26e0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Implement the new Stripe checkout workflow with a React Amplify project (serverless and SCA compliant)</a><br />
Straightforward use case for creating a simple checkout workflow using Stripe and a serverless backend.</p>
<p><a href="https://blog.thundra.io/building-a-serverless-data-pipeline-pt-2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Building a serverless data pipeline using Kinesis &gt; Lambda &gt; S3 Glacier pt.2</a><br />
Part 2 of Serkan Özal’s series covering how to build a serverless data pipeline with Kinesis, Lambda, and AWS S3 Glacier.</p>
<p><a href="https://medium.com/hatchsoftware/using-the-aws-cdk-to-build-scheduled-lambda-functions-13eb1674586e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Using the AWS CDK to build scheduled Lambda Functions</a><br />
Maarten Thoelen provides a complete sample for creating Lambda functions and building a CI/CD pipeline using infrastructure as code.</p>
<p><a href="https://medium.com/innomizetech/how-to-build-an-api-with-aws-lambda-to-paginate-data-using-serverless-41c4b6b676a4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">How to build serverless cursor-based pagination service on the AWS Cloud</a><br />
Andy Nguyen shows an alternate technique to pagination. If you’re using DynamoDB as your database, then this method would be your main option.</p>
<p><a href="https://medium.com/@stephanecouzinier/how-to-deploy-a-lambda-edge-function-with-cloudformation-80637092e5a2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">How to deploy a Lambda@Edge function with AWS CloudFormation</a><br />
This is an interesting use case that merges audio files using Lambda@Edge to deliver audio responses to Alexa. Stephane Couzinier explains the whole process (including a CI/CD pipeline) and provides the finished code.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://medium.com/serverlessguru/how-to-build-secure-serverless-applications-for-pci-dss-compliance-42f88da3b39b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">How to build secure serverless applications for PCI-DSS compliance?</a><br />
Thinking about storing data that requires PCI-DSS compliance? My advice: DON’T. But if you need to, this article from Ryan Jones will get you asking the right questions.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://serverless.com/blog/november-2019-lambda-releases?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">New Lambda Features – Pre-re:Invent – Nov. 2019</a><br />
The number of new serverless announcements are overwhelming. Fernando Medina Corey picks out a few of them and gives us more detail on why they are important.</p>
<p><a href="https://medium.com/@jgilbert001/is-your-ci-cd-pipeline-ready-for-chaos-623dcb610f6a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Is Your CI/CD Pipeline Ready For Chaos?</a><br />
John Gilbert asks some important questions about your CI/CD process.</p>
<p><a href="https://www.techrepublic.com/article/the-top-30-amazon-products-and-services-tech-pros-used-this-year/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">The top 30 Amazon products and services tech pros used this year</a><br />
2nd Watch looked at their customer’s usage of AWS products, and there are some interesting ones at the top, including DynamoDB, SNS, and even Lambda, with 83% of their customer using it.</p>
<p><a href="https://www.protego.io/benefits-of-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">7 of the Best Benefits of AWS Lambda for Your Cloud Computing System</a><br />
Trisha Paine outlines seven benefits to AWS Lambda. Hard for me to argue with these.</p>
<h3>When you have time during your commute… ?</h3>
<p><a href="https://www.serverlesschats.com/24?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Episode #24: Serverless Application Security with Ory Segal (Part 2)</a><br />
In this episode, I continue my conversation with Ory Segal about Serverless Application Security. We finish reviewing the CSA Top 12 Most Critical Risks for Serverless Applications, and discuss the future of security for serverless and ephemeral compute.</p>
<h3>When the teams at AWS can even wait until re:Invent… ?‍♂️</h3>
<p>Once again, AWS has flooded us with a plethora of announcements regarding new features and products. I haven’t had the time to <em>read</em> through all of these, let alone actually digest and process what they mean. I’ve included <strong>54</strong> links here to the announcements and related blog posts, and there are even more on the <a href="https://aws.amazon.com/new/" target="_blank" rel="noopener">What’s New</a> blog! I’m listing all of the ones that seemed interesting and relevant to serverless, and categorized them the best I could. It’s going to take us awhile to make sense of all these, so stay tuned for more in-depth analysis in the weeks to come.</p>
<p><strong>Event-Driven Workflows:</strong></p>
<ul><li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-supports-destinations-for-asynchronous-invocations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS Lambda Supports Destinations for Asynchronous Invocations</a> (this ones HUGE!)</li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-supports-failure-handling-features-for-kinesis-and-dynamodb-event-sources/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS Lambda Supports Failure-Handling Features for Kinesis and DynamoDB Event Sources</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/ecr-events-now-published-to-eventbridge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">ECR events now published to EventBridge</a></li>
<li><a href="https://aws.amazon.com/blogs/aws/eventbridge-support-in-amazon-elastic-container-registry/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">EventBridge Support in Amazon Elastic Container Registry</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-kinesis-producer-library-now-supports-listshards-api-for-efficient-scaling-of-producer-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Kinesis Producer Library (KPL) now supports ListShards API for efficient scaling of producer applications</a></li>
</ul><p><strong>Observability and Monitoring:</strong></p>
<ul><li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/announcing-amazon-cloudwatch-servicelens/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Announcing Amazon CloudWatch ServiceLens</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws_x-ray_offers_improved_trace_analysis_and_identification_of_service_disruption/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS X-Ray offers improved trace analysis and identification of service disruption</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-x-ray-offers-improved-trace-analysis-and-identification-of-service-disruption/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS X-Ray offers improved trace analysis and identification of service disruption</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/introducing-amazon-cloudwatch-synthetics-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Introducing Amazon CloudWatch Synthetics – Now in Preview</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-cloudwatch-now-includes-contributor-insights-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon CloudWatch Now Includes Contributor Insights – in Preview</a></li>
<li><a href="https://aws.amazon.com/blogs/aws/visualize-and-monitor-highly-distributed-applications-with-amazon-cloudwatch-servicelens/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Visualize and Monitor Highly Distributed Applications with Amazon CloudWatch ServiceLens</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-athena-adds-four-new-query-related-metrics/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Athena adds four new query-related metrics</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/new-amazon-cloudwatch-contributor-insights-for-amazon-dynamodb-preview-helps-you-identify-frequently-accessed-keys-and-database-traffic-trends/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">New Amazon CloudWatch Contributor Insights for Amazon DynamoDB (Preview) helps you identify frequently accessed keys and database traffic trends</a></li>
</ul><p><strong>Database:</strong></p>
<ul><li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-athena-adds-support-for-user-defined-functions-udf/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Athena Adds support for User Defined Functions (UDF)</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-athena-adds-support-for-running-sql-queries-across-relational-non-relational-object-custom-data-sources/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Athena adds support for running SQL queries across relational, non-relational, object, and custom data sources</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/you-can-now-enhance-availability-of-your-existing-amazon-dynamodb-tables-by-adding-global-replicas/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">You now can enhance availability of your existing Amazon DynamoDB tables by adding global replicas</a></li>
<li><a href="https://aws.amazon.com/blogs/aws/new-convert-your-single-region-amazon-dynamodb-tables-to-global-tables/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">New – Convert Your Single-Region Amazon DynamoDB Tables to Global Tables</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-datasync-adds-the-ability-to-schedule-data-transfers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS DataSync adds the ability to schedule data transfers</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/use-apache-hive-metastore-as-a-metadata-catalog-with-amazon-athena-preview/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Use Apache Hive Metastore as a metadata catalog with Amazon Athena (Preview)</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-appsync-adds-server-side-caching-and-dynamodb-transactions-support-for-graphql-apis/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS AppSync adds server-side Caching and DynamoDB transactions support for GraphQL APIs</a></li>
</ul><p><strong>Developer Tools:</strong></p>
<ul><li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-sam-cli-simplifies-deploying-serverless-applications-with-single-command-deploy/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS SAM CLI simplifies deploying serverless applications with single-command deploy</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-codebuild-adds-support-for-test-reporting/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS CodeBuild Adds Support for Test Reporting (Beta)</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/simplify-application-configuration-with-aws-appconfig/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Simplify application configuration with AWS AppConfig</a></li>
<li><a href="https://medium.com/@dabit3/amplify-console-and-cli-now-work-together-five-new-features-6a6ee1d45b1c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amplify Console and CLI now work together</a></li>
<li><a href="https://aws.amazon.com/blogs/aws/aws-cloud-development-kit-cdk-java-and-net-are-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS Cloud Development Kit (CDK) – Java and .NET are Now Generally Available</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/faster-access-to-regions-on-AWS-management-console/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Access your AWS Regions faster using the AWS Management Console</a></li>
<li><a href="https://aws.amazon.com/blogs/aws/safe-deployment-of-application-configuration-settings-with-aws-appconfig/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Safe Deployment of Application Configuration Settings With AWS AppConfig</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/announcing-cloud-debugging-beta/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Announcing Cloud Debugging (beta) for Debugging Your Applications Running in the Cloud with JetBrains IDE</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amplify-console-now-provides-visibility-into-backend-environments-provisioned-by-the-amplify-cli/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amplify Console now provides visibility into backend environments provisioned by the Amplify CLI</a></li>
</ul><p><strong>Machine Learning:</strong></p>
<ul><li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-comprehend-launches-real-time-custom-classification/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Comprehend launches real time custom classification</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-athena-adds-support-for-invoking-machine-learning-models-in-sql-queries/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Athena adds support for invoking machine learning models in SQL queries</a></li>
<li><a href="https://aws.amazon.com/blogs/aws/new-for-amazon-aurora-use-machine-learning-directly-from-your-databases/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">New for Amazon Aurora – Use Machine Learning Directly From Your Databases</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amplify-cli-announces-new-graphql-transform-feature-for-orchestrating-multiple-ai-ml-use-cases/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amplify CLI announces new GraphQL transform feature for orchestrating multiple AI/ML use cases</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/now-get-additional-details-metrics-around-all-your-algorithm-runs-with-automl/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Now get additional details/metrics around all your algorithm runs with AutoML</a></li>
<li><a href="https://aws.amazon.com/blogs/machine-learning/how-aws-is-putting-machine-learning-in-the-hands-of-every-developer-and-bi-analyst/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">How AWS is putting machine learning in the hands of every developer and BI analyst</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-lex-now-supports-sentiment-analysis/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Lex Now Supports Sentiment Analysis</a></li>
</ul><p><strong>Security:</strong></p>
<ul><li><a href="https://aws.amazon.com/blogs/aws/announcing-aws-managed-rules-for-aws-waf/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Announcing AWS Managed Rules for AWS WAF</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-cloudtrail-announces-cloudtrail-insights/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS CloudTrail announces CloudTrail Insights</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-cognito-now-supports-sign-in-with-apple/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Cognito now supports Sign in with Apple</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/access-resources-within-your-amazon-virtual-private-cloud-using-amazon-kinesis-data-analytics/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Access resources within your Amazon Virtual Private Cloud using Amazon Kinesis Data Analytics</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-cognito-supports-account-recovery-method-prioritization/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Cognito now supports account recovery method prioritization</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/identify-unused-iam-roles-easily-and-remove-them-confidently-by-using-the-last-used-timestamp/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Identify unused IAM roles easily and remove them confidently by using the last used timestamp</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/encrypt-your-amazon-dynamodb-data-by-using-your-own-encryption-keys/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Encrypt your Amazon DynamoDB data by using your own encryption keys</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-kinesis-data-firehose-adds-support-for-customer-provided-keys-for-server-side-encryption/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Kinesis Data Firehose Adds Support For Customer-Provided Keys for Server-Side Encryption</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-launches-tag-policies/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS launches Tag Policies</a></li>
<li><a href="https://aws.amazon.com/blogs/aws/new-use-tag-policies-to-manage-tags-across-multiple-aws-accounts/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">New – Use Tag Policies to Manage Tags Across Multiple AWS Accounts</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/use-iam-share-aws-resources-with-groups-aws-accounts-aws-organizations/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Use IAM to share your AWS resources with groups of AWS accounts in AWS Organizations</a></li>
</ul><p><strong>General:</strong></p>
<ul><li><a href="https://aws.amazon.com/blogs/aws/s3-replication-update-replication-sla-metrics-and-events/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">S3 Replication Update: Replication SLA, Metrics, and Events</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-s3-replication-time-control-for-predictable-replication-time-backed-by-sla/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon S3 Replication Time Control for predictable replication time, backed by an SLA</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/cloudfront-rome/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon CloudFront announces 10 new Edge locations including its first Edge location in Rome, Italy</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-transcribe-now-supports-alternative-transcriptions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Transcribe now Supports Alternative Transcriptions</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-ses-announces-account-level-suppression-list/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon SES Announces Account-Level Suppression List</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-serverless-application-repository-adds-verified-author-badges-for-application-publishers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">AWS Serverless Application Repository Adds Verified Author Badges for Application Publishers</a></li>
<li><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-transcribe-now-supports-speech-to-text-in-7-additional-languages/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2365" target="_blank" rel="noopener">Amazon Transcribe Now Supports Speech-to-text in 7 Additional Languages</a></li>
</ul><h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>December 2-6, 2019 – </strong><a href="https://reinvent.awsevents.com/" target="_blank" rel="noopener">AWS re:Invent 2019</a></p>
<p><strong>December 3, 2019 – </strong><a href="https://www.portal.reinvent.awsevents.com/connect/search.ww#loadSearch-searchPhrase=%22Taco+Tuesday%22&amp;searchType=session&amp;tc=0&amp;sortBy=abbreviationSort&amp;p=" target="_blank" rel="noopener">Taco Tuesday with the AWS Heroes</a></p>
<p><strong>December 4, 2019 – </strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></p>
<p><strong>December 14, 2019 –</strong> <a href="https://fukuoka.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Fukuoka Japan</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is Ryan Kroonenburg (<a href="https://twitter.com/kroonenburgryan" target="_blank" rel="noopener">@KroonenburgRyan</a>). Ryan is the co-founder of A Cloud Guru and an AWS community hero (you might remember when I featured his brother Sam a few weeks ago). When Ryan was a solution architect five years ago, he taught himself AWS, and realized the community was underserved in AWS courses. Fast forward to today, and Ryan’s work with A Cloud Guru has reached over one million students and he continues to teach the community about AWS, serverless, and the cloud. Thank you for making serverless accessible to all who want to learn, Ryan! ?</p>
<h3>Final Thoughts ?</h3>
<p>I don’t know about you, but my brain is fried from trying to process all these new AWS serverless announcements, and we’re still over a week away from the big keynotes at re:Invent. I have so many things I want to write about and share, but with all this information to look at, there just isn’t enough time in the day. And if you’re feeling overwhelmed, don’t sweat it. I have a feeling that we’ll be seeing some excellent posts, videos, and tutorials from the serverless community over the next few months to help us make sense of it all.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Hoping to see you at re:Invent,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-65/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-65/</guid>
      <pubDate>Wed, 27 Nov 2019 04:33:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #64]]></title>
      <description><![CDATA[<h2><em>pre</em>:Invent is just getting started… ?</h2>
<p>Welcome to <strong>Issue #64</strong> of Off-by-none. Thanks for being here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-63/">Last week</a>, we rehashed the Fat Lambda debate and met some new AWS heroes. This week, we look at a ton of announcements and feature launches leading up to re:Invent, plus we share lots of awesome content from the serverless community.</p>
<p class="p1">? Don’t forget! If you’re planning on going to AWS re:Invent this year, be sure to register for the <strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></strong>. We’re adding names to the waiting list, but we’d still love for you to join us and our awesome guests! We have some amazing sponsors (<a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego</a>, <a href="https://serverless.com" target="_blank" rel="noopener">Serverless, Inc.</a>, <a href="https://www.edrans.com/en" target="_blank" rel="noopener">Edrans</a>, and <a href="https://www.iopipe.com/" target="_blank" rel="noopener">New Relic Serverless</a>) that are making this event possible. I hope you’ll be able to join us!</p>
<p>Lots to get to today, so let’s get to it! ?</p>
<h3>Serverless News &amp; Product Announcements ?</h3>
<p><a href="https://cloud.google.com/blog/products/serverless/knative-based-cloud-run-services-are-ga/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Cloud Run, a managed Knative service, is GA</a><br />
This really interesting service has been in beta for awhile, and is finally available in both a fully-managed version, and one for Anthos.</p>
<p><a href="https://dashbird.io/blog/knowledge-base-launch/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Launching our knowledge base</a><br />
The team over at the Dashbird has put together a robust knowledge base that is loaded with all kinds of serverless information including DynamoDB modeling, API Gateway configurations, and much more.</p>
<p><a href="https://finance.yahoo.com/news/solo-io-releases-production-ready-160000216.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Solo.io Releases Production-Ready Gloo Enterprise 1.0 for Modernizing to Cloud Native Applications</a><br />
Gloo is an interesting solution for implementing the strangler pattern for aggregating and modernize distributed APIs. I don’t know much about the new Enterprise version, but it could be a useful bridge for companies that are straddling on-prem and cloud.</p>
<p><a href="https://securityboulevard.com/2019/11/aqua-security-acquires-cloudsploit-to-monitor-configs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Aqua Security Acquires CloudSploit to Monitor Configs</a><br />
Misconfiguring your cloud resources seems to be all the rage nowadays. This pickup by Aqua Security should help add some piece of mind, especially for those staring at huge cloud configuration files.</p>
<p><a href="https://www.infoworld.com/article/3453236/pulumi-infrastructure-as-code-tool-adds-net-language-support.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Pulumi infrastructure-as-code tool adds .NET language support</a><br />
Pulumi continues on its quest to compete with AWS CDK, CloudFormation, and Terraform by adding additional language support for C#, F#, and VB.NET.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://blog.thundra.io/aws-lambda-use-cases-for-devops-engineers?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS Lambda: Real-World Use Cases for the DevOps Engineer</a><br />
If you’re in the DevOps space and are curious how serverless can make your life easier, check out this excellent post from Emrah Samdan.</p>
<p><a href="https://www.infoq.com/news/2019/11/stateful-serverless-azure-qconsf/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Stateful Programming Models in Serverless Functions</a><br />
This is a good summary by Steef-Jan Wiggers that recounts Chris Gillum’s presentation at QCon. He talks about two ways in which you can add state to your Azure Functions to accommodate specific use cases.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://medium.com/@benarena/error-handling-in-aws-lambda-and-api-gateway-35bf38fa6e83?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Error Handling in AWS Lambda and API Gateway</a><br />
Ben Arena outlines four different approaches to handling errors with API Gateway and AWS Lambda. He didn’t mention <a href="http://www.LambdaAPI.com">Lambda API</a> as a possible solution, but we’ll let it slide. ?</p>
<p><a href="https://winterwindsoftware.com/dynamodb-modelling-single-vs-multi-table/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Comparing the multi-table and single-table approaches to designing a DynamoDB data model</a><br />
Paul Swail has an excellent article that discusses the multi-table versus single-table approach to designing data models in DynamoDB. I’m a big fan of the single table approach, but your mileage may vary, as Paul explains.</p>
<p><a href="https://medium.com/datadriveninvestor/why-use-google-cloud-run-here-are-5-compelling-reasons-to-opt-for-serverless-containers-42bdb1ae4f1b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Why use Google Cloud Run? Here are 5 Compelling Reasons to Opt for Serverless Containers</a><br />
Geshan Manandhar makes some good points, but as much as I love the idea of Google Cloud Run, there is still a fair amount of heavy lifting involved to get up and running. Plus, not having to learn a new paradigm might seems tempting, but ultimately it will be required in order to embrace a serverless mindset.</p>
<p><a href="https://serverlesspatterns.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Serverless Patterns</a><br />
I saw this pop up the other day. Toby Hede has put together some serverless patterns for you to learn from and use.</p>
<p><a href="https://vgaltes.com/post/serverless-patterns-implemented-part1/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Serverless Patterns implemented, part 1</a><br />
And speaking of serverless patterns, Vicenç García has taken some of the patterns from <a href="https://www.jeremydaly.com/serverless-microservice-patterns-for-aws/" target="_blank" rel="noopener">my post</a> and created code samples for implementing them. Very cool.</p>
<p><a href="https://aws.amazon.com/blogs/compute/designing-durable-serverless-apps-with-dlqs-for-amazon-sns-amazon-sqs-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Designing durable serverless apps with DLQs for Amazon SNS, Amazon SQS, AWS Lambda</a><br />
AWS released DLQs for SNS topics this week, and with that, a bunch of new design patterns open up for building durable applications. Otavio Ferreira has an awesome post on how to use this new feature (along with existing fallback mechanisms) to build a highly durable serverless application.</p>
<p><a href="https://lumigo.io/blog/eventbridge-vs-cloudwatch-events-kinesis-and-sns/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">EventBridge vs CloudWatch Events, Kinesis and SNS</a><br />
Very informative post by Aviad Mor about EventBridge and how it compares to Kinesis and SNS. He mentions that EventBridge requires SQS to add resiliency, but that really depends on your downstream target. Unless you expect your target to be down for more that 24 hours, there is a fair amount of durability and resiliency built in. TLDR; don’t over engineer if you don’t need to.</p>
<p><a href="https://medium.com/@jlaitio/aws-serverless-websockets-introduction-around-the-pitfalls-f623518635df?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS Serverless WebSockets – Introduction Around the Pitfalls</a><br />
This is a great post by Joonas Laitio that goes through the details of how API Gateway WebSockets work, and what are some of the pitfalls that you need to be wary about.</p>
<p><a href="https://epsagon.com/blog/aws-lambda-and-node-js-12-support-and-benchmark/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS Lambda and Node.js 12: Support and Benchmark</a><br />
AWS also released a bunch of new runtimes for Lambda, and Ran Ribenzaft benchmarked Node.js 12. According to this post, it’s a bit slower (which seems strange), but it’s packed with new features, so the tradeoff might be worth it.</p>
<p><a href="https://medium.com/@jgilbert001/kinesis-vs-sns-sqs-9e65aa7e8e3e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Kinesis vs SNS/SQS</a><br />
John Gilbert shares why he uses Kinesis for first-class events rather than SNS to SQS. While I agree that Kinesis is a workhorse that has lots of great use cases, I think you’ll see more of these event-driven workloads shift to EventBridge as a more flexible alternative.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://blog.thundra.io/building-a-serverless-data-pipeline-pt-1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Building a serverless data pipeline using Kinesis &gt; Lambda &gt; S3 Glacier pt. 1</a><br />
Serkan Özal outlines the first few steps to building a serverless data pipeline using Kinesis.</p>
<p><a href="https://medium.com/@rafalwilinski/using-aws-lambda-and-sqs-to-perform-mass-distributed-and-asynchronous-updates-on-dynamodb-tables-6df5cf741038?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Using AWS Lambda and SQS to perform mass, distributed and asynchronous updates on DynamoDB Tables</a><br />
Great post by Rafal Wilinski that discusses possible serverless patterns to reliably perform DynamoDB table updates across a large number of items. I’ve implemented similar patterns (without the orchestrator) and have found that creating batches of 25 records PER SQS message is incredibly efficient. That way you set your Lambda batch size to 10, and you get 250 record updates per Lambda execution for a total of 10 batch writes.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://medium.com/innomizetech/07-best-practices-when-using-aws-ssm-parameter-store-63c8e7ab0d9b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">7 best practices when using AWS SSM Parameter Store</a><br />
This useful post by Hoang Le outlines seven common practices when using AWS Parameter Store. #5 recommends fetching your parameters at runtime, which I agree with, but I prefer not to save the data in environment variables. Maybe I’m just paranoid.</p>
<p><a href="https://www.protego.io/is-cloud-computing-secure/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Is Cloud Computing Secure? 7 FAQs About Cloud Security Answered (2020)</a><br />
Trisha Paine from Protego answers seven frequently asked questions about cloud security.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-guardduty-supports-exporting-findings-to-an-amazon-s3-bucket/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Amazon GuardDuty Supports Exporting Findings to an Amazon S3 Bucket</a><br />
I’m including this in the security section because it makes more sense here. Exporting your GuardDuty findings into S3 makes aggregating data across multiple regions and accounts super simple.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.oreilly.com/radar/oreilly-serverless-survey-2019-concerns-what-works-and-what-to-expect?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">O’Reilly serverless survey 2019: Concerns, what works, and what to expect</a><br />
Super interesting data in these survey results. Crazy to think that only 40% of respondents have adopted serverless in their organizations. The experience versus successful outcomes data is also quite fascinating. We still have a long way to go to get people on board, but it is certainly spreading.</p>
<p><a href="https://medium.com/@crespo.wang/how-does-improved-vpc-help-reducing-lambda-cold-start-d930a9af448e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">How does improved VPC help reducing Lambda cold start</a><br />
Crespo Wang explains how the improvements to VPC networking for Lambda dramatically reduced cold starts in his organization.</p>
<p><a href="https://medium.com/@eisenzopf/towards-serverless-faas-as-the-next-step-in-infrastructure-as-a-service-iaas-evolution-ef5227926bb6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Towards Serverless (FaaS) as the next step in Infrastructure-as-a-Service (IaaS) evolution</a><br />
Jonathan Eisenzopf has a interesting post that provides some thoughts on the current serverless ecosystem and how computing on the edge (or even on the client using WASM) might be the next evolution of compute.</p>
<p><a href="https://medium.com/@jradosta/containers-or-serverless-the-battle-for-your-devops-4288fc999d18?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Containers Or Serverless? The Battle For Your DevOps Mindshare</a><br />
I’m including this post by John Anthony Radosta because I hold a different point of view. He mentions that “the complexity of inter-calling Lambda functions made it near impossible to debug anything.” If that’s the case, it sounds to me like it may have been a poorly designed system. Granted, knowing how to design serverless systems isn’t easy, but this seems like a case of blaming the hammer instead of the carpenter.</p>
<h3>For the audiophile… ?</h3>
<p><a href="https://www.serverlesschats.com/23?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Episode #23: Serverless Application Security with Ory Segal (Part 1)</a><br />
In this episode, I chat with Ory Segal about the differences between traditional and serverless security, the importance of the CSA’s 12 Most Critical Risks for Serverless Applications, and what the future of serverless security looks like.</p>
<h3>And the flurry of AWS announcements and launches begin… ?</h3>
<p><strong>Note:</strong> There were a TON of announcements this past week. I only included a handful of them that were really interesting to me, but it’s worth checking out the <a href="https://aws.amazon.com/new/" target="_blank" rel="noopener">What’s New</a> blog on AWS to see them all.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-sns-adds-support-for-dead-letter-queues-dlq/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Amazon SNS Adds Support for Dead-Letter Queues (DLQ)</a><br />
This is an amazing update! My biggest concern with sending events to SNS with destinations other than Lambda, was not being able to capture failures and replay messages. Now you can add an SQS queue to handle any failed delivery. Game changer.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-supports-amazon-sqs-fifo-event-source/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS Lambda Supports Amazon SQS FIFO (First-In-First-Out) as an Event Source</a><br />
Here’s an amazing edition to the Lambda event source catalog. SQS support has been available for quite some time, but SQS FIFO queues required a CloudWatch Events Rule hack to trigger your Lambda function every minute. Now you can simply subscribe a Lambda, and it will process your ordered messages serially as soon as they enter the queue.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/you-can-now-configure-table-settings-when-you-restore-a-table-from-your-amazon-dynamodb-backups/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">You now can configure table settings when you restore a table from your Amazon DynamoDB backups</a><br />
Love this feature! If you wanted to restore data to a new table, you had to restore all of the indexes and capacity settings. Now you can restore data without that extra overhead, which might even give you some flexibility with your data model.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-dynamodb-adaptive-capacity-now-handles-imbalanced-workloads-better-by-isolating-frequently-accessed-items-automatically/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Amazon DynamoDB adaptive capacity now handles imbalanced workloads better by isolating frequently accessed items automatically</a><br />
This is a super cool feature. DynamoDB will now take frequently accessed items (like popular product records) and automatically distribute them to different partitions to avoid creating hot partitions and requiring more throughput.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-supports-node-js-12/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS Lambda now supports Node.js 12</a><br />
If you’ve been hoping for import/export statements, async stack traces, and private class variables, the wait is over.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-now-supports-python-3-8/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS Lambda now supports Python 3.8</a><br />
This is the newest major release of the Python language, and contains many new features such as assignment expressions, positional-only arguments, and typing improvements.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-supports-java-11/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS Lambda now supports Java 11</a><br />
You can use Java 11 features such as its improved HTTP Client API and new methods for reading and writing strings when authoring your functions.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-step-functions-adds-amazon-emr-service-integration/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS Step Functions adds Amazon EMR service integration</a><br />
AWS Step Functions is now integrated with Amazon EMR, making it faster to build and easier to monitor EMR big data processing workflows. Read more <a href="https://aws.amazon.com/blogs/aws/new-using-step-functions-to-orchestrate-amazon-emr-workloads/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-appsync-adds-real-time-enhancements-with-pure-websockets-support-for-graphql-subscriptions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS AppSync adds Real-Time enhancements with Pure WebSockets support for GraphQL Subscriptions</a><br />
Real-time updates to connected clients is becoming a standard practice in modern applications, and this new feature from AppSync, which basically handles all of this for you, is absolutely amazing. Read more <a href="https://aws.amazon.com/blogs/mobile/appsync-realtime/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-transcribe-now-supports-speech-to-text-in-8-additional-languages/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Amazon Transcribe Now Supports Speech-to-text in 8 Additional Languages</a><br />
Repeating my previous comment for prosperity: “I’m looking forward to them fully supporting English.”</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/support-record-level-insert-update-and-delete-on-amazon-s3-with-amazon-emr/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Support record-level insert, update, and delete on Amazon S3 with Amazon EMR</a><br />
Super interesting use cases are possible with this, including a whole bunch of data privacy compliance. More about this <a href="https://aws.amazon.com/blogs/aws/new-insert-update-delete-data-on-s3-with-amazon-emr-and-apache-hudi/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-codepipeline-enables-passing-variables-between-actions-at-execution-time/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS CodePipeline Enables Passing Variables Between Actions At Execution Time</a><br />
You can now pass variables from one action to another in your pipeline and dynamically configure your actions with variables that will be evaluated at execution time.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-cloudwatch-launches-embedded-metric-format/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Amazon CloudWatch Launches Embedded Metric Format</a><br />
This certainly adds a bunch of new capabilities, but it does seem to add quite a bit of heavy-lifting to your logging strategy.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-cloudformation-launches-resource-import/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">AWS CloudFormation Launches Resource Import</a><br />
So this is a super cool feature that allows you to import existing resources into CloudFormation stacks. Still waiting for the feature that allows you to export a resource configured in the console to a CloudFormation template. More detail <a href="https://aws.amazon.com/blogs/aws/new-import-existing-resources-into-a-cloudformation-stack/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/introducing-aws-data-exchange/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Introducing AWS Data Exchange</a><br />
AWS Data Exchange is a new service that makes it easy for millions of AWS customers to securely find, subscribe to, and use third-party data in the cloud.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/adhorn/status/1196407440062996481?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">I have some serious questions for you Twitter. What currently prevents the wide adoption of chaos engineering in your organization?</a> <strong>~ Adrian Hornsby</strong><br />
According to Adrian’s poll, it looks like most people feel as though there is “enough chaos in production” already, which obviously isn’t the point. It’s a fascinating discipline that most orgs would definitely benefit from.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>November 20, 2019 –</strong> <a href="https://www.protego.io/webinar-serverless-for-pci-dss-compliance-blueprint/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2364" target="_blank" rel="noopener">Serverless for PCI DSS Blueprint (Webinar)</a></p>
<p><strong>November 22, 2019 – </strong><a href="https://www.eventbrite.com/e/serverless-transformation-webinar-is-serverless-secureless-tickets-81328669239" target="_blank" rel="noopener">Is Serverless SecureLess? (Webinar)</a></p>
<p><strong>December 2-6, 2019 – </strong><a href="https://reinvent.awsevents.com/" target="_blank" rel="noopener">AWS re:Invent 2019</a></p>
<p><strong>December 14, 2019 –</strong> <a href="https://fukuoka.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Fukuoka Japan</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Jeff Hollan</strong> (<a href="https://twitter.com/jeffhollan" target="_blank" rel="noopener">@jeffhollan</a>). Jeff is the Principal Program Manager for Microsoft Azure Functions. I know this issue is mostly about AWS and re:Invent, but let’s not forget that Microsoft launched a bunch of cool serverless stuff at Microsoft Ignite a couple of weeks ago. Jeff is leading the charge with Azure Functions, and when he gets free time, you will likely find him chatting up how to leverage cloud technology and serverless at various conferences and events around the world. Thank you, Jeff, for your advocacy and continued push for serverless innovation! ?</p>
<h3>Final Thoughts ?</h3>
<p>The number of announcements from AWS, two weeks before re:Invent, is already overwhelming. I know more are coming next week, and the ones at re:Invent are going to be mind-blowing! If you like to geek out on this stuff like I do, hold on to your hats, because the next few weeks are going to be a wild ride.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-64/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-64/</guid>
      <pubDate>Wed, 20 Nov 2019 03:28:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #63]]></title>
      <description><![CDATA[<h2>The Fat Lambda Debate Rages On… ⚖️</h2>
<p>Welcome to <strong>Issue #63</strong> of Off-by-none. Thanks for spending some time with us! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-61/">Last week</a>, we heard about some exciting serverless investment/acquisition news. This week, we dive back into the #FatLambda debate, meet some new heroes, and of course, we’ve got a ton of great content from the serverless community.</p>
<p class="p1">? Don’t forget! If you’re planning on going to AWS re:Invent this year, be sure to register for the <strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></strong>. We’re adding names to the waiting list, but we’d still love for you to join us and our awesome guests! We have some amazing sponsors (<a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego</a>, <a href="https://serverless.com" target="_blank" rel="noopener">Serverless, Inc.</a>, <a href="https://www.edrans.com/en" target="_blank" rel="noopener">Edrans</a>, and <a href="https://www.iopipe.com/" target="_blank" rel="noopener">New Relic Serverless</a>) that are making this event possible. I hope you’ll be able to join us!</p>
<p>Okay, let’s get right to it. Lots of great stuff to get to! ?</p>
<h3>When you’re weighing the benefits of a single-purpose function…</h3>
<p>Last week, I posted a <a href="https://twitter.com/jeremy_daly/status/1192088378772217857" target="_blank" rel="noopener">tweet</a> that outlined a sort of conundrum I was having with EventBridge. My latest project has multiple services subscribed to several events that use EventBridge as the messaging bus. This works really well, but my quandary was more about what the event processing architecture should look like. Should each service have separate Lambda functions to process each type of incoming event? Or should each service have just ONE Lambda function that processes ALL incoming events?</p>
<p>I added a <a href="https://twitter.com/jeremy_daly/status/1192090251046670337" target="_blank" rel="noopener">poll</a> to the tweet, and as you can see, team “One Lambda PER Event” beat out team “Fat Lambda” by a 3-to-1 margin.</p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2019/11/fat-lambda-poll.png"><img class="alignnone size-full wp-image-2334" src="https://www.jeremydaly.com/wp-content/uploads/2019/11/fat-lambda-poll.png" alt="" width="1024" height="636" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/11/fat-lambda-poll.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2019/11/fat-lambda-poll-300x186.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/11/fat-lambda-poll-768x477.png 768w" /></a></p>
<p>So clearly we have a winner, right? Well, if you read through the thread, you’ll see a number of wise serverless sages make excellent points as to why Fat Lambdas might be preferable. As I mention in my tweet, single-purpose Lambdas let you isolate business logic, provide fine-grained IAM permissions, specify concurrency per operation, and more. All of this is at the expense of creating lots of configuration and boilerplate code to handle (sometimes) fairly trivial operations.</p>
<p>Tim Wagner <a href="https://twitter.com/timallenwagner/status/1192500374793404416" target="_blank" rel="noopener">pointed out</a> that “at some point the CloudFormation outweighs the code, and skinny lambdas.” Tim Bray <a href="https://twitter.com/timbray/status/1192142336995864576" target="_blank" rel="noopener">brought up</a> the same issue as it applies to Step Functions, and wrote “if there are a bunch of different tasks to be done, do you make a new Lambda for each, or do you have just one function that examines the data and figures out what to do?” This is a valid question, especially given the level of complexity your organization is comfortable with. He also said that  he’s “seen people go both ways and [hasn’t] been able to say that either is wrong.”</p>
<p>There were also others, like Gojko Adzic, who <a href="https://twitter.com/gojkoadzic/status/1192390529310482433" target="_blank" rel="noopener">commented</a> that he does neither. Instead, he “tend[s] to group events by security needs.” Heitor Lessa <a href="https://twitter.com/heitor_lessa/status/1192410813606375429" target="_blank" rel="noopener">agreed</a>, and gave a “+1 to that”, noting the importance of “Domain + Security context.” There were several others that simply touted the management simplicity of the #fatlambda, but plenty more, like Chris Munns, who <a href="https://twitter.com/chrismunns/status/1192388619560005632" target="_blank" rel="noopener">argued the opposite</a> and said he “think[s] longer term the flexibility will be non-blocking towards advancing certain capabilities, where as the fat func might eventually become overly complex and lead to you having to refactor too many bits at once.”</p>
<p>So who’s right? Team #fatfunction or Team #skinnyfunction? ?‍♂️ I hate to use the “it depends” answer, but there are certainly many factors that go into this decision when building serverless applications. The clear lesson here is that the community is still split on this. So, for now, whichever approach works best for you, is probably the right one.</p>
<h3>Serverless News &amp; Product Announcements ?</h3>
<p><a href="https://aws.amazon.com/blogs/aws/meet-the-newest-aws-heroes-including-the-first-data-heroes/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Meet the newest AWS Heroes, including the first Data Heroes!</a><br />
Yay! AWS has announced some new members to their Heroes program, and there are some great additions. Some of my favorites include Alex DeBrie, Farrah Campbell, Brian Leroux, and Gillian Armstrong! Congrats to all of you. ?</p>
<p><a href="https://serverless.com/blog/tencent-partnership?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Tencent Cloud and Serverless Join Forces to Bring the Serverless Movement to China</a><br />
Wow, this is pretty big. Tencent is the largest internet company in Asia and powers products like QQ, WeChat, Riot Games and League of Legends. Serverless, Inc. has made them a Premiere Partner, and you can already deploy an Express.js component to their Serverless Cloud Functions.</p>
<p><a href="http://www.dbta.com/Editorial/News-Flashes/Fastly-Announces-Beta-Version-of-the-Compute-at-Edge-Solution-135160.aspx?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Fastly Announces Beta Version of the Compute@Edge Solution</a><br />
Fastly is bringing serverless compute to the edge. According to their site, this is 100x faster than anything on the market. ?</p>
<p><a href="https://devclass.com/2019/11/07/avoid-cold-starts-with-pre-warmed-azure-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Azure serves up pre-warmed Functions to offset cold starts</a><br />
The Microsoft Ignite conference announced (or summarized) a few new features in their serverless arsenal, including their Premium plan supporting up to 60 minute execution times and pre-warmed instances. There’s also the ability to integrate secrets without needing to add any code.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://idk.dev/architecting-a-low-cost-web-content-publishing-system/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Architecting a Low-Cost Web Content Publishing System</a><br />
Interesting story of how the University of St. Thomas used serverless technologies combined with legacy constraints to find a hybrid approach that solved their website speed, reliability, and management problems.</p>
<p><a href="https://medium.com/@cldellow/serverless-on-amazon-is-2019-the-last-year-ill-have-to-deal-with-vms-49cd790d2048?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Serverless on Amazon: Is 2019 The Last Year I’ll Have to Deal With VMs?</a><br />
Colin Dellow recounts three different types of projects he built using serverless and grades their overall performance. His approach to building an API and a website should make it obvious that more standard practices need to be followed (or maybe exist in the first place).</p>
<p><a href="https://medium.com/innomizetech/top-serverless-plugins-we-are-using-f02df901bbbf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Top serverless plugins we are using</a><br />
Hoang Le lists the Serverless Framework plugins that his team uses when developing serverless applications. It’s a long list, which probably shouldn’t be necessary, but there’s a nice <code>serverless-mysql</code> reference in there. ?</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@brianschmidt_78145/an-aws-lambda-ml-model-deployment-4ec83d6179d4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">An AWS Lambda ML Model Deployment</a><br />
More interesting insights into deploying machines learning models on Lambda from Brian Schmidt.</p>
<p><a href="https://engineering.opsgenie.com/convert-radio-waves-to-alerts-using-sdr-aws-lambda-and-amazon-transcribe-7ba64f8eefa?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Convert Radio Waves to Alerts using SDR, AWS Lambda and Amazon Transcribe</a><br />
This is actually quite a fascinating use case (well, to me anyways ?). Using Software-defined Radio to capture audio from HAM radio frequencies, convert them to text using Amazon Transcribe, and then send alerts if certain things are said. That’s very cool.</p>
<p><a href="https://medium.com/better-programming/unlimited-email-signups-for-free-for-indie-hackers-403c20261880?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Unlimited Email Sign-Ups for Free</a><br />
Riccardo Giorato shows you a simple serverless use case, collecting email addresses from a web form with a serverless backend.</p>
<p><a href="http://blog.zenof.ai/processing-high-volume-big-data-concurrently-with-no-duplicates-using-aws-sqs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Processing High Volume Big Data Concurrently with No Duplicates using AWS SQS</a><br />
Interesting post on how to use SQS polling and Lambda to reduce duplicate events. The problem I see here is that they’re using a Maximum Receive Count of “1” for an entire batch. This means that several messages in a batch could get processed successfully and still fail the Lambda, moving the entire batch to the DLQ. If you tried to replay those items, you’d likely reprocess some that already succeeded the first time.</p>
<h3>Serverless Concepts ?</h3>
<p><a href="https://blog.thundra.io/containers-vs-serverless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Containers vs/and Serverless</a><br />
Emrah Samdan gives you the background on the difference between containers and serverless, what they’re good for, and when you might want to choose one over the other.</p>
<p><a href="https://medium.com/@hi.anjulgarg/effortless-serverless-a-guide-to-using-aws-lambda-in-production-a5100eca4461?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">“Effortless” Serverless</a><br />
Anjul Garg has a nice post that outlines some “best practices” for running serverless in production. Lots of good tips in here for people with all levels of experience running Lambda.</p>
<p><a href="https://www.rehanvdm.com/serverless/dynamodb-importer/index.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">DynamoDB Importer</a><br />
Awesome post by Rehan van der Merwe that shows you just how incredibly scalable DynamoDB is. He demonstrates the high throughput rate that DynamoDB can handle by writing 1 million records in 60 seconds with a single Lambda (~17k writes per second).</p>
<p><a href="https://medium.com/@awstutor/aws-s3-7-useful-cli-commands-4c3a08bc8850?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">AWS S3 – 7 Useful CLI Commands</a><br />
Quick little tutorial on using some of the standard S3 commands from the AWS-CLI. Never hurts to get a refresher.</p>
<p><a href="https://medium.com/@adhorn/the-resilient-architecture-collection-80cfce7edef3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">The Resilient Architecture Collection</a><br />
Adrian Hornsby has an excellent series on resilient architectures. If you haven’t looked at these yet, do yourself a favor, and find some time.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://medium.com/@mike_48770/php-and-the-aws-lambda-custom-runtime-part-1-8ad94c622701?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">PHP and the AWS Lambda Custom Runtime (Part -1)</a><br />
If you have any interest in compiling your own custom runtime for Lambda, this post by Mike McGrath might get you pointed in the right direction.</p>
<p><a href="https://epsagon.com/blog/a-quickstart-guide-to-aws-cognito-lambda-and-ses/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">A Quickstart Guide to AWS Cognito, Lambda and SES</a><br />
Ran Ribenzaft has a great post on getting started with AWS Cognito and integrating it into your serverless application. Writing your own authentication workflows is a lot of work (trust me, I know), so anytime you can use an out-of-the-box solution, it’s worth taking a look.</p>
<p><a href="https://medium.com/@hamza.busuri/writing-an-alexa-skill-with-crud-functionality-using-dynamo-db-serverless-and-aws-lambdas-468e3358e24d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Writing an Alexa Skill with CRUD functionality using Dynamo DB, Serverless and AWS Lambdas</a><br />
I honestly don’t think we utilize voice commands enough. Hamza Busuri has a full tutorial that shows you how to build a serverless Alexa skill.</p>
<p><a href="https://medium.com/yld-blog/reduce-bloat-of-your-lambdas-5121169c15f8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Reduce bloat of your Lambdas</a><br />
I’m always interested in optimizing my Lambda functions. Sérgio Ramos shows us an example of using the <code>serverless-plugin-ncc</code> to dramatically reduce package sizes and compilation time.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://aws.amazon.com/blogs/database/applying-best-practices-for-securing-sensitive-data-in-amazon-dynamodb/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Applying best practices for securing sensitive data in Amazon DynamoDB</a><br />
You might want to grab your pocket protector for this one, because it’s for all us security nerds out there. ? Really in-depth post with lots of really good pointers for securing your data in DynamoDB.</p>
<p><a href="https://medium.com/@eldadfux/this-is-how-we-use-snyk-to-protect-our-open-source-projects-from-evil-dependencies-6ee258ca5815?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">This Is How We Use Snyk to Protect Our Open-Source Projects from *Evil* Dependencies</a><br />
Not specific to serverless, but third-party dependencies in our serverless apps are potential security threats as well. In this post, the team at Appwrite explains how they integrate Snyk into Github to scan for vulnerabilities on every pull request.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.eweek.com/servers/why-serverless-may-become-dominant-programming-paradigm?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Why Serverless May Become a Dominant Programming Paradigm</a><br />
I only included this because they say “Serverless is the new black”, which I thought was funny. There are some other good points in here too, but I think most of y’all already know them.</p>
<p><a href="https://mediatemple.net/blog/tips/serverless-with-aws-part-2/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Going Serverless with AWS: Part 2</a><br />
Eddie Jauregui has a simple explanation of a serverfull versus serverless workflow in an application that handles processing and resizing images. If you’re new to serverless, you might need to read the “Stateless and Event-Based Flow” section very carefully, but it’s a great explanation.</p>
<p><a href="https://www.zdnet.com/article/technology-containers-short-lifespans-are-getting-even-shorter/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Most technology containers live less than five minutes, and lifespans are getting even shorter</a><br />
According to this study, 63% of containers run for 10 minutes or less. Are these jobs that could be handled by FaaS?</p>
<p><a href="https://medium.com/@jgilbert001/embrace-the-creative-disruption-of-cloud-native-serverless-c4578115fca1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Embrace the Creative Disruption of Cloud Native / Serverless</a><br />
There’s a great tone to this post by John Gilbert. I liked how things used to work as well, but the cloud native / serverless approach, is just… better. Is it a paradigm shift? Yes. Is it “easier” to use? Not at first. But eventually it becomes just as easy as “the old days”, with all the benefits that come with this new approach.</p>
<h3>For those that prefer the A/V club… ?</h3>
<p><a href="https://www.serverlesschats.com/22?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">The Serverless Chats Podcast – Episode #22: Serverless Containers on Google Cloud Run with Bret McGowen</a><br />
In this episode, I chat with Bret McGowen about how Google Cloud Run can make containers serverless, why Knative is important for building developer platforms, and what the future of serverless looks like at Google Cloud.</p>
<p><a href="https://acloud.guru/series/serverlessconf-nyc-2019/view/serverless-functions?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Building Resilient Serverless Systems with “Non-Serverless” Components</a><br />
If you missed Serverlessconf NYC 2019, there are a lot of great talks to see. If you’re interested in watching mine, here it is. ?</p>
<p><a href="https://www.youtube.com/watch?v=7dQZLY9-wL0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">API Gateway Cognito User Pool Authorizer – Serverless Security</a><br />
In her latest video, Marcia Villalba shows you how to set up a Cognito user pool authorizer for your API Gateway using AWS SAM.</p>
<p><a href="https://www.youtube.com/watch?v=h0-dK1MAaFY?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Rethinking How You Do Development: Serverless at the Forefront</a><br />
Danilo Poccia chats with serverless experts Austen Collins and Matt Weagle to discuss what it means to adopt a serverless mindset, how they got started, and some advice they have for anyone looking to get started with serverless.</p>
<p><a href="https://docs.google.com/presentation/d/1Kj0R1xQL427HrT8UeTtOnDCjRndD12Pls_08d_bdN9k/edit?usp=embed_facebook&amp;usp=embed_facebook&amp;usp=embed_facebook&amp;usp=embed_facebook?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Why Serverless is Cloud 2.0 – Serverless Computing London Keynote</a><br />
Paul Johnston gave the keynote at Serverless Computing London and posted all 172 slides. There are lots of good points in here, and definitely worth taking a look.</p>
<h3>When you’re curious what AWS is building… ?‍♀️</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/nosql-workbench-for-amazon-dynamodb-adds-support-for-dynamodb-local/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">NoSQL Workbench for Amazon DynamoDB adds support for DynamoDB local</a><br />
You can now connect to your DynamoDB local instance using NoSQL Workbench.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-quicksight-goes-mobile-cross-source-join/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Amazon QuickSight goes Mobile, launches Cross Source Join and More</a><br />
Access to Amazon QuickSight from my mobile device? What is this, 2010? But seriously, this could prove to be very useful.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-comprehend-adds-six-new-languages/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Amazon Comprehend Adds Six New Languages</a><br />
Wow, this is big news for anyone doing NLP. Amazon Comprehend added six new languages including Chinese (Traditional), Chinese (Simplified), Korean, Hindi, Japanese, and Arabic.</p>
<p><a href="https://aws.amazon.com/blogs/aws/15-years-of-aws-blogging/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">15 Years of AWS Blogging!</a><br />
Major props and thanks to Jeff Barr for all the work he’s done over the years sharing AWS knowledge. Crazy to think it’s been 15 years since he started blogging for AWS.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/introducing-aws-step-functions-data-science-sdk-amazon-sagemaker/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Introducing the AWS Step Functions Data Science SDK for Amazon SageMaker</a><br />
This new open-source library allows you to easily create workflows that pre-processes data and then trains and publishes machine learning models using Amazon SageMaker and AWS Step Functions.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/aws-codebuild-adds-support-for-aws-secrets-manager/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">AWS CodeBuild Adds Support for AWS Secrets Manager</a><br />
This is awesome. Much easier to pull secrets directly from Secrets Manager than to add them as environment variables referencing the Parameter Store.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-cloudwatch-launches-cross-account-cross-region-dashboards/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Amazon CloudWatch launches cross-account cross-region dashboards</a><br />
This might be one of the greatest features AWS has launched in a while. Accessing CloudWatch data across multiple regions and accounts will make monitoring and troubleshooting infinitely more simple. More details <a href="https://aws.amazon.com/blogs/aws/cross-account-cross-region-dashboards-with-amazon-cloudwatch/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/introducing-notifications-for-aws-codecommit-aws-codebuild-aws-codedeploy-and-asw-codepipeline/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Introducing notifications for AWS CodeCommit, AWS CodeBuild, AWS CodeDeploy, and AWS CodePipeline</a><br />
I love the idea of notifications from these services, I just wish they were sent to EventBridge instead of SNS.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/ysmykalov/status/1191638162692550656?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">That feeling when you’ve finally added proper DynamoDB indexes, refactored all Scans to Queries, cleaned up some old and unused stuff and your monthly AWS bill went down from ~$320 to ~$20.</a> <strong>~ Yury Smykalov</strong><br />
DynamoDB is an amazing tool, but as I (and hundreds of others have said), it’s not easy to learn. I love hearing stories like this that show the potential once people figure out some of the best/better practices.</p>
<p><a href="https://twitter.com/ShortJared/status/1193985448164691970?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">CloudFormation: The Resource Import feature enables customers to import existing AWS resources into new or existing CloudFormation Stacks.</a> <strong>~ Jared Short</strong><br />
Jared’s keen changelog monitoring skills picked up on this gem. It’ll be interesting to see what sort of magical powers this will actually give us.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>November 14, 2019 – </strong><a href="https://zoom.us/webinar/register/6515725281292/WN_lKN5xAxsTZmtNgD8WE3YkQ?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">5 steps to improving your software engineering team’s usage of serverless (Webinar)</a></p>
<p><strong>November 19, 2019 –</strong> <a href="https://www.thundra.io/webinars/serverless-at-aws-reinvent?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2363" target="_blank" rel="noopener">Thundra | Serverless at AWS re:Invent (Webinar)</a> (I’ll be on this one)</p>
<p><strong>November 22, 2019 – </strong><a href="https://www.eventbrite.com/e/serverless-transformation-webinar-is-serverless-secureless-tickets-81328669239" target="_blank" rel="noopener">Is Serverless SecureLess? (Webinar)</a></p>
<p><strong>December 2-6, 2019 – </strong><a href="https://reinvent.awsevents.com/" target="_blank" rel="noopener">AWS re:Invent 2019</a></p>
<p><strong>December 14, 2019 –</strong> <a href="https://fukuoka.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Fukuoka Japan</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Gillian Armstrong</strong> (<a href="https://twitter.com/virtualgill" target="_blank" rel="noopener">@virtualgill</a>). Gillian is a Solutions Architect at Liberty IT and a recently named <a href="https://aws.amazon.com/developer/community/heroes/gillian-armstrong/" target="_blank" rel="noopener">AWS Machine Learning Hero</a>. Gillian has been helping to bring machine learning and serverless into the enterprise by spearheading a number of internal projects, and then <a href="http://virtualgill.io/" target="_blank" rel="noopener">sharing her experiences and expertise</a> with the community at large. Even though she is a “machine learning” hero, you’ll find her dedication to the advancement of serverless to be just as compelling. Thanks for all you do, Gillian!  ?</p>
<h3>Final Thoughts ?</h3>
<p>There are so many new serverless things each week, that I find myself whittling through hundreds of posts, sometimes cutting out some really interesting takes. For those of you that are writing articles and sharing your experiences, first of all, <strong>thank you!</strong> The quality and quantity of serverless content out there is inspiring. And, secondly, if I don’t include your article, please feel free to reach out to me so that I can follow your work. One of the main reasons why I started this newsletter was to help others share their serverless ideas. If I can help you share yours, just let me know.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Until next week,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-63/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-63/</guid>
      <pubDate>Wed, 13 Nov 2019 04:13:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #62]]></title>
      <description><![CDATA[<h2>Investing in Serverless…</h2>
<p>Welcome to <strong>Issue #62</strong> of Off-by-none. Thanks for joining us! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-61/">Last week</a>, we looked at the new “yumda” project from Michael Hart. This week, we’ve got some exciting serverless investment/acquisition news, plus lots of great content from the serverless community.</p>
<p>If you’re planning on going to AWS re:Invent this year, don’t forget to register for the <strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></strong>. We’re adding names to the waiting list, but we’d still love for you to join us and our awesome guests! We have some amazing sponsors (<a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego</a>, <a href="https://serverless.com" target="_blank" rel="noopener">Serverless, Inc.</a>, <a href="https://www.edrans.com/en" target="_blank" rel="noopener">Edrans</a>, and <a href="https://www.iopipe.com/" target="_blank" rel="noopener">New Relic Serverless</a>) that are making this event possible. I hope you’ll be able to join us!</p>
<p>Plenty to get to this week, so let’s get right to it! ?</p>
<h3>Serverless News &amp; Product Announcements ?</h3>
<p><a href="https://techcrunch.com/2019/11/01/new-relic-snags-early-stage-serverless-monitoring-startup-iopipe/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">New Relic snags early stage serverless monitoring startup IOpipe</a><br />
This is exciting news for the team over at IOpipe. They will be joining New Relic to form New Relic Serverless, bringing all their expertise along with them. Read the founders’ note <a href="https://read.iopipe.com/founders-note-iopipe-joins-new-relic-c15eeda47151?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://techcrunch.com/2019/10/29/webiny-announces-347k-seed-to-build-open-source-serverless-cms/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Webiny announces $347K seed to build open-source serverless CMS</a><br />
I think this is exciting news for serverless. A self-hosted serverless CMS that rivals WordPress is desperately needed. I don’t know if Webiny is the answer to that, but a lot of work has been done on this project and it definitely has promise.</p>
<p><a href="https://www.globenewswire.com/news-release/2019/11/04/1940334/0/en/Rackspace-to-Acquire-Onica-a-Cloud-Native-Consulting-and-Managed-Services-Company.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Rackspace to Acquire Onica, a Cloud-Native Consulting and Managed Services Company</a><br />
This is some interesting news for the cloud. Rackspace is going all in on multi-cloud, and using Onica as a way to help customer leverage AWS’s managed services as part of their cloud migration strategies could uniquely position Rackspace.</p>
<p><a href="https://blog.webiny.com/moving-to-a-self-hosted-model-with-serverless-framework-72548075694e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Moving to a Self-Hosted Model With Serverless Framework</a><br />
On top of that seed round, Webiny is now able to be self-hosted by deploying it with the Serverless Framework.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@machudennis/my-first-14hrs-with-aws-lambda-2486ac9af350?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">My first 14hrs with AWS Lambda</a><br />
First impressions are important, and this post by Dennis Machu captures his experience as he started to learn serverless. Not uncommon to hear that CloudWatch Logs offer a suboptimal experience. I love hearing stories like this.</p>
<p><a href="https://medium.com/@shauryachauhan_61806/introduction-2b75832ecc0f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Scribble : Notes everywhere!!!</a><br />
Shaurya Chauhan is working on a completely serverless note-taking app built with AWS Lambda. His three reasons for building with serverless: low maintenance, low cost, and easily scalable. Hard to argue with that for startups and side projects.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/hackernoon/how-to-faas-like-a-pro-12-uncommon-ways-to-invoke-your-serverless-functions-on-aws-part-3-2ae2b8def4d7?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">How to FaaS like a pro: 12 uncommon ways to invoke your serverless functions on AWS [Part 3]</a><br />
Part 3 of Alex Casalboni’s excellent series on different ways to invoke serverless functions.</p>
<p><a href="https://medium.com/bewgle/using-google-clouds-automl-in-aws-lambda-with-api-gateway-part-1-7e04c4b544e6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Using Google Cloud’s AutoML in AWS Lambda with API Gateway [Part 1]</a><br />
This use case is the type of “multi-cloud” approach that I think works really well. Rahul Raman is calling Google’s AutoML API from a Lambda function.</p>
<h3>When you’re looking for some advanced serverless concepts… ?</h3>
<p><a href="https://theburningmonk.com/2019/11/check-list-for-going-live-with-api-gateway-and-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Check-list for going live with API Gateway and Lambda</a><br />
Great post by Yan Cui that outlines (several) steps you should take to ensure that your API Gateway/Lambda project has all its bases covered. As he says, not everything on this list is absolutely necessary, but it should give you a good idea of the things you should be thinking about.</p>
<p><a href="https://jaxenter.com/serverless-chaos-engineering-interview-163252.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Serverless chaos engineering – interview with Emrah Samdan</a><br />
Chaos engineering is fascinating, and with serverless, distributed systems, knowing how to handle failure at all levels is a must. Emrah Samdan sat down for an interview and lays out some of the basics.</p>
<p><a href="https://lumigo.io/blog/an-introduction-to-aws-cdk/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">An Introduction to AWS CDK</a><br />
Excellent post by Efi Merdler-Kravitz that outlines the benefits of using the AWS CDK (Cloud Development Kit) instead of relying on other solutions to manage your Infrastructure-as-Code configurations.</p>
<p><a href="https://medium.com/@jgilbert001/how-do-you-manage-so-many-serverless-functions-7c015cd3c858?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">How Do You Manage So Many Serverless Functions?</a><br />
John Gilbert explains the common service patterns that he uses in serverless applications and how that helps him maintain a smaller number of functions, but still enforce single responsibility. I’ve switched to adding more functions for greater isolation, but there is definitely a management tradeoff.</p>
<p><a href="https://serverless.com/blog/structuring-a-real-world-serverless-app?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Structuring a Real-World Serverless App</a><br />
Frank Wong has a very detailed post outlining his suggestions for structuring a serverless app. There is a lot of good information in here, but personally, I prefer the multi-repo approach and using custom domain mappings over shared API Gateways. I wouldn’t label some of these things best practices, but rather “good practices” based on your use case.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://aws.amazon.com/blogs/database/introduction-to-amazon-dynamodb-for-cassandra-developers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Introduction to Amazon DynamoDB for Cassandra developers</a><br />
This blog post introduces Amazon DynamoDB to Cassandra developers and helps them get started with DynamoDB by showing some basic operations in Cassandra and how to perform the same operations in DynamoDB.</p>
<p><a href="https://medium.com/@yunskilic/developing-complete-authorization-modules-with-aws-lambda-go-postgresql-event-driven-sqs-ee641622e890?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Developing Complete Authorization Modules with AWS Lambda &amp; Go &amp; PostgreSQL &amp; Event-Driven SQS Queue</a><br />
Yunus Kılıç outlines a complete sample project in this post that shows you how to develop a completely serverless signup workflow using Go.</p>
<p><a href="https://medium.com/manomano-tech/using-serverless-framework-localstack-to-test-your-aws-applications-locally-17748ffe6755?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Using Serverless Framework &amp; Localstack to test your AWS applications locally</a><br />
Localstack is another option for testing your AWS serverless applications locally. This post by Antonio Reyes will give you the details on getting up and running with it.</p>
<p><a href="https://medium.com/@neowei/deploy-your-serverless-server-side-rendering-ssr-angular-app-on-aws-lambda-a01a3aab6ef6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Deploy Your Serverless Server-side-rendering (SSR)Angular App on AWS Lambda</a><br />
Server-side rendering with AWS Lambda (or even Lambda@Edge) is becoming more and more popular, and I think with CloudFront on top, it’s a pretty slick solution. In this post, Neo Liu shows you how you can use Lambda for SSR with Angular.</p>
<p><a href="https://medium.com/innomizetech/how-do-we-host-our-static-website-b0b60f2a09f2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">How Do We Host Our Static Website</a><br />
Hoang Le shows you how to host a serverless static website on AWS by defining a CI/CD pipeline to automate your deployment process.</p>
<p><a href="https://blog.thundra.io/building-a-serverless-backend-api-part-2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Building A Serverless Backend API Part 2</a><br />
Part 2 of Serkan Özal detailed tutorial on building out a serverless API.</p>
<p><a href="https://blog.begin.com/how-to-create-an-openjs-architect-serverless-app-with-typescript-d8549102f73c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">How to create an OpenJS Architect serverless app with TypeScript</a><br />
Architect is a pretty slick framework for building serverless applications. Brian Leroux shows you how to create your first serverless app built with TypeScript and Architect.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://www.protego.io/state-of-serverless-and-security/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">State of Serverless and Security</a><br />
Protego recently did a survey on the state of serverless and security. Big take away here is that 68% of respondents are not confident with their serverless security posture. Is this just normal hyper vigilance, or are cloud providers not doing enough?</p>
<p><a href="https://www.protego.io/everything-you-need-to-know-about-cloud-native-security/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Cloud Native Application Security – What You Need To Know</a><br />
Cloud security is a huge topic (remember AWS’s re:Inforce conference?) that requires a lot of careful thought. This post contains some of the basics to get you thinking in the right direction.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://blog.thundra.io/rethinking-serverless-architectures-with-eventbridge?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Rethinking Serverless Architectures With EventBridge</a><br />
I’m a huge fan of EventBridge and the power it adds to distributed messaging. Sarjeel Yusuf outlines why EventBridge is important, and why you should start rethinking the way you’re building serverless applications.</p>
<p><a href="https://medium.com/growthops/meet-serverless-46acdacb1043?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Late to the party? No problem. Meet serverless…</a><br />
Tristan Strathearn compares serverless to other more traditional approaches using a number of factors to highlight the differences.</p>
<p><a href="https://www.techrepublic.com/article/forrester-the-5-ways-cloud-computing-will-change-in-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Forrester: The 5 ways cloud computing will change in 2020</a><br />
There’s some good predictions in this post. I totally agree that hyperscale cloud alliances with SaaS companies will be huge to help move the focus back to app development. And, cloud security will definitely be at the forefront this coming year.</p>
<p><a href="https://dashbird.io/blog/serverless-in-2020/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">What to expect from serverless tech in 2020?</a><br />
John Demian also has some thoughts on what to expect from serverless in 2020. He says education is sorely needed, and even though there is a lot out there, I totally agree.</p>
<p><a href="https://www.forbes.com/sites/forbestechcouncil/2019/11/04/serverless-is-it-the-kubernetes-killer/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Serverless: Is It The Kubernetes Killer?</a><br />
Kendall Miller says “Serverless isn’t the future. But serverless is definitely a key part of the future.” I think it depends on how you define serverless. ?</p>
<p><a href="https://dashbird.io/blog/serverless-will-change-your-business/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">How Serverless Applications Will Change Your Business</a><br />
Dorian Martin writes about six ways that adopting serverless will fundamentally change how you build and grow your business.</p>
<h3>For the audiophile… ?</h3>
<p><a href="https://www.serverlesschats.com/21?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Serverless Chats Podcast – Episode #21: Getting Started with Serverless (Special Episode)</a><br />
In this special episode, I outline a number of topics for people learning serverless, and let my guests from the first 20 episodes explain the details of each, and why they’re important.</p>
<h3>When you’re curious what AWS is building… ?‍♀️</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/aws-for-wordpress-plugin-now-available-and-with-new-amazon-cloudfront-workflow/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">AWS for WordPress plugin now available and with new Amazon CloudFront workflow</a><br />
If you’re still using WordPress and would like to speed up page loads and reduce the traffic to your server, this new update to the AWS for WordPress plugin might help you. It will now manage a CloudFront distribution for you and use your WP site as the origin. I tried installing this and had some strange issues, but I have an atypical set up.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/create-serverless-apps-with-automated-deployment-pipeline-aws-lambda-console/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Create serverless applications with an automated deployment pipeline from the AWS Lambda console</a><br />
A beta version of this feature was released early last month, but it’s not available in a bunch of regions. I really like how this bootstraps a project for you, but I wish it would generate the CloudFormation for the CI/CD process too.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/manage-amazon-api-gateway-limits-with-aws-service-quotas/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Manage your Amazon API Gateway limits with AWS Service Quotas</a><br />
If you haven’t looked at AWS Service Quotas yet, do yourself a favor and check it out. The AWS documentation is often a bit difficult to sift through, and this tool not only lets you see every service, what the limits are, and whether or not they are adjustable, but you can manage your quota change requests as well. Super handy.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amplify-cli-enables-creating-amazon-cognito-user-pool-groups-configuring-fine-grained-permissions-adding-user-management-capabilities/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Amplify CLI enables creating Amazon Cognito User Pool Groups, configuring fine-grained permissions on groups, and adding user management capabilities to applications</a><br />
The Amplify CLI now enables developers to create Amazon Cognito User Pool Groups and configure fine grained permissions on these groups for accessing underlying backend resources such as S3, API Gateway, and AppSync.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/aws-secrets-manager-supports-increased-secret-size-api-request-rate/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">AWS Secrets Manager now supports larger size for secrets and resource polices and higher request rate for GetSecretValue API</a><br />
The GetSecretValue API call now allows up to 1,500 requests per second, plus you can store secrets that are up to 10 kb.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://medium.com/the-theam-journey/booster-designing-a-more-approachable-serverless-experience-b497300abb87?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Designing a more approachable Serverless experience</a><br />
The team over at the Agile Monkeys announced “Booster” at Serverlessconf New York. I think they are right about the learning curve, and more higher level abstractions are definitely needed. It’ll be interesting to see where this project goes and whether or not this opinionated approach will make it easier.</p>
<p><a href="https://medium.com/@stackeryio/15-hours-writing-cloudformation-reduced-to-15-minutes-with-stackery-f765c42d1368?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">15 hours writing CloudFormation reduced to 15 minutes with Stackery</a><br />
This is an all too familiar story for those of us who work with the beast that is CloudFormation. In many cases, writing CloudFormation by hand (even with some copy and pasting) is untenable. There are lots of abstractions for this, but Stackery’s visual builder is a pretty cool tool.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/srhtcn/status/1191693998819295234?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Looks like #Serverless monitoring tools are giving up the focus on #AWS Lambda one by one. To me, this validates the obvious: AWS Lambda is still not as widely adopted as people expected after 5 years. What do you think? Does AWS Lambda still need time?</a> <strong>~ Serhat Can</strong><br />
It looks like Serhan is trying to stir some stuff up on Twitter. ? But he does make an astute observation about some monitoring tools shifting to a broader strategy. It’s a great thread that’s worth checking out.</p>
<p><a href="https://twitter.com/sheenbrisals/status/1190988645878173696?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">Why I love #Serverless. Commerce event brought more visitors. Containers needed bit of TLC (even with the auto…) and serverless services? No one noticed they existed! That feeling, as in the MC advert, is priceless.</a> <strong>~ Sheen Brisals</strong><br />
Sheen posted about a recent traffic spike at LEGO, noting that the Lambda functions needed no special attention to handle the increased traffic.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>November 6-8, 2019 – </strong><a href="https://serverlesscomputing.london/">Serverless Computing London</a></p>
<p><strong>November 14, 2019 – </strong><a href="https://zoom.us/webinar/register/6515725281292/WN_lKN5xAxsTZmtNgD8WE3YkQ?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2362" target="_blank" rel="noopener">5 steps to improving your software engineering team’s usage of serverless (Webinar)</a></p>
<p><strong>December 2-6, 2019 – </strong><a href="https://reinvent.awsevents.com/" target="_blank" rel="noopener">AWS re:Invent 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Sven Al Hamad</strong> (<a href="https://twitter.com/SvenAlHamad" target="_blank" rel="noopener">@SvenAlHamad</a>). Sven is the CEO and co-founder of Webiny, an open source, serverless CMS. This project was started almost two years ago, and Sven and his team’s continued dedication has resulted in a seed round to help push this project even further. Building and maintaining a project like this isn’t easy, but thanks to people like Sven, the serverless community continues to benefit from great tools like Webiny! Thanks, Sven. Keep up the great work! ?</p>
<h3>Final Thoughts ?</h3>
<p>Congrats again to the teams at IOpipe and Webiny. It’s great to see investments like this into serverless projects and technologies. I’m excited to see where this leads for both of them.</p>
<p>I also want to thank all the <strong>#ServerlessForEveryone Community Party</strong> sponsors again. <a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego</a>, <a href="https://serverless.com" target="_blank" rel="noopener">Serverless, Inc.</a>, <a href="https://www.edrans.com/en" target="_blank" rel="noopener">Edrans</a>, and <a href="https://www.iopipe.com/" target="_blank" rel="noopener">New Relic Serverless</a> are the ones that have made this whole thing possible. Thank you all. It’s going to be an absolute blast!</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Cheers,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-62/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-62/</guid>
      <pubDate>Tue, 05 Nov 2019 23:58:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #61]]></title>
      <description><![CDATA[<h2>Yup, it’s “yum” for Lambda… ??‍?</h2>
<p>Welcome to <strong>Issue #61</strong> of Off-by-none. I’m so happy you’re here! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-60/">Last week</a>, we looked at alternatives for function composition and introduced some new serverless development platforms. This week, we’re going to take a quick look at the new “yumda” product, plus we’ve got plenty of great content from the community.</p>
<p>BTW, are you going to AWS re:Invent this year? If so, don’t forget to register for the <strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></strong>. We’ve got plenty of awesome guests and some amazing sponsors (<a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego</a>, and <a href="https://serverless.com" target="_blank" rel="noopener">Serverless, Inc</a>) that’ll make this a great event. I hope you’ll join us!</p>
<p>Lots to get to this week, so let’s get started! ?</p>
<h3>Native dependencies in Lambda never tasted so good… ?</h3>
<p>Last week on <a href="https://www.serverlesschats.com/19?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">the Serverless Chats Podcast</a>, I spoke with Michael Hart about an amazing new project he was working on called “yumda”. This project lets you easily install binary packages into your Lambda environments and then publish them as Lambda Layers to use in your serverless applications.</p>
<p>The project has been <strong>released to the public</strong> and is now available on <a href="https://github.com/lambci/yumda?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">GitHub</a>. ?</p>
<p>This is a really great project that will make working with native binaries so much simpler. I think it will open up tons of possibilities, especially for those new to Lambda and serverless. Give it a look, and be sure to send your feedback.</p>
<h3>Serverless News &amp; Product Announcements ?</h3>
<p><a href="https://devclass.com/2019/10/28/cncf-serverless-wg-gets-cloudevents-into-incubator-approves-1-0-release/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">CNCF Serverless WG gets CloudEvents into incubator, approves 1.0 release</a><br />
The CloudEvents spec from the CNCF is maturing. Several projects, including Microsoft’s EventGrid, Adobe I/O Events, Oracle Fn, and Knative have adopted the standard.</p>
<p><a href="https://serverless.com/blog/aws-lambda-performance-optimization?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">AWS Lambda Performance Optimization &amp; Monitoring with Tracing &amp; Spans (Serverless Framework Pro)</a><br />
The Serverless Framework is adding feature after feature to give you complete visibility into your serverless applications. This new Tracing and Spans feature is another really useful tool.</p>
<p><a href="https://blog.thundra.io/seamless-monitoring-simplified?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Seamless Monitoring Simplified!</a><br />
Thundra’s new update lets customers instrument their functions directly from the console rather than needing to modify YAML files or add additional instrumentation.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@BaiPi/dirty-old-code-part-3-b9f3e7ed6f9b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Dirty Old Code</a><br />
Pierre Bails and the team at Precogs migrated their monolithic Ruby on Rails app to a serverless environment. Check out how they migrated their application in pieces, slowly reducing the dependency on the legacy system.</p>
<p><a href="https://medium.com/@dandu.8x/canary-b-g-deployment-for-aws-serverless-stacks-immutable-iac-7f1f98bb76e6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Canary (B/G) Deployment for AWS Serverless Stacks (Immutable IaC)</a><br />
Dinesh Dandu walks us through how his team built their CI/CD pipeline to deploy their serverless application.</p>
<p><a href="https://medium.com/@tuomovee/my-key-takeaways-from-serverlessdays-stockholm-c852a5ca9e71?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">My key takeaways from ServerlessDays Stockholm</a><br />
ServerlessDays events are awesome. They give people a chance to see and hear speakers from around the world. Tuomo Varis was at ServerlessDays Stockholm, and has put together a nice recap of the event.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://serverless.com/blog/cron-jobs-on-aws?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Creating, monitoring, and testing cron jobs on AWS</a><br />
Running automated tasks is one of the most basic, yet powerful use cases for serverless. Gareth McCumskey has a very detailed post that will show you how to take full advantage of serverless cron jobs.</p>
<p><a href="https://medium.com/serverless-transformation/serverless-event-scheduling-using-aws-step-functions-b4f24997c8e2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Serverless Event Scheduling</a><br />
Ben Ellerby outlines a variation on the Step Functions as an email scheduler pattern. He adds an SQS queue for some additional durability and retries. I really like this Step Functions approach for scheduling ad hoc events.</p>
<p><a href="https://medium.com/@alexrolek/the-serverless-vector-map-stack-lives-22835d341d7d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">The Serverless Vector Map Stack Lives!</a><br />
Great post by Alexander Rolek that details how the release of AWS Aurora Serverless Postgres (with PostGIS support) makes building an entirely serverless map stack now possible.</p>
<h3>When you’re looking for some advanced serverless concepts… ?</h3>
<p><a href="https://medium.com/@dorian599/serverless-aws-lambda-python-dependencies-6f27beef87af?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Serverless – AWS Lambda Python Dependencies</a><br />
Dorian Machado gives you the basic steps to install Python dependencies for use in your Lambda functions.</p>
<p><a href="https://medium.com/@zaccharles/net-core-3-0-aws-lambda-benchmarks-and-recommendations-8fee4dc131b0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">.NET Core 3.0 AWS Lambda Benchmarks and Recommendations</a><br />
Zac Charles has been keeping up with the performance of .NET Core 3.0 on AWS Lambda and shares his latest benchmarks and recommendations with us.</p>
<p><a href="https://serverless.com/aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">AWS Lambda – The Ultimate Guide</a><br />
Pretty much everything you would ever want to know about Lambda is in this article from the team at Serverless, Inc.</p>
<p><a href="https://dashbird.io/blog/introduction-to-step-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">A simple introduction to Step Functions</a><br />
If you’ve yet to dive into AWS Step Functions, or just want a quick refresher, take a look at Renato Byrro’s introductory post.</p>
<p><a href="https://medium.com/lego-engineering/dont-wait-for-functionless-write-less-functions-instead-8f2c331cd651?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Don’t wait for Functionless. Write less Functions instead</a><br />
Sheen Brisals has a great post that gets you thinking about minimizing your Lambda functions in favor of using built in cloud integrations. We’re not “functionless” yet, but as Sheen points out, there are a lot of things we can do without them.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://journal.highlandsolutions.com/serverless-data-visualizations-9f4a905bb8aa?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Serverless Data Visualizations</a><br />
This tutorial will show you how to create data visualizations with AWS Lambda using Python’s Pandas, Numpy, and Matplotlib libraries.</p>
<p><a href="https://medium.com/@kulkarniankita9/how-to-get-started-and-debug-lambda-functions-72ad77499ba8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">How to get started and debug Lambda functions</a><br />
Ankita Kulkarni shows you how to build and test Lambda functions with Netlify.</p>
<p><a href="https://medium.com/@devops_83824/developing-serverless-applications-on-aws-using-aws-serverless-application-model-sam-cdcf3bda59bd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Developing Serverless Applications on AWS using AWS Serverless Application Model (SAM)</a><br />
This is a thorough document that consolidates a lot of information into a single post. If you’re working with AWS SAM, this could be a good reference manual for you.</p>
<p><a href="https://medium.com/@paulokieffer/go-serverless-in-kubernetes-with-knative-596db906c96a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Go serverless in Kubernetes with Knative</a><br />
If you’re thinking about going down the Knative route, Paulo Kieffer has a short and sweet intro for you.</p>
<p><a href="https://blog.thundra.io/building-a-serverless-backend-api-part-1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Building A Serverless Backend API Part 1</a><br />
Here’s a very detailed tutorial from Serkan Özal on how to create a serverless API. This is great for beginners.</p>
<p><a href="https://medium.com/hatchsoftware/setting-up-ci-cd-for-lambda-functions-using-aws-codepipeline-880567769dde?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Setting up CI/CD for Lambda Functions using AWS CodePipeline</a><br />
Lots of posts on CI/CD for serverless projects, and everyone’s process is different! Here is another example by Maarten Thoelen.</p>
<p><a href="https://medium.com/@stewartnoll/serverless-ci-cd-using-github-actions-e7ad9d1cad59?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Serverless CI/CD Using Github Actions</a><br />
And here’s another CI/CD workflow for your serverless applications. This one uses the new Github Actions, which is kind of cool.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://medium.com/@jgilbert001/cloud-native-security-focus-on-your-domain-db3364fcab86?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Cloud Native Security: Focus On Your Domain</a><br />
John Gilbert shares his thoughts on where the shared responsibility model ends with serverless applications, and where you must step in to ensure your users’ sensitive data is protected.</p>
<p><a href="https://www.protego.io/cloud-native-security-what-it-means/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Cloud Native Security: What it Means</a><br />
Tal Melamed explains how serverless and cloud native change the security landscape, and offers some recommendations for making sure your applications are secure.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://techbeacon.com/enterprise-it/serverless-multi-cloud-hype-or-reality?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Serverless and multi-cloud: Hype or reality?</a><br />
Interesting post by Sebastien Goasguen from TriggerMesh. In my mind, there is a big difference between being “multi-cloud” and using services from “multiple” clouds. While we’ll definitely continue to see enterprises adopting the multi-cloud strategy, I still believe this has the opposite effect on choosing best-of-breed services.</p>
<p><a href="https://forrestbrazeal.com/2019/10/23/hey-aws---its-time-to-pay-oss-developers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Hey AWS – it’s time to pay OSS developers</a><br />
Forrest Brazeal’s latest Cloud Irregular newsletter points out the lack luster performance of AWS’s Serverless Application Repository (SAR). Could adding some incentives for developers make it more popular?</p>
<p><a href="https://medium.com/@PaulDJohnston/what-is-serverless-the-2020-edition-5a2f21581fe5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">What is Serverless? The “2020” edition</a><br />
Paul Johnston can’t stand the word “serverless” any more, but that hasn’t stopped him from embracing the value it provides. In his latest post, he articulates a few major positions on what serverless is, and why it’s important for the future of the cloud.</p>
<p><a href="https://read.acloud.guru/https-medium-com-timawagner-the-serverless-supercomputer-555e93bbfa08?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">The Serverless Supercomputer</a><br />
If you’re curious about the future of serverless, and what’s truly possible, take a few minutes to read Tim Wagner’s latest post.</p>
<h3>For the those that want an audio/visual experience… ?</h3>
<p><a href="https://www.serverlesschats.com/20?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Episode #20: The Serverless Journey of LEGO.com with Sheen Brisals</a><br />
In this episode, I chat with Sheen Brisals about the problems the LEGO Group was trying to solve with serverless, what they learned from their journey, and what’s the idea behind “functionless.</p>
<p><a href="https://acloud.guru/series/serverlessconf-nyc-2019?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Serverlessconf NYC 2019 Videos</a><br />
A Cloud Guru posted several of the talks from this year’s Serverlessconf in NYC. Lots of really interesting presentations, so be sure to grab some popcorn and a notebook.</p>
<p><a href="https://www.youtube.com/watch?v=bUmR6jBRLiY?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Building CI/CD Pipelines for Serverless Applications</a><br />
More serverless CI/CD goodness. This time from the Serverless Toronto meetup.</p>
<h3>When you’re wondering what the devs at AWS are up to… ?‍♀️</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-transcribe-now-supports-australian-english-speech-to-text-in-real-time/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Amazon Transcribe Now Supports Australian English Speech-to-Text in Real Time</a><br />
I know AWS keeps adding dialect support, but I’ve been using it with US English for quite some time and the accuracy can be <a href="https://twitter.com/jeremy_daly/status/1188564942124920833" target="_blank" rel="noopener">terrible</a>. Maybe they just need to add <a href="https://twitter.com/jbesw/status/1188765371634978816" target="_blank" rel="noopener">Boston English</a> as another supported language. ?‍♂️</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/aws-amplify-console-aannounces-pull-request-previews-for-fullstack-serverless-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">AWS Amplify Console announces Pull-Request Previews for Fullstack Serverless Applications</a><br />
This is a pretty cool feature. A pull-request preview deploys every pull request made to your GitHub repository to a unique preview URL. It even spins up and tears down ephemeral backends for testing.</p>
<p><a href="https://aws.amazon.com/blogs/aws/200-amazon-cloudfront-points-of-presence-price-reduction/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">200 Amazon CloudFront Points of Presence + Price Reduction</a><br />
Wow, 200 total POPs. I have some extra room in my basement if AWS is looking for some more space.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://www.npmjs.com/package/@totallymoney/serverless-sns-to-sqs-events?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">@totallymoney/serverless-sns-to-sqs-events</a><br />
This is a Serverless framework plugin that simplifies the configuration of SNS to SQS to Lambda.</p>
<p><a href="https://medium.com/@pvlasov/edit-serverless-yaml-templates-in-vscode-like-a-pro-serverless-ide-63e15dda286f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Edit serverless YAML templates in VSCode like a pro | Serverless IDE</a><br />
I think we’ve mentioned this tool before, but Pavel Vlasov’s Serverless IDE tool is a nice little add-on for your serverless development workflow.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/jesterxl/status/1186993795872763904?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">10 reasons why I love AWS Step Functions so much, illustrated using a JavaScript Promise chain: step = json =&gt; service(params) .then(flakyService()) .then(longService()) .then(({ id }) =&gt; Promise.all([send(id), audit(id)]))</a> <strong>~ Jesse Warden</strong><br />
Jesse Warden has a clever thread that demonstrates the usefulness of AWS Step Functions.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>October 30, 2019 – </strong><a href="https://www.eventbrite.com/e/76091223899?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2361" target="_blank" rel="noopener">Serverless Transformation Webinar – How Can Serverless Improve</a> (I’ll be on this with Ran Ribenzaft and Erica Windisch)</p>
<p><strong>October 30, 2019 –</strong> <a href="https://pages.awscloud.com/Serverless_Webinar_Q1_Epsagon_Israel-Epsagon.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2354" target="_blank" rel="noopener">Retail at the Scale of Serverless with AWS – Webinar</a></p>
<p><strong>October 30, 2019 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2019_1020-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Managing Serverless Applications with SAM Templates</a></p>
<p><strong>November 6-8, 2019 – </strong><a href="https://serverlesscomputing.london/">Serverless Computing London</a></p>
<p><strong>December 2-6, 2019 – </strong><a href="https://reinvent.awsevents.com/" target="_blank" rel="noopener">AWS re:Invent 2019</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Daniel ZivKovic</strong> (<a href="https://twitter.com/DanielBookmarks" target="_blank" rel="noopener">@DanielBookmarks</a>). Daniel is a Cloud Solutions Architect at Onica, and the organizer of the <a href="http://www.ServerlessToronto.org" target="_blank" rel="noopener">Serverless Toronto User Group</a>. He’s been organizing and running these events since May of last year, and has brought in a number of amazing serverless speakers to share their knowledge with the Toronto developer community. I’ve met Daniel a number of times, and his enthusiasm for serverless is infectious. The work he does helps bring new people into the serverless community everyday, and that is something to cheer for. Thanks for all you do, Daniel! ?</p>
<h3>Final Thoughts ?</h3>
<p>It’s been another heads down week for me trying to wrap up a big serverless project I’m working on, but I did get a chance to chat with some AWS PMs and partners. Lots of super cool stuff coming down the pike for Lambda and serverless at AWS. We’re just over a month away from re:Invent, and I’m ridiculously excited about it. It’s going to be a very, very good end-of-year for serverless.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Until next week,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-61/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-61/</guid>
      <pubDate>Wed, 30 Oct 2019 02:57:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Lambda API: v0.10.3 Released]]></title>
      <description><![CDATA[<p>Lambda API v0.10.3 has been released to fix a few minor bugs around route prefixing and base64Encoding (thanks <a class="user-mention" href="https://github.com/Sleavely" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=677030" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self">@Sleavely</a> and <a class="user-mention" href="https://github.com/btakita" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=3664" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self">@btakita</a>), and to add a whitelist for headers on error cases (<a class="user-mention" href="https://github.com/hussfelt" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=168864" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self">@hussfelt</a>).</p>
<p>Your feedback is greatly appreciated, so please submit feature requests and <a href="https://github.com/jeremydaly/lambda-api/issues" target="_blank" rel="noopener">issues</a>. If you want to contribute, even better! Pull requests are always welcome.</p>
<p><strong>Full Release Notes:</strong> <a href="https://github.com/jeremydaly/lambda-api/releases/tag/v0.10.3">https://github.com/jeremydaly/lambda-api/releases/tag/v0.10.3</a></p>
<p><strong>NPM: </strong><a href="https://www.npmjs.com/package/lambda-api">https://www.npmjs.com/package/lambda-api</a><strong><br />
GitHub: </strong><a href="https://github.com/jeremydaly/lambda-api">https://github.com/jeremydaly/lambda-api</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c3">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c2">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c1" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<p>Learn more about <a href="https://www.jeremydaly.com/projects/lambda-api/"><strong>Lambda API</strong></a> or check out the other <a href="https://www.jeremydaly.com/current-projects"><strong>projects</strong></a> I'm working on.</p>]]></description>
      <link>https://www.jeremydaly.com/lambda-api-v0-10-3-released/</link>
      <guid>https://www.jeremydaly.com/lambda-api-v0-10-3-released/</guid>
      <pubDate>Tue, 29 Oct 2019 13:46:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #60]]></title>
      <description><![CDATA[<h2>Thinking about Function Composition… ?</h2>
<p>Welcome to <strong>Issue #60</strong> of Off-by-none. Thanks for joining us! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-59/">Last week</a>, we shared some AWS re:Invent news and learned how AWS built a production service using serverless technologies. This week, we look at options for function composition, introduce some new serverless platforms, and share lots of great serverless content from the community.</p>
<p class="p1">☝️Also, don’t forget to register for the <strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></strong>. We’ve got lots of great guests and some amazing sponsors (<a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego</a>, and <a href="https://serverless.com" target="_blank" rel="noopener">Serverless, Inc</a>). I hope you’ll join us for a night of serverless camaraderie!</p>
<p>Plenty to get to this week, so let’s jump in! ?‍♂️</p>
<h3>When you need to stitch together some Lambda functions together… ?</h3>
<p>It’s been awhile, but I was finally able to sit down and write a new serverless blog post. <a href="https://www.jeremydaly.com/the-dynamic-composer-an-aws-serverless-pattern/" target="_blank" rel="noopener">The Dynamic Composer (an AWS serverless pattern)</a> is a serverless pattern that utilizes asynchronous invocation chaining of Lambda functions. Yes, it’s Lambdas calling Lambdas, but as the post outlines, there are several reasons why you might favor this pattern over using AWS Step Functions.</p>
<p>There are also a number of guarantees that come with asynchronous invocations. If you design your functions to allow errors to bubble up to the Lambda service, you get automatic retries, error handling, durability and replay, and even throttling management. Take a look at the post and let me know your thoughts.</p>
<h3>Serverless News &amp; Product Announcements ?</h3>
<p><a href="https://www.zoho.com/catalyst/index.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Zoho Catalyst</a><br />
So this is really interesting. Zoho, the company that has like 40 different SaaS apps, apparently has been building them all on a serverless backend. Now, they are offering developers the ability to use their tools and infrastructure to build your own serverless applications.</p>
<p><a href="https://medium.com/@todsacerdoti/introducing-pipedream-bbca9dde0dc6?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Introducing Pipedream</a><br />
This thing looks like a super-charged IFTTT. I watched the video and the interface is very impressive. I’m not sure if you would use this to build an entire serverless application, but for a number of workflows, this could be a useful tool.</p>
<p><a href="https://www.twilio.com/blog/introducing-twilio-socless?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Introducing Twilio’s SOCless: Automated Security Runbooks</a><br />
This is very cool. Twilio’s SecOps team has spent the last several years working on automating cloud security workloads and codifying them in “runbooks.” They’ve now made this open source so that you can implement the same level of security automation and threat intelligence in your AWS environments. It’s also 100% serverless (running on Lambda and Step Functions) and it use the Serverless Framework.</p>
<p><a href="https://blog.thundra.io/a-different-lens-to-monitor-your-serverless-architecture-operations-search?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">A Different Lens to Monitor your Serverless Architecture: Operations Search!</a><br />
Here’s another nice feature that Thundra has introduced. You can now capture, monitor, and search for errors that occur against non-function resources from the resource’s perspective. This gives you the ability to see which resources (like DynamoDB, SQS, etc.) had failed calls, instead of needing to find the function or service that made the initial call.</p>
<p><a href="https://epsagon.com/blog/epsagon-aws-appsync-integration/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Announcing: Epsagon, First Provider of Distributed Tracing for AWS AppSync</a><br />
More good stuff from Epsagon. Now you can monitor and see traces for AWS AppSync with no coding changes or agents.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@tarikub/serverless-app-from-design-to-production-a-case-study-2985ba1a1a40?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Serverless App from Design to Production: A Case Study</a><br />
Tariku Tessema wanted to learn more about serverless and get a better understanding of the implementation. So he started working on a Roku Channel app that displays a screensaver of photos submitted via text message, and he’s been documenting it.</p>
<p><a href="https://medium.com/kunlabora-blog/repairapp-a-serverless-overview-f34216f98558?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">RepairApp: A serverless overview</a><br />
Kim Lauwers discusses how his team at Kunlabora built the RepairApp. Lots of good detail in here about their decision making process and their architecture.</p>
<p><a href="https://aws.amazon.com/blogs/apn/deploying-code-faster-with-serverless-framework-and-aws-service-catalog/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Deploying Code Faster with Serverless Framework and AWS Service Catalog</a><br />
This is a really great use of the AWS Service Catalog. This post outlines how GoDaddy used the Serverless Framework along with the AWS Service Catalog to quickly and securely deploy standardized serverless templates.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/sainsburys-data-analytics/serverless-orchestration-with-aws-step-functions-lessons-learned-3ba143538b8f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Serverless Orchestration with AWS Step Functions: Lessons Learned</a><br />
Fatlum Vranovci outlines a very good use case for Step Functions and why his team chose them over simple function chaining.</p>
<p><a href="https://developer.ibm.com/tutorials/build-a-real-time-voting-application/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Build a real-time voting application</a><br />
This is an incredibly in-depth tutorial that shows you how to build a realtime voting application using IBM Cloud Functions, IBM Cloudant, Twilio, and PubNub. Plus, it’s a great serverless use case.</p>
<p><a href="https://medium.com/@guruupase/cron-job-on-a-nodejs-express-serverless-app-using-aws-cli-8272d31aa9b4?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Cron job on a Nodejs Express Serverless app using AWS CLI</a><br />
Here’s a simple use case for serverless: using it to run cron jobs.</p>
<h3>When you’re looking for some advanced serverless concepts… ?</h3>
<p><a href="https://medium.com/@synchrophoto/facets-in-nosql-workbench-for-amazon-dynamodb-dadc8267523b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">What are facets in NoSQL Workbench for Amazon DynamoDB</a><br />
If you haven’t played around with the NoSQL Workbench for Amazon DynamoDB yet, you really should. And if you’re a bit confused by facets, this post will help clear things up for you.</p>
<p><a href="https://dev.to/azure/serverless-circuit-breakers-with-durable-entities-3l2f?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Serverless circuit breakers with Durable Entities</a><br />
I love the Circuit Breaker pattern, and with the near-limitless scale of serverless applications, the need for it greatly increases. Jeff Hollan explains what a circuit breaker is, why you need it, what a typical scenario looks like, and how to implement one with Azure Functions.</p>
<p><a href="https://medium.com/cloud-native-the-gathering/querying-dynamodb-by-date-range-899b751a6ef2?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Querying DynamoDB by Date Range</a><br />
I love articles that dive into the details of DynamoDB. Kathy Daniels has a great post that gives you some how-tos for querying and sorting DynamoDB tables by Date Range.</p>
<p><a href="https://medium.com/faun/amazon-aurora-serverless-scaling-driven-by-application-metrics-615565aab89c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Amazon Aurora Serverless scaling driven by application metrics</a><br />
Here’s an overview of how scaling works with Amazon Aurora Serverless. There’s also an interesting real world use case in there that utilizes the API to pre-warm your capacity for predictable traffic spikes.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://medium.com/@chrisandrews7/real-world-integration-testing-in-serverless-c9b4b100309a?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Real world integration testing with Serverless</a><br />
Chris Andrews has an interesting approach to serverless integration testing. He’s using the <code>serverless-localstack</code> plugin for service discovery and incorporating the outputs into his tests.</p>
<p><a href="https://findwork.dev/blog/testing-cloudflare-workers/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Testing Cloudflare workers</a><br />
Dani Hodovic is right about testing serverless applications, it’s not always easy, and they’re often hard to debug. In this post, he consolidates and documents all his knowledge for testing Cloudflare workers, so you don’t have to.</p>
<p><a href="https://medium.com/@omalwijegunawardana/deploying-your-first-aws-lambda-function-using-serverless-framework-174fd151ad1e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Deploying your first AWS Lambda function using Serverless Framework</a><br />
For those of you that have yet to make the leap, Omal Vindula shows you how to deploy a Lambda function using the Serverless Framework.</p>
<p><a href="https://medium.com/better-programming/how-to-build-a-serverless-api-with-dynamodb-aws-lambda-and-api-gateway-d61ac63c27dd?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">How To Build a Serverless API With DynamoDB, AWS Lambda, and API Gateway</a><br />
I wouldn’t suggest building a serverless API entirely through the console like Andrew Bestbier shows you here, but this post deserves to be included due to the sheer number of screenshots it has! Infrastructure as Code (IaC) is the way to build production serverless applications, but seeing how it’s all configured in the console is likely a useful exercise.</p>
<p><a href="https://medium.com/serverlessguru/how-to-unit-test-with-nodejs-76967019ba56?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">How to Unit Test with NodeJS?</a><br />
Not specifically targeted for serverless, but knowing how to run unit tests on your serverless applications is super important. The Serverless Guru’s post gives you some of the basics of unit tests, test runners, and testing asynchronous code. And BTW, you can use these same test runners to do serverless integration testing as well.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://medium.com/@mariano.calandra/how-to-protect-apis-with-jwt-and-api-gateway-lambda-authorizer-1110ff035df1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">How to protect APIs with JWT and API Gateway Lambda Authorizer</a><br />
Mariano Calandra gives you an overview of how API Gateway Lambda Authorizers work, how they fit into a serverless microservices world, and how you can use them to authorize requests with JSON Web Tokens (JWT).</p>
<p><a href="https://www.protego.io/inside-the-capital-one-breach-and-how-to-block-it/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Inside the Capital One Breach, and How to Block It</a><br />
There’s a short video in here that shows how Tal Melamed (one of Protego’s ethical hackers) is able to execute an XML External Entity (XXE) attack against a Lambda function with a weak XML parser. This is similar to the attack used to breach Capital One. Really interesting stuff.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://read.acloud.guru/the-state-of-serverless-circa-10-2019-2bfd0e605700?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">The State of Serverless, circa 2019</a><br />
Tim Wagner gives his observations from Serverlessconf NYC along with his thoughts on the current state of serverless, the ecosystem, the friction, and the innovation happening in the space.</p>
<p><a href="https://medium.com/@adhorn/make-your-business-more-resilient-in-the-digital-age-888da3f5deaf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Make your business more resilient in the digital age</a><br />
Excellent post by Ricardo Sueiras that discusses resiliency and chaos engineering in the enterprise world, and more importantly, the things that executives need to be thinking about to ensure continuity for their customers.</p>
<p><a href="https://mechanicalrock.github.io/2019/10/16/serverless-adventures-in-a-new-dimension.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Serverless: Adventures in a New Dimension</a><br />
Richard Forshaw makes a really good case for serverless and offers up some insights into how he sees it. I really like his take on “requests” being a more natural unit of business currency.</p>
<p><a href="https://medium.com/east-pole/the-serverless-api-gateway-aa73e6fb7ae0?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">The Serverless API Gateway</a><br />
Interesting article by Wilfred Springer that experiments with CloudFlare Workers to implement the “useful” features of an API gateway. There are some interesting ideas in here, like using the KV store to implement rate limiting.</p>
<p><a href="https://charity.wtf/2019/10/18/the-real-11-reasons-i-dont-hire-you/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">The (Real) 11 Reasons I Don’t Hire You</a><br />
Nothing to do with serverless here, but just a really great, honest post from Charity Majors about the hiring process in tech.</p>
<h3>For those that prefer multimedia experiences… ?</h3>
<p><a href="https://www.serverlesschats.com/19?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Serverless Chats Podcast – Episode #19: Pushing the Limits of Lambda with Michael Hart (Part 2)</a><br />
In this episode, I continue my talk with Michael Hart about pushing the limits of Lambda. We discuss Michael’s new “yumda” project, how to use Lambda for machine learning hyperparameter optimization, and whether or not Lambdas should call Lambdas.</p>
<p><a href="https://jaxenter.com/4-pillars-serverless-first-mindset-163011.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">The 4 pillars of the Serverless First Mindset</a><br />
This is a great interview with Jared Short from Trek10. He covers his four pillars of the serverless-first mindset, whether or not he thinks Knative is actually “serverless”, and opines on the future of the serverless ecosystem.</p>
<p><a href="https://www.youtube.com/watch?v=Kc2NDPrgFOQ?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Cloud Conformity: Serverless at Scale</a><br />
A really interesting episode of This is my Architecture. Cloud Conformity is running over 2,000 Lambdas and delivers over 230 million well-architected framework checks <em>a day</em>. Crazy.</p>
<p><a href="https://speakerdeck.com/gunnargrosch/event-driven-serverless-applications-with-amazon-eventbridge-aws-meetup-stockholm-october-16-2019?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Event-driven serverless applications with Amazon EventBridge – AWS Meetup Stockholm October 16 2019</a><br />
Here are Gunnar Grosch’s slides from his presentation about Event-driven serverless applications with Amazon EventBridge.</p>
<p><a href="https://www.slideshare.net/JeremyDaly1/building-resilient-serverless-systems-with-nonserverless-components-serverlessconf-nyc-2019?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Building resilient serverless systems with non-serverless components – Serverlessconf NYC 2019</a><br />
Here are my slides from my talk at Serverlessconf NYC.</p>
<h3>When you’re wondering what AWS is up to… ?‍♀️</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-api-gateway-now-supports-access-logging-to-amazon-kinesis-data-firehose/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Amazon API Gateway now supports access logging to Amazon Kinesis Data Firehose</a><br />
This is an incredibly cool (and useful) feature now available in API Gateway. You can take all your API access logs, transform them, stick them in S3, and easily query them with Athena.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/api-gateway-supports-wildcard-custom-domain-names/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Amazon API Gateway now supports wildcard custom domain names</a><br />
And here’s another cool feature for API Gateway. Custom domains with wildcards will allow you to build all kinds of customer-branded URLs without needing to create separate custom domains.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-cloudwatch-sends-alarm-state-change-events-amazon-eventbridge/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Amazon CloudWatch now sends alarm state change events to Amazon EventBridge</a><br />
Amazon EventBridge now integrates with Amazon CloudWatch so that when CloudWatch alarms are triggered, a matching EventBridge rule can execute targets.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-cloudwatch-anomaly-detection-now-generally-available/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Amazon CloudWatch Anomaly Detection is now available in all commercial AWS regions</a><br />
Another really handy tool that you can add to your CloudWatch metrics. And it’s relatively inexpensive as well. Read more about it <a href="https://aws.amazon.com/blogs/aws/new-amazon-cloudwatch-anomaly-detection/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">here</a>.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-sns-now-supports-additional-mobile-push-notification-headers-as-message-attributes/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Amazon SNS Now Supports Additional Mobile Push Notification Headers as Message Attributes</a><br />
If you’re using SNS for Mobile Push Notifications, your universe just got a lot bigger.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://theburningmonk.com/2019/10/analyze-lambda-cold-starts-with-lumigo-cli/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">Analyze Lambda cold starts with lumigo-cli</a><br />
The <code>lumigo-cli</code> keeps adding features, and this new one lets you analyze cold starts for your Lambda functions.</p>
<p><a href="https://lumigo.io/blog/the-why-when-and-how-of-api-gateway-service-proxies/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">The why, when and how of API Gateway service proxies</a><br />
API Gateway service proxies can be incredibly powerful for the right workloads. Yan Cui’s latest post explains why and when they make sense, and then introduces the new <code>serverless-apigateway-service-proxy</code> plugin for the Serverless Framework to make implementing a service proxy super simple.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/maciejwalkowiak/status/1185289895759286273?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">“Stick to monolith”, “you don’t need kubernetes”, “GraphQL adds unnecessary complexity”, “use boring tech”. On the other hand fancy and shiny tech keeps developers happy and excited. How do you balance these two in a project, that really doesn’t need fancy tech?</a> <strong>~ Maciej Walkowiak</strong><br />
Good discussion on this post from Maciej Walkowiak. I’m a big fan of “shiny and new”, but it has to make sense for the outcome you’re trying to achieve.</p>
<p><a href="https://twitter.com/0xdabbad00/status/1185595610608484357?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2360" target="_blank" rel="noopener">The average lifetime of a Lambda run-time between AWS support for it to EOL is 2 years and 23 days (for those that have been given EOL dates so far). The idea of only needing to worry about your code with serverless has some exceptions. #aws_breaking_changes</a> <strong>~ Scott Piper</strong><br />
I get Scott’s point, but at the same time, end-of-life doesn’t mean it’s going to stop working entirely. Plus, if the runtime creators no longer provide security updates for a specific version, I kind of like the fact that my cloud provider is implementing a forcing function to update my runtime.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>October 24, 2019 –</strong>  <a href="https://stockholm.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Stockholm</a></p>
<p><strong>October 30, 2019 –</strong> <a href="https://pages.awscloud.com/Serverless_Webinar_Q1_Epsagon_Israel-Epsagon.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2354" target="_blank" rel="noopener">Retail at the Scale of Serverless with AWS – Webinar</a></p>
<p><strong>October 30, 2019 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2019_1020-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Managing Serverless Applications with SAM Templates</a></p>
<p><strong>November 6-8, 2019 – </strong><a href="https://serverlesscomputing.london/">Serverless Computing London</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Tim Wagner</strong> (<a href="https://twitter.com/timallenwagner" target="_blank" rel="noopener">@timallenwagner</a>). Tim is a legend in the serverless community. When he was at AWS, he and his team created Lambda, which basically kicked off this whole serverless thing. He’s written several great serverless <a href="https://medium.com/@timawagner" target="_blank" rel="noopener">blog posts</a>, and he’s <a href="https://www.youtube.com/watch?v=aXaZAFi3Ytk" target="_blank" rel="noopener">feared by servers</a> whenever he does a conference talk. He just recently started a new venture that’s working on <a href="https://networkingclients.serverlesstech.net/" target="_blank" rel="noopener">Serverless Networking</a>, which will open up a multitude of new serverless use cases. Plus, he’s helping other companies in the serverless space as well, and recently <a href="https://www.stackery.io/blog/tim-wagner-joins-stackery-board/" target="_blank" rel="noopener">joined the board of Stackery</a>. It’s always exciting to see what Tim is working on and what he’ll come up with next. Your contributions to the serverless community have been invaluable, Tim. Thank you for all that you do! ?</p>
<h3>Final Thoughts ?</h3>
<p>The pace of innovation in the serverless space is really astounding. I’ve spent the last two months heads down on a new serverless application, and I found myself doing several things differently, following new leading practices, and stripping away lots of boilerplate code in favor of native tools that handle the complexity for me. We still have a long way to go, and my general line of thinking is that <em>serverless is going to get harder before it gets easier</em>. I might have some more thoughts on that soon.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Take care,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-60/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-60/</guid>
      <pubDate>Wed, 23 Oct 2019 05:20:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The Dynamic Composer (an AWS serverless pattern)]]></title>
      <description><![CDATA[<p>I’m a big fan of following the <a href="https://en.wikipedia.org/wiki/Single_responsibility_principle" target="_blank" rel="noopener"><strong>Single Responsibility Principle</strong></a> when creating Lambda functions in my serverless applications. The idea of each function doing “one thing well” allows you to easily separate discrete pieces of business logic into reusable components. In addition, the Lambda concurrency model, along with the ability to add fine-grained IAM permissions per function, gives you a tremendous amount of control over the security, scalability, and cost of each part of your application.</p>
<p>However, there are several drawbacks with this approach that often attract criticism. These include things like increased complexity, higher likelihood of cold starts, separation of log files, and the inability to easily compose functions. I think there is merit to these criticisms, but I have personally found the benefits to far outweigh any of the negatives. A little bit of googling should help you find ways to mitigate <em><strong>many</strong></em> of these concerns, but I want to focus on the one that seems to trip most people up: <strong>function composition</strong>.</p>
<h3>The need for function composition</h3>
<p>At my current startup, we have several Lambda functions that handle very specific pieces of functionality as part of our article processing pipeline. We have a function that crawls a web page and then extracts and parses the content. We have a function that runs text comparisons and string similarity against existing articles to detect duplicates, syndicated articles, and story updates. We have one that runs content through a natural language processing engine (NLP) to extract entities, keywords, sentiment, and more. We have a function that performs inference and applies tagging and scores to each article. Plus many, many, many more.</p>
<p>In most cases, the data needs to flow through all of these functions in order for it to be usable in our system. It’s also imperative that the data be processed in the correct order, otherwise some functions might not have the data they need to perform their specific task. That means we need to “orchestrate” these functions to ensure that each step completes successfully.</p>
<p>If you’re familiar with the AWS ecosystem, you’re probably thinking, “why not just use Step Functions?” I love Step Functions, and we initially started going down that path. But then we realized a few things that started making us question that decision.</p>
<p>First, we were composing <em>a lot</em> of steps, so the number of possible transitions required for each article (including failure states) became a bit unwieldy and possibly cost prohibitive. Second, the success guarantee requirement for this process is very low. Failing to process an article every now and then is not a make or break situation, and since most of our functions provide data enrichment features, there is little to no need for issuing rollbacks. And finally, while the most utilized workflow is complete end-to-end article processing, this isn’t <em>always</em> the case. Sometimes we need to execute just a portion of the workflow, like rerunning the NLP or the tagger. Sometimes we’ll even run part of the workflow for debugging purposes, so having a lot of control is really important.</p>
<p>Could we have build a whole bunch of Step Functions to handle all of these workflows? I’m sure we could have. But after some research and experimentation, we found a pattern that was simple, composable, flexible, and still had all the retry and error handling guarantees that we would likely have used with Step Functions. I call it, the Dynamic Composer.</p>
<h3>The Dynamic Composer Pattern</h3>
<p>The key to this pattern is the utilization of <strong>ASYNCHRONOUS </strong>function invocations (yes, Lambdas calling Lambdas). Below is a simple digram that shows the composition of five functions (Extractor, Comparator, NLP Analyzer, Tagger, and Persistor). This is only a small subset of our process for illustration purposes. This pattern can be used to compose as many functions as necessary.</p>
<p><a href="https://www.jeremydaly.com/wp-content/uploads/2019/10/dynamic-composer.png"><img class="alignnone size-full wp-image-2296" src="https://www.jeremydaly.com/wp-content/uploads/2019/10/dynamic-composer.png" alt="" width="1500" height="625" srcset="https://www.jeremydaly.com/wp-content/uploads/2019/10/dynamic-composer.png 1500w, https://www.jeremydaly.com/wp-content/uploads/2019/10/dynamic-composer-300x125.png 300w, https://www.jeremydaly.com/wp-content/uploads/2019/10/dynamic-composer-768x320.png 768w, https://www.jeremydaly.com/wp-content/uploads/2019/10/dynamic-composer-1024x427.png 1024w, https://www.jeremydaly.com/wp-content/uploads/2019/10/dynamic-composer-1200x500.png 1200w" /></a></p>
<p>Each of the thick black arrows represents an <strong>asynchronous</strong> call to the next Lambda function in the workflow. Each Lambda function has an SQS queue for its Dead Letter Queue (DLQ), and each DLQ is attached to a CloudWatch Alarm to issue an alert if the queue count is greater than one. Now for the <em>“dynamic”</em> part.</p>
<p>When we invoke the first function in our workflow (this can be from another function, API Gateway, directly from a client, etc.), we pass an array of function names with our event. For example, to kick off the full workload above, our payload for our <code>extractor</code> function might look like this:</p>
<div id="crayon-5dad0f4a9bfe5202224235" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">{
  "url":"https://www.cnn.com/some-article-to-process/index.html",
  "_compose": ["comparator","nlp-analyzer","tagger","persistor"]
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-5dad0f4a9bfe5202224235-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfe5202224235-2">2</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfe5202224235-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfe5202224235-4">4</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-5dad0f4a9bfe5202224235-1">{</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfe5202224235-2">"url":"https://www.cnn.com/some-article-to-process/index.html",</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfe5202224235-3">"_compose":["comparator","nlp-analyzer","tagger","persistor"]</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfe5202224235-4">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>The <code>_compose</code> array contains the order or composition, and can be dynamically generated based on your invocation. If you only wanted to run the <code>tagger</code> and the <code>persistor</code>, you would adjust your <code>_compose</code> array as necessary.</p>
<p>In order for our functions to properly handle the <code>_compose</code> array, we need to include a small library script in each of our functions. Below is a sample <code>composer.js</code> script that accepts the event from the function, as well as the payload that it should return or pass to the next function. If there are no more functions in the composition list (or it doesn’t exist at all), then the payload is returned.</p>
<div id="crayon-5dad0f4a9bfef001275183" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">const AWS = require('aws-sdk')
const LAMBDA = new AWS.Lambda()
module.exports = async (event,data) =&gt; {
  if (Array.isArray(event._compose) &amp;&amp; event._compose.length &gt; 0) {
    // grab the next function
    let fn = event._compose.shift()
    // ensure the _compose list is passed
    let payload = Object.assign(data,{ _compose: event._compose })
    console.log(`Invoking ${fn}`)
    let result = await LAMBDA.invoke({
      FunctionName: fn,
      InvocationType: 'Event',
      LogType: 'None',
      Payload: Buffer.from(JSON.stringify(payload))
    }).promise()
    return {
      status: result.StatusCode
    }
  } else {
    return data
  }
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-2">2</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-4">4</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-6">6</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-8">8</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-10">10</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-12">12</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-14">14</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-16">16</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-18">18</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-20">20</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-21">21</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-22">22</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-23">23</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-24">24</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-25">25</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-26">26</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-27">27</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-28">28</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bfef001275183-29">29</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bfef001275183-30">30</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-1">constAWS=require('aws-sdk')</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-2">constLAMBDA=newAWS.Lambda()</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-4">module.exports=async(event,data)=&gt;{</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-6">if(Array.isArray(event._compose)&amp;&amp;event._compose.length&gt;0){</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-8">// grab the next function</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-9">let fn=event._compose.shift()</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-11">// ensure the _compose list is passed</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-12">let payload=Object.assign(data,{_compose:event._compose})</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-14">console.log(`Invoking${fn}`)</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-16">let result=await LAMBDA.invoke({</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-17">FunctionName:fn,</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-18">InvocationType:'Event',</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-19">LogType:'None',</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-20">Payload:Buffer.from(JSON.stringify(payload))</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-21">}).promise()</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-23">return{</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-24">status:result.StatusCode</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-25">}</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-27">}else{</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-28">returndata</div>
<div class="crayon-line" id="crayon-5dad0f4a9bfef001275183-29">}</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bfef001275183-30">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>In order to use this within your functions, you would include it like this:</p>
<div id="crayon-5dad0f4a9bff3189470263" class="crayon-syntax crayon-theme-familiar crayon-font-sourcecodepro crayon-os-pc print-yes notranslate c5" data-settings="no-popup minimize scroll-mouseover">
<div class="crayon-toolbar crayon-tools c1" data-settings="mouseover overlay hide">
<div class="crayon-button crayon-nums-button" title="Toggle Line Numbers">
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap">
<div class="crayon-button crayon-copy-button" title="Copy">
JavaScript</div>
<div class="crayon-plain-wrap">
<textarea wrap="soft" class="crayon-plain print-no c2" data-settings="dblclick" readonly="readonly" rows="10" cols="50">const composer = require('./composer')
exports.extractor = async event =&gt; {
  // Do some fancy processing...
  // Then merge the event to the function result
  let result = Object.assign({
    article: {
      title: 'This an article title',
      created: new Date().toISOString()
    }
  },event)
  // pass the original event and function result to the composer
  return composer(event,result)
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums" data-settings="show">
<div class="crayon-nums-content c3">
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-2">2</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-4">4</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-6">6</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-8">8</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-10">10</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-12">12</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-14">14</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-16">16</div>
<div class="crayon-num" data-line="crayon-5dad0f4a9bff3189470263-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5dad0f4a9bff3189470263-18">18</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre c4">
<div class="crayon-line" id="crayon-5dad0f4a9bff3189470263-1">constcomposer=require('./composer')</div>
<div class="crayon-line" id="crayon-5dad0f4a9bff3189470263-3">exports.extractor=async event=&gt;{</div>
<div class="crayon-line" id="crayon-5dad0f4a9bff3189470263-5">// Do some fancy processing...</div>
<div class="crayon-line" id="crayon-5dad0f4a9bff3189470263-7">// Then merge the event to the function result</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bff3189470263-8">let result=Object.assign({</div>
<div class="crayon-line" id="crayon-5dad0f4a9bff3189470263-9">article:{</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bff3189470263-10">title:'This an article title',</div>
<div class="crayon-line" id="crayon-5dad0f4a9bff3189470263-11">created:newDate().toISOString()</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bff3189470263-12">}</div>
<div class="crayon-line" id="crayon-5dad0f4a9bff3189470263-13">},event)</div>
<div class="crayon-line" id="crayon-5dad0f4a9bff3189470263-15">// pass the original event and function result to the composer</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bff3189470263-16">returncomposer(event,result)</div>
<div class="crayon-line crayon-striped-line" id="crayon-5dad0f4a9bff3189470263-18">}</div>
</div>
</td>
</tr></table></div>
</div>
<p>Yes, we have to add a bit of helper code to our functions, but we still have the ability to call each function synchronously, and our <code>composer.js</code> script will just return the function output.</p>
<h3>Wouldn’t Step Functions be more reliable?</h3>
<p>That entirely depends on the use case and whether or not you need to add things like rollbacks and parallelism, or have more control over the retry logic. For us, this pattern works really well and gives us all kinds of amazing guarantees. For example:</p>
<p><strong>Automatic Retry Handling</strong><br />
Because we are invoking the next function <strong>asynchronously</strong>, the Lambda service will automatically retry the event twice for us. The first retry is typically within a minute, and the second is after about two minutes.</p>
<p><strong>Error Handling<br /></strong>There are two ways in which this pattern will automatically handle errors for us. The first is if the <code>LAMBDA.invoke()</code> call fails at the end. This is <em>highly</em> unlikely, but since we allow this error to bubble up to the Lambda function, a failed invocation will <strong>FAIL THIS FUNCTION</strong>, causing it to retry as mentioned above. If it fails three times, it will be saved in our DLQ. The other scenario is when the Lambda service accepts the invocation, but then that function fails. Just like with the first scenario, it will be retried twice, and then moved to the DLQ.</p>
<p><strong>Durability and Replay</strong><br />
Since any failed event will be moved to the appropriate DLQ, that event will be available for inspection and replay for up to 14 days. Our CloudWatch Alerts will notify us if there is an item in one of these queues, and we can easily replay the event without losing the information about the workflow (since it is part of the event JSON). If there was a particular use case that needed to be automatically replayed, an extra Lambda function polling the DLQs could handle that for you.</p>
<p><strong>Automatic Throttling<br /></strong>There are a lot of great throttling control use cases for SQS to Lambda, but many people don’t realize that <strong>asynchronous</strong> Lambda invocations give you built in throttling management for free! If you invoke a Lambda function asynchronously and the current reserved concurrency is exceeded, the Lambda service will <strong><a href="https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html" target="_blank" rel="noopener">retry for up to six hours</a></strong> before eventually moving the event to your DLQ.</p>
<h3>Should you use this pattern?</h3>
<p>I have to reiterate that Step Functions are amazing, and that for complex workflows that require rollbacks, or very specific retry policies, they are absolutely the way to go. However, if your workflows are fairly simple, meaning that it is mostly passing the results of one function to the next, and if you want to have the flexibility to alter your workflows on the fly, then this may work really well for you.</p>
<p>Your functions shouldn’t require any sort of significant rewrites to implement this. Just plug in your own version of the <code>composer.js</code> script and change the <code>return</code>. You could even build a Lambda Layer that wraps the functions and automatically adds the <em>composer</em> for you. The functions themselves will still be independently callable and can still be included in other Step Functions workflows. But you always have the ability to compose them together by simply passing an <code>_compose</code> array.</p>
<p>And there’s one more very cool thing (well, at least I think it’s cool)! Even though this sort of violates the Single Responsibility Principle that I mentioned at the beginning, we couldn’t help adding some “composition manipulation” within our functions. For example, if our <code>comparator</code> function detects that an article is a duplicate, then we will alter the <code>_compose</code> array to remove parts of the workflow. This adds a bit of extra logic to our functions, but it gives us some really handy controls over the workflow. Of course, this logic is conditioned on whether or not <code>_compose</code> exists, so we can still call the functions independently.</p>
<p>So, should you use this pattern? Well, we use it to process thousands of articles a day and it works like a charm for us. If you have a workflow that this might work for, I’d love to hear about.</p>
<p>Hope you find this useful. Happy serverlessing! ?</p>
<p><strong>Tags:</strong> <a href="https://www.jeremydaly.com/tag/aws/" rel="tag">aws</a>, <a href="https://www.jeremydaly.com/tag/lambda/" rel="tag">lambda</a>, <a href="https://www.jeremydaly.com/tag/microservices/" rel="tag">microservices</a>, <a href="https://www.jeremydaly.com/tag/patterns/" rel="tag">patterns</a>, <a href="https://www.jeremydaly.com/tag/serverless/" rel="tag">serverless</a>, <a href="https://www.jeremydaly.com/tag/step-functions/" rel="tag">step functions</a></p>
<hr /><p>Did you like this post? ?  Do you want more? ?  Follow me on <a href="https://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a> or check out some of the <a href="https://www.jeremydaly.com/current-projects/">projects</a> I’m working on. You can sign up for my WEEKLY newsletter too. You'll get links to my new posts (like this one), industry happenings, project updates and much more! ?</p>
<div id="mc_embed_signup" class="in-post c8">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll" class="c7">
<h3>Sign Up for my WEEKLY email newsletter</h3>
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /><br /></p>
<div class="c6" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button" name="subscribe" type="submit" value="Subscribe" /></div>
<p class="clear"><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>
</div>
</form>
</div>
<div class="footer-info">? This post was originally published on October 20, 2019 by Jeremy Daly.</div>
</div></div></div></div></div></div></div></div></div>]]></description>
      <link>https://www.jeremydaly.com/the-dynamic-composer-an-aws-serverless-pattern/</link>
      <guid>https://www.jeremydaly.com/the-dynamic-composer-an-aws-serverless-pattern/</guid>
      <pubDate>Mon, 21 Oct 2019 03:52:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #59]]></title>
      <description><![CDATA[<h2>#ServerlessForEveryone ?</h2>
<p>Welcome to <strong>Issue #59</strong> of Off-by-none. Thanks for being with us! ??</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-58/">Last week</a>, we were at Serverlessconf NYC, having some awesome conversations with some pretty smart serverless people. This week, we’ve got lots of great AWS re:Invent news, and we’ll learn how AWS built a production service using serverless technologies. Plus, we’ve got plenty of great serverless content from the community.</p>
<p>Lots to share this week, so let’s get to it! ?</p>
<h3>How does AWS build their serverless applications?</h3>
<p><a href="https://aws.amazon.com/blogs/opensource/real-world-serverless-application/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">How AWS Built a Production Service Using Serverless Technologies</a><br />
If you’ve ever wondered how AWS built a serverless application for itself, this post will tell you almost everything you need to know. This is a super in-depth look (including the open-source repo) of the SAM templates, file structure, CI/CD process, parameter management, and much more.</p>
<p><a href="https://www.trek10.com/blog/examining-aws-serverless-apps/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Examining how AWS builds their own serverless apps</a><br />
And if you want to get some additional insights from another serverless pro, check out Forrest Brazeal’s commentary on what AWS has provided.</p>
<h3>If you’re going to re:Invent, you don’t want to miss this…</h3>
<p>AWS re:Invent is less than 50 days away, and reserved seating just opened this morning. Hopefully you’ve already booked some great serverless sessions, but if you are still looking for some more ideas, these guides should definitely help:</p>
<ul><li><a href="https://reinvent.awsevents.com/learn/guides/eric_hammond?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">re:Invent Guide: Advanced Serverless – Eric Hammond</a></li>
<li><a href="https://aws.amazon.com/blogs/database/your-guide-to-amazon-dynamodb-sessions-reinvent-2019/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Your guide to Amazon DynamoDB sessions, workshops, and chalk talks at AWS re:Invent 2019</a></li>
<li><a href="https://www.stackery.io/blog/reinvent-guide/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Can’t-miss Serverless Sessions for re:Invent 2019</a></li>
</ul><p>Also, if you want to meet up with all the people building the foundation of the serverless ecosystem, make sure you check out the <strong><a href="https://serverlessforeveryone.com?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">#ServerlessForEveryone Community Party @ AWS re:Invent 2019</a></strong>. This event is only possible because of our amazing sponsors: <a href="https://www.stackery.io/" target="_blank" rel="nofollow noopener noreferrer">Stackery</a>, <a href="https://www.thundra.io/" target="_blank" rel="nofollow noopener noreferrer">Thundra</a>, <a href="https://aws.amazon.com/" target="_blank" rel="nofollow noopener noreferrer">AWS</a>, <a href="https://www.cloudzero.com/" target="_blank" rel="nofollow noopener noreferrer">CloudZero</a>, <a href="https://lumigo.io/" target="_blank" rel="nofollow noopener noreferrer">Lumigo</a>, and <a href="https://www.protego.io/" target="_blank" rel="nofollow noopener noreferrer">Protego</a>. I hope you’ll join us!</p>
<h3>Serverless News &amp; Product Announcements ?</h3>
<p><a href="https://read.acloud.guru/https-medium-com-timawagner-serverless-networking-the-next-step-in-serverless-evolution-95bc8adaa904?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Serverless Networking: The next step in Serverless Evolution</a><br />
No, seriously, peer-to-peer networking of Lambda functions is now a thing thanks to Tim Wagner (aka the father of Lambda). This is a HUGE innovation and could change the way we build serverless applications.</p>
<p><a href="https://aws.amazon.com/blogs/aws/migration-complete-amazons-consumer-business-just-turned-off-its-final-oracle-database/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Migration Complete – Amazon’s Consumer Business Just Turned off its Final Oracle Database</a><br />
AWS just completed a multi-year project that migrated 75 petabytes of internal data stored in nearly 7,500 Oracle databases to multiple AWS database services including Amazon DynamoDB, Amazon Aurora, Amazon Relational Database Service (RDS), and Amazon Redshift. Crazy.</p>
<p><a href="https://www.prnewswire.com/news-releases/zenoss-announces-unified-multicloud-serverless-monitoring-300936485.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Zenoss Announces Unified Multicloud Serverless Monitoring</a><br />
This new product unifies the monitoring of serverless functions across the Big Three public cloud providers — Google Cloud, Amazon Web Services (AWS) and Microsoft Azure. Interesting (if you’re into the whole multi-cloud thing).</p>
<p><a href="https://www.protego.io/protego-labs-named-gold-winner-for-business-products-startup-of-the-year-and-bronze-winner-for-technology-software-startup-of-the-year-by-ceo-world-awards/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Protego Labs Named Gold Winner for Business Products Startup of the Year and Bronze Winner for Technology Software Startup of the Year by CEO World Awards</a><br />
Congrats to the team over at Protego for these awards. The recognition is well-deserved.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/@mkumar9009/serverless-challenges-workarounds-a3354750360b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Serverless Challenges &amp; Workarounds!</a><br />
I always love hearing about people’s experiences with serverless, and this post by Manish Kumar is a quick, but enlightening read. Cold starts and connections to RDBMS continues to be the biggest challenges it seems. Luckily the VPC cold start issue is pretty much fixed, and Manish used the <code>serverless-mysql</code> package to fix the database issue.</p>
<p><a href="https://medium.com/@cbernardes/serverless-things-i-wish-i-had-known-part-2-dynamodb-x-mongodb-x-aurora-serverless-1053cfddff36?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Serverless: Things I wish I had known – Part 2 – DynamoDB x MongoDB x Aurora</a><br />
Cleriston Bernardes has another post that lays out more snafus he ran into using serverless. I appreciate all the references in there to my blog posts, but I really feel like a lot of the challenges he faced are solvable through better content. If I only had more time. ?‍♂️</p>
<p><a href="https://medium.com/@cmcintyre_71027/crm-solutions-building-a-serverless-zoho-service-c3441ae1632c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">CRM Solutions: Building a Serverless Zoho Service</a><br />
Here’s how Connor McIntyre built an integration into Zoho using AWS and Lambda.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@michabahr/serverless-scheduler-23dec8edde06?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Serverless Scheduler</a><br />
This is an interesting approach to scheduling by Michael Bahr. He is using the <code>DelaySeconds</code> message attribute in SQS to control the precision of bulk loaded events into a scheduling queue. Since you can delay visibility in SQS up to 15 minutes, the bulk loading process from DynamoDB has a large window to work with. This might be more cost effective than using Step Functions to implement ad hoc schedules. Very cool idea.</p>
<p><a href="https://medium.com/seek-blog/serverless-machine-learning-inference-with-tika-and-tensorflow-fb578af0eaba?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Serverless Machine Learning Inference with Tika and TensorFlow</a><br />
This is a great post by Oliver Mannion that outlines another ML inference use case for AWS Lambda, predicting “strong applicants” based on data extracted from resumes.</p>
<p><a href="https://medium.com/kaliop/build-a-personalized-newsletter-with-aws-cloud-services-and-elasticsearch-8d655f340594?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Build a personalized newsletter with AWS cloud services and ElasticSearch</a><br />
This is a great use case outlined by Pierre Cavalet. A couple of Lambda functions, SQS, Elasticsearch, and a few managed services to build out your own personalized newsletter system.</p>
<p><a href="https://aws.amazon.com/blogs/database/sending-notifications-from-amazon-aurora-postgresql/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Sending notifications from Amazon Aurora PostgreSQL</a><br />
It would be great if PostgreSQL had Lambda triggers like the MySQL version does. Oh, and add that functionality to Aurora Serverless as well, please. ?</p>
<p><a href="https://blog.francium.tech/deploying-machine-learning-model-to-aws-lambda-with-serverless-a121a8253901?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Deploying Machine Learning Model to AWS Lambda using Serverless</a><br />
My eyes glossed over a bit reading this, but Navarasu Muthu shows you how to deploy a machine learning model on AWS Lambda.</p>
<h3>When you’re looking for some advanced serverless concepts… ?</h3>
<p><a href="https://theburningmonk.com/2019/10/where-serverless-plugin-stops-and-platform-starts/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Where Serverless plugin stops and platform starts</a><br />
The amount of boilerplate code you need for your serverless application can have a big impact on your ability to manage it. It gets even more difficult if you’re trying to implement organization-wide policies and tools. Yan Cui has some recommendations about where you might want to put some of these account-level components.</p>
<p><a href="https://serverless.com/blog/serverless-deployment-best-practices?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Serverless Deployment Best Practices</a><br />
The Serverless Framework has been adding new full-lifecycle features like crazy lately, and one you definitely should check out is safeguards. Fernando Medina Corey points out some best practices, including how to use safeguards to protect your deployments.</p>
<p><a href="https://medium.com/@balkaran.brar/aws-lambda-with-static-ip-address-c82e3043c2ed?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">AWS Lambda with Static IP Address</a><br />
The need for a static IP address is quite common for many use case. Balkaran Brar show you how to set that up using a NAT Gateway with your Lambda functions. You’d probably want to codify this in a CloudFormation template, but this post will help you get started.</p>
<p><a href="https://medium.com/driven-by-code/on-the-importance-of-correct-headers-and-metadata-in-s3-origins-for-aws-cloudfront-50da2f9370ae?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">On the Importance of Correct Headers and Metadata in S3 Origins for AWS CloudFront</a><br />
Regis Wilson has an excellent post that does a deep dive into the nuances of managing headers with S3 and CloudFront. Definitely worth the read to see if you are experiencing similar issues (and need to know how to fix them).</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://towardsdatascience.com/serverless-tensorflow-workflow-with-ec2-auto-training-495f47bd892d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Serverless TensorFlow workflow with EC2 auto-training</a><br />
Awesome tutorial by Mike Moritz that walks you through setting up Lambda to do ML predictions while offloading the training to an EC2 instance.</p>
<p><a href="https://lumigo.io/blog/monitor-lambda-cold-start-durations-with-cloudwatch/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Monitor Lambda cold start durations with CloudWatch</a><br />
Yan Cui has a way for you to add monitoring of your Lambda function cold starts by using the <code>async-custom-metrics</code> SAR app.</p>
<p><a href="https://medium.com/@timothyhaydenhawkins/developing-nodejs-lambda-functions-locally-with-tests-and-version-control-ac8a4bd437c9?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Rock Solid Lambda Development with Tests and Version Control</a><br />
I like Tim Hawkins enthusiasm for test-driven development, and the unit testing strategy he uses works well. But I would recommend using a framework like SAM or the Serverless Framework to deploy your functions instead of trying to roll your own.</p>
<p><a href="https://medium.com/@facundofasciolo/graphql-api-using-serverless-aws-appsync-dynamodb-lambda-resolvers-cognito-part-3-bc8ef99aa49e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">GraphQL API using Serverless + AWS AppSync + DynamoDB + Lambda resolvers + Cognito. [Part 3]</a><br />
In the third part of Facundo Fasciolo’s series on building a serverless GraphQL API, he shows you how to implement queries and mutations that use your local DynamoDB database.</p>
<p><a href="https://www.openfaas.com/blog/lambda-to-openfaas/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Migrate Your AWS Lambda Functions to Kubernetes with OpenFaaS</a><br />
Let’s say you wanted to start using Kubernetes to run your serverless workloads instead of Lambda. Here is a guide by Burton Rheutan that will walk you how to migrate them to OpenFaaS.</p>
<p><a href="https://medium.com/flowingis/deploy-a-symfony-application-with-aws-lambda-quick-guide-65430c0edda5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Deploy a Symfony application with AWS Lambda: a quick guide</a><br />
I really appreciate people trying crazy things on Lambda, but I’m not sure deploying a full-fledge Symfony app would be at the top of my list. Alessandro Minoccheri gave it a go, and he got it working. So if you are thinking about migrating your existing Symfony app to serverless, this might get you going in the right direction.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.techiexpert.com/implementing-serverless-microservices-architecture-on-aws/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Implementing Serverless Microservices Architecture on AWS</a><br />
Straightforward outline of a serverless microservice architecture by Aarti Parikh. I’m a big fan of structuring your microservices this way, though I would probably split out the S3 frontend in his example.</p>
<p><a href="https://alexdebrie.com/posts/dynamodb-wish-list/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">My DynamoDB Wish List</a><br />
Alex DeBrie lays out his two biggest #awswishlist items for DynamoDB. With re:Invent coming up, let’s hope he gets these granted.</p>
<p><a href="https://m.subbu.org/penalties-and-purgatory-341660b15712?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Penalties and Purgatory</a><br />
Subbu Allamaraju converted his talk from Serverlessconf New York into a blog post. He makes a lot of interesting points in here about time-to-value and added complexity from microservices increasing MTTR.</p>
<p><a href="https://blog.thundra.io/recap-serverlessdays-istanbul?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Recap: ServerlessDays Istanbul</a><br />
If you missed ServerlessDays Istanbul, Piril Engin has a full recap of the event for you.</p>
<p><a href="https://blog.thundra.io/tracing-for-everyone-business-flows-simplified?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Tracing for Everyone: Business Flows Simplified</a><br />
Thundra continues to build some amazing things into their products. This overview of their OpenTracing-compatible distributed tracing engine Otto, is a pretty cool look into what is possible.</p>
<h3>If you’ve got a long commute… ?</h3>
<p><a href="https://www.serverlesschats.com/18?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Episode #18: Pushing the Limits of Lambda with Michael Hart (Part 1)</a><br />
In this episode, I chat with Michael Hart about the inner workings of AWS Lambda, the hows and whys of Custom Runtimes &amp; Layers, Docker Lambda, serverless CI and so much more! This is <strong>PART 1</strong> of a two-part conversation.</p>
<p><a href="https://www.protego.io/stateful-faas-the-future-of-iam/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">PODCAST: The Serverless Smarts Podcast, Ft. Jeremy Daly. Stateful FaaS &amp; the Future of IAM</a><br />
I joined Hillel Solow on his podcast to discuss “serverless 2.0” trying to add statefulness to FaaS, the IAM conundrum, and lots more on the current state of serverless security in the cloud.</p>
<p><a href="https://www.youtube.com/watch?v=1JlCuQG00qY&amp;utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Fireside Chat: Petco Discusses Modernization &amp; Their Adoption of Serverless</a><br />
Ben Kehoe and Phil Potloff, talk enterprise modernization with Brendten Eickstaedt, VP Innovation Services at Petco. They discuss how Petco got started, some of the resistance they faced, how to overcome that resistance, and the benefits they’ve seen as a result. Great serverless conversation.</p>
<p><a href="https://www.youtube.com/watch?v=rcTnhDtNeA0&amp;feature=youtu.be&amp;utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Demo of getting a single HTTP function deployed with arc.codes using CloudFormation</a> &amp; <a href="https://www.youtube.com/watch?time_continue=1&amp;v=I7AaEA4_tIY&amp;utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Arc Demo 2</a><br />
Brian Leroux started creating some videos that show you how easy the Architect Framework is. And, yes, it is very easy to use.</p>
<h3>When you’re wondering what the AWS Devs have been working on… ?‍♀️</h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-kinesis-data-firehose-adds-support-data-stream-delivery-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Amazon Kinesis Data Firehose adds support for data stream delivery to Amazon Elasticsearch Service 7.x clusters</a><br />
Amazon Kinesis Data Firehose now supports streaming data delivery to Amazon Elasticsearch Service version 7.x clusters for near real-time data analysis and visualization.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/aws-codepipeline-enables-setting-environment-variables-on-aws-codebuild-build-jobs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">AWS CodePipeline Enables Setting Environment Variables on AWS CodeBuild Build Jobs</a><br />
You can now set environment variables for CodeBuild build jobs in your pipeline. Previously, build jobs in your pipeline could only use environment variables defined in the build project configuration or buildspec file.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-kinesis-data-firehose-adds-cross-account-delivery-to-amazon-elasticsearch-service/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Amazon Kinesis Data Firehose adds cross-account delivery to Amazon Elasticsearch Service</a><br />
Amazon Kinesis Data Firehose now supports delivery to Amazon Elasticsearch Service across accounts. Now your delivery stream and your Elasticsearch clusters can reside in different accounts.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-athena-now-provides-an-interface-VPC-endpoint/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Amazon Athena now provides an interface VPC endpoint</a><br />
Amazon Athena now allows you to connect directly to Athena through an interface VPC endpoint in your Virtual Private Cloud (VPC). With this feature, you can submit your queries to Athena securely without requiring an Internet Gateway in your VPC.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/helenanders26/status/1181682452172963840?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">I’ll be going to @awsreinvent for the first time this year. I asked my colleagues for their top tips for first time #AWS #ReInvent attendees. Here’s what they said…</a> <strong>~ @helenanders26</strong><br />
If you’re going to re:Invent this year, take a few minutes to look through these tips. re:Invent is so overwhelming, that it’s good to keep things like this top of mind.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>October 14-16, 2019 –</strong> <a href="https://serverless-architecture.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2346" target="_blank" rel="noopener">Serverless Architecture Conference Berlin</a></p>
<p><strong>October 21, 2019 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2019_1001-SRV.html?&amp;trk=el_a131L0000058I1kQAE&amp;trkCampaign=October_2019_1001-SRV&amp;sc_channel=el&amp;sc_campaign=pac_Q4-2019_exlinks_blog_OTT_10DGAB&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=NAMER&amp;sc_country=mult?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Advanced Serverless Orchestration with AWS Step Functions – Webinar</a></p>
<p><strong>October 21, 2019 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2019_1003-MBL.html?&amp;trk=el_a131L0000058I1mQAE&amp;trkCampaign=October_2019_1003-MBL&amp;sc_channel=el&amp;sc_campaign=pac_Q4-2019_exlinks_blog_OTT_10DGAB&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=NAMER&amp;sc_country=mult?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Mocking and Testing Serverless APIs with AWS Amplify – Webinar</a></p>
<p><strong>October 22, 2019 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2019_1006-DAT.html?&amp;trk=el_a131L0000058I1pQAE&amp;trkCampaign=October_2019_1006-DAT&amp;sc_channel=el&amp;sc_campaign=pac_Q4-2019_exlinks_blog_OTT_10DGAB&amp;sc_outcome=Product_Adoption_Campaigns&amp;sc_geo=NAMER&amp;sc_country=mult?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">How to Build Highly Scalable Serverless Applications with Amazon Aurora Serverless</a></p>
<p><strong>October 24, 2019 –</strong>  <a href="https://stockholm.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Stockholm</a></p>
<p><strong>October 30, 2019 –</strong> <a href="https://pages.awscloud.com/Serverless_Webinar_Q1_Epsagon_Israel-Epsagon.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2354" target="_blank" rel="noopener">Retail at the Scale of Serverless with AWS – Webinar</a></p>
<p><strong>October 30, 2019 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2019_1020-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2359" target="_blank" rel="noopener">Managing Serverless Applications with SAM Templates</a></p>
<p><strong>November 6-8, 2019 – </strong><a href="https://serverlesscomputing.london/">Serverless Computing London</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Jared Short</strong> (<a href="https://twitter.com/ShortJared" target="_blank" rel="noopener">@ShortJared</a>). Jared is a Senior Cloud Engineer at <a href="https://www.trek10.com/" target="_blank" rel="noopener">Trek10, Inc.</a>, and was an early contributor to the <a href="https://serverless.com/" target="_blank" rel="noopener">Serverless Framework</a>. He has been building production scale serverless applications since 2015, and has been sharing what he’s learned along the way. He’s written several great <a href="https://www.trek10.com/blog/authors/jared-short/" target="_blank" rel="noopener">blog posts</a>, given numerous <a href="https://www.notion.so/Presentations-Talks-a1d79c4780d6495395d9d285a79046c6" target="_blank" rel="noopener">talks</a>, contributed to <a href="https://github.com/shortjared" target="_blank" rel="noopener">open source serverless</a> projects, and basically lives and breathes serverless all the time now. His contributions have had a huge impact on the serverless community, and we thank you for it! ?</p>
<h3>Final Thoughts ?</h3>
<p>I had an absolute blast last week at Serverlessconf NYC. I got to meet up with some old friends, and I met a bunch of amazing people working with serverless. I also gave my 45 minute talk in 21 minutes, so I was a bit out of breath by the end (I think I may have blacked out somewhere in the middle as well), but it was a lot of fun. There are so many cool things happening with serverless right now, and so many great companies working with it. The next few months should be really interesting.</p>
<p>I also had a number of conversations about this newsletter, and more specifically, what I can do to deliver the most value to people. I got some great suggestions, and I hope to start implementing some of them very soon. Exciting times ahead. ?</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>. If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Cheers,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-59/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-59/</guid>
      <pubDate>Wed, 16 Oct 2019 05:45:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #58]]></title>
      <description><![CDATA[<h2>Live from Serverlessconf NYC… ?</h2>
<p>Welcome to <strong>Issue #58</strong> of Off-by-none. Thanks for joining us! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-57/">Last week</a>, we made you fall in love with Step Functions and shared lots of exciting serverless news. This week, we’re live from Serverlessconf NYC, talking with some of the pioneers in serverless. Plus, we’ve got plenty of amazing content from the serverless community.</p>
<p>Lots to get to, so let’s jump right in! ?</p>
<h3>Serverless News &amp; Product Announcements ?</h3>
<p><a href="https://serverless.com/blog/easily-deploy-graphql-apis-with-serverless-components?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Easily Deploy GraphQL APIs with Serverless Components</a><br />
Serverless Framework Components are on a roll. The new AppSync component is fast to deploy, loaded with a bunch of sane defaults, and supports all the features you need to launch a serverless GraphQL service.</p>
<p><a href="https://www.theregister.co.uk/2019/10/02/google_knative_will_not_be_donated_to_any_foundation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Google will not donate Knative framework ‘to any foundation for the foreseeable future’</a><br />
I looks like Knative will remain in Google’s hands for the time being. I think this makes sense, as I’m sure Google has a lot of plans for serverless and wants to control (or heavily influence) the trajectory of this project.</p>
<p><a href="https://faastruby.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">The next chapter – faastRuby</a><br />
It looks like there are some changes happening to faastRuby. It’s being moved to Shopify, which I’m not really sure what that means. But it sounds like you need to move your workloads of their servers.</p>
<p><a href="https://www.prunderground.com/triggermesh-announces-everybridge-serverless-event-bus/00168207/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">TriggerMesh announces EveryBridge Serverless Event Bus</a><br />
TriggerMesh EveryBridge is a cross-cloud event bus that enables event-driven cloud-native applications across multiple cloud providers and on-prem infrastructures. Serverless Inc. did something similar to this two years ago, so it’ll be interesting to see if customers find this useful.</p>
<p><a href="https://blog.thundra.io/simplified-serverless-insights-on-amazon-cloudwatch?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Simplified Serverless Insights on Amazon CloudWatch</a><br />
Thundra has added some improvements to their product. You can now view all your functions without instrumentation, plus, gather insights from CloudWatch Logs instead of directly from the instrumentation.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/driven-by-code/lambda-edge-and-s3-landing-page-caching-for-performance-and-scale-37bdacaf1ae5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Lambda@Edge and S3 Landing Page Caching for Performance and Scale</a><br />
Regis Wilson from TrueCar recounts how they used Lambda@Edge to minimize page load times and increase frontend performance.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/swlh/build-a-sam-application-to-send-aws-cloudwatch-notifications-to-a-slack-channel-9b5f2adefbd1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Build a SAM Application to Send AWS CloudWatch Notifications to a Slack Channel</a><br />
Here’s a straightforward use case for notifying your team via Slack when a CloudWatch alarm goes off. Hongbo Liu shows you how to connect an alarm to an SNS topic and then push that to Slack with a Lambda function.</p>
<p><a href="https://medium.com/@leemartin/counting-up-to-1-billion-youtube-views-on-sweet-child-o-mine-for-guns-n-roses-1f1aae03e6b1?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Counting Up to 1 Billion YouTube Views on “Sweet Child O’ Mine” for Guns N’ Roses</a><br />
Could there possibly be a better use case for serverless than to track views for the Sweet Child ‘O Mine video? Not only does Slash lay down the most iconic guitar solo of all time, but I can’t believe it’s approaching a BILLION views on YouTube! ???</p>
<p><a href="https://blog.addresscloud.com/serverless-geospatial/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Serverless Geospatial</a><br />
This a great read from Tomas Holderness that shows you how addresscloud is using serverless to power their business. They’re even starting to test Aurora Serverless to replace their PostgreSQL cluster.</p>
<h3>When you want to brush up on some serverless concepts… ?</h3>
<p><a href="https://medium.com/rockytopsolutions/using-the-serverless-framework-to-easily-deploy-to-multiple-environments-14064878ea37?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Using The Serverless Framework To Easily Deploy To Multiple Environments</a><br />
Looking to modularize your serverless deployments? This post outlines some strategies that will let you deploy your serverless application with CI/CD to multiple environments using variables and environment specific config files.</p>
<p><a href="https://medium.com/@pdrasko/aws-api-gateway-and-multiple-cors-origins-55bf224f37a5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">AWS API Gateway and multiple CORS Origins</a><br />
CORS tends to trip a lot of people up. Drasko Profirovic gives you some of the basics and shows you how to create headers based on some simple pattern matching.</p>
<p><a href="https://medium.com/@piyushj02/aurora-serverless-1o1-d09a71b2f4e5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Aurora Serverless 1O1</a><br />
If you’re curious how Aurora Serverless works, this post from Piyush Jalan will give a quick run down.</p>
<p><a href="https://dev.to/sosnowski/anatomy-of-aws-lambda-1i1e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Anatomy of AWS Lambda</a><br />
Here is basically everything you need to know about how Lambda works. Details about invocation methods, the concurrency model, permissions and much more.</p>
<p><a href="https://theburningmonk.com/2019/10/all-you-need-to-know-about-caching-for-serverless-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">All you need to know about caching for serverless applications</a><br />
Yan Cui shows you a number of ways to add caching to your serverless application. Caching can dramatically increase your serverless app’s performance, protect against hitting limits, and maybe even lower your costs.</p>
<p><a href="https://lumigo.io/blog/5-tips-for-getting-the-most-out-of-aws-sam/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">5 Tips for getting the most out of AWS SAM</a><br />
Efi Merdler-Kravitz has been building serverless apps for quite some time. Here are his five tips for building apps with AWS SAM.</p>
<p><a href="https://medium.com/api-api-joy-joy/unleashed-lambdas-outside-the-handler-4e5fc27cb7b3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Unleashed Lambdas-Outside the Handler</a><br />
Derek Gau explains how to use global variables in Lambda functions to maintain state across invocations. In his example, he reuses MySQL connection pools. This works, but the problem is, he’s creating a new pool for each concurrent connection. So although he benefits from reuse, he still could run into a <code>max_connections</code> issue.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://medium.com/@zaccharles/async-callbacks-with-aws-step-functions-and-task-tokens-9df97fe8973c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Async Callbacks with AWS Step Functions and Task Tokens</a><br />
Zac Charles gives you a run down of how to use Task Tokens with AWS Step Functions to run asynchronous worker processes. He calls out a few limitations with this approach as well.</p>
<p><a href="https://codeburst.io/getting-hands-dirty-with-aws-cdk-async-api-c5e007468497?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Getting Hands Dirty with AWS CDK</a><br />
Thinking about getting started with the AWS CDK? This post from Asanka Nissanka shows you a practical use case.</p>
<p><a href="https://medium.com/chewy-innovation/building-a-serverless-api-with-aws-lambda-5ba30b7e1830?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Building A Serverless API with AWS Lambda</a><br />
Anthony Plescia from Chewy.com shows you how to build and deploy a serverless API using ALB and a Lambda function written in Go.</p>
<p><a href="https://medium.com/@facundofasciolo/graphql-api-using-serverless-aws-appsync-dynamodb-lambda-resolvers-cognito-part-2-65f6815eb94?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">GraphQL API using Serverless + AWS AppSync + DynamoDB + Lambda resolvers + Cognito. [Part 2]</a><br />
Part 2 of Facundo Fasciolo’s series on building a serverless GraphQL API. This post shows you how to mount DynamoDB and run it locally.</p>
<p><a href="https://medium.com/@ChristianCastillejo/how-to-build-a-serverless-react-contact-form-integrating-email-slack-ms-teams-and-creating-7fc8b0223f4b?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">How to build a Serverless-React contact form integrating email, Slack, MS Teams and creating tickets in Trello.</a><br />
If you need a simple serverless contact form that integrates with a bunch of other notification services, check out this repo from Christian Castillejo Arcos.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://theburningmonk.com/2019/10/the-api-gateway-security-flaw-you-need-to-pay-attention-to/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">The API Gateway security flaw you need to pay attention to</a><br />
Yan Cui points out that ALL your APIs in an entire region share a rate limit that can be exhausted by a DoS attack on a single method. He’s got some suggestions on how to protect yourself from this.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.techrepublic.com/article/aws-billing-is-broken-and-kubernetes-wont-last-says-irreverent-economist-corey-quinn/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">AWS billing is broken and Kubernetes won’t last, says irreverent economist Corey Quinn</a><br />
This was a great interview with Corey Quinn. Not really about serverless, but worth the read. In case you didn’t know, “Larry Ellison is not people!”</p>
<p><a href="https://www.forbes.com/sites/forbestechcouncil/2019/10/07/the-cloud-is-transforming-how-we-build-software-here-is-how-companies-can-prepare/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">The Cloud Is Transforming How We Build Software — Here is How Companies Can Prepare</a><br />
If you’re having trouble convincing management to embrace serverless, have them read this article. “Cloud-Native And Serverless Are The Future. Embrace It Now.”</p>
<p><a href="https://dashbird.io/blog/serverless-a-paradigm-shift/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Serverless – a paradigm shift in app development</a><br />
John Demian outlines why serverless makes you think differently, what roll third-party services play, and how it differs from traditional architectures.</p>
<p><a href="https://medium.com/@sanudatta11/is-going-serverless-worth-it-pros-and-cons-of-server-less-a7631d13f666?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Is going serverless worth it? Pros and Cons of Server-Less</a><br />
I prefer a positive approach, so I try not to criticize people that write articles about serverless. However, I think this article is incredibly misleading. I included it because I believe that the author’s impression of serverless is likely a failure of our ability to properly explain it. This concerns me.</p>
<p><a href="https://blog.begin.com/the-cloud-lock-in-myth-opting-out-of-servers-and-opting-into-de-facto-standards-1b169b642024?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">The cloud lock-in myth: opting out of servers, and opting into de facto standards</a><br />
Brian LeRoux has a great new post that exposes cloud lock-in for what it truly is, a myth. The world is moving to serverless because it gets rid of the boring parts of building apps for the cloud. Brian suggests you get on board, or get left behind.</p>
<h3>If you’ve got a long commute… ?</h3>
<p><a href="https://www.serverlesschats.com/17?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Episode #17: Building Serverless Apps Using Architect with Brian LeRoux</a><br />
In this episode, I chat with Brian LeRoux about why he and his team built the Architect Framework, how it makes building modern serverless apps easier, and why DynamoDB should be your cloud database of choice.</p>
<h3>When you’re wondering what the AWS Devs are working on… ?‍♀️</h3>
<p><a href="https://aws.amazon.com/blogs/compute/improving-the-getting-started-experience-with-aws-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Improving the Getting Started experience with AWS Lambda</a><br />
Getting started with serverless can be daunting, but this new feature from AWS hopes to solve that problem. Now you can create an app in the console that utilizes infrastructure as code (IaC), creates a CI/CD pipeline for deployment, and bakes in best practices in serverless application structure and methods.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-translate-adds-support-seven-new-languages/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Amazon Translate now adds support for seven new languages – Greek, Romanian, Hungarian, Ukrainian, Vietnamese, Thai, and Urdu</a><br />
As I said last time, it would be great if they’d added support for English as well! ?</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-eventbridge-supports-aws-cloudformation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Amazon EventBridge now supports AWS CloudFormation</a><br />
Yes, yes, yes, finally, yes, thank you, why did this take so long, yes, yes, yes!</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-cognito-increases-cloudformation-support/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Amazon Cognito Increases CloudFormation Support</a><br />
Another useful update to CloudFront.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-elasticsearch-service-provides-option-to-mandate-https/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Amazon Elasticsearch Service provides option to mandate HTTPS</a><br />
Not serverless, but since this is really the only service that we use in AWS that will give us good, real-time search capabilities, it’s good to see this security improvement.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/amplify-cli-simplifies-starting-from-existing-amplify-projects-adds-new-command-extending-cli-capabilities/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Amplify CLI simplifies starting from existing Amplify projects and adds new command for extending CLI capabilities</a><br />
With a single command, the update CLI clones a git repo, deploys the backend, and configures the frontend. This helps speed up the process of set up, development, and testing existing Amplify projects.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://lumigo.io/blog/introducing-the-lumigo-cli/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Introducing the lumigo-cli</a><br />
We mentioned this tool last week, but some new features have been added and it’s definitely worth taking a look.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/salman_paracha/status/1179893896412712960?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">27 features and fixes, 11 documentation updates, 16 community contributors in AWS SAM 1.15.0. With added support for APIGW resource policies, SNS &lt;-SQS subscription, Lambda batch window size, and Cognitio event sources #serverless #awssam #nobigdeal</a> <strong>~ Salman Paracha</strong><br />
AWS SAM keeps getting better and better. There are some very cool updates here, including SNS event support for SQS Subscriptions and <code>MaximumBatchingWindowInSeconds</code> support for stream event sources.</p>
<p><a href="https://twitter.com/clare_liguori/status/1179862886966935552?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">I just cut a new major version of img2lambda</a> <strong>~ Clare Liguori</strong><br />
Lots of great updates to the img2lambda tool as well, which lets you repackage container images into AWS Lambda function deployment packages and Lambda layers.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>October 7-9, 2019 –</strong> <a href="https://nyc2019.serverlessconf.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2346" target="_blank" rel="noopener">Serverlessconf 2019 in New York City</a></p>
<p><strong>October 10, 2019 –</strong> <a href="https://medium.com/@davsclaus/upcoming-webinar-integration-patterns-in-a-serverless-world-105210a141f3?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2358" target="_blank" rel="noopener">Integration Patterns in a Serverless World Webinar</a></p>
<p><strong>October 14-16, 2019 –</strong> <a href="https://serverless-architecture.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2346" target="_blank" rel="noopener">Serverless Architecture Conference Berlin</a></p>
<p><strong>October 24, 2019 –</strong>  <a href="https://stockholm.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Stockholm</a></p>
<p><strong>October 30, 2019 –</strong> <a href="https://pages.awscloud.com/Serverless_Webinar_Q1_Epsagon_Israel-Epsagon.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2354" target="_blank" rel="noopener">Retail at the Scale of Serverless with AWS – Webinar</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Eslam Hefnawy</strong> (<a href="https://twitter.com/eahefnawy" target="_blank" rel="noopener">@eahefnawy</a>). Eslam is a Senior Core Developer on the team at Serverless, Inc. and a regular contributor on the <a href="https://serverless.com/blog/" target="_blank" rel="noopener">Serverless blog</a>. Eslam is one of the co-creators of the Serverless Framework and continues to create other great open source projects as well. He has been one of the driving forces behind the new <a href="https://github.com/serverless/components" target="_blank" rel="noopener">Serverless Components</a>, which you should definitely be keeping your eye on. Eslam brings tremendous value to the serverless space and we are thankful to have him. Thanks for all you do, Eslam! ?</p>
<h3>Final Thoughts ?</h3>
<p>I’ve been meeting and chatting with lots of great people here at Serverlessconf NYC. The team at A Cloud Guru has done a fantastic job bringing together all these serverless fanatics. I need to get back to the hallway track here, but I’ll leave you with this. Every conference I attend shows that the serverless space is continuing to mature and that more and more people are jumping on the bandwagon. There is a lot of exciting news to come in the next few months, so stay tuned for the next evolution of serverless.</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Until next week,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-58/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-58/</guid>
      <pubDate>Tue, 08 Oct 2019 22:06:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Off-by-none: Issue #57]]></title>
      <description><![CDATA[<h2>Stepping it up with Step Functions…</h2>
<p>Welcome to <strong>Issue #57</strong> of Off-by-none. Thanks for joining us this week! ?</p>
<p><a href="https://www.jeremydaly.com/newsletter-issue-56/">Last week</a>, we watched some videos from ServerlessDays Milan and looked at some awesome new AWS serverless announcements. This week, we’ll make you fall in love with Step Functions all over again (well, maybe), we’ve got a number of great serverless announcements, and plenty of great content from the serverless community.</p>
<p>Lots of amazing serverless stuff to get to, so let’s get right to it. ?</p>
<h3>Serverless News &amp; Product Announcements ?</h3>
<p><a href="https://www.gatsbyjs.org/blog/2019-09-26-announcing-gatsby-15m-series-a-funding-round/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Announcing Gatsby’s $15M Series A Funding Round</a><br />
Kyle Mathews has every right to celebrate. Gatsby is an incredibly useful tool that is completely changing the way people are building websites. It’ll be interesting to see what they can do with this new investment.</p>
<p><a href="https://serverless.com/blog/python-dashboard-support?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Zero Configuration Monitoring and Alerts now available for serverless Python apps</a><br />
Support for Python has been added to the Serverless Framework Dashboard to enable monitoring, alerts, and much more for your Python serverless applications.</p>
<p><a href="https://medium.com/google-cloud/knative-v0-9-0-a6fa0a3b1f7d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Knative v0.9.0</a><br />
If you’re keeping up with Knative, Mete Atamel will let you know all the new features of the v0.9.0 release.</p>
<p><a href="https://epsagon.com/blog/aws-eventbridge-and-epsagon-automated-tracing-integrate/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">AWS EventBridge and Epsagon Automated Tracing Integrate</a><br />
You can now get all of your Epsagon alerts and insights sent to EventBridge. This will allow you to trigger all kinds of workflows from these events.</p>
<p><a href="https://blog.cloudflare.com/extending-the-workers-platform/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Workers Sites: Extending the Workers platform with our own serverless building blocks</a><br />
So this is pretty cool. You can now simulate a file system on top of Workers KV and easily publish static sites to the edge using Cloudflare Workers.</p>
<p><a href="https://blog.cloudflare.com/html-rewriter-beta/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Not so static… Introducing the HTMLRewriter API Beta to Cloudflare Workers</a><br />
And here is some more Cloudflare Workers serverless goodness.</p>
<p><a href="https://lumigo.io/blog/lumigo-achieves-aws-devops-competency-status/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Lumigo Achieves AWS DevOps Competency Status</a><br />
Congrats to Erez and the team at Lumigo!</p>
<p><a href="https://finance.yahoo.com/news/stackery-launches-global-partner-program-130000224.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Stackery Launches Global Partner Program to Accelerate Well-Architected Serverless Application Delivery</a><br />
The Stackery Partner Program is a global initiative to empower solution integrators with application development practices to deliver fully realized serverless applications to customers using the Amazon Web Services (AWS) Well-Architected Framework.</p>
<p><a href="https://read.iopipe.com/auto-tracing-for-aws-lambda-calls-to-redis-databases-f043f809d707?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Auto-Tracing for AWS Lambda Calls to Redis Databases</a><br />
With VPC cold starts being dramatically reduced, I think using Redis with your Lambda workloads will become more prominent. And with IOpipe’s newly added automated tracing support, you’ll have more insights into your Redis interactions.</p>
<h3>Serverless Stories ?</h3>
<p><a href="https://medium.com/frank-digital/how-human-behaviour-influences-the-technical-approach-to-a-platform-795ee640f4d5?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">How human behaviour influences the technical approach to a platform ~</a><br />
A walk-through of how Frank Digital redesigned cancer support services using serverless technology.</p>
<p><a href="https://medium.com/@guillermoandrae/an-upgrade-part-1-devising-an-approach-9b05090a50a8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">An Upgrade: Part 1</a><br />
Guillermo Fisher is working to upgrade his personal website by continuing to build on his already serverless implementation. He documents his thought process in the first post in this series, and it is a really interesting read.</p>
<p><a href="https://www.indiehackers.com/article/how-i-future-proofed-my-tech-stack-f3d3273f25?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">How I Future-Proofed My Tech Stack</a><br />
This is worthwhile read from Albert Santalo from 8base. The comments are quite interesting as well. I’ve always advised startups to “not worry about scale” because it often wastes a lot of engineering time that could be better spent on finding product-market fit. But I think that calculus changes when companies adopt serverless.</p>
<h3>Serverless Use Cases ?</h3>
<p><a href="https://medium.com/@timawagner/https-medium-com-timawagner-serverless-mullet-architectures-212487bc75c?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Serverless Mullet Architectures</a><br />
Tim Wagner, aka the father of AWS Lambda, has an interesting use case using API Gateway WebSockets to coordinate “server-to-server” communication backed by AWS Lambda and DynamoDB.</p>
<p><a href="https://www.transposit.com/blog/2019.09.24-dynamodb-audit-table/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Using DynamoDB to track changes to DynamoDB</a><br />
This is an intriguing use case from Dan Moore that uses DynamoDB streams to automatically calculate diffs and write them to another DynamoDB table as an audit log. He deploys it straight from the aws-cli, but I’d recommend using a framework to handle all this for you.</p>
<p><a href="https://cloudonaut.io/how-to-create-a-customized-cloudwatch-dashboard-with-cloudformation/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">How to create a customized CloudWatch Dashboard with CloudFormation</a><br />
Here’s a great use case for serverless: build a custom CloudFormation resource using a Lambda function. Andreas Wittig will walk you through how to do it, and show you how to create a customized CloudWatch Dashboard with it.</p>
<p><a href="https://mraag.xyz/posts/transient-ec2-with-lambda/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Running transient servers with serverless</a><br />
Martin Raag has a good use case for serverless, spinning up and configuring EC2 instances to perform long-running tasks. There are plenty of workloads that still require more traditional solutions, and using Lambda functions to help automate tasks is a great way to get started.</p>
<h3>Advanced Serverless Concepts… ?</h3>
<p><a href="https://blog.rowanudell.com/best-practices-for-aws-step-functions/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Best Practices for AWS Step Functions</a><br />
Rowan Udell lays out a bunch of best practices for working with AWS Step Functions. My favorite one is letting Lambda functions fail and bubble up to the state machine. It’s a good way to keep your business logic untethered from the implementation.</p>
<p><a href="http://www.helenanderson.co.nz/sns-sqs/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">SNS, SQS or both?</a><br />
This is an overview of SNS (Simple Notification Service), SQS (Simple Queue Service) and how they can be used in isolation or together to send persistent and immediate messages.</p>
<p><a href="https://medium.com/@cbernardes/serverless-things-i-wish-i-had-known-before-i-started-part-1-aws-cognito-cf5d3a0c3d9d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Serverless: Things I wish I had known before I started – Part 1 – AWS Cognito</a><br />
Cleriston Bernardes has another interesting post, this time focusing on some of the limitations he’s found with AWS Cognito. Worth looking at if you are considering using this service.</p>
<p><a href="https://cloud.google.com/blog/products/serverless/6-strategies-for-scaling-your-serverless-applications/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">6 strategies for scaling your serverless applications</a><br />
Preston Holmes from Google explains how Google Cloud Functions scale, and what are some considerations when downstream services might not handle serverless scale. If you’re using Google Cloud for serverless, take a look at the recommendations in this post.</p>
<p><a href="https://theburningmonk.com/2019/09/should-you-pack-the-aws-sdk-in-your-deployment-artefact/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Should you pack the AWS SDK in your deployment artefact?</a><br />
Yan Cui answers this question for you. If I were you, I’d take his advice. ?</p>
<p><a href="https://dev.to/dashbird/lambda-functions-are-not-fault-tolerant-by-default-b7d?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Lambda Functions Are NOT Fault-Tolerant by Default</a><br />
This piece by Renato Byrro explains a little bit about Lambda’s retry behavior and why you need to make sure your operations are idempotent.</p>
<p><a href="https://blog.thundra.io/aws-developer-tools?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">AWS Developer Tools: Your Ally in Deploying and Maintaining Your Serverless World on AWS</a><br />
Serkan Özal gives an overview of the most popular tools for building automated test and deployment pipelines with AWS.</p>
<p><a href="https://datree.io/serverless-best-practices/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Top 10 Serverless best practices</a><br />
Yan Cui has some more advice for you. If you’re using the Serverless Framework, here are 10 things you should consider doing.</p>
<p><a href="https://epsagon.com/blog/distributed-tracing-the-right-framework-and-getting-started/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Distributed Tracing</a><br />
Ran Ribenzaft has a great article that goes into the details of what distributed tracing is, and how you might go about implementing it in your applications. Long story short, use an observability tool that provides distributed tracing out of the box.</p>
<h3>If you’re just getting started with serverless… ?</h3>
<p><a href="https://medium.com/@omalwijegunawardana/configuring-serverless-framework-with-aws-lambda-3c7777b49dbf?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Configuring Serverless Framework to work with AWS Lambda</a><br />
Omal Vindula gives you a quick start guide to downloading and configuring the Serverless Framework.</p>
<p><a href="https://medium.com/phone2action-engineering/3-major-challenges-of-the-serverless-framework-and-how-to-overcome-them-58e0611bfd87?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">3 Major Challenges of the Serverless Framework, and How to Overcome Them</a><br />
Here are some simple tips from Hugo Burbelo that will get you started with the Serverless Framework.</p>
<p><a href="https://dev.to/stackery/first-steps-with-serverless-python-write-to-s3-and-call-other-lambdas-1m51?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">First steps with serverless Python: write to s3 and call other Lambdas</a><br />
Toby Fee thinks Python isn’t getting enough attention, so here are two simple Python examples that you can use to build a Lambda function.</p>
<p><a href="https://medium.com/@serverlessguru/serverless-migration-lift-and-shift-2cc12d569596?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Serverless Migration: Lift-and-shift</a><br />
Ryan Jones has another post in his series on Serverless Migration. This time he looks at taking an existing and app and trying to port it to a cloud function. There are some reasons why this likely won’t work, which Ryan explains.</p>
<p><a href="https://medium.com/@serverlessguru/serverless-migration-choosing-a-deployment-framework-ed6ca6cf6f07?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Serverless Migration: Choosing a deployment framework</a><br />
In his second Serverless Migration post this week, Ryan Jones outlines several serverless deployment frameworks and what they are best suited for.</p>
<h3>Serverless Tutorials ?</h3>
<p><a href="https://medium.com/@facundofasciolo/graphql-api-using-serverless-aws-appsync-dynamodb-lambda-resolvers-cognito-part-1-8ec947614b86?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">GraphQL API using Serverless + AWS AppSync + DynamoDB + Lambda resolvers + Cognito. [Part 1]</a><br />
Facundo Fasciolo is working on a multipart tutorial for building a serverless GraphQL API. In part 1, he outlines the “Serverless basic configuration” to get your app setup and working locally with mock data.</p>
<p><a href="https://dev.to/cloudflareworkers/localizing-applications-with-cloudflare-worker-s-new-streaming-html-rewriter-1k41?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Localizing applications with Cloudflare Workers’ new streaming HTML Rewriter ?</a><br />
We mentioned Cloudflare Workers’ new HTMLRewriter earlier. Here’s a use case and tutorial for it that lets you localize the text on your site based on the user’s geographical location. While this use case might be trivial, there are plenty of other things you can do with it. And… it’s a lot easier that some other cloud provider’s implementations.</p>
<p><a href="https://serverless.com/learn/full-stack-application-development-on-aws/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Full Stack AWS Application Development (Free Course)</a><br />
Gareth McCumskey and Serverless, Inc. have a new (free) course on developing serverless applications on AWS with the Serverless Framework. It’s not complete yet, but this should be a great resource to follow along with.</p>
<h3>Serverless Security ?</h3>
<p><a href="https://www.protego.io/pci-dss-and-serverless-demystified/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">PCI DSS and Serverless Demystified</a><br />
Everything you ever wanted to know about PCI DSS and serverless.</p>
<h3>Serverless Reads ?</h3>
<p><a href="https://www.techrepublic.com/article/how-red-hat-is-pioneering-a-serverless-movement/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">How Red Hat is pioneering a serverless movement</a><br />
William Markito Oliveria talks about Red Hat’s serverless vision and where they see the future of serverless going. And, surprise, they’re going all in on Kubernetes.</p>
<p><a href="https://dev.to/dashbird/why-serverless-is-eating-the-stack-117?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Why #Serverless Is Eating the Stack</a><br />
Renato Byrro outlines a number of reasons why serverless is becoming the “go to” choice for lots of companies. The reasons he outlines are not new, but everyday we seem to get more and more evidence to support them.</p>
<p><a href="https://insidebigdata.com/2019/09/25/serverless-data-the-winning-cloud-adoption-strategy/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Serverless Data: The Winning Cloud Adoption Strategy</a><br />
This is a great piece by Venkat Venkataramani that makes the bold claim that “Open Source Software on Cloud Hardware is the New Legacy”, which I totally agree with. Managed service (including managed open source services) take the operational responsibility off your team, and moves it to a dedicated team of cloud professionals, at a fraction of the cost of hiring your own people.</p>
<p><a href="https://teachmyselfcloud.com/post/lambda-vpc-networking.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Testing improvements to Lambda VPC Networking</a><br />
Matt Lewis did some quick tests of the new Lambda VPC networking improvements and the results are amazing!</p>
<p><a href="https://blog.checklyhq.com/why-i-pick-heroku-over-aws-lambda-but-not-always/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Why I pick Heroku over AWS Lambda. But not always.</a><br />
Tim Nolet has a well-written piece on when and why he might choose Heroku over AWS Lambda. There are some good points in here about vendor lock-in, and why it’s probably not something you need to worry about.</p>
<p><a href="https://medium.com/@ashan.fernando/aws-serverless-building-blocks-for-microservices-728a6c2ef6e?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">AWS Serverless Building Blocks for Microservices</a><br />
I like reading how other people think about serverless microservices. Ashan Fernando outlines a few ways to use serverless “middleware” to handle service-to-service communication.</p>
<p><a href="https://medium.com/@tobyfee/the-hidden-problem-of-serverless-83d0e93d9e99?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">The Hidden Problem of Serverless</a><br />
Toby Fee compares managing serverless applications to the responsibility of taking care of pet birds. I think the comparison is quite apt. ?</p>
<h3>While you’re waiting for season 4 of Stranger Things… ?</h3>
<p><a href="https://www.serverlesschats.com/16?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Episode #16: Serverless Workflows using Step Functions with Rowan Udell</a><br />
In this episode, I chat with Rowan Udell about the benefits of state machines, the core functionality and advanced features of AWS Step Functions, and some recommendations for building smarter serverless workflows.</p>
<p><a href="https://dev.to/jeremylikness/serverless-azure-fundamentals-pcj?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Serverless Azure Fundamentals</a><br />
Part 5 of Jeremy Likness’ Moving from Lambda to Azure Functions (5 Part Series).</p>
<p><a href="https://www.youtube.com/watch?v=mdvtBApwyFc?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">How to use AWS Cloud9 (and AWS SAM) to create serverless projects | SAM Series #2</a><br />
This video shows you how to use the Cloud9 IDE to create, deploy and debug serverless projects using the AWS SAM framework.</p>
<p><a href="https://www.youtube.com/watch?v=0T8WJ_xq8hU?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">API Gateway security mechanisms | Serverless Security</a><br />
In this video, Marcia Villalba shows us different mechanisms that API Gateway has built-in for providing security for your serverless applications.</p>
<p><a href="https://www.youtube.com/watch?v=0jTGi59rTH8?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Serverless Transformation: An Online Panel Discussion</a><br />
Ben Ellerby hosts panelists Nader Dabit, Emrah Samdan and Craig Mayhew to discuss a range of serverless topics.</p>
<h3>When you’re wondering what the AWS Devs are working on… ?‍♀️</h3>
<p>Not much to announce on the serverless side of things this week, but I’m sure we’ll be seeing a lot more coming soon.</p>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/10/dynamodbmapper-now-supports-optimistic-locking-for-amazon-dynamodb-transactional-api-calls/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">DynamoDBMapper now supports optimistic locking for Amazon DynamoDB transactional API calls</a><br />
If you’re using Java and DynamoDB, this new update to DynamoDBMapper should make your transactional API calls more reliable.</p>
<h3>Serverless Tools ?</h3>
<p><a href="https://www.faastest.com/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Who’s the Faastest?</a><br />
Nuweba launched this cool little tool that shows you which FaaS services and runtimes are the “faastest”.</p>
<p><a href="https://dev.to/pavelvlasov/edit-serverless-yaml-templates-in-vscode-like-a-pro-4pkk?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">Edit serverless YAML templates in VSCode like a pro</a><br />
Pavel Vlasov created an extension for VSCode that does autocompletion and implements some other fancy features when working with AWS SAM, CloudFormation, and serverless.yml files.</p>
<p><a href="https://medium.com/better-programming/how-to-work-with-aws-lambda-in-swift-28326c5cc765?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">How To Work with AWS Lambda in Swift</a><br />
If you are a Swift developer and want to build Lambda functions using Swift, check out this new custom runtime by Andrea Scuderi.</p>
<h3>Thoughts from Twitter ?</h3>
<p><a href="https://twitter.com/hichaelmart/status/1177258441523568641?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2357" target="_blank" rel="noopener">One of the biggest engineering costs you can reduce is developer-thumb-twiddling. Brought our frontend CI time down from 8 mins to 25 secs by parallelizing on AWS Lambda ( @lamb_ci ). Each Lambda tests every nth file (testing/formatting/linting 3k files over 13 sites).</a> <strong>~ Michael Hart</strong><br />
Using Lambda functions to parallelize tasks (with isolation between them) makes for some pretty fascinating use cases. Michael Hart uses them to run all his CI checks for lambCI, and the increase in speed is incredible.</p>
<h3>Upcoming Serverless Events ?</h3>
<p>There are <em>a lot</em> of upcoming serverless events, webinars, livestreams, and more. If you have an event you’d like me to mention, please <a href="mailto:contact@jeremydaly.com">email</a> me.</p>
<p><strong>October 2, 2019 –</strong> <a href="https://pages.awscloud.com/AWS-Online-Tech-Talks_2019_0919-SRV.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2355" target="_blank" rel="noopener">Deep Dive on Amazon EventBridge (Webinar)</a></p>
<p><strong>October 3, 2019 –</strong> <a href="https://webinars.devops.com/how-to-leverage-serverless-to-optimize-for-cost-and-performance?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2355" target="_blank" rel="noopener">How to Leverage Serverless to Optimize for Cost and Performance (Webinar)</a></p>
<p><strong>October 7-9, 2019 –</strong> <a href="https://nyc2019.serverlessconf.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2346" target="_blank" rel="noopener">Serverlessconf 2019 in New York City</a></p>
<p><strong>October 14-16, 2019 –</strong> <a href="https://serverless-architecture.io/?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2346" target="_blank" rel="noopener">Serverless Architecture Conference Berlin</a></p>
<p><strong>October 24, 2019 –</strong>  <a href="https://stockholm.serverlessdays.io/" target="_blank" rel="noopener">ServerlessDays Stockholm</a></p>
<p><strong>October 30, 2019 –</strong> <a href="https://pages.awscloud.com/Serverless_Webinar_Q1_Epsagon_Israel-Epsagon.html?utm_source=newsletter&amp;utm_medium=email&amp;utm_content=offbynone&amp;utm_campaign=Off-by-none%3A%20Issue%20%2354" target="_blank" rel="noopener">Retail at the Scale of Serverless with AWS – Webinar</a></p>
<h3>Serverless Star of the Week ⭐️</h3>
<p>There is a <em>very</em> long list of people that are doing #ServerlessGood and contributing to the Serverless community. These people <em>deserve</em> recognition for their efforts. So each week, I will mention someone whose recent contribution really stood out to me. I love meeting new people, so if you know someone who deserves recognition, please let me know.</p>
<p>This week’s star is <strong>Sam Kroonenburg</strong> (<a href="https://twitter.com/samkroon" target="_blank" rel="noopener">@samkroon</a>).  Sam is the CEO and co-founder of A Cloud Guru, an online learning platform that has helped almost a million people learn cloud computing (and pass AWS Certification exams). Sam is a huge fan of serverless and a regular speaker on the subject. Most of the content that <a href="https://acloud.guru/" target="_blank" rel="noopener">acloud.guru</a> creates is available with a subscription, but their <a href="https://read.acloud.guru/" target="_blank" rel="noopener">blog</a> also has a ton of great community content for free. Sam and his brother, Ryan, also started <a href="https://nyc2019.serverlessconf.io" target="_blank" rel="noopener">Serverlessconf</a>, and the 9th edition of it is happening next week in NYC. These events always produce great talks that help people think differently about serverless and continue to drive the ecosystem forward. Thanks for all the work you do for the community, Sam! ?</p>
<h3>Final Thoughts ?</h3>
<p>It was another busy week for me as I continue to work on a new serverless project. There have been a lot of learnings from it, so I hope to be able to write about them and share it with you all soon. I just need to find the time! ?</p>
<p>I’ll be at Serverlessconf next week, so I hope to see some of you there. I’ve got plenty of stickers for Off-by-none and Serverless Chats, so please come and say “Hi!”</p>
<p>I hope you enjoyed this issue of <strong>Off-by-none</strong>. Please send me your feedback and suggestions as they help to make this newsletter better each week. You can reach me via <a href="http://twitter.com/jeremy_daly" target="_blank" rel="noopener">Twitter</a>, <a href="http://www.linkedin.com/in/jeremydaly" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/jeremydaly" target="_blank" rel="noopener">Facebook</a>, or <a href="mailto:contact@jeremydaly.com">email</a> and let me know your thoughts, criticisms, or (perhaps) even how you’d like to contribute to <strong>Off-by-none</strong>.</p>
<p>If you like this newsletter, and think others would too, please do me the honor of <a href="https://www.jeremydaly.com/newsletter/">sharing</a> it with friends and coworkers who are interested in serverless.</p>
<p>Best,<br /><em>Jeremy</em></p>
<p class="c6"><em>Share this newsletter with your friends and coworkers!</em></p>
<div class="heateor_sss_sharing_container heateor_sss_horizontal_sharing c7">
<ul class="heateor_sss_sharing_ul"></ul></div>
<hr /><p class="c8"><strong>Off-by-none</strong> is a weekly email newsletter that focuses on the technical details of building applications and products in the cloud using serverless technology. Together we can become better developers and product people by making fewer mistakes as we learn from each other. <strong>Off-by-none</strong> is the idea that we can become exceptional at what we do, if we are willing to put in the work. Join me on this journey as we help the community work to develop best practices, share our ideas, and learn to build better cloud-based software.</p>
<div class="c11">
<p>Sign up below and get <strong>Off-by-none</strong> delivered to your inbox every Tuesday.</p>
<div id="mc_embed_signup">
<form id="mc-embedded-subscribe-form" class="validate" action="https://jeremydaly.us11.list-manage.com/subscribe/post?u=8454fd51e4426cac2c66458a7&amp;id=374e1bf818" method="post" novalidate="" target="_blank">
<div id="mc_embed_signup_scroll">
<p><input id="mce-EMAIL" class="email" name="email" required="required" type="email" value="" placeholder="Email address" /></p>
<div class="c9" aria-hidden="true"><input tabindex="-1" name="b_8454fd51e4426cac2c66458a7_374e1bf818" type="text" value="" /></div>
<div class="clear"><input id="mc-embedded-subscribe" class="button c10" name="subscribe" type="submit" value="Subscribe to Off-by-none" /></div>
</div>
</form>
</div>
</div>
<p><small>I respect your privacy and I will <strong>NEVER</strong> sell, rent or share your email address.</small></p>]]></description>
      <link>https://www.jeremydaly.com/newsletter-issue-57/</link>
      <guid>https://www.jeremydaly.com/newsletter-issue-57/</guid>
      <pubDate>Wed, 02 Oct 2019 05:05:00 +0200</pubDate>
    </item>
  </channel>
</rss>
