<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Marcia Villalba]]></title><description><![CDATA[AWS Developer 🥑 from 🇺🇾 living in 🇫🇮
Opinions are my own]]></description><link>https://blog.marcia.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 09:57:57 GMT</lastBuildDate><atom:link href="https://blog.marcia.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The ultimate AWS Step Functions guide]]></title><description><![CDATA[In this guide, you will go from zero to hero in your AWS Step Functions knowledge. If you are just getting started or you are already using this service, you will find for sure something for you.
The guide is free and divided into different sections ...]]></description><link>https://blog.marcia.dev/the-ultimate-aws-step-functions-guide</link><guid isPermaLink="true">https://blog.marcia.dev/the-ultimate-aws-step-functions-guide</guid><category><![CDATA[serverless]]></category><category><![CDATA[AWS Step Functions]]></category><category><![CDATA[#EventDrivenArchitecture]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Mon, 06 May 2024 11:14:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713856559403/26a72542-8de0-4b19-9b65-341aa322484f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this guide, you will go from zero to hero in your AWS Step Functions knowledge. If you are just getting started or you are already using this service, you will find for sure something for you.</p>
<p>The guide is free and divided into different sections for you to find the content easily.</p>
<ul>
<li><p><strong>The first section</strong> - <strong>Introduction</strong> - is ideal for beginners as it will go into what AWS Step Functions is and all the terms that the rest of the guide will use.</p>
</li>
<li><p><strong>The second section</strong> - <strong>Features</strong> - is ideal for everybody that wants to learn the basic features that AWS Step Functions provides out of the box. Later in the guide, there is a section with more advanced features.</p>
</li>
<li><p><strong>The third section is about Integration Patterns.</strong> One of the main advantages of Step Functions is that it can integrate with over 200 AWS services, as well as external services and manual process. In this section, you will learn how that is done.</p>
</li>
<li><p><strong>The fourth section is about costs.</strong> This is a section that everybody should watch as in this part of the guide we go into detail on how the different workflows are charged as well as how you can optimize your workflows with costs in mind.</p>
</li>
<li><p><strong>The fifth section is about developing applications using AWS Step Functions.</strong> Here you will learn how to do it with infrastructure as code - AWS SAM or AWS CDK. And many features that will help you in the development like IDE tools and testing capabilities.</p>
</li>
<li><p><strong>The sixth section is all about the more advanced and specific features that AWS Step Functions offer.</strong> This is a great section if you have to solve one particular problem or you want to become an expert in the service.</p>
</li>
<li><p><strong>The last section is all about examples and patterns using AWS Step Functions.</strong> Here you can see different architectures that were built using this service and how the problems were solved. This is a great section for more advanced users and for people that are already building applications with this service.</p>
</li>
</ul>
<h2 id="heading-1-introduction">1. Introduction</h2>
<p>This section is ideal for beginners as it will go into what AWS Step Functions is and all the terms that you need to know in order to follow along the guide.</p>
<p>In this first video, you will learn what AWS Step Functions are, what are the main use cases and benefits.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/_OtKwMy4S5s">https://youtu.be/_OtKwMy4S5s</a></div>
<p> </p>
<p>In this video, dive deep into AWS Step Functions, exploring key concepts such as types of states, and how they are visually represented. It covers the eight types of states, and state management. It talks about the different workflows (standard and express) and when to use each.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/t2JeWUpiWFc">https://youtu.be/t2JeWUpiWFc</a></div>
<p> </p>
<p>This video explains the distributed map state in more detail, that allows you to write Step Functions to coordinate large-scale parallel workloads within your serverless applications. You can iterate over millions of objects such as logs, images, or .csv files stored in Amazon S3. The distributed map state can launch up to ten thousand parallel workflows to process data.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/_6ym3IRrRxo">https://youtu.be/_6ym3IRrRxo</a></div>
<p> </p>
<p>If you want to learn more about the distributed map state and how some companies are using it, check <a target="_blank" href="https://aws.amazon.com/blogs/aws/how-cybercrx-cut-ml-processing-time-from-8-days-to-56-minutes-with-aws-step-functions-distributed-map/">this blog</a> post where I talk with CyberGRX about their solution.</p>
<h2 id="heading-2-basic-features">2. Basic features</h2>
<p>This section is ideal for everybody that wants to learn the basic features that AWS Step Functions provides out of the box. Later in the guide, there is a section with more advanced features.</p>
<h3 id="heading-intrinsic-functions">Intrinsic functions</h3>
<p>The Amazon States Language provides several intrinsic functions, also known as intrinsic, that help you perform basic data processing operations without using a Task state. Intrinsic are constructs that look similar to functions in programming languages. They can be used to help payload builders process the data going to and from the Resource field of a Task state.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/EqNjif9tc1Q">https://youtu.be/EqNjif9tc1Q</a></div>
<p> </p>
<h3 id="heading-error-handling">Error handling</h3>
<p>One of the best features of Step Functions is all the different mechanisms that it provides for error handling. In this video, you will learn about Step Functions error handling mechanisms: retries, fallback states, and redrive.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/2nWzsBYRBEk">https://youtu.be/2nWzsBYRBEk</a></div>
<p> </p>
<h2 id="heading-3-integration-patterns">3. Integration patterns</h2>
<p>This section is about Integration Patterns. One of the main advantages of Step Functions is that it can integrate with over 200 AWS services, as well as external services and manual process. In this section, you will learn how that is done.</p>
<p>In this first video, you will learn about the three integration patterns available in Step Functions and when to use each.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/vuFN4GC3rhg">https://youtu.be/vuFN4GC3rhg</a></div>
<p> </p>
<p>In this video, you will see an example - with code demo about the integration pattern to run a synchronous job.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/L7Y--WJsxVY">https://youtu.be/L7Y--WJsxVY</a></div>
<p> </p>
<p>In this video, you will see an example - with code demo about the integration pattern to wait for a callback.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/UN3_abQ_AvY">https://youtu.be/UN3_abQ_AvY</a></div>
<p> </p>
<h2 id="heading-4-costs">4. Costs</h2>
<p>Understanding costs and how much the different AWS resources cost us is an important part of the architect job. In this video, Ben Smith, Developer Advocate for AWS, talks about how the different Step Functions workflows are priced and how you can do interesting optimizations to get the best price you can from running your workflows.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/kCbfFsjArLQ">https://youtu.be/kCbfFsjArLQ</a></div>
<p> </p>
<h2 id="heading-5-building-and-developing-step-functions">5. Building and developing Step Functions</h2>
<p>There are many ways to build and develop Step Functions. You can build them from the console or as code. In this section, you will learn the different options you have to build them.</p>
<p>The first video shows the Step Function Workflow Studio. In my opinion one of the best UIs in the AWS Console. The Workflow Studio is a tool that helps you to build workflows visually.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/YHqRwPkhwLs">https://youtu.be/YHqRwPkhwLs</a></div>
<p> </p>
<p>If you like to work with your workflows as infrastructure as code, you might be interested in this other video, where you can learn how to create workflows using AWS SAM and ASL (Amazon State Language).</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/TYBYV0HWAnM">https://youtu.be/TYBYV0HWAnM</a></div>
<p> </p>
<p>Also, you might be interested in using AWS CDK to build your workflows, and this video shows you the native AWS CDK way to build the workflows and also how to integrate the ASL template into your CDK application.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/BXdhXRNVvbQ">https://youtu.be/BXdhXRNVvbQ</a></div>
<p> </p>
<p>If you like to use Workflow Studio from your IDE, you can use it from Visual Studio Code if you are using AppComposer. This video shows how you can do it.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/bdA6yMXJW6Y">https://youtu.be/bdA6yMXJW6Y</a></div>
<p> </p>
<p>Now that you know how to build and develop your workflows, you might need to test them and debug them. If you are using the AWS Console and Workflow Studio, you can take advantage of the visual capability of debugging the workflows.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/9A-cJ1LkQeY">https://youtu.be/9A-cJ1LkQeY</a></div>
<p> </p>
<p>Also, if you are using Workflow Studio, you can use the Test State functionality that allows you to test every state before deploying the workflow. This is really handy when building complex integrations when you want to test permissions, payloads, and intrinsic functions.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/AGrJsF3G_1E">https://youtu.be/AGrJsF3G_1E</a></div>
<p> </p>
<p>And finally, if you are into writing unit tests for your workflows, Step Function provides a framework called Mocked Service Integrations that allows you to write this kind of tests and keep them as code in your repository. Unit tests are always a good practice when you are building any kind of application. You can use them to make sure that all the changes you don't break the existing functionality.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/P3hEqxKxZe8">https://youtu.be/P3hEqxKxZe8</a></div>
<p> </p>
<h2 id="heading-6-advanced-features">6. Advanced features</h2>
<p>This section is all about advanced and specific features that AWS Step Functions offer. This is a great section if you have to solve one particular problem or you want to become an expert in the service.</p>
<p>One feature that I won't call it advanced but I want to mention here is the capability of Step Functions to integrate with over 200 AWS Services natively, without the need to use a function in the middle. This video shows more about this integration.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/jtmQJqaInT0">https://youtu.be/jtmQJqaInT0</a></div>
<p> </p>
<p>If you need to invoke an external HTTP Endpoint and you don't want to use a Lambda function, you can do this directly from the workflow, using the new HTTPs endpoint task state. In this video, you will learn how to use it.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/HtmIW566Vac">https://youtu.be/HtmIW566Vac</a></div>
<p> </p>
<p>For the ones using Generative Artificial Inteligence in their applications, you can integrate Amazon Bedrock directly to your workflows. This video shows you how.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Na8Orgzb2TM">https://youtu.be/Na8Orgzb2TM</a></div>
<p> </p>
<p>If you need to have multiple versions of the same workflow available, for example, for your deployment stages, you can take advantage of this feature of Alias and Versions that Step Functions provides. You can update independent versions of the workflow and have alias pointing to the right version you are interested. This video shows you how to do it.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/BHZNaWCaNnU">https://youtu.be/BHZNaWCaNnU</a></div>
<p> </p>
<h2 id="heading-7-patterns-and-useful-architectures">7. Patterns and useful architectures</h2>
<p>This last section is all about example architectures and patterns using AWS Step Functions. Here you can find different architectures that were built using this service and how the problems were solved.</p>
<p>The first video is a conversation with Ben Smith, Developer Advocate for AWS, in where he presents a series of very useful patterns that you can use in your applications to make them better and to solve complex problems easily.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/XN1Jow5bDJ0">https://youtu.be/XN1Jow5bDJ0</a></div>
<p> </p>
<p>This video is an example of an asynchronous application for transforming content with AI. You will learn how to embrace event-driven architectures and how the different concepts that were exposed earlier in this post come together into one architecture.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/He-CHl2tlgo">https://youtu.be/He-CHl2tlgo</a></div>
<p> </p>
<p>This video shows how to build a synchronous workflow using Step Functions and API Gateway. In this way, Step Functions can be the backend for your APIs.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/R6xqbFtU2Z0">https://youtu.be/R6xqbFtU2Z0</a></div>
<p> </p>
<p>This video explains the Saga pattern and how to implement it using Step Functions.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/lDEbFPKGozA">https://youtu.be/lDEbFPKGozA</a></div>
<p> </p>
<p>In this video, James Beswick, Developer Advocate for AWS, explains how Serverlesspresso uses Step Functions and EventBridge to orchestrate the different coffee orders.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=71ln5qjiVbk">https://www.youtube.com/watch?v=71ln5qjiVbk</a></div>
<p> </p>
<h2 id="heading-8-conclusion">8. Conclusion</h2>
<p>And with that, you arrived at the end of the guide. <strong>Congrats</strong>!</p>
<p>By now, you should have enough information to start building your own applications using Step Functions.</p>
<blockquote>
<p>In this comprehensive guide, you will learn everything from the basics to advanced features of AWS Step Functions, including integration patterns, costs, development options, and real-world examples. Ideal for beginners and experienced users alike, this guide covers all you need to know to start building applications with Step Functions.</p>
</blockquote>
<p>If you want to get notified regularly when I create new content like this, you can subscribe to <a target="_blank" href="https://marciavillalba.substack.com/">my newsletter</a>.</p>
<p>And please share this article if you find it useful!</p>
]]></content:encoded></item><item><title><![CDATA[Getting started with Amazon Bedrock and Serverless]]></title><description><![CDATA[Serverless is a great technology to build your artificial intelligence applications, as most of the AI services that AWS provides are serverless.
In this article, you will find a list of resources that can be useful when getting started building appl...]]></description><link>https://blog.marcia.dev/getting-started-with-amazon-bedrock-and-serverless</link><guid isPermaLink="true">https://blog.marcia.dev/getting-started-with-amazon-bedrock-and-serverless</guid><category><![CDATA[generative ai]]></category><category><![CDATA[serverless]]></category><category><![CDATA[Cloud Computing]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 06 Feb 2024 16:23:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1707236493494/537ff5f2-af2e-4eed-b86d-4578fe2af7e3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Serverless is a great technology to build your artificial intelligence applications, as most of the AI services that AWS provides are serverless.</p>
<p>In this article, you will find a list of resources that can be useful when getting started building applications with Amazon Bedrock.</p>
<h2 id="heading-amazon-bedrock">Amazon Bedrock</h2>
<h3 id="heading-what-is-amazon-bedrock">What is Amazon Bedrock?</h3>
<p>Amazon Bedrock is a fully managed service that offers a selection of high-performing foundational models along with a broad set of capabilities to build gen AI applications. </p>
<p>Let's go into that definition and break it out in parts.</p>
<ul>
<li><p>Bedrock is a serverless service</p>
</li>
<li><p>Bedrock offers many foundational models. Bedrock hosts those FM and you using the same API can switch the model your application is using.<br />  You can find models from AI21, Anthropic, Cohere, Meta, Stability AI and Amazon. </p>
</li>
<li><p>You can also adapt your models with data, either by fine tune them using your own data-sets or by creating knowledge bases to your data.</p>
</li>
<li><p>Bedrock offers a set of capabilities to build Gen AI applications. Capabilities that range from RAG - retrieval augmented generation, Bedrock Agents, Guardrails, and many other features that allow you to build secure Gen AI applications.</p>
</li>
</ul>
<h3 id="heading-amazon-bedrock-features">Amazon Bedrock Features</h3>
<h4 id="heading-bedrock-response-streaming">Bedrock response streaming</h4>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/NDtrk9Pm9w0">https://youtu.be/NDtrk9Pm9w0</a></div>
<p> </p>
<h4 id="heading-knowledge-bases-and-agents">Knowledge Bases and Agents</h4>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/P9n8BE693go">https://youtu.be/P9n8BE693go</a></div>
<p> </p>
<h2 id="heading-amazon-bedrock-and-aws-lambda">Amazon Bedrock and AWS Lambda</h2>
<h3 id="heading-lambda-and-python">Lambda and Python</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/P9Lnf4GMUsI">https://youtu.be/P9Lnf4GMUsI</a></div>
<p> </p>
<h3 id="heading-lambda-and-nodejs">Lambda and NodeJS</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/n-2C5hWB1os">https://youtu.be/n-2C5hWB1os</a></div>
<p> </p>
<h2 id="heading-amazon-bedrock-and-aws-step-functions">Amazon Bedrock and AWS Step Functions</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Na8Orgzb2TM">https://youtu.be/Na8Orgzb2TM</a></div>
<p> </p>
<p><a target="_blank" href="https://aws.amazon.com/blogs/aws/build-generative-ai-apps-using-aws-step-functions-and-amazon-bedrock/">Launch blog post - <strong>Build generative AI apps using AWS Step Functions and Amazon Bedrock</strong></a></p>
<h2 id="heading-more-related-content">More related content...</h2>
<ul>
<li><p><a target="_blank" href="https://blog.marcia.dev/building-ai-apps-with-serverless-resources">Check my blog post with resources about building AI Serverless applications, where you can find a full demo of this topic.</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/KLEX1-cS2l4?si=UbbmULrYIZRP0VV5">[Spanish] - Aprende sobre como construir applications de inteligencia artificial generativa con serverless</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Building data streaming applications with Amazon Kinesis and serverless]]></title><description><![CDATA[Welcome to this comprehensive guide on using Amazon Kinesis for building serverless data streaming applications. This detailed guide will cover various aspects, ranging from what are data streaming applications, to understand the different services o...]]></description><link>https://blog.marcia.dev/building-data-streaming-applications-with-amazon-kinesis-and-serverless</link><guid isPermaLink="true">https://blog.marcia.dev/building-data-streaming-applications-with-amazon-kinesis-and-serverless</guid><category><![CDATA[data streaming]]></category><category><![CDATA[Amazon Kinesis]]></category><category><![CDATA[serverless]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 16 Jan 2024 12:00:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705345585162/2c6af812-8928-44fe-b524-1a700b9053c0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to this comprehensive guide on using <a target="_blank" href="https://aws.amazon.com/kinesis/"><strong>Amazon Kinesis</strong></a> <strong>for building serverless data streaming applications</strong>. This detailed guide will cover various aspects, ranging from what are data streaming applications, to understand the different services offered in the Kinesis family, to deep dives on Amazon Kinesis Data Streams with Lambda, Event Source Mapping, integrations with Kinesis Data Streams and Pipes and more advanced concepts.</p>
<p>The guide is divided into five sections, each addressing different topics:</p>
<p><strong>Section 1: Introduction to Data Streaming applications:</strong> In this section, you will learn what are data streaming applications, some advanced patterns, and get a short introduction about Amazon Kinesis family of service.</p>
<p><strong>Section 2: Amazon Kinesis Data Streams:</strong> The second section provides an general view of the fundamental concepts of Kinesis Data Streams.</p>
<p><strong>Section 3: Amazon Kinesis Data Streams and AWS Lambda:</strong> The third section provides an in-depth understanding of the fundamental concepts of Kinesis Data Streams when paired with AWS Lambda to consume and put records into the stream.It caters to both beginners and experts, delving into the inner workings of this service.</p>
<p><strong>Section 4: Kinesis Data Streams and Amazon EventBridge Pipes:</strong> In the fourth section, you will discover a new way to consume records in real-time from your streams. How EventBridge Pipes can help you out and why it is an alternative to AWS Lambda in many cases.</p>
<p><strong>Section 5: Amazon Kinesis Firehose:</strong> The final section goes into details on using Amazon Kinesis Firehose, how to build a simple pipeline, and how to use AWS Lambda to transform records in almost real-time.</p>
<p>So, without further ado, let's dive into the world of Amazon Kinesis and unlock its full potential!</p>
<p><strong><em>Happy learning!</em></strong></p>
<h2 id="heading-1-introduction-to-data-streaming">1-Introduction to Data Streaming</h2>
<p>To understand data streaming, you first need to grasp the traditional data processing approach. In the past, data was often stored in databases and processed in batches. However, this method had its limitations, especially when dealing with massive amounts of data in real-time scenarios.</p>
<p>Data streaming, on the other hand, enables continuous data flow, processing data in real-time as it arrives and does real time alerts, actions, analytics or ML processing. Think of it as a never-ending river of information, constantly being analysed and acted upon.</p>
<h3 id="heading-use-cases-of-data-streaming"><strong>Use Cases of Data Streaming</strong></h3>
<p>Now that you understand the significance of data streaming, let's explore some of the compelling use cases where it truly shines. Data streaming finds applications in various industries.</p>
<ul>
<li><p>For instance, in the <strong>Internet of Things (IoT)</strong> realm, sensors continuously stream data from connected devices, allowing real-time monitoring and analysis of critical systems.</p>
</li>
<li><p><strong>Financial institutions</strong> benefit from data streaming to process high-frequency trading data swiftly and detect fraudulent activities in real-time.</p>
</li>
<li><p><strong>Social media platforms</strong> use data streaming to track trending topics, analyse sentiments, and provide personalised content to users.</p>
</li>
</ul>
<h3 id="heading-data-streaming-platforms"><strong>Data streaming platforms</strong></h3>
<p>At the core of data streaming are streaming platforms like Apache Kafka, Apache Flink and AWS Kinesis. These platforms enable the ingestion, processing, and delivery of data in real-time. Ultimately, the choice of data streaming platform depends on your specific requirements, such as scalability, real-time processing capabilities, and integration with other services.</p>
<h3 id="heading-data-streaming-vs-event-driven-architectures"><strong>Data Streaming vs. Event-Driven Architectures</strong></h3>
<p>You might wonder how data streaming differs from event-driven architectures. While both concepts deal with handling real-time data, they have distinct characteristics and use cases.</p>
<p>Data streaming is all about continuous data flow, processing data as it arrives. It focuses on the seamless, real-time movement and processing of large volumes of data from various sources. Think of it as a river of data, constantly flowing and being processed.</p>
<p>In contrast, event-driven architectures are focused on the exchange of events between different components of a system. These events represent significant occurrences in the system, triggering specific actions when they happen. It's like a series of interconnected event triggers and listeners.</p>
<p>The key distinction lies in their primary focus: data streaming is about the continuous flow of data, while event-driven architectures focus on the meaningful events within a system.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/uS9IJtH-oAc">https://youtu.be/uS9IJtH-oAc</a></div>
<p> </p>
<h3 id="heading-data-streaming-patterns">Data streaming patterns</h3>
<p>Let's talk about some of the most common and useful patterns when building data streaming applications: change data capture, content enricher, content and message filtering, and translator pattern. And finally, you will learn a pattern to ingest log data efficiently.</p>
<p>In this video, you will learn some useful patterns when building data streaming solutions.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/1M3znGyXOIw">https://youtu.be/1M3znGyXOIw</a></div>
<p> </p>
<h3 id="heading-introduction-to-amazon-kinesis">Introduction to Amazon Kinesis</h3>
<p>Amazon Kinesis is a family of services that is great for real-time big data and building data streaming applications. The Kinesis family offers many services to perform specific tasks and integrates natively with many AWS services.</p>
<p>The services available in the Amazon Kinesis family:</p>
<ul>
<li><p><strong>Amazon Kinesis Data Streams:</strong> a low latency streaming ingest at scale</p>
</li>
<li><p><strong>Kinesis Data Firehose:</strong> allows us to load streams of data into S3, Redshift, and other services</p>
</li>
<li><p><strong>Kinesis Video Streams:</strong> allows us to process live video data in real time.</p>
</li>
</ul>
<p>In this video, you will learn the basics from Amazon Kinesis. Why you want to use it? What problem is it solves? Also, the video gets into the details or Amazon Kinesis Data Stream and Amazon Kinesis Firehose.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/KAydgcQDaGM">https://youtu.be/KAydgcQDaGM</a></div>
<p> </p>
<h2 id="heading-2-amazon-kinesis-data-streams">2- Amazon Kinesis Data Streams</h2>
<p>Kinesis Data Streams take the data generated by different producers and ingest them into shards. Then the different consumers will read that data from the shards.</p>
<p><img src="https://d1.awsstatic.com/Product-Page-Diagram_Amazon-Kinesis-Data-Streams%20(3).19b17326a59c73de2f302723b52b63e8399d722f.png" alt="Diagram showing how Amazon Kinesis Data Streams ingests and analyzes streaming data to build custom real-time applications." /></p>
<h3 id="heading-how-shards-works">How Shards works?</h3>
<p>Kinesis Data Streams has 2 modes for provision capacity to those shards, on-demand or provisioned. No matter which mode you chose, you are going to have shards. A shard is a unique sequence of data records in a stream and provides a fixed unit of capacity.</p>
<p>Each shard can support 5 read transactions per second or 2 MB per second. And they can write up to a 1000 records per second up to a maximum total write of 1 MB per second.</p>
<p>Inside a shard, you are going to have records. Records are an immutable unit of data stored in a shard. They are composed of a sequence number, a partition key, and a data blob.</p>
<p>The partition key is a value that determines in which shard the record will be stored into. The sequence number is unique per partition key and Kinesis Data Stream will assign it to the record when writing it to the stream. Records are put in order inside the shards, but the order is not guaranteed between the shards.</p>
<h3 id="heading-capacity-mode">Capacity mode</h3>
<p>If you need to to increase the throughput of your stream, you need more capacity in your stream, to increase that you need more shards. The capacity mode for a stream determines how the capacity is managed in the stream, currently Kinesis Data Stream supports on-demand and provisioned mode.</p>
<p>In this video, you will learn what is Amazon Kinesis Data Streams, what are the shards and how you can use different ways to provision capacity to your stream. At the end of this video, you will see how to create a stream using AWS CDK.</p>
<p>Get the code (make sure that you are in the branch 01-create-stream):</p>
<p><a target="_blank" href="https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/01-create-stream">https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/01-create-stream</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/7k03bYMXqi8">https://youtu.be/7k03bYMXqi8</a></div>
<p> </p>
<h2 id="heading-3-kinesis-data-stream-and-aws-lambda">3-Kinesis Data Stream and AWS Lambda</h2>
<p>You can use AWS Lambda to consume records from Kinesis and process them on real time or to put records in a stream. AWS Lambda is a great service to integrate with Kinesis Data Streams as it can increase it capacity as needed to support a big load of records coming it way.</p>
<p>In this video, you will learn how to put events into a Kinesis Data Stream from AWS Lambda using AWS SDK and AWS CDK. And in the second half you will learn about consuming events from the stream and triggering functions using Event Source Mapping and AWS Lambda.</p>
<p>Get the code:</p>
<p><a target="_blank" href="https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/02-lambda-consume-produce">https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/02-lambda-consume-produce</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/UEenPG3YwQ0">https://youtu.be/UEenPG3YwQ0</a></div>
<p> </p>
<h3 id="heading-advanced-event-source-mapping">Advanced Event Source Mapping</h3>
<p>Typically, when data stored in a Kinesis data stream is consumed by an application, it is that consumer's responsibility to track-or checkpoint- a stream's last known position that was successfully processed. The event source mapping takes care of checkpointing for you, so your Lambda function code can purely focus on the business logic for processing an event or set of events.</p>
<p>You can consume the records from a Kinesis data stream from Lambda, every time there are records in the stream a function can be triggered. For simplifying that you can use an event source mapping.</p>
<p>An event source mapping is a Lambda resource that reads from an event source and invokes a Lambda function. You can use event source mappings to process items from a stream or queue in services that don’t invoke Lambda functions directly, like DynamoDB, Kinesis, Amazon MQ, MSK, SQS, DocumentDB.</p>
<p>In this video, you will learn most of the features from Event Source Mapping (or ESM).</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/fRy9BhxlszY">https://youtu.be/fRy9BhxlszY</a></div>
<p> </p>
<h3 id="heading-trouble-shooting-esm">Trouble shooting ESM</h3>
<p>Sometimes things don't work, or even worse they stop working. And how you trouble shoot errors when working with Lambda and Kinesis Data Streams. In this video, <a target="_blank" href="https://twitter.com/anahit_fi">Anahit</a> shares with us a lot of strategies on what to do when you are working with Kinesis Data Streams and Lambda and suddenly things stop working. How to trouble shoot your event producer and consumer to figure out where the problem is.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/zhI8-Xxc9rY">https://youtu.be/zhI8-Xxc9rY</a></div>
<p> </p>
<h2 id="heading-4-kinesis-data-streams-and-amazon-eventbridge-pipes">4-Kinesis Data Streams and Amazon EventBridge Pipes</h2>
<p>AWS Lambda is not the only way to process and consume records in real time from a stream. Amazon EventBridge Pipes can also consume and process records from the stream and deliver it to different targets.</p>
<p>In this video, you will learn how to create production like data pipelines using Amazon Kinesis Data Streams and EventBridge Pipes. You will learn how to store your analytic data in your data lake, while at the same time process your events as they come in in your Event Bus.</p>
<p>Get the code: <a target="_blank" href="https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/03-kinesis-pipes">https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/03-kinesis-pipes</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/D2oe68T_Hv8">https://youtu.be/D2oe68T_Hv8</a></div>
<p> </p>
<h2 id="heading-5-amazon-kinesis-firehose">5-Amazon Kinesis Firehose</h2>
<p>Kinesis Firehose is a service that helps with the ingestion of data, the processing or transformation of data, and storing it in some destination, like a database or data lake.</p>
<p>Kinesis Firehose is a fully managed service that provides near real-time streaming ETL - extract, transform and load. It scales automatically and it is low cost.</p>
<p><img src="https://d1.awsstatic.com/pdp-how-it-works-assets/product-page-diagram_Amazon-KDF_HIW-V2-Updated-Diagram@2x.6e531854393eabf782f5a6d6d3b63f2e74de0db4.png" alt="Diagram that shows how to set up data delivery streams with Amazon Kinesis Data Firehose. Described at the link &quot;Enlarge and read image description.&quot;" /></p>
<p>Kinesis Firehose is a ETL, that receives data from different sources. It supports over 20 different sources, like AWS SDK using the Direct Put, Amazon KDS, Kinesis Agent, and many open sources agents.</p>
<p>The transformation of data is optional, but it provides built-in transformations, like converting the data from JSON to Parquet or ORC, dynamic partitioning, and others. And for more complex transformations you can use AWS Lambda.</p>
<p>And finally the last step is the load. In here Kinesis Firehose will store the data into different databases, data lakes, like S3, Redshift, OpenSearch, or you can send to API Gateways or HTTP endpoints to third parties or custom solutions. So you can utilize them later on.</p>
<h3 id="heading-kinesis-firehose-use-cases">Kinesis Firehose use cases</h3>
<p>You can use Kinesis Firehose for different use cases:</p>
<ul>
<li><p>Collecting click stream analytics, you can ingest the data in real time and deliver it to your data lakes enabling your marketers to take action on the data.</p>
</li>
<li><p>IoT analytics is a common use case for organisations that use IoT in where they send the data from connected devices and produce near-real time analytics</p>
</li>
<li><p>Event analytics, to understand how much downloads, transactions or other operations your users do.</p>
</li>
<li><p>Log analytics is quite a common use case. In here you can collect all the logs with firehose and then detect application and server errors as they happen and identify the root cause by collecting and monitoring the log data</p>
</li>
<li><p>Security Monitoring is another use case in where the network security logs are sent to firehose and they are monitored in near real time to analyze when there is a potential threat and then notify the security department</p>
</li>
</ul>
<h3 id="heading-kinesis-firehose-characteristics"><strong>Kinesis Firehose characteristics</strong></h3>
<p>Kinesis Firehose more relevant features when using S3 as a data source:</p>
<ul>
<li><p>You can configure the buffer size and buffer interval. These two parameters allows you to configure how fast data will move from your source to your destination. Buffer size can go from 1MB to 128MB and buffer interval goes from 1 minute to 15 minutes. The first of these thresholds that gets hit will be sending data to S3. Using this parameters you can configure how fast your data gets to S3 and how small your files are in S3.</p>
</li>
<li><p>Convert the data from JSON to Parquet or ORC. Parquet and ORC are more efficient than JSON for storing and for making queries.</p>
</li>
<li><p>Kinesis Firehose provides a way to backup the original records if you want and allows you to register any failure in the transformation.</p>
</li>
<li><p>Dynamic partitioning allows you to continuously partition streaming data by using keys within your data.</p>
</li>
<li><p>Data transformation. With Firehose you can invoke a Lambda function to transform your incoming data and deliver the transformed data to your destinations.</p>
</li>
</ul>
<p>In this video, you will learn what is Kinesis Data Firehose, what is used for, what features it has and how it integrates with AWS Lambda and Amazon S3.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/5wkJSHa2Yfw">https://youtu.be/5wkJSHa2Yfw</a></div>
<p> </p>
<h3 id="heading-kinesis-firehose-and-aws-lambda">Kinesis Firehose and AWS Lambda</h3>
<p>In this video, you will learn how to create a Kinesis Data Firehose with AWS CDK that puts records into S3. You will learn 2 configurations, a basic one that just puts the records and a more advanced one that will transform the records using AWS Lambda as they come in to Firehose before putting them in S3.</p>
<p>Get the code for the simple solution: <a target="_blank" href="https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/04-kinesis-firehose">https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/04-kinesis-firehose</a></p>
<p>Get the code for the advanced solution: <a target="_blank" href="https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/05-kinesis-firehose-lambda">https://github.com/mavi888/cdk-kinesis-data-streaming-demo/tree/05-kinesis-firehose-lambda</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/CNe_zUQs3Lo">https://youtu.be/CNe_zUQs3Lo</a></div>
<p> </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Congratulations on reaching the end! This guide is quite extensive and not intended to be read all at once.</p>
<p>By now, you have gained knowledge about building data streaming applications with Amazon Kinesis, you learn about the different services that are in the Kinesis family, you learn how to use Kinesis data streams with Lambda and EventBridge Pipes, and how to use Kinesis Firehose with Lambda for doing transformations.</p>
<p>Well done on completing this guide!</p>
<p><em>Are you looking for a similar guide but for Kafka check it at</em> <a target="_blank" href="https://aws.amazon.com/kinesis/"><em>ServerlessLand</em></a></p>
]]></content:encoded></item><item><title><![CDATA[Using AWS DynamoDB to build web apps]]></title><description><![CDATA[Welcome to this comprehensive guide on using Amazon DynamoDB as the database for your web application. This detailed guide will cover various aspects, ranging from hosting your web app using AWS App Runner to understanding the fundamentals of Amazon ...]]></description><link>https://blog.marcia.dev/using-aws-dynamodb-to-build-web-apps</link><guid isPermaLink="true">https://blog.marcia.dev/using-aws-dynamodb-to-build-web-apps</guid><category><![CDATA[DynamoDB]]></category><category><![CDATA[event-driven-architecture]]></category><category><![CDATA[web app]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 19 Dec 2023 09:56:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1685432559201/f2bcd284-48dd-46f5-b69e-92aa5da65efa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to this comprehensive guide on using <a target="_blank" href="https://aws.amazon.com/dynamodb/">Amazon DynamoDB</a> as the database for your web application. This detailed guide will cover various aspects, ranging from hosting your web app using <a target="_blank" href="https://aws.amazon.com/AppRunner/">AWS App Runner</a> to understanding the fundamentals of Amazon DynamoDB, designing and building tables, and exploring advanced concepts.</p>
<p>The article is divided into five sections, each addressing different topics:</p>
<p><strong>Section 1: Hosting Your Application with App Runner:</strong> In this section, you will learn about the powerful capabilities of AWS App Runner and how it can efficiently host your applications.</p>
<p><strong>Section 2: Understanding DynamoDB Basics:</strong> The second section provides an in-depth understanding of the fundamental concepts of DynamoDB. It caters to both beginners and experts, delving into the inner workings of Amazon DynamoDB.</p>
<p><strong>Section 3: Designing Your DynamoDB Table:</strong> This section introduces the Single Design method and guides you through the process of designing your DynamoDB table. You will learn effective strategies to create optimal table structures.</p>
<p><strong>Section 4: Implementing DynamoDB in Your Application:</strong> In the fourth section, you will discover step-by-step instructions to implement the concepts learned in the previous sections into your own application. This practical approach enables you to apply the knowledge effectively.</p>
<p><strong>Section 5: Adding Event-Driven Characteristics:</strong> The final section demonstrates how to incorporate event-driven characteristics into your DynamoDB application. You will explore mechanisms to react to database events and leverage them in your application's architecture.</p>
<p>By the end of this post, you will have gained a solid grasp of all the covered concepts and be well-equipped to determine if DynamoDB is the right database solution for your specific needs. Additionally, you will have the ability to design efficient access patterns and become familiar with AWS services like App Runner and DynamoDB.</p>
<p>This guide stands out for its level of detail, making it one of the most comprehensive resources available for mastering DynamoDB. Each section includes accompanying videos and code samples, allowing you to apply the concepts in a practical manner.</p>
<p>So, without further ado, let's dive into the world of Amazon DynamoDB and unlock its full potential!</p>
<p><strong><em>Happy learning!</em></strong></p>
<h2 id="heading-1-hosting-the-webapp-using-aws-apprunner">1. Hosting the webapp using AWS AppRunner</h2>
<h3 id="heading-what-is-aws-app-runner"><strong>What is AWS App Runner?</strong></h3>
<p>AWS App Runner is a powerful and intuitive service that simplifies the deployment and running of web applications in the cloud. It eliminates the need to worry about infrastructure, allowing you to focus on your code and deploy it quickly and easily. App Runner combines the benefits of <a target="_blank" href="https://aws.amazon.com/fargate/">AWS Fargate</a> and <a target="_blank" href="https://aws.amazon.com/lambda/">AWS Lambda</a>, making it an ideal choice for developers who want to deploy their applications in the cloud with no hassle.</p>
<p>With App Runner, you can start with a GitHub repository or a container image in <a target="_blank" href="https://aws.amazon.com/ecr/">AWS Elastic Container Registry (ECR)</a>. The service will automatically build and deploy your application, and any changes made to the code will trigger the CI/CD pipeline, which will rebuild the application on the fly. You can also use multiple branches for multiple environments and customize your application's settings, such as the number of vCPUs and memory required, as well as how the application should scale.</p>
<p>Once your application is deployed, you will receive a public endpoint that you can use. App Runner takes care of the scaling and load balancing of the application, allowing you to focus on your code. The pay-as-you-go pricing system means that you only pay for what you need.</p>
<p>To create an App Runner service, you can simply configure the compute settings, and you will receive a public endpoint to use. The infrastructure is handled by the cloud, freeing you up to focus on your code.</p>
<p>For more information, you can visit the <a target="_blank" href="https://aws.amazon.com/AppRunner/">AWS App Runner</a> page.</p>
<p><em>The following video goes into more details on how AppRunner works</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/z-RywG7Xfk8">https://youtu.be/z-RywG7Xfk8</a></div>
<p> </p>
<h3 id="heading-service-source-types"><strong>Service Source Types</strong></h3>
<p>AWS App Runner offers two different types of service sources: <strong>source code</strong> and <strong>source image</strong>. Regardless of the source type, App Runner takes care of starting, running, scaling, and load balancing your service. You can use the CI/CD capability of App Runner to track changes to your source image or code. When App Runner discovers a change, it automatically builds (for source code) and deploys the new version to your App Runner service.</p>
<p>To learn more about these two service types, please refer to the <a target="_blank" href="https://docs.aws.amazon.com/apprunner/latest/dg/what-is-apprunner.html">AWS App Runner documentation</a>.</p>
<h3 id="heading-source-code-based-services"><strong>Source Code-Based Services</strong></h3>
<p>For this demo, we will focus on services based on source code. Source code is the application code that App Runner builds and deploys for you. You need to point App Runner to a source code repository with a supported runtime. App Runner will then build an image based on the base image of the runtime and your application code. Finally, it will start a service that runs a container based on this image. You don't need to provide container configuration or build instructions such as a Dockerfile.</p>
<p>Check the <a target="_blank" href="https://docs.aws.amazon.com/apprunner/latest/dg/service-source-code.html">supported runtimes</a> for more information.</p>
<h3 id="heading-demo-instructions"><strong>Demo Instructions</strong></h3>
<p>In this demo, you can use a NodeJS app that is stored in a GitHub repository. AppRunner will automatically build, deploy, and host it in the cloud for you.</p>
<p>You have two options to perform this demo:</p>
<ol>
<li><p><strong>Console</strong>: You can use the AWS Management Console to follow along. The video below demonstrates how to use the console for this demo.</p>
</li>
<li><p><strong>Infrastructure as Code</strong>: The video demonstrates how to perform the demo using AWS CDK. You can access the NodeJS application code from the GitHub repository <a target="_blank" href="https://github.com/mavi888/nodeexpress-backend-app">here</a>. For the AWS CDK infrastructure code used in the video, you can find it <a target="_blank" href="https://github.com/mavi888/cdk-migrated-app-infra/tree/apprunner">here</a>.</p>
</li>
</ol>
<p><em>The following video, shows how you can deploy and host a NodeJS application using AppRunner.</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/jOwQdXbmHC4">https://youtu.be/jOwQdXbmHC4</a></div>
<p> </p>
<h2 id="heading-2amazon-dynamodb-101"><strong>2.Amazon DynamoDB 101</strong></h2>
<p>Amazon DynamoDB is a fast, flexible, serverless NoSQL database service that delivers single-digit millisecond performance at any scale.</p>
<h3 id="heading-data-models"><strong>Data Models</strong></h3>
<p>DynamoDB supports two main data models: <strong>key-value</strong> and <strong>wide-column</strong>. These data models are highly efficient for retrieving items.</p>
<p>The key-value data model allows you to retrieve one item at a time using a primary key. It functions like a massive hash, enabling fast retrieval when the primary key is known.</p>
<p>For more complex access patterns, you can use the wide-column data model provided by DynamoDB. In this model, the hash is still required, but the value for each hash record is a B-tree. A B-tree is a data structure that enables quick element retrieval and range queries.</p>
<h3 id="heading-main-components"><strong>Main Components</strong></h3>
<p>DynamoDB organizes data into <strong>tables</strong>. You can create or delete a table with a simple API call. Each table contains <strong>items</strong>, and each item has <strong>attributes</strong>. Every item requires at least one attribute, which is the partition key. Optionally, you can define a sort key, which becomes another required attribute for each item.</p>
<p>The combination of the partition key and sort key (if defined) forms the <strong>primary key</strong>, which must be unique. Each item can also have additional attributes, and the set of attributes can vary from item to item.</p>
<p>DynamoDB also supports <strong>secondary indexes</strong>. While primary keys allow access to data, secondary indexes provide alternative ways to retrieve data efficiently. There are two types of secondary indexes: <strong>local secondary indexes</strong> and <strong>global secondary indexes</strong>.</p>
<h3 id="heading-operations"><strong>Operations</strong></h3>
<p>DynamoDB offers three main types of operations:</p>
<ol>
<li><p><strong>Item-based operations</strong>: These operations are performed on individual items in a table.</p>
</li>
<li><p><strong>Queries</strong>: Queries operate on a group of items that share the same partition key in a table or secondary index. This group is referred to as an <strong>item collection</strong>.</p>
</li>
<li><p><strong>Scans</strong>: Scans retrieve all items in a table, which can be useful when you need to analyze or process the entire dataset.</p>
</li>
</ol>
<h3 id="heading-pricing"><strong>Pricing</strong></h3>
<p>DynamoDB is a cloud-based NoSQL database service that charges customers based on the amount of data stored and the amount of data read and written. The pricing is as follows:</p>
<ul>
<li><p><strong>Storage costs</strong>: Based on the amount of data stored per month, measured in GB-month. This includes data and indexes.</p>
</li>
<li><p><strong>Read capacity units (RCUs)</strong>: Charged for data read from DynamoDB. One RCU is charged for each strongly consistent read per second, two for transactional reads, and half for each eventually consistent read per second (up to 4 KB).</p>
</li>
<li><p><strong>Write capacity units (WCUs)</strong>: Charged for data written to DynamoDB. One WCU is charged for each write per second (up to 1 KB), and two WCUs for each transactional write per second.</p>
</li>
</ul>
<p>For detailed information on DynamoDB pricing, refer to the <a target="_blank" href="https://aws.amazon.com/dynamodb/pricing/">Amazon DynamoDB Pricing</a> page.</p>
<p><em>This video covers more in detail the most important concepts for DynamoDB</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/tkj2r7kFcpM">https://youtu.be/tkj2r7kFcpM</a></div>
<p> </p>
<h3 id="heading-amazon-dynamodb-under-the-hood"><strong>Amazon DynamoDB under the hood</strong></h3>
<p>In this section, you will delve into the inner workings of DynamoDB. Two Principal Engineers, <a target="_blank" href="https://www.linkedin.com/in/somu-perianayagam-34b6442/">Somu Perianayagam</a> and <a target="_blank" href="https://www.linkedin.com/in/akshatvig/">Akshat Vig</a>, provide insights into how DynamoDB functions.</p>
<p>The video begins by discussing the history of DynamoDB and highlights the distinctions between Dynamo and DynamoDB. It then delves into the architecture that powers DynamoDB and explains why this database is exceptionally fast. The video concludes by covering several essential features of DynamoDB, such as indexes, streams, backup and restore functionality, and transactions.</p>
<p>For a comprehensive understanding of DynamoDB's architecture and performance, you can refer to the following resources:</p>
<ul>
<li><p><a target="_blank" href="https://www.usenix.org/conference/atc22/presentation/elhemali">Amazon DynamoDB: A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service</a>: This article provides an in-depth exploration of the design and implementation of DynamoDB.</p>
</li>
<li><p><a target="_blank" href="https://www.theregister.com/2022/11/14/meet_the_database_that_supports/">Meet the database that supports</a> <a target="_blank" href="https://www.linkedin.com/in/somu-perianayagam-34b6442/">Amazon.com</a>: This article offers insights into how DynamoDB supports <a target="_blank" href="https://www.linkedin.com/in/somu-perianayagam-34b6442/">Amazon.com</a> and the scale at which it operates.</p>
</li>
</ul>
<p>DynamoDB is a NoSQL database created by Amazon for their website, <a target="_blank" href="https://www.linkedin.com/in/somu-perianayagam-34b6442/">amazon.com</a>. It was developed because the existing database systems couldn't handle the load required for the site's cart system. DynamoDB became popular within Amazon due to its scalability and predictable performance. However, teams using Dynamo had to manage their own infrastructure, which was a drawback. In 2012, DynamoDB was launched as a fully managed service, providing the flexibility of NoSQL with the convenience of not having to worry about servers. It gained popularity and became the default standard for key-value stores internally at Amazon. Dynamo and DynamoDB have some differences, such as Dynamo being single-tenant and requiring more configuration, while DynamoDB is multi-tenant and offers simplified APIs. The architecture of DynamoDB involves request routing, authentication, metadata lookup, and replication of data across multiple availability zones.</p>
<p>DynamoDB is a highly scalable database service that uses partitions to handle reads and writes. Each partition can handle a certain amount of reads and writes per second. The number of partitions needed depends on the requested throughput. In the past, admission control was done at the partition level, assuming uniform distribution of traffic. However, real-world workloads are often non-uniform, leading to hot partitions and throttling. To address this, admission control was moved to the table level, and smart placement algorithms were introduced to efficiently distribute partitions. DynamoDB Streams allows customers to consume changes in their tables in real-time, enabling features like event-driven programming, backup, and restore.</p>
<p><em>Check this interview with two of DynamoDB engineers.</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/ZhXqNcbR4n0">https://youtu.be/ZhXqNcbR4n0</a></div>
<p> </p>
<h2 id="heading-3designing-your-dynamodb-table">3.Designing Your DynamoDB Table</h2>
<h3 id="heading-is-dynamodb-the-right-database-for-you"><strong>Is DynamoDB the right database for you?</strong></h3>
<p>When considering adopting DynamoDB as the database for your application, the first question you need to answer is whether DynamoDB is the right database for you.</p>
<p>At AWS, we believe in the concept of database freedom, which means choosing the right database for your specific data requirements, access model, and scalability needs. AWS offers 16 different types and engines of databases for various purposes. So, why should you consider DynamoDB?</p>
<p>In this beginner's guide, you'll explore the top reasons why DynamoDB is the best NoSQL database for your next project. DynamoDB is a fully managed NoSQL database service that provides fast and predictable performance with seamless scalability. It's an ideal solution for applications that require low latency and high throughput at any scale.</p>
<h3 id="heading-adopting-dynamodb"><strong>Adopting DynamoDB</strong></h3>
<p>Now that you know DynamoDB is a good fit for your needs, let's discuss the steps you need to take for adopting and migrating to DynamoDB:</p>
<ol>
<li><p><strong>Get yourself trained in DynamoDB characteristics:</strong> Familiarize yourself with the features and capabilities of DynamoDB. This will help you make informed decisions during the adoption process.</p>
</li>
<li><p><strong>Understand Single Table design:</strong> When building applications with DynamoDB, it's beneficial to learn about the concept of Single Table design. This design approach can simplify your data model and improve performance.</p>
</li>
<li><p><strong>Design and build DynamoDB tables and indexes:</strong> With the knowledge gained from the previous steps, you can now design and build your DynamoDB tables and indexes based on your application's data access patterns.</p>
</li>
<li><p><strong>Convert and migrate your data:</strong> If you are migrating from another database, you'll need to convert and migrate your data to DynamoDB. Depending on the data source, you may need to perform some preprocessing to prepare the data for migration.</p>
</li>
<li><p><strong>Code your application:</strong> Develop or modify your application code to interact with DynamoDB using the appropriate access patterns. This step may involve significant developer effort.</p>
</li>
<li><p><strong>Deploy and test the migrated application:</strong> Deploy your migrated application to the cloud and thoroughly test it. This step ensures that your database is provisioned correctly and that your application functions as expected.</p>
</li>
</ol>
<p>By following these steps, you can successfully adopt DynamoDB for your application. This section covers step 1, and the following sections will walk you through the remaining steps in the adoption process.</p>
<p>For detailed guidance on determining if DynamoDB is appropriate for your needs and planning your migration, refer to the following resource:</p>
<ul>
<li><a target="_blank" href="https://aws.amazon.com/blogs/database/how-to-determine-if-amazon-dynamodb-is-appropriate-for-your-needs-and-then-plan-your-migration/">How to determine if Amazon DynamoDB is appropriate for your needs, and then plan your migration</a>: This article provides valuable insights and considerations for evaluating DynamoDB's suitability and planning a successful migration.</li>
</ul>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/TpeP3Cmz5PE">https://youtu.be/TpeP3Cmz5PE</a></div>
<p> </p>
<h3 id="heading-introduction-to-single-table-design"><strong>Introduction to Single Table Design</strong></h3>
<p>The main concept behind single table design is to organize your data in a way that allows you to retrieve all the data you need to solve a specific access pattern with a single query. The goal is to design your table in such a way that you can fulfill all your access patterns with the least number of requests to DynamoDB, ideally just one.</p>
<p>Single table design is based on the idea of denormalization, where you store related data together in a single table rather than spreading it across multiple tables. By doing so, you eliminate the need for complex joins and enable efficient queries that retrieve all the required data at once.</p>
<p>To effectively implement single table design, you need to carefully consider your access patterns and design your table schema accordingly. Each access pattern should have a corresponding index or set of attributes that allow you to retrieve the required data efficiently.</p>
<p>By leveraging single table design, you can achieve high performance and scalability in DynamoDB while minimizing the number of requests and simplifying your application logic.</p>
<p>Implementing single table design requires careful planning and understanding of your application's requirements and access patterns. It is recommended to review the provided resources and explore further documentation to design your DynamoDB table effectively.</p>
<p><em>If you want to deep dive in the single table design concept you can check this video.</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/lWCch8GEK4E">https://youtu.be/lWCch8GEK4E</a></div>
<p> </p>
<h3 id="heading-design-a-dynamodb-table-with-single-table-design"><strong>Design a DynamoDB Table with Single Table Design</strong></h3>
<p>In this section, you will learn how to design a DynamoDB table using the single table design approach. By following these steps, you can efficiently model your data for maximum performance and scalability.</p>
<p>Here is an overview of the steps involved in designing a DynamoDB table with single table design:</p>
<ol>
<li><p><strong>Create an Entity-Relationship Diagram (ERD):</strong> Start by creating an ERD that visualizes the relationships between your entities. This diagram will help you understand the structure of your data and identify the primary entities and their attributes.</p>
</li>
<li><p><strong>Identify Access Patterns:</strong> Determine all the access patterns required by your application. This involves identifying the different ways you need to retrieve and manipulate data from the table. Consider the types of queries you'll need to perform and the data you'll need to retrieve for each query.</p>
</li>
<li><p><strong>Model the Primary Key Structure:</strong> Design the primary key structure based on your identified access patterns. The primary key consists of a partition key and an optional sort key. Choose meaningful attribute(s) that will allow you to efficiently retrieve the required data for each access pattern. You may need to denormalize your data and duplicate it in different parts of the table to optimize query performance.</p>
</li>
<li><p><strong>Satisfy Additional Access Patterns:</strong> In some cases, you may have access patterns that cannot be efficiently satisfied with the primary key alone. In such cases, consider using secondary indexes or DynamoDB streams to address these additional access patterns. Secondary indexes allow you to query the table using different attributes, while streams enable capturing and processing changes to the table in real-time.</p>
</li>
</ol>
<p>You can also refer to the following resource for more information:</p>
<ul>
<li><a target="_blank" href="https://youtu.be/Q6-qWdsa8a4">7 Common DynamoDB Patterns for Modeling and Building an App with Alex De Brie</a>: This video provides insights into various patterns and strategies for effectively modeling your data in DynamoDB.</li>
</ul>
<p>By following these steps and considering your application's requirements, you can design a DynamoDB table using the single table design approach, resulting in a highly performant and scalable data model.</p>
<p>Remember to adapt these steps to your specific use case and consult the provided resources for more detailed guidance.</p>
<p><em>If you want to see how I design a table for an application using those for steps mentioned above check this video.</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/JLZOI8patlw">https://youtu.be/JLZOI8patlw</a></div>
<p> </p>
<h2 id="heading-4implementing-dynamodb-in-your-application">4.Implementing DynamoDB in Your Application</h2>
<h3 id="heading-provision-amazon-dynamodb-table-and-indexes-with-aws-cdk"><strong>Provision Amazon DynamoDB Table and Indexes with AWS CDK</strong></h3>
<p>In this section, you will learn how to provision a DynamoDB table and global secondary indexes using <a target="_blank" href="https://aws.amazon.com/cdk/">AWS CDK (Cloud Development Kit)</a>. AWS CDK is an infrastructure-as-code framework that allows you to define and provision AWS resources using familiar programming languages.</p>
<p>Here are the steps to provision the DynamoDB table and indexes using AWS CDK:</p>
<ol>
<li><p><strong>Install and configure AWS CDK:</strong> If you haven't already, install AWS CDK and configure it with your AWS credentials. You can refer to the <a target="_blank" href="https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html">official AWS CDK documentation</a> for installation and setup instructions.</p>
</li>
<li><p><strong>Create a new CDK project:</strong> Start by creating a new AWS CDK project using your preferred programming language (e.g., TypeScript, Python, Java). This project will contain the infrastructure code for provisioning the DynamoDB table and indexes.</p>
</li>
<li><p><strong>Write the CDK code:</strong> Write the AWS CDK code that defines the DynamoDB table and indexes. You can use the AWS CDK constructs provided by the AWS SDK for the programming language you're using. Define the table, primary key attributes, and any global secondary indexes you need. You can refer to the following resources for sample AWS CDK code:</p>
<ul>
<li><a target="_blank" href="https://github.com/mavi888/cdk-migrated-app-infra/tree/dynamoDB/lib">AWS CDK DynamoDB Code Examples</a>: This GitHub repository contains sample AWS CDK code for provisioning a DynamoDB table and indexes.</li>
</ul>
</li>
<li><p><strong>Deploy the infrastructure:</strong> Once you've written the AWS CDK code, you can deploy the infrastructure by running the appropriate AWS CDK deployment command. This command will create the DynamoDB table and indexes in your AWS account based on the code you've written.</p>
</li>
<li><p><strong>Test the provisioned DynamoDB table:</strong> After the infrastructure is deployed, you can test the provisioned DynamoDB table by performing various read and write operations using the AWS SDK or other tools. Verify that the table and indexes are functioning as expected and serving your application's access patterns efficiently.</p>
</li>
</ol>
<p>By following these steps, you can provision a DynamoDB table and global secondary indexes using AWS CDK. This allows you to define your infrastructure as code and easily manage and replicate your DynamoDB setup across different environments.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/4o1KzB2AAk4">https://youtu.be/4o1KzB2AAk4</a></div>
<p> </p>
<h3 id="heading-code-your-application"><strong>Code your application</strong></h3>
<p>Once you have the infrastructure ready, it's time to start coding your application to support the new access patterns. This section will guide you through six steps that you can follow when writing your application.</p>
<ol>
<li><p><strong>Configure the AWS SDK in your application:</strong> Set up the AWS SDK in your application to interact with DynamoDB. This includes providing your AWS credentials and configuring the SDK to connect to the correct AWS region.</p>
</li>
<li><p><strong>Configure and pick your test library:</strong> Choose a test library for your application and configure it to run tests against your DynamoDB infrastructure. This will allow you to test your application's interactions with the database.</p>
</li>
<li><p><strong>Create models:</strong> Define models for your application that map to the DynamoDB table and indexes. These models will help you work with data in a structured way and provide an abstraction layer between your application and the database.</p>
</li>
<li><p><strong>Modify controllers:</strong> Update your application's controllers to handle the new access patterns. This may involve making changes to the logic for retrieving, creating, updating, and deleting data based on the specific requirements of your application.</p>
</li>
<li><p><strong>Check routes:</strong> Review and update the routes in your application to ensure they align with the new access patterns. Verify that the routes are correctly handling requests and interacting with the DynamoDB table and indexes.</p>
</li>
<li><p><strong>Ensure middleware is working:</strong> Test and validate any middleware that you have in your application, such as authentication or request validation middleware. Make sure that the middleware is functioning correctly and properly integrating with your DynamoDB infrastructure.</p>
</li>
</ol>
<p>Additionally, in this section, you will learn about DynamoDB expressions, which are powerful tools for working with the database:</p>
<ul>
<li><p><strong>Key condition expressions:</strong> These expressions define the conditions for retrieving items based on the primary key attributes. You can use key condition expressions to perform operations like equality, comparison, and filtering on key attributes.</p>
</li>
<li><p><strong>Filter expressions:</strong> Filter expressions allow you to further refine the results of a query or scan operation. You can use filter expressions to apply additional conditions to the data retrieved from DynamoDB.</p>
</li>
<li><p><strong>Condition expressions:</strong> Condition expressions are used to ensure that specific conditions are met before performing write operations (e.g., put, update, delete). They enable you to add conditional logic to your write operations.</p>
</li>
<li><p><strong>Update expressions:</strong> Update expressions define how attributes of an item should be modified during an update operation. You can use update expressions to add, remove, or modify attributes of an item.</p>
</li>
<li><p><strong>Projection expressions:</strong> Projection expressions determine which attributes should be returned in the query or scan results. You can use projection expressions to specify the attributes you need and optimize the data retrieval process.</p>
</li>
</ul>
<p>By following these steps and understanding DynamoDB expressions, you can build an application that effectively interacts with your DynamoDB infrastructure and supports the desired access patterns.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/9ftDmRMEfDM">https://youtu.be/9ftDmRMEfDM</a></div>
<p> </p>
<h3 id="heading-how-to-migrate-data-to-dynamodb"><strong>How to Migrate Data to DynamoDB?</strong></h3>
<p>Once you have the infrastructure ready and your application coded, if you are performing a migration, it's time to start converting and migrating your data. The following section will provide you with a set of tips to help you build a migration plan.</p>
<h4 id="heading-aws-database-migration-service-aws-dms"><strong>AWS Database Migration Service (AWS DMS)</strong></h4>
<p>The recommended option for migrating your data is to use <a target="_blank" href="https://aws.amazon.com/dms/">AWS Database Migration Service (DMS)</a>. This service is designed to facilitate database migrations and can be a valuable tool for your migration process.</p>
<p>However, if you are using the single table design approach, AWS DMS might not be the best fit, as it creates separate tables for each table in the source database. If you are migrating from MongoDB and still want to explore using AWS DMS, I have included a detailed blog post in the resources that explains how to perform a live migration from a MongoDB cluster to Amazon DynamoDB.</p>
<h4 id="heading-custom-script"><strong>Custom Script</strong></h4>
<p>Due to the unique structure of your application table using the single table design, you will need to create your own customizable script for migration.</p>
<p>Your script will consist of two parts: retrieving the data from the original database and saving the items into the DynamoDB table.</p>
<h4 id="heading-retrieving-the-data-from-the-source"><strong>Retrieving the data from the source</strong></h4>
<p>Most databases allow you to export data in formats such as JSON or CSV. If that is the case, you can store those exported items in Amazon S3 and then upload them to DynamoDB.</p>
<p>For databases with custom export formats, you may need to build a script that performs the data extraction for you.</p>
<p>The result of this step is having one file per entity in Amazon S3, and potentially some additional files for relationships if you are migrating from a relational database.</p>
<h4 id="heading-importing-the-data-to-dynamodb"><strong>Importing the data to DynamoDB</strong></h4>
<p>You have a couple of options for importing the data:</p>
<ol>
<li><p>Create a table file in Amazon S3 and import it into DynamoDB.</p>
</li>
<li><p>Process the items one by one and upload them to DynamoDB.</p>
</li>
</ol>
<p>DynamoDB provides a feature that allows you to import data from Amazon S3 into a table, handling capacity management and data import for you. With this feature, you can import a file stored in Amazon S3, formatted like the DynamoDB table, into DynamoDB. However, note that this feature requires creating a new table; you cannot import data into an existing table.</p>
<p>To build the table file for direct import into DynamoDB or to iterate over the dump files from the database, you will need to create a process to handle that. You can leverage <a target="_blank" href="https://aws.amazon.com/step-functions">AWS Step Functions</a> distributed map, which is a state type in Step Functions that iterates over items in a JSON or CSV file and executes a set of states. The maximum parallelization with Distributed map is 10,000.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/qEQqL3KiOOc">https://youtu.be/qEQqL3KiOOc</a></div>
<p> </p>
<h3 id="heading-deploy-and-load-test"><strong>Deploy and Load Test</strong></h3>
<p>In this step it's time to deploy your migrated application to the cloud and conduct various tests to ensure that your database is provisioned correctly. This section will guide you on how to perform load tests to verify the correct configuration of your table.</p>
<p>Before you begin, make sure you have completed the necessary steps to deploy your application using AWS CDK. You can find the code in the resources.</p>
<p>To load test your application, you can utilize tools like <a target="_blank" href="https://www.artillery.io/">Artillery.io</a>, which allows you to run load tests against your serverless applications. I have included a video in the resources that demonstrates how to run Artillery in a Lambda function for load testing.</p>
<p>During the load testing process, it's important to monitor the performance and metrics of your application. <a target="_blank" href="https://aws.amazon.com/cloudwatch/">Amazon CloudWatch</a> provides a powerful monitoring solution, and you can use AWS CDK to build CloudWatch dashboards for visualizing and analyzing your application's metrics. The resources include a video that explains how to build Amazon CloudWatch dashboards using AWS CDK.</p>
<p>By deploying your application and conducting load tests while monitoring the performance metrics, you can ensure that your database is provisioned correctly and that your application is capable of handling the expected workload.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/PkUTqBIHzO4">https://youtu.be/PkUTqBIHzO4</a></div>
<p> </p>
<h2 id="heading-5adding-event-driven-characteristics">5.Adding Event-Driven Characteristics</h2>
<p>The final section of this guide explores the addition of event-driven characteristics to your application by leveraging DynamoDB Streams.</p>
<h3 id="heading-what-are-dynamodb-streams"><strong>What are DynamoDB Streams?</strong></h3>
<p><a target="_blank" href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html">DynamoDB Streams</a> is a powerful feature provided by DynamoDB that allows you to capture changes in a table. Whenever a record is inserted, modified, or deleted in a table, an event is emitted into the stream. These streams provide a time-ordered sequence of modifications within a table, and the data is stored for 24 hours.</p>
<p>With DynamoDB Streams, various applications can consume these stream records in real-time and perform operations based on the events captured.</p>
<p>In this section, you will gain an understanding of what DynamoDB Streams are, when to utilize them, and how to get started with DynamoDB Streams and AWS CDK.</p>
<p><em>You can learn more about DynamoDB Streams in this video</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/M0GJzjsw5So">https://youtu.be/M0GJzjsw5So</a></div>
<p> </p>
<h3 id="heading-acting-on-streams-events">Acting on streams events</h3>
<p>There are multiple ways to take action on the events sent over DynamoDB Streams. One simple approach is to leverage <a target="_blank" href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html">Amazon EventBridge Pipes</a>. Pipes connect sources to targets, reducing the need for specialized knowledge and integration code when building event-driven architectures. For example, you can easily connect DynamoDB Streams with an <a target="_blank" href="https://aws.amazon.com/sns/">Amazon SNS</a> email subscription to receive email notifications whenever changes occur in the application.</p>
<p><em>Check the following video to see how to do it.</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/RL0l2Wz3deQ">https://youtu.be/RL0l2Wz3deQ</a></div>
<p> </p>
<h3 id="heading-filtering-subscription-messages">Filtering subscription messages</h3>
<p>By utilizing <a target="_blank" href="https://aws.amazon.com/blogs/compute/introducing-payload-based-message-filtering-for-amazon-sns/">SNS message payload filtering</a>, we can filter the messages received by the email subscription, optimizing our application for our specific use case without making changes to the consumer or the receiver.</p>
<p><em>Watch this video to see how you can use this feature from SNS.</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/36iMOJQUAuE">https://youtu.be/36iMOJQUAuE</a></div>
<p> </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Congratulations on reaching the end! This guide is quite extensive and not intended to be read all at once.</p>
<p>By now, you have gained knowledge about Amazon DynamoDB, learned how to design a single table, implemented it as infrastructure as code and in your application's codebase. You also discovered how to develop, test, and deploy an application that utilizes DynamoDB effectively. Lastly, you explored the integration of event-driven architecture features to your application using Streams and Pipes.</p>
<p>Well done on completing this guide!</p>
]]></content:encoded></item><item><title><![CDATA[Building low-latency, event-driven applications: Resources]]></title><description><![CDATA[This blog post collects all the resources for the talk: "Building low-latency, event-driven applications"
You can watch the whole session here:
https://youtu.be/vVXS7L2ez2s?si=lJcAqnqELNQd8yIG
 
Introduction
AWS re:Invent 2022 - Keynote with Dr. Wern...]]></description><link>https://blog.marcia.dev/building-low-latency-event-driven-applications-resources</link><guid isPermaLink="true">https://blog.marcia.dev/building-low-latency-event-driven-applications-resources</guid><category><![CDATA[AWS]]></category><category><![CDATA[serverless]]></category><category><![CDATA[performance]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Wed, 22 Nov 2023 09:08:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1700644024680/9c542719-dc20-4086-83dc-547af60296f1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post collects all the resources for the talk: <em>"Building low-latency, event-driven applications</em>"</p>
<p>You can watch the whole session here:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/vVXS7L2ez2s?si=lJcAqnqELNQd8yIG">https://youtu.be/vVXS7L2ez2s?si=lJcAqnqELNQd8yIG</a></div>
<p> </p>
<h2 id="heading-introduction">Introduction</h2>
<p><strong>AWS re:Invent 2022 - Keynote with Dr. Werner Vogels</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/RfvL_423a-I?si=pTMvqeY1a77Kjg4Y">https://youtu.be/RfvL_423a-I?si=pTMvqeY1a77Kjg4Y</a></div>
<p> </p>
<h2 id="heading-synchronous-backend">Synchronous backend</h2>
<h3 id="heading-the-simplest-backend">The simplest backend</h3>
<p>In this video, you will learn how to build the simplest backend from the talk using AWS SAM and Nodejs.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/k_TQubcn0hM?si=KSwPpmCX71YSDUOT">https://youtu.be/k_TQubcn0hM?si=KSwPpmCX71YSDUOT</a></div>
<p> </p>
<h3 id="heading-load-testing-and-artilleryio">Load testing and Artillery.io</h3>
<p>In this video, you will learn about Artillery.io, how to build load tests and how to run them using AWS Lambda.</p>
<p><a target="_blank" href="https://www.artillery.io/docs">Learn more about Artillery.io in their site</a>.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/B0pDPSQcAf4">https://youtu.be/B0pDPSQcAf4</a></div>
<p> </p>
<h3 id="heading-lambda-invocation-modes">Lambda invocation modes</h3>
<p>In this video, Julian Wood explains a lot of different concepts related to Lambda and how it scale. In minute 6, you can learn about the invocation modes.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/wenqZqNOVZw?si=SKkbfKiVTx620DIc">https://youtu.be/wenqZqNOVZw?si=SKkbfKiVTx620DIc</a></div>
<p> </p>
<h3 id="heading-aws-x-ray">AWS X-Ray</h3>
<p>In this video, you will learn what is AWS X-ray and how to get started using it.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/OOScvywKj9s">https://youtu.be/OOScvywKj9s</a></div>
<p> </p>
<h3 id="heading-lambda-features-mentioned">Lambda features mentioned</h3>
<ul>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/aws/aws-lambda-functions-powered-by-aws-graviton2-processor-run-your-functions-on-arm-and-get-up-to-34-better-price-performance/">Blog post when it was announced Lambda support for Graviton2</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/aws/new-provisioned-concurrency-for-lambda-functions/">Blog post when it was announced Provision concurrency</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/aws/new-accelerate-your-lambda-functions-with-lambda-snapstart/">Blog post about announcement of Snap Start</a></p>
</li>
</ul>
<h3 id="heading-aws-lambda-power-tuning">AWS Lambda power tuning</h3>
<p><a target="_blank" href="https://github.com/alexcasalboni/aws-lambda-power-tuning">Access to the open source library.</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/tyFYq35RCb0">https://youtu.be/tyFYq35RCb0</a></div>
<p> </p>
<h3 id="heading-lambda-response-streaming">Lambda response streaming</h3>
<p>In this video, you will learn what is Lambda response streaming and how to do a simple example using NodeJS</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/k2CTnIDFHu8">https://youtu.be/k2CTnIDFHu8</a></div>
<p> </p>
<p>In this video, you will see how to use Lambda response streaming with Amazon Bedrock</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/NDtrk9Pm9w0">https://youtu.be/NDtrk9Pm9w0</a></div>
<p> </p>
<h3 id="heading-api-gateway-direct-integration">API Gateway direct integration</h3>
<p><a target="_blank" href="https://serverlessland.com/patterns/apigw-ddb-openapi-crud">Here</a> you can find an example of code on how to do to the API Gateway direct integration with Amazon DynamoDB.</p>
<h3 id="heading-aws-step-functions">AWS Step Functions</h3>
<p>In this playlist, you can learn more about Step Functions.</p>
<p><a target="_blank" href="https://blog.marcia.dev/orchestrated-apps">https://blog.marcia.dev/orchestrated-apps</a></p>
<h2 id="heading-real-time-backend">Real time backend</h2>
<h3 id="heading-api-gateway-web-sockets">API Gateway Web sockets</h3>
<p>In this video, there is a simple example of API Gateway with lambda using Web sockets</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Quk_XHMvFJI?si=NiKR_0lmjUoLe7L1">https://youtu.be/Quk_XHMvFJI?si=NiKR_0lmjUoLe7L1</a></div>
<p> </p>
<h3 id="heading-appsync-with-web-sockets">AppSync with Web Sockets</h3>
<p>In this video, you will see an example of how to do real time web applications using AppSync and GraphQL subscriptions.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/yRhqh_royEw?si=VZYqg8giaPRmg0ku">https://youtu.be/yRhqh_royEw?si=VZYqg8giaPRmg0ku</a></div>
<p> </p>
<h3 id="heading-aws-iot-core">AWS IoT Core</h3>
<p>In this video, James Beswick explains how to use AWS IoT Core and how he used it to build Serverlesspresso.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/71ln5qjiVbk?si=BVPl8udmfLIK4Us4">https://youtu.be/71ln5qjiVbk?si=BVPl8udmfLIK4Us4</a></div>
<p> </p>
<p>Did you hear about <strong>ServerlessVideo</strong> during re:Invent? <a target="_blank" href="https://video.serverlessland.com/">Check it out here</a>.</p>
<h2 id="heading-multi-region-applications">Multi-region applications</h2>
<p>I have a full playlist with videos and concepts about building multi-Region applications. Check it out.</p>
<p><a target="_blank" href="https://blog.marcia.dev/global-event-driven-applications">https://blog.marcia.dev/global-event-driven-applications</a></p>
<h2 id="heading-links-related-to-developing-and-operating-marvel-snap-on-aws-serverless">Links related to "<strong><em>Developing and operating MARVEL SNAP on AWS serverless</em>"</strong></h2>
<p>Try Marvel Snap: <a target="_blank" href="https://www.marvelsnap.com/">https://www.marvelsnap.com/</a></p>
<p>Second Dinner: <a target="_blank" href="https://seconddinner.com/">https://seconddinner.com/</a></p>
<p>Stress test loader: <a target="_blank" href="https://github.com/seconddinner/stress-test-loader">https://github.com/seconddinner/stress-test-loader</a></p>
<p>Amazon.Lambda.AspNetCoreServer package: <a target="_blank" href="https://github.com/aws/aws-lambda-dotnet">https://github.com/aws/aws-lambda-dotnet</a></p>
]]></content:encoded></item><item><title><![CDATA[Building AI Apps with Serverless - Resources]]></title><description><![CDATA[This blog post collects all the resources for the talk: "Building AI Apps with Serverless"
Watch the talk
https://www.youtube.com/watch?v=C-I9F2FgAf0
 
Code Whisperer
https://youtu.be/9_IzF3g95XE?si=0hoHNl7d1l1wGjQp
 
Example: Bed-time story
In this ...]]></description><link>https://blog.marcia.dev/building-ai-apps-with-serverless-resources</link><guid isPermaLink="true">https://blog.marcia.dev/building-ai-apps-with-serverless-resources</guid><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[serverless]]></category><category><![CDATA[Cloud Computing]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Mon, 11 Sep 2023 21:00:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1694069790170/ca31231f-1fc0-4902-82d2-6dfc2ff2fac0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post collects all the resources for the talk: <em>"Building AI Apps with Serverless"</em></p>
<h2 id="heading-watch-the-talk">Watch the talk</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=C-I9F2FgAf0">https://www.youtube.com/watch?v=C-I9F2FgAf0</a></div>
<p> </p>
<h2 id="heading-code-whisperer">Code Whisperer</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/9_IzF3g95XE?si=0hoHNl7d1l1wGjQp">https://youtu.be/9_IzF3g95XE?si=0hoHNl7d1l1wGjQp</a></div>
<p> </p>
<h2 id="heading-example-bed-time-story">Example: Bed-time story</h2>
<p>In this video, you can learn more about the architecture and the design patterns behind the bed-time story generator created by <a target="_blank" href="https://www.linkedin.com/in/david-boyne/">David Boyne</a>. Also in the video you will find a link to a blog post and the code for this solution.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/1eaOgLGUz1I?si=OltcTBtpHnilfp2l">https://youtu.be/1eaOgLGUz1I?si=OltcTBtpHnilfp2l</a></div>
<p> </p>
<h3 id="heading-what-are-event-driven-architectures">What are Event-driven architectures?</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/onz3Am7_w9M?si=AP7ZENgLF2RIJRjN">https://youtu.be/onz3Am7_w9M?si=AP7ZENgLF2RIJRjN</a></div>
<p> </p>
<p><a target="_blank" href="https://blog.marcia.dev/introduction-to-event-driven-architectures">More on event-driven architectures in this blog post.</a></p>
<h3 id="heading-amazon-eventbridge-scheduler">Amazon EventBridge Scheduler</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/35V2ULLS6fI?si=-Wjx2oWjN4WWukhd">https://youtu.be/35V2ULLS6fI?si=-Wjx2oWjN4WWukhd</a></div>
<p> </p>
<h3 id="heading-amazon-eventbridge-pipes">Amazon EventBridge Pipes</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/8Yv_V4havbc?si=xlJ77NsgR1FOHdJ4">https://youtu.be/8Yv_V4havbc?si=xlJ77NsgR1FOHdJ4</a></div>
<p> </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=Txlv8H7c8wA">https://www.youtube.com/watch?v=Txlv8H7c8wA</a></div>
<p> </p>
<h3 id="heading-amazon-eventbridge-event-bus">Amazon EventBridge Event Bus</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/c493KFaWteg?si=aN9M56VZRpytt_pz">https://youtu.be/c493KFaWteg?si=aN9M56VZRpytt_pz</a></div>
<p> </p>
<p><a target="_blank" href="https://blog.marcia.dev/event-driven-applications">Learn more about EventBridge Event Bus in this blog post</a></p>
<h2 id="heading-example-automatic-video-dubbing">Example: Automatic video dubbing</h2>
<p><a target="_blank" href="https://community.aws/posts/dub-videos-using-generative-ai">Learn more about this solution by checking this blog post</a></p>
<p>Code for this application: <a target="_blank" href="https://github.com/mavi888/sam-ai-helper">https://github.com/mavi888/sam-ai-helper</a></p>
<h3 id="heading-orchestration-vs-choreography">Orchestration vs Choreography</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/KlzCmDoWNUk?si=UpH6wH4s275vLAVe">https://youtu.be/KlzCmDoWNUk?si=UpH6wH4s275vLAVe</a></div>
<p> </p>
<h3 id="heading-aws-step-functions">AWS Step Functions</h3>
<p>I have so many videos related to Step Functions that I will share with you a blog post where you can find them all. This blog post keeps updating as I create new videos related to this topic.</p>
<p><a target="_blank" href="https://blog.marcia.dev/orchestrated-apps"><strong>https://blog.marcia.dev/orchestrated-apps</strong></a></p>
<h3 id="heading-new-announcements-from-step-functions">New announcements from Step Functions</h3>
<p><a target="_blank" href="https://aws.amazon.com/blogs/aws/external-endpoints-and-testing-of-task-states-now-available-in-aws-step-functions/">Call HTTP endpoints directly from a state machine</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/HtmIW566Vac">https://youtu.be/HtmIW566Vac</a></div>
<p> </p>
<p><a target="_blank" href="https://aws.amazon.com/blogs/aws/build-generative-ai-apps-using-aws-step-functions-and-amazon-bedrock/">Build generative AI apps using AWS Step Functions and Amazon Bedrock</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Na8Orgzb2TM">https://youtu.be/Na8Orgzb2TM</a></div>
<p> </p>
<h2 id="heading-generative-ai-for-developers">Generative AI for developers</h2>
<h3 id="heading-amazon-bedrock">Amazon Bedrock</h3>
<p><a target="_blank" href="https://blog.marcia.dev/getting-started-with-amazon-bedrock-and-serverless">Check this article about Amazon Bedrock for Serverless</a></p>
<p>In this video, learn how to use Bedrock with Lambda and Python.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/P9Lnf4GMUsI">https://youtu.be/P9Lnf4GMUsI</a></div>
<p> </p>
<p>In this video, learn how to use Bedrock with Lambda and NodeJS.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/n-2C5hWB1os">https://youtu.be/n-2C5hWB1os</a></div>
<p> </p>
<p>In this video, learn how to return responses from Bedrock streaming back from a Lambda function</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/NDtrk9Pm9w0">https://youtu.be/NDtrk9Pm9w0</a></div>
<p> </p>
<h4 id="heading-new-from-bedrock">NEW from Bedrock</h4>
<p><a target="_blank" href="https://aws.amazon.com/blogs/aws/agents-for-amazon-bedrock-is-now-available-with-improved-control-of-orchestration-and-visibility-into-reasoning/">Agents for Amazon Bedrock is now available with improved control of orchestration and visibility into reasoning</a></p>
<h3 id="heading-serverless-video">Serverless Video</h3>
<p>Try <a target="_blank" href="https://video.serverlessland.com/">ServerlessVideo</a></p>
]]></content:encoded></item><item><title><![CDATA[Lift and Shift to Serverless - Resources]]></title><description><![CDATA[This blog post collects all the resources for the talk: "Lift and shift a web application to serverless: Yes, it’s possible!"
Guide on how to migrate using Lambda and Mongo Atlas
13 videos
https://serverlessland.com/content/paved-path/lift-and-shift-...]]></description><link>https://blog.marcia.dev/lift-and-shift-to-serverless-resources</link><guid isPermaLink="true">https://blog.marcia.dev/lift-and-shift-to-serverless-resources</guid><category><![CDATA[AWS]]></category><category><![CDATA[serverless]]></category><category><![CDATA[migration]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Mon, 28 Aug 2023 13:46:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1693230211298/4d8c0083-7d34-4da2-a5e3-39cd33ff793c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post collects all the resources for the talk: <em>"Lift and shift a web application to serverless: Yes, it’s possible!"</em></p>
<h3 id="heading-guide-on-how-to-migrate-using-lambda-and-mongo-atlas"><strong>Guide on how to migrate using Lambda and Mongo Atlas</strong></h3>
<p><strong>13 videos</strong></p>
<p><a target="_blank" href="https://serverlessland.com/content/paved-path/lift-and-shift-a-web-app-to-serverless/1-introduction">https://serverlessland.com/content/paved-path/lift-and-shift-a-web-app-to-serverless/1-introduction</a></p>
<p><em>Summary talk about this migration</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=O-hSs7aF7JE">https://www.youtube.com/watch?v=O-hSs7aF7JE</a></div>
<p> </p>
<p>Blog post summarizing the migration: <a target="_blank" href="https://blog.marcia.dev/lift-and-shift-a-web-app-to-serverless">https://blog.marcia.dev/lift-and-shift-a-web-app-to-serverless</a></p>
<h3 id="heading-guide-on-how-to-migrate-using-app-runner-and-dynamodb">Guide on how to migrate using App Runner and DynamoDB</h3>
<p><strong>14 videos</strong></p>
<p><a target="_blank" href="https://serverlessland.com/content/service/dynamodb/guides/using-dynamodbto-build-webapps/introduction">https://serverlessland.com/content/service/dynamodb/guides/using-dynamodbto-build-webapps/introduction</a></p>
]]></content:encoded></item><item><title><![CDATA[Inside Serverlesspresso]]></title><description><![CDATA[This blog post collects all the resources for the talk: "Inside Serverlesspresso: Creating a production workload for pennies a day"
What is Serverlesspresso?
Serverlesspresso is an interactive serverless application showcased at AWS re:Invent, AWS Su...]]></description><link>https://blog.marcia.dev/inside-serverlesspresso</link><guid isPermaLink="true">https://blog.marcia.dev/inside-serverlesspresso</guid><category><![CDATA[AWS]]></category><category><![CDATA[serverless]]></category><category><![CDATA[event-driven-architecture]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 30 May 2023 06:46:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1685428915769/a51baf33-bda1-433c-a0c5-6120ac12d49d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post collects all the resources for the talk: <em>"Inside Serverlesspresso: Creating a production workload for pennies a day"</em></p>
<p><strong>What is Serverlesspresso?</strong></p>
<p>Serverlesspresso is an interactive serverless application showcased at AWS re:Invent, AWS Summits, and other events. It allows you to order coffee from your phone. It comprises three front-end applications, and a backend built primarily with Serverless services, such as AWS Step Functions and Amazon EventBridge.</p>
<p><a target="_blank" href="https://github.com/aws-samples/serverless-coffee">Get the code</a></p>
<h3 id="heading-watch-this-talk">Watch this talk</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/qs0U0LdNkV0">https://youtu.be/qs0U0LdNkV0</a></div>
<p> </p>
<h3 id="heading-learn-more-how-serverlesspresso-was-built">Learn more how Serverlesspresso was built</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/71ln5qjiVbk">https://youtu.be/71ln5qjiVbk</a></div>
<p> </p>
<h2 id="heading-serverlesspresso-extensions">Serverlesspresso extensions</h2>
<ul>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/compute/introducing-serverlesspresso-extensions/">Introducing Serverlesspresso Extensions blog post</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/compute/building-ad-hoc-consumers-for-event-driven-architectures/">Building ad-hoc consumers for event-driven architectures</a></p>
</li>
</ul>
<h2 id="heading-event-driven-architectures">Event-driven architectures</h2>
<p>Serverlesspresso is built on top of Serverless services and using Event-driven architectures.</p>
<p>Check all these blog posts with more details about Event-driven architectures and the services used to develop these applications with AWS.</p>
<ul>
<li><p><a target="_blank" href="https://blog.marcia.dev/introduction-to-event-driven-architectures"><strong>Introduction to Event-Driven architectures</strong></a></p>
</li>
<li><p><a target="_blank" href="https://blog.marcia.dev/event-driven-applications"><strong>Introduction to choreography and Amazon EventBridge</strong></a></p>
</li>
<li><p><a target="_blank" href="https://blog.marcia.dev/orchestrated-apps"><strong>Introduction to Orchestration and AWS Step Functions</strong></a></p>
</li>
<li><p><a target="_blank" href="https://serverlessland.com/event-driven-architecture"><strong>Serverless Land EDA page</strong></a></p>
</li>
<li><p><a target="_blank" href="https://blog.marcia.dev/estados-y-workflows"><strong>Material in Spanish</strong></a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[🆕 What is new in AWS Serverless 2023?]]></title><description><![CDATA[This blog post collects all the videos I made about launches related to serverless in AWS during 2023.
(this is a post that keeps updating constantly)
Serverless Badge
https://youtu.be/1Cnlyq1SGVc
 
AWS Step Functions
Step Functions Distributed Map
h...]]></description><link>https://blog.marcia.dev/what-is-new-in-aws-serverless-2023</link><guid isPermaLink="true">https://blog.marcia.dev/what-is-new-in-aws-serverless-2023</guid><category><![CDATA[AWS]]></category><category><![CDATA[serverless]]></category><category><![CDATA[event-driven-architecture]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Mon, 22 May 2023 15:22:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1683716322230/70b19dee-9959-499b-822e-f5cbf46daed6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post collects all the videos I made about launches related to serverless in AWS during 2023.</p>
<p><em>(this is a post that keeps updating constantly)</em></p>
<p><strong>Serverless Badge</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/1Cnlyq1SGVc">https://youtu.be/1Cnlyq1SGVc</a></div>
<p> </p>
<h2 id="heading-aws-step-functions">AWS Step Functions</h2>
<h3 id="heading-step-functions-distributed-map">Step Functions Distributed Map</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/_6ym3IRrRxo">https://youtu.be/_6ym3IRrRxo</a></div>
<p> </p>
<p><a target="_blank" href="https://aws.amazon.com/blogs/aws/how-cybercrx-cut-ml-processing-time-from-8-days-to-56-minutes-with-aws-step-functions-distributed-map/">Learn how CyberGRX cut ML processing time from 8 days to 56 minutes with AWS Step Functions Distributed Map</a></p>
<h2 id="heading-amazon-eventbridge">Amazon EventBridge</h2>
<h3 id="heading-pipes">Pipes</h3>
<p>Learn about the new feature of EventBridge</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/8Yv_V4havbc">https://youtu.be/8Yv_V4havbc</a></div>
<p> </p>
<p>Learn how to use it...</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Txlv8H7c8wA">https://youtu.be/Txlv8H7c8wA</a></div>
<p> </p>
<p><a target="_blank" href="https://aws.amazon.com/blogs/compute/implementing-architectural-patterns-with-amazon-eventbridge-pipes/">Learn patterns that EventBridge Pipes help you to implement</a></p>
<h2 id="heading-other-services">Other services ...</h2>
<h3 id="heading-amazon-codewhisperer">Amazon CodeWhisperer</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/9_IzF3g95XE">https://youtu.be/9_IzF3g95XE</a></div>
<p> </p>
<h3 id="heading-aws-apprunner">AWS AppRunner</h3>
<p>AWS App Runner now supports <a target="_blank" href="https://aws.amazon.com/about-aws/whats-new/2023/01/aws-app-runner-secrets-configuration-aws-secrets-systems-manager/">retrieving secrets and configuration</a> data stored in <a target="_blank" href="https://aws.amazon.com/secrets-manager/">AWS Secrets Manager</a> and <a target="_blank" href="https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html">AWS Systems Manager (SSM) Parameter Store</a> in an App Runner service as runtime environment variables.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/z-RywG7Xfk8">https://youtu.be/z-RywG7Xfk8</a></div>
<p> </p>
<p>Let see it in action</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/jOwQdXbmHC4">https://youtu.be/jOwQdXbmHC4</a></div>
<p> </p>
<h3 id="heading-more"><strong>More ...</strong></h3>
<p>You can find more information about what happened in 2023 on serverless, by reading the quarterly post from the Serverless Developer Advocates.</p>
<ul>
<li><a target="_blank" href="https://aws.amazon.com/blogs/compute/serverless-icymi-q1-2023/">Q1</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Serverless analytics at scale]]></title><description><![CDATA[This blog post collects all the resources for the talk: "Serverless analytics at scale".
The code
The backend code: https://github.com/mavi888/kinesis-firehose-demo
The webapp code: https://github.com/mavi888/voting-app-amplify
Building everything in...]]></description><link>https://blog.marcia.dev/serverless-analytics-at-scale</link><guid isPermaLink="true">https://blog.marcia.dev/serverless-analytics-at-scale</guid><category><![CDATA[serverless]]></category><category><![CDATA[data analytics]]></category><category><![CDATA[event streaming]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 16 May 2023 11:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1683715681228/4d72b338-e042-40a2-9d1b-75cc475a4a2e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post collects all the resources for the talk: <em>"Serverless analytics at scale".</em></p>
<h3 id="heading-the-code">The code</h3>
<p>The backend code: <a target="_blank" href="https://github.com/mavi888/kinesis-firehose-demo">https://github.com/mavi888/kinesis-firehose-demo</a></p>
<p>The webapp code: <a target="_blank" href="https://github.com/mavi888/voting-app-amplify">https://github.com/mavi888/voting-app-amplify</a></p>
<h2 id="heading-building-everything-in-the-console">Building everything in the console</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/w9lGZanong4">https://youtu.be/w9lGZanong4</a></div>
<p> </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/2BolKT_OfV0">https://youtu.be/2BolKT_OfV0</a></div>
<p> </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/D6uyh4nWyEs">https://youtu.be/D6uyh4nWyEs</a></div>
<p> </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Kr9gfiyxEJk">https://youtu.be/Kr9gfiyxEJk</a></div>
<p> </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/zESjytd7JQ0">https://youtu.be/zESjytd7JQ0</a></div>
<p> </p>
<h2 id="heading-amazon-kinesis">Amazon Kinesis</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/BngfpxwZkxg">https://youtu.be/BngfpxwZkxg</a></div>
<p> </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/lwSBOCkHa6I">https://youtu.be/lwSBOCkHa6I</a></div>
]]></content:encoded></item><item><title><![CDATA[🆕 What is new in AWS Serverless 2022?]]></title><description><![CDATA[This blog post collects all the videos I made about launches related to serverless in AWS during 2022.
If you want to get a summary of the most relevant information in one go, check David Boyne's presentation from AWS re:Invent 2022.
https://youtu.be...]]></description><link>https://blog.marcia.dev/what-is-new-in-aws-serverless-2022</link><guid isPermaLink="true">https://blog.marcia.dev/what-is-new-in-aws-serverless-2022</guid><category><![CDATA[AWS]]></category><category><![CDATA[serverless]]></category><category><![CDATA[event-driven-architecture]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Wed, 21 Dec 2022 11:47:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671622741584/jjq1R0g0K.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post collects all the videos I made about launches related to serverless in AWS during 2022.</p>
<p>If you want to get a summary of the most relevant information in one go, check <a target="_blank" href="https://twitter.com/boyney123">David Boyne</a>'s presentation from AWS re:Invent 2022.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/qHI8E92W9ZA">https://youtu.be/qHI8E92W9ZA</a></div>
<p> </p>
<h2 id="heading-aws-lambda">AWS Lambda</h2>
<h3 id="heading-lambda-functions-urls">Lambda Functions URLs</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/e1hdvJckjy0">https://youtu.be/e1hdvJckjy0</a></div>
<p> </p>
<p><a target="_blank" href="https://blog.marcia.dev/lift-and-shift-a-web-app-to-serverless">Check this example using Lambda functions URLS</a></p>
<h3 id="heading-10gb-of-ephemeral-storage">10GB of ephemeral storage</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/39qK-kih9p0">https://youtu.be/39qK-kih9p0</a></div>
<p> </p>
<p><a target="_blank" href="https://blog.marcia.dev/choose-the-right-storage-solution-for-your-aws-lambda-function">Learn more about Lambda Storage</a></p>
<h3 id="heading-support-for-typescript-lambda-functions-with-aws-sam">Support for Typescript Lambda functions with AWS SAM</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/GykEaUKDcrk">https://youtu.be/GykEaUKDcrk</a></div>
<p> </p>
<h3 id="heading-support-for-typescript-lambda-functions-with-aws-cdk">Support for Typescript Lambda functions with AWS CDK</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/CeqwpYhlHbQ">https://youtu.be/CeqwpYhlHbQ</a></div>
<p> </p>
<h3 id="heading-lambda-powertools-for-typescript">Lambda Powertools for Typescript</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/KsVQMaZDU20">https://youtu.be/KsVQMaZDU20</a></div>
<p> </p>
<h3 id="heading-feature-flags-with-appconfig-and-aws-lambda">Feature flags with AppConfig and AWS Lambda</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/sq2HcRMLaLU">https://youtu.be/sq2HcRMLaLU</a></div>
<p> </p>
<h3 id="heading-lambda-event-filtering">Lambda event filtering</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/oY7vr0GMwjQ">https://youtu.be/oY7vr0GMwjQ</a></div>
<p> </p>
<h2 id="heading-amazon-step-functions">Amazon Step Functions</h2>
<h3 id="heading-intrinsic-functions">Intrinsic functions</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/EqNjif9tc1Q">https://youtu.be/EqNjif9tc1Q</a></div>
<p> </p>
<h3 id="heading-unit-testing-step-functions">Unit testing Step Functions</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/P3hEqxKxZe8">https://youtu.be/P3hEqxKxZe8</a></div>
<p> </p>
<h2 id="heading-aws-eventbridge">AWS EventBridge</h2>
<h3 id="heading-eventbridge-scheduler">EventBridge Scheduler</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/35V2ULLS6fI">https://youtu.be/35V2ULLS6fI</a></div>
<p> </p>
<p><a target="_blank" href="https://aws.amazon.com/blogs/compute/introducing-amazon-eventbridge-scheduler/">Read the blog post for this launch</a></p>
<h3 id="heading-eventbridge-global-endpoints">EventBridge Global Endpoints</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/803Fw9KBOcE">https://youtu.be/803Fw9KBOcE</a></div>
<p> </p>
<p><a target="_blank" href="https://blog.marcia.dev/global-event-driven-applications">Learn more about multi-region serverless applications</a></p>
<h2 id="heading-other-services">Other Services</h2>
<h3 id="heading-aws-cdk-v2">AWS CDK v2</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/_kf4ajni3Qk">https://youtu.be/_kf4ajni3Qk</a></div>
<p> </p>
<h3 id="heading-kinesis-data-stream-on-demand">Kinesis Data Stream On-Demand</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/BngfpxwZkxg">https://youtu.be/BngfpxwZkxg</a></div>
<p> </p>
<h3 id="heading-dynamodb-infrequent-access-table-class">DynamoDB infrequent access table class</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/yJ11j6ed_YY">https://youtu.be/yJ11j6ed_YY</a></div>
<p> </p>
<h3 id="heading-sqs-dlq-redrive">SQS DLQ redrive</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/bDbOYMsN24w">https://youtu.be/bDbOYMsN24w</a></div>
<p> </p>
<h3 id="heading-aws-amplify-new-studio">AWS Amplify new Studio</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/lYGj06vSyHE">https://youtu.be/lYGj06vSyHE</a></div>
<p> </p>
<h3 id="heading-more">More ...</h3>
<p>You can find more information about what happened in 2022 on serverless, by reading the quarterly post from the Serverless Developer Advocates.</p>
<ul>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/compute/icymi-serverless-q1-2022/">Q1</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/compute/icymi-serverless-q2-2022/">Q2</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/compute/serverless-icymi-q3-2022/">Q3</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/compute/serverless-icymi-q4-2022/">Q4</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Global Event Driven Applications]]></title><description><![CDATA[This blog post collects a lot of resources related to global event-driven applications.
Why to build a multi-region serverless application and why not?
This video talks about what is a multi-region active-active architecture and why you might need on...]]></description><link>https://blog.marcia.dev/global-event-driven-applications</link><guid isPermaLink="true">https://blog.marcia.dev/global-event-driven-applications</guid><category><![CDATA[event-driven-architecture]]></category><category><![CDATA[AWS]]></category><category><![CDATA[Multi Region]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 22 Nov 2022 13:12:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1669122744170/YAzCpK03T.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post collects a lot of resources related to global event-driven applications.</p>
<h2 id="heading-why-to-build-a-multi-region-serverless-application-and-why-not">Why to build a multi-region serverless application and why not?</h2>
<p>This video talks about what is a multi-region active-active architecture and why you might need one, and why you don't need one. Also, it covers why the strategies are different for serverless than for traditional applications.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/vRjRaz-GJGk">https://youtu.be/vRjRaz-GJGk</a></div>
<p> </p>
<h2 id="heading-read-and-write-data-patterns-for-multi-region-architectures">Read and Write Data patterns for Multi-Region architectures</h2>
<p>This video talks about data patterns for writing and reading data in multi-region architectures. If you have an application that is deployed in multiple Regions you need to check this video as you will learn the benefits and challenges of the most common data patterns.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/CrO-MeriK9U">https://youtu.be/CrO-MeriK9U</a></div>
<p> </p>
<h3 id="heading-dynamodb-global-tables">DynamoDB global tables</h3>
<p>Global tables build provide you with a fully managed, multi-Region, and multi-active database that delivers fast, local, read, and write performance for massively scaled, global applications.</p>
<p>Global tables replicate your DynamoDB tables automatically across your choice of AWS Regions.</p>
<p>In the following video Kirk Kirkconnell, Developer Advocate for Amazon DynamoDB explains the basic concepts and helps you get started with global tables.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=Fa8Vf4Y7J_A">https://www.youtube.com/watch?v=Fa8Vf4Y7J_A</a></div>
<p> </p>
<p>And if if you want to implement Global Tables in your AWS CDK project, you need to watch this video.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/or-f22iJ32E">https://youtu.be/or-f22iJ32E</a></div>
<p> </p>
<h2 id="heading-amazon-route53">Amazon Route53</h2>
<p>When we talk about multi-region applications, we cannot forget how traffic flows between the different regions.</p>
<p>Amazon Route 53 is a DNS service that gives developers and businesses a reliable and cost-effective way to route end-users to Internet applications. Route 53 provides DNS service with 100% availability. The distributed nature of the DNS servers helps ensure a consistent ability to route end users to your applications. Amazon Route 53 integrates seamlessly with other AWS services and can map domain names to load balancers, Amazon EC2 instances, Amazon S3 buckets, Amazon CloudFront distributions, and other AWS and non-AWS resources Route 53 helps improve your application's performance and reliability of end users. If you're running your application in multiple regions around the world, you can easily set up routing to send each end user to the best location for them, or you can re-route users to a different location if the primary one becomes unavailable.</p>
<p>In this video, you will learn how DNS works and how Route53 is in the DNS infrastructure and about different routing strategies that Route53 provides and how you can leverage those.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=IM1xSBqBgIo">https://www.youtube.com/watch?v=IM1xSBqBgIo</a></div>
<p> </p>
<p>In this video, you will learn how to use Route53 latency routing policy to build a serverless application to route users to the closest Region.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/_Y_6CB7Yp0U">https://youtu.be/_Y_6CB7Yp0U</a></div>
<p> </p>
<h2 id="heading-building-global-event-driven-applications">Building global event driven applications</h2>
<p>Having a multi-Region strategy for your event-driven applications can help you fail over to another Region during a service disruption, increasing the availability and reliability of your applications. In this session, learn how to implement a multi-Region strategy with serverless services such as Amazon EventBridge, Amazon DynamoDB, Amazon S3, and more. Also, discover some best practices that can help your application become more resilient when a failure occurs.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=NNTsOKuPlTQ">https://www.youtube.com/watch?v=NNTsOKuPlTQ</a></div>
<p> </p>
<h2 id="heading-more-videos-are-coming-soon">More videos are coming soon!</h2>
<h2 id="heading-resources">Resources</h2>
<ul>
<li><p><a target="_blank" href="https://aws.amazon.com/blogs/compute/introducing-global-endpoints-for-amazon-eventbridge/">More information about EventBridge Global Endpoints</a></p>
</li>
<li><p><a target="_blank" href="https://s12d.com/Uk-AKsi9">Learn more about replicating secrets</a></p>
</li>
<li><p><a target="_blank" href="https://s12d.com/OKzY_Qxn">Learn more about multi-Region keys</a></p>
</li>
<li><p><a target="_blank" href="https://s12d.com/dPvHhi7q">Creating a multi-Region secure app</a></p>
</li>
<li><p><a target="_blank" href="https://s12d.com/Hr4rvqj5">Replication of Amazon Cognito user pool example</a></p>
</li>
<li><p><a target="_blank" href="https://s12d.com/NfMz_IPl">How Auth0 does multi-Region</a></p>
</li>
</ul>
<h2 id="heading-code">Code</h2>
<ul>
<li><p><a target="_blank" href="https://github.com/mavi888/cdk-failover-simple-sls-app">Serverless Failover demo</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/mavi888/eventbridge-global-endpoints-cdk">EventBridge Global Endpoint</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Getting started with Orchestration and Choreography]]></title><description><![CDATA[This blog post is an index for the more in-depth posts related to integration patterns, orchestration and choreography, and event-driven architectures (EDA) in general.
Getting started
In this article, you can learn the basic integration patterns, qu...]]></description><link>https://blog.marcia.dev/getting-started-with-orchestration-and-choreography</link><guid isPermaLink="true">https://blog.marcia.dev/getting-started-with-orchestration-and-choreography</guid><category><![CDATA[serverless]]></category><category><![CDATA[event-driven-architecture]]></category><category><![CDATA[workflow-orchestration]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Fri, 04 Nov 2022 09:04:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671623321856/qNfqv0oDs.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post is an index for the more in-depth posts related to integration patterns, orchestration and choreography, and event-driven architectures (EDA) in general.</p>
<h2 id="heading-getting-started">Getting started</h2>
<p>In this article, you can learn the basic integration patterns, queues, pub/sub, buses, and others:</p>
<ul>
<li><a target="_blank" href="https://blog.marcia.dev/introduction-to-event-driven-architectures">Introduction to Event-Driven architectures</a></li>
</ul>
<p><a target="_blank" href="https://serverlessland.com/event-driven-architecture/visuals">EDA visuals</a> are a great reference to learn about event-driven architectures.</p>
<p>This link will take you to the landing page for Serverless Land in where you can find more information related to the topic.</p>
<ul>
<li><a target="_blank" href="https://serverlessland.com/event-driven-architecture">Serverless Land EDA page</a></li>
</ul>
<p><a target="_blank" href="https://www.amazon.com/Enterprise-Integration-Patterns-Designing-Deploying/dp/0321200683/ref=sr_1_1?keywords=enterprise+integration+patterns&amp;qid=1683708108&amp;sprefix=enterprise+integration+pat%2Caps%2C709&amp;sr=8-1">Enterprise integration patterns</a>:The book <em>Enterprise Integration Patterns</em>, written by Gregor Hohpe and Bobby Woolf, describes 65 patterns for the use of enterprise application integration and message-oriented middleware as a pattern language; this website contains the catalogue of patterns and many other great resources</p>
<h2 id="heading-choreography">Choreography</h2>
<p>This article goes in depth in many features of Amazon EventBridge and how to design your EDA applications taking advantage of this service.</p>
<ul>
<li><a target="_blank" href="https://blog.marcia.dev/event-driven-applications">Introduction to choreography and Amazon EventBridge</a></li>
</ul>
<p>In this video, you can learn more about the best practices to design and build EDA applications.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/bC51iRtXlRw">https://youtu.be/bC51iRtXlRw</a></div>
<p> </p>
<p>In this video, you can learn about initial phase of design of EDA systems and how to design your events.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/GBzr48Mj2JU">https://youtu.be/GBzr48Mj2JU</a></div>
<p> </p>
<p><a target="_blank" href="https://www.youtube.com/playlist?list=PLEx5khR4g7PKxJBkaGmSDRywZ3aAZcwpK">In this playlist you can find all the talks for the GoTO EDA Day 2022.</a></p>
<p><a target="_blank" href="https://s12d.com/NNQry01O">Use Amazon EventBridge to Build Decoupled, Event-Driven Architectures</a><br />Get an overview of EventBridge, the basics of event-driven architectures, a deeper dive into EventBridge capabilities, and how best to use it in your serverless applications</p>
<p><a target="_blank" href="https://s12d.com/events-12">Using AWS X-Ray with Amazon EventBridge</a><br />Example application shows how to use AWS X-Ray with Amazon EventBridge, using the AWS Serverless Application Model (AWS SAM)</p>
<p><a target="_blank" href="https://github.com/aws-samples/amazon-eventbridge-resource-policy-samples">Amazon EventBridge resource policy samples</a><br />GitHub repository containing sample implementations for Amazon EventBridge resource policies, multi-account design patterns and cross-Region event routing</p>
<h2 id="heading-orchestration">Orchestration</h2>
<p>This article talks about the building orchestration process and gets into the details of building applications using AWS Step Functions, and many of its features.</p>
<ul>
<li><a target="_blank" href="https://blog.marcia.dev/orchestrated-apps">Introduction to Orchestration and AWS Step Functions</a></li>
</ul>
<h2 id="heading-orchestration-or-choreography">Orchestration or choreography?</h2>
<p>This video explains both patterns and helps you to decide which one can be the best approach for your problem.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/KlzCmDoWNUk?si=pBKQrvb6uIN9H3nR">https://youtu.be/KlzCmDoWNUk?si=pBKQrvb6uIN9H3nR</a></div>
<p> </p>
<h2 id="heading-en-espanol">En español</h2>
<p>Este link te lleva a un post con mucho material en español sobre el tema.</p>
<ul>
<li><a target="_blank" href="https://blog.marcia.dev/estados-y-workflows">Material en Spanish</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Introduction to Event-Driven Architectures]]></title><description><![CDATA[Event-driven architectures (EDA) are an architecture style that uses events and asynchronous communication to loosely couple an application’s components. Event-driven architectures can help you boost agility and build reliable, scalable applications....]]></description><link>https://blog.marcia.dev/introduction-to-event-driven-architectures</link><guid isPermaLink="true">https://blog.marcia.dev/introduction-to-event-driven-architectures</guid><category><![CDATA[Queues]]></category><category><![CDATA[event streaming]]></category><category><![CDATA[event-driven-architecture]]></category><category><![CDATA[PubSub]]></category><category><![CDATA[message queue]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Wed, 19 Oct 2022 21:27:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1666213846080/LhR7dmca6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Event-driven architectures</strong> (EDA) are an architecture style that uses events and asynchronous communication to loosely couple an application’s components. Event-driven architectures can help you boost agility and build reliable, scalable applications.</p>
<p>Before getting started with EDA it is important to understand a key concept that is tight vs loose coupling.</p>
<p><strong>Coupling</strong> is the measure of dependency each component of an application has on one another. For example, a components need to call another in order to complete its task and the order in which things are called matter.</p>
<p><strong>Tightly coupled</strong> systems can be particularly effective if the application has few components or if a single team or developer owns the entire application.</p>
<p>However, when components are more tightly coupled, it becomes increasingly likely that a change or operational issue in one component will propagate to others. For complex systems with many teams involved, tight coupling can have drawbacks. When components are tightly interdependent, it can be difficult and risky to make changes isolated to a single component without affecting others. This can slow down development processes and reduce feature velocity.</p>
<p>Tightly coupled components can also affect an application’s scalability and availability. If two components depend on one another’s synchronous responses, a failure in one will cause the other to fail. These failures can reduce the application’s overall fault tolerance.</p>
<p><strong>Reducing coupling</strong> is the act of reducing interdependency between components and the awareness each component must have of one another. Event-driven architectures achieve loose coupling through asynchronous communication via events. This happens when one component doesn’t need another to respond. Instead, the first component may send an event and continue without impact should the second component delay or fail.</p>
<p>When communicating with events, components only need to be aware of the independent events. They don’t require knowledge of the transmitting component or any other components’ behavior (e.g., error handling, retry logic). So long as the event format remains the same, changes in any single component won’t impact the others. This allows changing an application with less risk.</p>
<p>When asynchronous events abstract components from one another, complex applications become more resilient and accessible. For example, in this case we have event producers and event consumers all connected using an event broker. There are many patterns like this that we are going to see during this series.</p>
<h3 id="heading-core-benefits-of-eda"><strong>Core benefits of EDA</strong></h3>
<p>A shift in mindset is required when building an event-driven architecture because of the unique characteristics and considerations of asynchronous systems. Yet, this architecture style offers important benefits for complex applications:</p>
<ul>
<li><p><strong>Build and deploy applications independently in loosely coupled applications.</strong> Development teams working on individual services have fewer dependencies. Changing one service will have less risk of impacting others.</p>
</li>
<li><p><strong>Build new features using events without changing existing applications. (Extend your applications)</strong> Since components emit events, event-driven architectures are easily extensible. Events can also be analyzed for business reports and audits.</p>
</li>
<li><p><strong>Scale and fail components independently in loosely coupled components.</strong> Applications with loosely coupled components have fewer single points of failure, as well as increased resiliency.</p>
</li>
</ul>
<h3 id="heading-key-concepts-of-event-driven-architectures"><strong>Key concepts of event-driven architectures</strong></h3>
<p>An <strong>event</strong> is the signal of a changed state, such as an item in a shopping cart or a credit card application. Events occur in the past (e.g., “OrderCreated” or “ApplicationSubmitted”) and are immutable, meaning they can’t be changed. This helps in distributed systems because there are no changes across components to keep in sync. Events are observed, not directed. A component that emits an event has no particular destination nor awareness of downstream components that may consume the event.</p>
<p>Event-driven architecture possesses these key components:</p>
<ul>
<li><p><strong>Event producers publish events.</strong> Some examples include front-end websites, microservices, Internet of Things (IoT) devices, AWS services, and software-as-a-service (SaaS) applications.</p>
</li>
<li><p><strong>Event consumers are downstream components that activate in events.</strong> Multiple consumers may be found in the same event. Consuming events includes starting workflows, running analyses, or updating databases.</p>
</li>
<li><p><strong>Event brokers mediate between producers and consumers, publishing and consuming shared events while mitigating the two sides.</strong> They include event routers that push events to targets and event stores from which consumers pull events.</p>
</li>
</ul>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/onz3Am7_w9M">https://youtu.be/onz3Am7_w9M</a></div>
<p> </p>
<h2 id="heading-queues">Queues</h2>
<p><strong>Point-to-point messaging</strong> is a pattern in which producers send messages typically intended for a single consumer. Point-to-point messaging often uses messaging queues as its event broker.</p>
<p><strong>Queues</strong> are messaging channels that allow asynchronous communication between a sender and receiver. Queues provide a buffer for messages in case the consumer is unavailable or needs to control the number of messages processed at a given time.</p>
<p>Messages persist until the consumer processes them and deletes them from the queue. One consumer can consume each message. If we need that the message is consumed by multiple recievers you need to use another pattern.</p>
<p>If we look at AWS - Amazon SQS and Amazon MQ are used as managed queue services. And Lambda functions can get triggered when a new message is in the queue.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/FLR5nFc21WM">https://youtu.be/FLR5nFc21WM</a></div>
<p> </p>
<h3 id="heading-dead-letter-queues">Dead letter queues</h3>
<p>Dead letter queues are queues that you configured where messages that cannot be sent in the point to point pattern cannot be sent.</p>
<p>SQS and other queue service or message brokers will retry resending the message as many times as configured. But in some point if there is a problem with the target or with the event the message won’t be able to send.</p>
<p>If you don’t configure a place where the messages are stored, then the message will be discarded. That is why DLQ are important. This are a on-failure destination for all your messages. Later you can reprocess and analyse all the messages in the queue.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/bDbOYMsN24w">https://youtu.be/bDbOYMsN24w</a></div>
<p> </p>
<h2 id="heading-pubsub">Pub/Sub</h2>
<p><strong>Pub/sub messaging</strong> is a way in which producers send the same message to many consumers. Whereas point-to-point messaging usually sends messages to just one consumer, publish-subscribe messaging allows you to broadcast messages and send a copy to each consumer.</p>
<p>The event broker in these models is frequently an event router. Unlike queues, event routers rarely offer persistence of events.</p>
<p>One type of event router is a topic, a messaging destination that facilitates hub-and-spoke integrations. In this model, producers publish messages to a hub, and consumers subscribe to the topics of their choice.</p>
<p>Another type of event router is an event bus, which provides complex routing logic. While topics push all sent messages to subscribers, event buses can filter the incoming flow of messages and push them to different consumers based on event attributes.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/rSIirRFa77s">https://youtu.be/rSIirRFa77s</a></div>
<p> </p>
<h2 id="heading-event-streaming">Event streaming</h2>
<p>Using streams, or continuous flows of events or data, is another method of abstracting producers and consumers. In contrast to event routers, though comparable to queues, streams typically require consumers to poll for new events. Consumers maintain their unique filtering logic to determine which events they want to consume while tracking their position in the stream. Event streams are continuous flows of events, which may be processed individually or together over time.</p>
<h3 id="heading-data-streams-vs-event-streams">Data streams vs event streams?</h3>
<p>Data streams differ from event streams in that they always interpret data. In this model, individual data points, or records, aren’t independently useful. Data streaming applications are often used to either persist the data after an optional enrichment or to process the data over a preset time period to derive real-time analytics.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/lwSBOCkHa6I">https://youtu.be/lwSBOCkHa6I</a></div>
<p> </p>
<h2 id="heading-event-bus">Event bus</h2>
<p>The last of the patterns is the event bus. And here our event router has rules that send the events from the consumers to the producers of events.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/c493KFaWteg">https://youtu.be/c493KFaWteg</a></div>
<p> </p>
<h2 id="heading-more-information">More information</h2>
<p>Everything about Amazon EventBridge: blog.marcia.dev/event-driven-applications</p>
<p>Everything about AWS Step Functions: blog.marcia.dev/orchestrated-apps</p>
<p><em>In this video you can learn more about integration patterns.</em></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/SbL3a9YOW7s">https://youtu.be/SbL3a9YOW7s</a></div>
]]></content:encoded></item><item><title><![CDATA[Lift and Shift a Web App to Serverless. Is that even possible?]]></title><description><![CDATA[Customers migrating to the cloud often want to get the benefits of serverless architecture. But what is the best approach and is it possible? There are many strategies to do a migration, but lift and shift is often the fastest way to get to productio...]]></description><link>https://blog.marcia.dev/lift-and-shift-a-web-app-to-serverless</link><guid isPermaLink="true">https://blog.marcia.dev/lift-and-shift-a-web-app-to-serverless</guid><category><![CDATA[serverless]]></category><category><![CDATA[AWS]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Wed, 14 Sep 2022 08:40:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1663144681408/Ai4t16Pt6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Customers migrating to the cloud often want to get the benefits of serverless architecture. But what is the best approach and is it possible? There are many strategies to do a migration, but lift and shift is often the fastest way to get to production with the migrated workload.</p>
<p>You might also wonder if it’s possible to lift and shift an existing application that runs in a traditional environment to serverless. This blog post shows how to do this for a Mongo, Express, React, and Node.js (MERN) stack web app. However, the discussions presented in this post apply to other stacks too.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/O-hSs7aF7JE">https://youtu.be/O-hSs7aF7JE</a></div>
<p> </p>
<h2 id="heading-why-do-a-lift-and-shift-migration">Why do a lift and shift migration?</h2>
<p>Lift and shift, or sometimes referred to as rehosting the application, is moving the application with as few changes as possible. Lift and shift migrations often allow you to get the new workload in production as fast as possible. When migrating to serverless, lift and shift can bring a workload that is not yet in the cloud or in a serverless environment to use managed and serverless services quickly.</p>
<p>Migrating a non-serverless workload to serverless with lift and shift might not bring all the serverless benefits right away, but it enables the development team to refactor, using the strangler pattern, the parts of the application that might benefit from what serverless technologies offer.</p>
<h2 id="heading-why-migrate-a-web-app-to-serverless">Why migrate a web app to serverless?</h2>
<p>Web apps hosted in a serverless environment benefit most from the capability of serverless applications to scale automatically and for paying for what you use.</p>
<p>Imagine that you have a personal web app with little traffic. If you are hosting in a serverless environment, you don’t pay a fixed price to have the servers up and running. Your web app has only a few requests and the rest of the time is idle.</p>
<p>This benefit applies to the opposite case. For an owner of a small ecommerce site running on a server, imagine if a social media influencer with millions of followers recommends one of their products. Suddenly, thousands of requests arrive and make the site unavailable. If the site is hosted on a serverless platform, the application will scale to the traffic that it receives.</p>
<h2 id="heading-requirements-for-migration">Requirements for migration</h2>
<p>Before starting a migration, it is important to define the nonfunctional requirements that you need the new application to have. These requirements help when you must make architectural decisions during the migration process.</p>
<p>These are the nonfunctional requirements of this migration:</p>
<ul>
<li><p>Environment that scales to zero and scales up automatically.</p>
</li>
<li><p>Pay as little as possible for idle time.</p>
</li>
<li><p>Configure as little infrastructure as possible.</p>
</li>
<li><p>Automatic high availability of the application.</p>
</li>
<li><p>Minimal changes to the original code.</p>
</li>
</ul>
<h2 id="heading-application-overview">Application overview</h2>
<p>This blog post guides you on how to migrate a MERN application. The original application is hosted in two different servers: One contains the Mongo database and another contains the Node/js/Express and ReactJS applications.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663143462362/_rEf4OlE_.png" alt="Picture 1.png" /></p>
<p>This demo application simulates a swag ecommerce site. The database layer stores the products, users, and the purchases history. The server layer takes care of the ecommerce business logic, hosting the product images, and user authentication and authorization. The web layer takes care of all the user interaction and communicates with the server layer using REST APIs.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663143472610/CCrKZQOFI.png" alt="Picture 2.png" /></p>
<p>These are the changes that you must make to migrate to a serverless environment:</p>
<ul>
<li><p><strong>Database migration</strong>: Migrate the database from on-premises to MongoDB Atlas.</p>
</li>
<li><p><strong>Backend migration</strong>: Migrate the NodeJS/Express application from on-premises to an AWS Lambda function.</p>
</li>
<li><p><strong>Web app migration</strong>: Migrate the React web app from on-premises to AWS Amplify.</p>
</li>
<li><p><strong>Authentication migration</strong>: Migrate the custom-built authentication to use Amazon Cognito.</p>
</li>
<li><p><strong>Storage migration</strong>: Migrate the local storage of images to use Amazon S3 and Amazon CloudFront.</p>
</li>
</ul>
<p>The following image shows the proposed solution for the migrated application:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663143498406/sKdywiYnt.png" alt="Picture 3.png" /></p>
<h2 id="heading-database-migration">Database migration</h2>
<p>The database is already in a MongoDB vanilla container that has all the data for this application. As MongoDB is the database engine for our stack, their recommended solution to migrate to serverless is to use MongoDB Atlas. Atlas provides a database cluster in the cloud that scales automatically and you pay for what you use.</p>
<p>To get started, create a new Atlas cluster, then migrate the data from the existing database to the serverless one. To migrate the data, you can first dump all the content of the database to a dump folder and then restore it to the cloud:</p>
<pre><code class="lang-plaintext">mongodump --uri="mongodb://&lt;localuser&gt;:&lt;localpassword&gt;@localhost:27017"

mongorestore --uri="mongodb+srv://&lt;user&gt;:&lt;password&gt;@&lt;clustername&gt;.debkm.mongodb.net" .
</code></pre>
<p>After doing that, your data is now in the cloud. The next step is to change the configuration string in the server to point to the new database.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Mic2TGzzVXk">https://youtu.be/Mic2TGzzVXk</a></div>
<p> </p>
<h2 id="heading-backend-migration">Backend migration</h2>
<p>Migrating the Node.js/Express backend is the most challenging of the layers to migrate to a serverless environment, as the server layer is a Node.js application that runs in a server.</p>
<p>One option for this migration is to use AWS Fargate. Fargate is a serverless container service that allows you to scale automatically and you pay as you go. Another option is to use AWS AppRunner, a container service that auto scales and you also pay as you go. However, neither of these options align with our migration requirements, as they don’t scale to zero.</p>
<p>Another option for the lift and shift migration of this Node.js application is to use Lambda with the AWS Lambda Web Adapter. The AWS Lambda Web Adapter is an open-source project that allows you to build web applications with familiar frameworks, like Express.js, Flask, SpringBoot, and run it on Lambda. You can learn more about this project in its GitHub repository.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663143573291/pXQsMAl_Z.png" alt="Picture 4.png" /></p>
<p>Using this project, you can create a new Lambda function that has the Express/NodeJS application as the function code. You can lift and shift all the code into the function. If you want a step-by-step tutorial on how to do this, check out this video.</p>
<pre><code class="lang-plaintext">const lambdaAdapterFunction = new Function(this,`${props.stage}-LambdaAdapterFunction`,
            {
                runtime: Runtime.NODEJS_16_X,
                code: Code.fromAsset('backend-app'),
                handler: 'run.sh',
                environment: {
                    AWS_LAMBDA_EXEC_WRAPPER: '/opt/bootstrap',
                    REGION: this.region,
                    ASYNC_INIT: 'true',
                },
                memorySize: 1024,
                layers: [layerLambdaAdapter],
                timeout: Duration.seconds(2),
                tracing: Tracing.ACTIVE,
            }
        );
</code></pre>
<p>The next step is to create an HTTP endpoint for the server application. There are three options for doing this: API Gateway, Application Load Balancer (ALB) , or to use Lambda Function URLs. All the options are compatible with Lambda Web Adapter and can solve the challenge for you.</p>
<p>For this demo, choose function URLs, as they are simple to configure and one function URL forwards all routes to the Express server. API Gateway and ALB require more configuration and have separate costs, while the cost of function URLs is included in the Lambda function.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/MvVaFPCdiZY">https://youtu.be/MvVaFPCdiZY</a></div>
<p> </p>
<h2 id="heading-web-app-migration">Web app migration</h2>
<p>The final layer to migrate is the React application. The best way to migrate the web layer and to adhere to the migration requirements is to use AWS Amplify to host it. AWS Amplify is a fully managed service that provides many features like hosting web applications and managing the CICD process for the web app. It provides client libraries to connect to different AWS resources, and many other features.</p>
<p>Migrating the React application is as simple as creating a new Amplify application in your AWS account and uploading the React application to a code repository like GitHub. This AWS Amplify application is connected to a GitHub branch, and when there is a new commit in this branch, AWS Amplify redeploys the code.</p>
<p>The Amplify application receives configuration parameters like the function URL endpoint (the server URL) using environmental variables.</p>
<pre><code class="lang-plaintext">const amplifyApp = new App(this, `${props.stage}-AmplifyReactShopApp`, {
            sourceCodeProvider: new GitHubSourceCodeProvider({
                owner: config.frontend.owner,
                repository: config.frontend.repository_name,
                oauthToken: SecretValue.secretsManager('github-token'),
            }),
            environmentVariables: {
                REGION: this.region,
                SERVER_URL: props.serverURL,
            },
        });
</code></pre>
<p>If you want to see a step-by-step guide on how to make your web layer serverless, you can check this video.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/gQn4XPfpdZE">https://youtu.be/gQn4XPfpdZE</a></div>
<p> </p>
<h2 id="heading-issues-with-this-solution">Issues with this solution</h2>
<p>Now, if you try this migrated app, you will find two issues. The first one is that the user session is not sticky. Every time you log in, you are logged out unexpectedly from the application. The second one is that when you create a new product, you cannot upload new images of that product. Let’s analyze each of the problems in details and find solutions.</p>
<h2 id="heading-authentication-and-authorization-migration">Authentication and authorization migration</h2>
<p>The original application handled the authentication and authorization by itself. There is a user directory in the database, with the passwords and emails for each of the users. There are APIs and middleware that take care of validating that the user is logged in before showing the application. All the logic for this is developed inside the Node.js/Express application.</p>
<p>However, with the current migrated application every time you log in, you are logged out unexpectedly from the application. This is because the server code is responsible for handling the authentication and the authorization of the users, and now our server is running in an AWS Lambda function and functions are stateless. This means that there will be one function running per request—a request can load all the products in the landing page, get the details for a product, or log in to the site—and if you do something in one of these functions, the state is not shared across.</p>
<p>To solve this, you must remove the authentication and authorization mechanisms from the function and use a service that can preserve the state across multiple invocations of the functions.</p>
<p>There are many ways to solve this challenge. You can add a layer of authentication and session management with a database like Redis, or build a new microservice that is in charge of authentication and authorization that can handle the state, or use an existing managed service for this.</p>
<p>Because of the migration requirements, we want to keep the cost as low as possible, with the fewest changes to the application. The better solution is to use an existing managed service to handle authentication and authorization.</p>
<p>This demo uses Amazon Cognito, which provides user authentication and authorization to AWS resources in a managed, pay as you go way.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Su1w1uZg1z0">https://youtu.be/Su1w1uZg1z0</a></div>
<p> </p>
<p>One rapid approach is to replace all the server code with calls to Amazon Cognito using the AWS SDK. But this adds complexity that can be replaced completely by just invoking Amazon Cognito APIs from the React application.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663143728974/P9tZ5bV6g.png" alt="Picture 5.png" /></p>
<p>For example, when a new user is registered, the application creates the user in the Amazon Cognito user pool directory, as well as in the application database. But when a user logs in to the web app, the application calls Amazon Cognito API directly from the AWS Amplify application. This way minimizes the amount of code needed.</p>
<p>In the original application, all authenticated server APIs are secured with a middleware that validates that the user is authenticated by providing an access token. With the new setup that doesn’t change, but the token is generated by Amazon Cognito and then it can be validated in the backend.</p>
<pre><code class="lang-plaintext">let auth = (req, res, next) =&gt; {
    const token = req.headers.authorization;
    const jwtToken = token.replace('Bearer ', '');

    verifyToken(jwtToken)
        .then((valid) =&gt; {
            if (valid) {
                getCognitoUser(jwtToken).then((email) =&gt; {
                    User.findByEmail(email, (err, user) =&gt; {
                        if (err) throw err;
                        if (!user)
                            return res.json({
                                isAuth: false,
                                error: true,
                            });

                        req.user = user;
                        next();
                    });
                });
            } else {
                throw Error('Not valid Token');
            }
        })
        .catch((error) =&gt; {
            return res.json({
                isAuth: false,
                error: true,
            });
        });
};
</code></pre>
<p>You can see how this is implemented step by step in this video.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/KRnZvbVT7uk">https://youtu.be/KRnZvbVT7uk</a></div>
<p> </p>
<h2 id="heading-storage-migration">Storage migration</h2>
<p>In the original application, when a new product is created, a new image is uploaded to the Node.js/Express server. However, now the application resides in a Lambda function. The code (and files) that are part of that function cannot change, unless the function is redeployed. Consequently, you must separate the user storage from the server code.</p>
<p>For doing this, there are a couple of solutions: using Amazon Elastic File System (EFS) or Amazon S3. EFS is a file storage, and you can use that to have a dynamic storage where you upload the new images. Using EFS won’t change much of the code, as the original implementation is using a directory inside the server as EFS provides. However, using EFS adds more complexity to the application, as functions that use EFS must be inside an Amazon Virtual Private Cloud (Amazon VPC).</p>
<p>Using S3 to upload your images to the application is simpler, as it only requires that an S3 bucket exists. For doing this, you must refactor the application, from uploading the image to the application API to use the AWS Amplify library that uploads and gets images from S3.</p>
<pre><code class="lang-plaintext">export function uploadImage(file) {
    const fileName = `uploads/${file.name}`;

    const request = Storage.put(fileName, file).then((result) =&gt; {
        return {
            image: fileName,
            success: true,
        };
    });

    return {
        type: IMAGE_UPLOAD,
        payload: request,
    };
}
</code></pre>
<p>An important benefit of using S3 is that you can also use Amazon CloudFront to accelerate the retrieval of the images from the cloud.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Z4frDpp4PcM">https://youtu.be/Z4frDpp4PcM</a></div>
<p> </p>
<p>In this way, you can speed up the loading time of your page. You can see how this is implemented step by step in this video.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/gb1SfY7u118">https://youtu.be/gb1SfY7u118</a></div>
<p> </p>
<h2 id="heading-testing-this-application">Testing this application</h2>
<p>One benefit of this approach is that you can develop and test the backend and the front-end locally. The following video explains how you can do it.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/U_7xD-o5mCA">https://youtu.be/U_7xD-o5mCA</a></div>
<p> </p>
<h2 id="heading-how-much-does-this-application-cost">How much does this application cost?</h2>
<p>If you deploy this application in an empty AWS account, most of the usage of this application is covered by the AWS Free Tier. Serverless services, like Lambda and Amazon Cognito, have a forever free tier that gives you the benefits in pricing for the lifetime of hosting the application.</p>
<ul>
<li><p>AWS Lambda—With 100 requests per hour, an average 10ms invocation and 1GB of memory configured, it costs 0 USD per month.</p>
</li>
<li><p>Amazon S3—Using S3 standard, hosting 1 GB per month and 10k PUT and GET requests per month costs 0.07 USD per month. This can be optimized using S3 Intelligent-Tiering.</p>
</li>
<li><p>Amazon Cognito—Provides 50,000 monthly active users for free.</p>
</li>
<li><p>AWS Amplify—If you build your client application once a week, serve 3 GB and store 1 GB per month, this costs 0.87 USD.</p>
</li>
<li><p>AWS Secrets Manager—There are two secrets stored using Secrets Manager and this costs 1.16 USD per month. This can be optimized by using AWS System Manager Parameter Store and AWS Key Management Service (AWS KMS).</p>
</li>
<li><p>MongoDB Atlas – Forever free shared cluster.</p>
</li>
</ul>
<p>The total monthly cost of this application is approximately 2.11 USD.</p>
<h2 id="heading-performance-analysis">Performance analysis</h2>
<p>After you migrate the application, you can run a page speed insight tool, to measure this application’s performance. This tool provides results mostly about the front end and the experience that the user perceives. The results are displayed in the following image. The performance of this website is good, according to the insight tool performance score - it responds quickly and the user experience is good.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663143821604/Br-2RpPTJ.png" alt="Picture 6.png" /></p>
<p>After the application is migrated to a serverless environment, you can do some refactoring to improve further the overall performance. One alternative is whenever a new image is uploaded, it gets resized and formatted into the correct next-gen format automatically using the event driven capabilities that S3 provides. Another alternative is to use Lambda on Edge to serve the right image size for the device, as it is possible to format the images on the fly when serving them from a distribution.</p>
<p>You can run load tests for understanding how your backend and database will perform. For this, you can use Artillery, an open-source library that allows you to run load tests. You can run tests with the expected maximum load your site will get and ensure that your site can handle it.</p>
<p>For example, you can configure a test that sends 30 requests per seconds to see how your application reacts:</p>
<pre><code class="lang-plaintext">config:
  target: 'https://xxx.lambda-url.eu-west-1.on.aws'
  phases:
    - duration: 240
      arrivalRate: 30
      name: Testing
scenarios:
  - name: 'Test main page'
    flow:
      - post:
          url: '/api/product/getProducts/'
</code></pre>
<p>Check this video to learn how to run these tests:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/B0pDPSQcAf4">https://youtu.be/B0pDPSQcAf4</a></div>
<p> </p>
<p>This test is performed on the backend APIs, not only testing your backend but also your integration with the MongoDB. After running it, you can see how the Lambda function performs on the Amazon CloudWatch dashboard.</p>
<p>The following video explains how to create this dashboards</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/0VNKHIcQ5wk">https://youtu.be/0VNKHIcQ5wk</a></div>
<p> </p>
<p>Running this load test helps you understand the limitations of your system. For example, if you run a test with too many concurrent users, you might see that the number of throttles in your function increases. This means that you need to lift the limit of invocations of the functions you can have at the same time.</p>
<p>Or when increasing the requests per second, you may find that the MongoDB cluster starts throttling your requests. This is because you are using the free tier and that has a set number of connections. You might need a larger cluster or to migrate your database to another service that provides a large free tier, like Amazon DynamoDB.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663143852890/2oioWiuQx.png" alt="Picture 7.png" /></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In this article, you learn if it is possible to migrate a non-serverless web application to a serverless environment without changing much code. You learn different tools that can help you in this process, like AWS Lambda Web Adaptor and AWS Amplify, and how to solve some of the typical challenges that we have, like storage and authentication.</p>
<p>After the application is hosted in a fully serverless environment, it can scale up and down to meet your needs. This web application is also performant once the backend is hosted in a Lambda function. If you need, from here you can start using the strangler pattern to refactor the application to take advantage of the benefits of event-driven architecture.</p>
<p>To see all the steps of the migration, there is a <a target="_blank" href="https://www.youtube.com/playlist?list=PLGyRwGktEFqe2ga9UmQSBr5xdfVyiDPW6">playlist</a> that contains all the tutorials for you to follow.</p>
<h2 id="heading-update-using-app-runner">Update - Using App Runner</h2>
<p>The migration of the server can also be done using AWS App Runner. In this video you can find an introduction to the service.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/z-RywG7Xfk8">https://youtu.be/z-RywG7Xfk8</a></div>
<p> </p>
<p>In this video you can find the steps you need to do in order to migrate the service from on prem to App Runner.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/jOwQdXbmHC4">https://youtu.be/jOwQdXbmHC4</a></div>
]]></content:encoded></item><item><title><![CDATA[Choose the Right Storage Solution for your AWS Lambda Function]]></title><description><![CDATA[A few weeks ago AWS Lambda added the capability to increase its ephemeral storage up to 10GB. After that announcement, I got a lot of questions regarding when to use ephemeral storage over Amazon EFS or Amazon S3. 
In this post, I want to share with ...]]></description><link>https://blog.marcia.dev/choose-the-right-storage-solution-for-your-aws-lambda-function</link><guid isPermaLink="true">https://blog.marcia.dev/choose-the-right-storage-solution-for-your-aws-lambda-function</guid><category><![CDATA[AWS]]></category><category><![CDATA[aws lambda]]></category><category><![CDATA[storage]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Wed, 20 Apr 2022 09:34:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1650439438295/1c4NpOr1g.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few weeks ago <a target="_blank" href="https://aws.amazon.com/lambda/">AWS Lambda</a> added the capability to increase its ephemeral storage up to 10GB. After that announcement, I got a lot of questions regarding when to use ephemeral storage over <a target="_blank" href="https://aws.amazon.com/efs/">Amazon EFS</a> or <a target="_blank" href="https://aws.amazon.com/s3/">Amazon S3</a>. </p>
<p>In this post, I want to share with you four different ways to store files when using Lambda and some of the most common use cases. If you have new use cases, please let me know in the comments box. I hope that after reading this you have more information to make better decisions when to choose one solution over the other.</p>
<h2 id="heading-amazon-s3">Amazon S3</h2>
<p>Amazon S3 and AWS Lambda integration is simple, on the operational side and on how the two services communicate. </p>
<p>On the operational side, Amazon S3 scales and is highly available. S3 scales with your functions. No matter how many functions run in parallel, S3 will scale according. S3 high-availability means that when you store a file in S3, it will be there until you remove it.</p>
<p>On the communication side, S3 and Lambda have a bi-directional communication. This means that you can store and retrieve objects from the Lambda functions in S3, but also you can trigger functions when objects suffer changes - added, changed or deleted. </p>
<p>The integration between these two services is simple to set up as none of the services needs a <a target="_blank" href="https://aws.amazon.com/vpc/">VPC</a>. Simply give permissions from the Lambda functions to access the bucket and the bucket to trigger the function, and you are good.</p>
<p>In the following example, you can see how you can trigger a Lambda function when a new file is created in an S3 bucket and also how you can write into an S3 bucket from a function.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/mavi888/sam-editing-video/blob/main/template.yml">https://github.com/mavi888/sam-editing-video/blob/main/template.yml</a></div>
<p>One other benefit of S3 is that the content is dynamic. You can change the content in the buckets without redeploying the function. And the objects will be available in the function right away. In addition, all data stored in an S3 bucket can be shared across multiple instances of the function, multiple functions, and multiple applications. </p>
<p>S3 and Lambda integration goes one step further with <a target="_blank" href="https://aws.amazon.com/blogs/aws/introducing-amazon-s3-object-lambda-use-your-code-to-process-data-as-it-is-being-retrieved-from-s3/">S3 Object Lambda</a>. This feature from S3 allows you to change your data stored in S3 on the fly when it is fetched. This is a great feature when you have multiple applications accessing the same data and you want to reshape, resize or even anonymize the data.</p>
<p>In this video, you can see a demo on how to use S3 Object Lambda to anonymize data stored on S3 when fetching it.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/EDv9f9A-jck">https://youtu.be/EDv9f9A-jck</a></div>
<p>However, S3 is not a file system, it has a flat hierarchical organization. From outside, it might look that you can have folders inside the buckets, but those folders are just a prefix for the object name. </p>
<p>Also, S3 speed for retrieving objects is the slowest of all the storage options available for Lambda. This is because the objects are not inside the function, and they need to be transferred from the S3 service to the Lambda service. </p>
<h3 id="heading-example-of-use-cases-of-amazon-s3">Example of use cases of Amazon S3</h3>
<ul>
<li>When you are working with data lakes and you have multiple Lambda functions consuming and creating objects.</li>
<li>When you need to have shared objects between multiple applications or functions. For example, you want to process a video. The first function will resize it, then the second will add the transcribe it and the third one will add the subtitles. These functions are sharing the video object.</li>
<li>When you need to have shared objects between multiple applications. For example, after one application processes the videos, another application takes the videos and uploads them to the system so they can be played and another application grabs the video metadata and adds it to the administrative portal.</li>
<li>When you need to work with huge files. However, when working with Lambda, you need to transfer that file to the function and that can be slow and also you might need to do some processing locally. </li>
<li>When we want to trigger Lambda functions from the lifecycle of the object. When we want to do something when a file is created, modified or deleted. This is a powerful integration for event-driven architectures.</li>
</ul>
<h2 id="heading-ephemeral-storage">Ephemeral storage</h2>
<p>Ephemeral storage refers to the storage capability inside the execution environment of your Lambda function. <a target="_blank" href="https://aws.amazon.com/blogs/compute/using-larger-ephemeral-storage-for-aws-lambda/">Until few weeks it was only 512MB and now we can configure it up to 10GB</a>. </p>
<p>When you deploy your function, you set the storage space and you cannot change it without redeploying the function. In addition, this storage is not shared between different functions. </p>
<p>However, different Lambda invocations in the same warm execution share the storage space. This means that there can be something in the <code>/temp</code> directory if you don't clean it before the function ends its execution. But when the function is destroyed, the files inside the ephemeral storage are deleted. That is why when building applications that rely on ephemeral storage, you cannot rely that there will be something in there. </p>
<p>The integration between Lambda and the ephemeral storage is native, and you can work with this storage, as you would use a local hard drive. This is the fastest of all the storage options. As the ephemeral, storage is inside the instance running the function.</p>
<p>In this video, you can see how to configure the ephemeral storage with AWS SAM and a simple demo that showcases how to use it. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/39qK-kih9p0">https://youtu.be/39qK-kih9p0</a></div>
<h3 id="heading-example-of-use-cases-for-ephemeral-storage">Example of use cases for Ephemeral Storage</h3>
<ul>
<li>When you need cache between invocations. If you need to download big files from S3 or from the internet, you can use the ephemeral storage as a cache. Download all the files before your function handler executes and then whenever it starts the handler, you can check if the files are available in the temporary storage. If that is the case, then you can use the ones in there, if not download them. These files will last until de function gets destroyed.</li>
<li>When you need to process big files. For example, videos, pdfs, zips or even machine learning models. You can download them to the function and then use them from there. </li>
</ul>
<h2 id="heading-amazon-efs">Amazon EFS</h2>
<p>Amazon EFS is a fully managed, elastic, shared file system and it integrates with other AWS services. It offers high availability. Many applications, functions and invocations of the functions can access the EFS filesystem and also change the content dynamically. </p>
<p>There are no size limits for the file system of EFS, but the amount of concurrent connection is limited to 25.000 connections per file system. During initialization, each instance of a function creates a single connection to its file system that persists across invocations. This means that you can reach 25.000 concurrency across one or more functions connected to a file system.</p>
<p>The connection between Lambda and EFS is quick, but not as fast as ephemeral storage.</p>
<p>EFS and Lambda don't integrate natively. To access your file system, you need to put the Lambda function inside a VPC. But after you mount your EFS file system, you can use the normal programing language tools to access the file system.</p>
<p>In the following video, you can learn how to create an EFS and use it from a Lambda function.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/DId1cFqo5ww">https://youtu.be/DId1cFqo5ww</a></div>
<p> </p>
<h3 id="heading-example-of-use-cases-with-efs">Example of use cases with EFS</h3>
<ul>
<li>When you need dependency management. You can save all your latests dependencies in your EFS and share them between all your Lambda functions. When ever you want to update a dependency you just update it in the EFS and all the functions will access them without the need to redeploy the functions.</li>
<li>When you need to change files or append files to a file system. </li>
<li>When you want to share packages with your functions that exceed the limits of your Lambda layers or the temporary storage.</li>
</ul>
<h2 id="heading-lambda-layers">Lambda Layers</h2>
<p>I imagine you don't consider <a target="_blank" href="https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html">Lambda Layers</a> as part of a storage solution for your Lambda function, but it is.</p>
<p>Lambda Layers are a storage solution, where you can package whatever you want to share with your functions. Lambda Layers are part of your deployment package and they cannot be changed without re-deploying the function. </p>
<p>Layers can be used across multiple functions, but functions cannot change them, they are read-only. Layers have a version number, so you can track what is inside a layer at all times. One cool thing about layers is that they can be shared across accounts, so you can use layers from a third-party provider, or deployed in another AWS account within your organization. However, layers cannot be shared across regions.</p>
<p>Accessing the data inside the layers is as fast as with ephemeral storage. Because, when the function is deployed, the layers are extracted inside the running instance.</p>
<p>Layers size is limited to the deployment size of the Lambda package, that is 50MB when zipped. Also, Lambda functions can have a maximum of 5 layers. Therefore, you need to be careful with what you put on the layers and how you create them.</p>
<p>In this video, you will learn how to create layers for your own dependencies as well for third party dependencies. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/KYZ1Dop7DYg">https://youtu.be/KYZ1Dop7DYg</a></div>
<h3 id="heading-example-of-use-cases-with-lambda-layers">Example of use cases with Lambda Layers</h3>
<ul>
<li>When you need dependency management. Layers are mostly used for sharing third party dependencies and company own dependencies between the different functions. Because of the version number, they are great for auditing the code, and making sure that the latest dependencies are enforced in all the organization.</li>
<li>When you need to share compiled libraries. Sometimes you need to use some compiled library in your function.</li>
<li>When you need to use <a target="_blank" href="https://aws.amazon.com/blogs/compute/introducing-aws-lambda-extensions-in-preview/">Lambda Extensions</a>. Lambda extensions for share their functionality with layers, as they can be easily shared between different accounts and providers. </li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>After reading this post, you learn the four ways that you can store files and objects when using Lambda functions - Amazon S3, ephemeral storage, Amazon EFS and Lambda layers. Each of the solutions has different benefits and tradeoffs, that you need to evaluate when picking what you need in your function. </p>
<p>You can also mix many solutions in one application. For example, the code I share when talking about Amazon S3 uses three of the four storage solutions - Amazon S3, ephemeral storage and Layers, each of them for a different use case inside the application. </p>
]]></content:encoded></item><item><title><![CDATA[Building Event-Driven Applications in AWS]]></title><description><![CDATA[The most common architectures to build distributed applications are: choreographed, also known as event-driven and orchestrated architectures. In this article, I want to show you how to design and build event-driven applications in AWS. For that, we ...]]></description><link>https://blog.marcia.dev/event-driven-applications</link><guid isPermaLink="true">https://blog.marcia.dev/event-driven-applications</guid><category><![CDATA[AWS]]></category><category><![CDATA[events]]></category><category><![CDATA[serverless]]></category><category><![CDATA[Cloud Computing]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 15 Mar 2022 08:03:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1647331369908/FLOPJD9au.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The most common architectures to build distributed applications are: choreographed, also known as event-driven and <a target="_blank" href="https://blog.marcia.dev/orchestrated-apps">orchestrated architectures</a>. In this article, I want to show you how to design and build event-driven applications in AWS. For that, we will use Amazon EventBridge.</p>
<p>First, we are going to look at what is Amazon EventBridge. Then we will jump into the design of event-driven applications. And finally, I will show you a lot of features and best practices from Amazon EventBridge to make your development easier.</p>
<h2 id="heading-introduction-to-amazon-eventbridge">Introduction to Amazon EventBridge</h2>
<p><a target="_blank" href="https://aws.amazon.com/eventbridge/">Amazon EventBridge</a> is a serverless event bus that makes it easier to build event-driven applications at scale using events generated from your applications, integrated Software-as-a-Service (SaaS) applications, and AWS services.</p>
<p>EventBridge works with rules. You define rules in the bus and when an event comes into de bus, EventBridge will compare that event against all the rules. If a rule matches, then EventBridge sends the event to the target. In this way you can have a decoupled architecture, as the producer of the event doesn't need to know about the consumer. The producer just creates an event and sends it to the event bus.</p>
<p>In the following video, we look at Amazon EventBridge and how to build a simple application using AWS SAM.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/c493KFaWteg">https://youtu.be/c493KFaWteg</a></div>
<p> </p>
<h2 id="heading-how-to-design-event-driven-applications">How to design event-driven applications</h2>
<p>You can use EventBridge to build an event-driven application, but how you design one? Designing an event-driven application so everything gets documented and you can easily extend it takes some practice. In this video, you will learn how to design step-by-step an event-driven architecture.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/LaxH8GS8l3Q">https://youtu.be/LaxH8GS8l3Q</a></div>
<p> </p>
<h2 id="heading-more-features-of-eventbridge-to-help-you-build-your-application">More features of EventBridge to help you build your application</h2>
<p>EventBridge has lots of really interesting features and you can do quite a lot of things by leveraging them. In this section, I want to show you some of the most useful ones to help you build your applications.</p>
<h3 id="heading-custom-buses-and-central-logging-of-events">Custom buses and central logging of events</h3>
<p>Finding what is going on in an event-driven application can be hard. If you want to know if there is an issue, knowing what triggers what is quite challenging, even if you have a good documentation of your events. You might need to visit many consoles or logs to figure out where it went wrong. With a central place where all your events are located, you can start your investigation there. You can see what was the last event emitted and start your search in that service and see where it went wrong.</p>
<p>In this video, you will learn how to leverage <a target="_blank" href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus.html">custom buses</a> to get a central logging for all the events in your application, so you can debug and pinpoint problems in your application super easily!</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/DGijNsXoMgk">https://youtu.be/DGijNsXoMgk</a></div>
<p> </p>
<h3 id="heading-api-destinations">API Destinations</h3>
<p>EventBridge <a target="_blank" href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-api-destinations.html">API Destinations</a> is a feature that allows you easily to call third party APIs directly from an EventBridge rule. This allows you to remove extra code and complexity in your applications.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/tyNoiravCNw">https://youtu.be/tyNoiravCNw</a></div>
<p> </p>
<h3 id="heading-dead-letter-queues">Dead Letter Queues</h3>
<p>Sometimes EventBridge cannot successfully deliver a event to the target specified in a rule. This can happen when, for example, the target resource is unavailable, when EventBridge lacks permission to the target resource, or due to network conditions.</p>
<p>EventBridge has a retry policy and will keep on trying to send your event, but after all the retry attempts are exhausted, EventBridge drops the event. To avoid losing events after they failed to be delivered, you can configure a <a target="_blank" href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rule-dlq.html">dead-letter queue</a> (DLQ) and send the failed events to it for processing later.</p>
<p>In this video, you will learn how to configure a DLQ into an EventBridge rule and how to set a CloudWatch alarm when this happens.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/heJbgToU04c">https://youtu.be/heJbgToU04c</a></div>
<p> </p>
<h2 id="heading-but-you-like-to-see-the-demos-with-aws-cdk">But you like to see the demos with AWS CDK...</h2>
<p>In these videos, you will learn how to do what we did before with AWS EventBridge but with AWS CDK.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/m1sZj4FoBsY">https://youtu.be/m1sZj4FoBsY</a></div>
<p> </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/jiCvO0Dvnwg">https://youtu.be/jiCvO0Dvnwg</a></div>
<p> </p>
<h2 id="heading-amazon-eventbridge-pipes">Amazon EventBridge Pipes</h2>
<p>EventBridge Pipes is the ultimate integration tool; it's the missing link between different event producers and consumers. With Pipes, you can filter and enrich events before they reach their target, saving you time and money.</p>
<p>Amazon EventBridge Pipes, a new feature from EventBridge that enables you to connect different event producers and consumers. EventBridge Pipes is a powerful launch from EventBridge, as it allows you to integrate different event producers and consumers together and perform filtering and enrichment of the events that flow in the pipe.</p>
<p>Previously, people had to rely on Lambda to do this. For instance, if you were using DynamoDB streams or Kinesis and you wanted to send those events to EventBridge, you had to put a Lambda in between and then send the events using the AWS SDK with a put event to EventBridge. Now, with Pipes, you can connect Amazon DynamoDB Streams, Kinesis Data Streams, SQS, Managed Kafka, and Amazon MQ to the fifteen different EventBridge targets, including Step functions, Kinesis DS, Lambda, and EventBridge.</p>
<p>Before sending them to the target, you can filter the events that you want to send, based on a filter rule. You are not charged for the events that are filtered out. You can transform and enrich the events using Lambda, Step functions, and APIs.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/8Yv_V4havbc">https://youtu.be/8Yv_V4havbc</a></div>
<p> </p>
<h3 id="heading-check-the-demos-using-pipes">Check the demos using Pipes</h3>
<p>In this video you will see a demo of enrichment and filter of events with AWS SAM</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Txlv8H7c8wA">https://youtu.be/Txlv8H7c8wA</a></div>
<p> </p>
<p>In this video you will see a demo of how to track Application Events with DynamoDB streams and Email Notifications using EventBridge Pipes and AWS CDK</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/RL0l2Wz3deQ">https://youtu.be/RL0l2Wz3deQ</a></div>
<p> </p>
<h2 id="heading-amazon-eventbridge-scheduler">Amazon EventBridge Scheduler</h2>
<p>EventBridge Scheduler, is a new capability from Amazon EventBridge that allows you to create, run, and manage scheduled tasks at scale. With EventBridge Scheduler, you can schedule one-time or recurrently tens of millions of tasks across many AWS services without provisioning or managing underlying infrastructure.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/35V2ULLS6fI">https://youtu.be/35V2ULLS6fI</a></div>
<p> </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Amazon EventBridge is the way to go when you need to build an event-driven application. This service has so many functionalities, so before getting to code I recommend you learn the basics about the service, its integrations and how to create rules.</p>
<p>You can check a similar post about <a target="_blank" href="https://blog.marcia.dev/orchestrated-apps">Building orchestrated applications with AWS Step Functions</a></p>
]]></content:encoded></item><item><title><![CDATA[Building Orchestrated Applications in AWS]]></title><description><![CDATA[There are many architectures out there to build cloud applications. The most common ones are choreographed, also known as event-driven and orchestrated architectures. In this article, I want to show you how to design and build orchestrated applicatio...]]></description><link>https://blog.marcia.dev/orchestrated-apps</link><guid isPermaLink="true">https://blog.marcia.dev/orchestrated-apps</guid><category><![CDATA[AWS]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[System Architecture]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 22 Feb 2022 12:57:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1645192661986/G5K2eeCwJ.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There are many architectures out there to build cloud applications. The most common ones are <strong>choreographed</strong>, also known as event-driven and <strong>orchestrated</strong> architectures. In this article, I want to show you how to design and build orchestrated applications in AWS. For that, we will use AWS Step Functions.</p>
<p>If you want to learn more about this pattern, you can check this video that explains you the two patterns, the main differences, and when to use each of them.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/KlzCmDoWNUk?si=pBKQrvb6uIN9H3nR">https://youtu.be/KlzCmDoWNUk?si=pBKQrvb6uIN9H3nR</a></div>
<p> </p>
<p>First, we are going to look at what are Step Functions. Then we will jump into the design of orchestrated applications. And finally, I will show you a lot of features from Step Functions to make your development easier.</p>
<h2 id="heading-introduction-to-aws-step-functions">Introduction to AWS Step Functions</h2>
<p><a target="_blank" href="https://aws.amazon.com/step-functions/">AWS Step Functions</a> is a managed service that you can use to build state machines in the cloud. State machines allow you to do many things. For example, build distributed applications, automate process, and build data pipelines. State machines manage failures, retries, parallelization, and observability so you can focus on what matters to your organization. Also, state machines integrate directly with over 200 AWS services.</p>
<p>In the following video, we look at more detail what Step Functions are and how to get started with them. This video covers what problems Step Functions solve, why to use them, all the components of Step Functions, the different states, and a demo in the AWS console.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/YKUcZhsj3io">https://youtu.be/YKUcZhsj3io</a></div>
<p> </p>
<h2 id="heading-how-to-design-an-orchestrated-application">How to design an orchestrated application?</h2>
<p>Step Functions are used to build orchestrated applications, but how do you do that? Designing orchestrated applications to be scalable and maintainable takes some practice. For you to learn how to do that, we created a video that explains how to design this applications.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/wS7F__gEqx4">https://youtu.be/wS7F__gEqx4</a></div>
<p> </p>
<h2 id="heading-more-features-of-step-functions-to-help-you-build-your-application">More features of Step Functions to help you build your application</h2>
<p>Step Functions have lots of really interesting features. In this section, I want to show you some of the best ones to improve your productivity.</p>
<h3 id="heading-aws-step-functions-aws-sam">AWS Step Functions 💜 AWS SAM</h3>
<p>The first feature I want to show you is the integration with <a target="_blank" href="https://youtu.be/k_TQubcn0hM">AWS SAM</a>. You can easily build and deploy Step Functions as infrastructure as code (IaC) using AWS SAM. You can build your state machines with <a target="_blank" href="https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html">Amazon States Language (ASL)</a> directly in your application and then build all the infrastructure needed: IAM permissions, logs, service integrations and more from your SAM template.</p>
<p>In the following video, I will show you how to do all this.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/YvxB9WRc2o8">https://youtu.be/YvxB9WRc2o8</a></div>
<p> </p>
<p>And if you want the code for this video, you can find it with this GitHub repo</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/mavi888/sam-step-functions-demo">https://github.com/mavi888/sam-step-functions-demo</a></div>
<p> </p>
<h3 id="heading-aws-step-functions-workflow-studio">AWS Step Functions Workflow Studio</h3>
<p>If you are starting with Step Functions and you don't understand how to use ASL or IaC, then you will be interested in this low-code visual editor. The workflow studio allows you to create your state machines from the AWS console. It has a nice visual interface. And the cool thing about the workflow studio, that it outputs ASL. So if you ever want to build the state machines like IaC, then you can do it with no problem.</p>
<p>In this video, I will show you how you can use it and how to build your first state machine with it.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/YHqRwPkhwLs">https://youtu.be/YHqRwPkhwLs</a></div>
<p> </p>
<h3 id="heading-aws-step-functions-integrates-with-over-200-aws-services">AWS Step Functions integrates with over 200 AWS services</h3>
<p>When using Step Functions, you can call any AWS services from the state machine without the need to use a <a target="_blank" href="https://youtu.be/W9Lw65ly8rE">AWS Lambda</a> function. You can code workflows to solve your business problems that connect to the services using an API integration. By using ASL, you can do manipulation of the inputs and outputs provided by the services and build flows that adapt to your needs. When there is less code to manage, you reduce the costs, make the state machine faster, and more maintainable.</p>
<p>In the following video, I show you how to can build a full workflow with IaC using these integrations. I also wrote <a target="_blank" href="https://aws.amazon.com/blogs/aws/now-aws-step-functions-supports-200-aws-services-to-enable-easier-workflow-automation/">an article</a> on how to do it if you prefer reading.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/jtmQJqaInT0">https://youtu.be/jtmQJqaInT0</a></div>
<p> </p>
<h3 id="heading-unit-testing-your-state-machines">Unit testing your state machines</h3>
<p>When moving the business logic from your Lambda functions to the state machines, now you might wonder how you can make sure that those state machines are doing what they should do? Running integration tests is crucial for these applications but integration tests are slow and more expensive. That is why unit tests are a great to validate a lot of the processing from your local machine when developing this state machines, or from your build process before deploying the new versions of the state machines.</p>
<p>In the following video, I show you how to test your state machines using a feature from Step Functions called Mocked Service Integrations.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/P3hEqxKxZe8">https://youtu.be/P3hEqxKxZe8</a></div>
<p> </p>
<p>For both of the service integration demos, there is a code demo that you can deploy in your AWS account and see how everything works together.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/mavi888/sam-stepfunctions-sdk-integration">https://github.com/mavi888/sam-stepfunctions-sdk-integration</a></div>
<p> </p>
<h3 id="heading-sync-workflows-with-aws-step-functions-and-api-gateway">Sync workflows with AWS Step functions and API Gateway</h3>
<p>Step Functions by default are asynchronous processes and you can easily invoke them from <a target="_blank" href="https://aws.amazon.com/api-gateway">API Gateway</a>. However, sometimes we need that the state machine executes in a synchronously, for example, when there is an HTTP request and a response is expected.</p>
<p>Sync workflows for AWS Step Functions is a feature that allows you to return the result from a state machine in a synchronous way.</p>
<p>In the following video, I show you how to implement a sync workflow with API Gateway all with AWS SAM.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/R6xqbFtU2Z0">https://youtu.be/R6xqbFtU2Z0</a></div>
<p> </p>
<p>You can find the code for the demo in this GitHub repository</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/mavi888/sync-step-function">https://github.com/mavi888/sync-step-function</a></div>
<p> </p>
<h2 id="heading-intrinsic-functions">Intrinsic functions</h2>
<p>The Amazon States Language provides several intrinsic functions, also known as intrinsic, that help you perform basic data processing operations without using a task state. Intrinsic are constructs that look similar to functions in programming languages. They can help payload builders process the data going to and from the Resource field of a task state.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/EqNjif9tc1Q">https://youtu.be/EqNjif9tc1Q</a></div>
<p> </p>
<h2 id="heading-step-functions-distributed-map">Step Functions distributed map</h2>
<p>The new distributed map state allows you to write Step Functions to coordinate large-scale parallel workloads within your serverless applications. You can now iterate over millions of objects such as logs, images, or .csv files stored in Amazon S3. The new distributed map state can launch up to ten thousand parallel workflows to process data.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/_6ym3IRrRxo">https://youtu.be/_6ym3IRrRxo</a></div>
<p> </p>
<h2 id="heading-state-machines-alias-and-versions">State machines alias and versions</h2>
<p>Step Functions allow you to run specific revisions of the state machine instead of always using the latest. This allows for more reliable deployments that help control risk, and provides visibility into exactly which version is run.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/BHZNaWCaNnU?si=Io5oFZbo3v_4r6EU">https://youtu.be/BHZNaWCaNnU?si=Io5oFZbo3v_4r6EU</a></div>
<p> </p>
<h2 id="heading-more-advanced-patterns-and-tools">More advanced patterns and tools</h2>
<p>In this video, you will learn a lot of advanced patterns and best practices to use Step Functions.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/o6-7BAUWaqg">https://youtu.be/o6-7BAUWaqg</a></div>
<p> </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>AWS Step Functions are the way to go when you need to create an orchestrated application. There are many functionalities in this service, so before getting to code I recommend you to learn the basics about the service, its integrations and how to use the ASL language.</p>
<p>In a follow up post, I will talk about event-driven applications. So stay tuned for that one.</p>
]]></content:encoded></item><item><title><![CDATA[Operational Excellence - Well Architected Framework for Serverless Applications (Pillar 1)]]></title><description><![CDATA[In this blog post I will share with you all the videos related to the first pilar of the Well Architected Framework for Serverless applications. 
If you don't know what the Well Architected Framework (WAF) is? 
WAF is a framework designed by AWS. It ...]]></description><link>https://blog.marcia.dev/operational-excellence</link><guid isPermaLink="true">https://blog.marcia.dev/operational-excellence</guid><category><![CDATA[AWS]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[developers]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Tue, 08 Feb 2022 14:17:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1644328547773/yogRS59JJ.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this blog post I will share with you all the videos related to the first pilar of the Well Architected Framework for Serverless applications. </p>
<p><strong>If you don't know what the Well Architected Framework (WAF) is? </strong>
WAF is a framework designed by AWS. It collects all the best practices for developing and running cost efficient applications in the cloud.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/jAaFTC0wK84">https://youtu.be/jAaFTC0wK84</a></div>
<h2 id="heading-what-is-the-operational-excellence-pillar-about">What is the Operational Excellence pillar about?</h2>
<p>This pillar focus on developing and running workloads effectively, gain insights on your operations, and improve your operations over time. </p>
<p>This pillar talks a lot about DevOps practices, infrastructure as code, automatization, and observability. </p>
<p>Some of the design principles for this pillar are:</p>
<ul>
<li>perform operations as code</li>
<li>make frequent, small and reversible changes</li>
<li>review and refine operations procedures frequently</li>
<li>anticipate and learn from failure</li>
</ul>
<p><strong>Best practices</strong> </p>
<p>There are four best practices areas for the Operation Excellence in the cloud. And there are questions to address each of the areas. I like to call these areas, steps as you need to address them in a particular order.</p>
<ul>
<li><strong>Organize</strong>: In this step you share your business goals and priorities with your team. By the end everybody knows their responsibilities.</li>
<li><strong>Prepare</strong>: In this step you design your workload, so it provides the necessary information so you can understand its state. You plan how changes are managed and how they flow from end to end.</li>
<li><strong>Operate</strong>: This step is all about the operations of the operational excellence. </li>
<li><strong>Evolve</strong>: Keep on learning, sharing and continuously improving.</li>
</ul>
<p>I organized this blog post based in those 4 areas. </p>
<h3 id="heading-organization">Organization</h3>
<p>This area is all about understanding the responsibilities of the team and team members, and about having clear priorities. </p>
<p>This area focuses on answering these questions:</p>
<ul>
<li>OPS1: How do you determine what your priorities are?</li>
<li>OPS2: How do you structure your organization to support your business outcomes? </li>
<li>OPS3: How does your organizational culture support your business outcomes?</li>
</ul>
<p>Make sure that you identify owners for each application, components or process. Having owners is critical to improve the performance of the component.</p>
<p>Have a clear understanding of the business value for each component and why we own it. Create mechanisms for handling changes in the components, and assign owners to them.</p>
<p>Then evaluate risks and keep them in track for each of your components. </p>
<p>Make sure that people feel empowered to experiment and create mechanisms where experimenting is safe. For example, make it difficult for your developers to take down production, so they can deploy on their own terms and see the results right away.</p>
<p>Keep your teams trained and increase their understanding of how their choices impact the workload.</p>
<h3 id="heading-prepare">Prepare</h3>
<p>In this area, you will design your workload so it can provide all the information you need to understand it state.</p>
<p>This area focuses on answering these questions: </p>
<ul>
<li>OPS4: How do you design your workload so that you can understand its state?</li>
<li>OPS5: How do you reduce defects, ease remediations and improve flow to production?</li>
<li>OPS6: How do you mitigate deployment risks?</li>
<li>OPS7: How do you know that you are ready to support a workload?</li>
</ul>
<p>This area is about design and planning. </p>
<p>Lot of issues that can be solved by having CI/CD (continuos integration / continuos delivery) in place:</p>
<ul>
<li>Adopt approaches that enable fast feedback from change to production and fast recovery.</li>
<li>Emphasis small, reversible and frequent changes.</li>
<li>Use a consisten process to go live or preform changes in prod</li>
</ul>
<p>Other things that are solved with good DevOps processes, like:</p>
<ul>
<li>have run books to document routine activities</li>
<li>Have playbooks to guide issue resolutions</li>
<li>use infrastructure as code and different stages</li>
</ul>
<h3 id="heading-operate">Operate</h3>
<p>In this area is all about the operations of the Operational Excellence. </p>
<p>This is the area were it gets practical to your AWS environment. I will show you many good practices in action.</p>
<p>Questions that are answer here:</p>
<ul>
<li>OPS8: How do you understand the health of your workload?</li>
<li>OPS9: How do you understand the health of your operations?</li>
<li>OPS10: How do you manage workload and operations events?</li>
</ul>
<p>In the Serverless Lens 2 more questions are added. </p>
<ul>
<li>How do you understand the health of your serverless application?</li>
<li>How do you approach application lifecycle management?</li>
</ul>
<p>In my opinion, answering these 2 last questions will help us to answer part of OPS8 to 10. </p>
<p><strong>How do you understand the health of your serverless application?</strong></p>
<p>This can be done with Metrics, Logs and Tracing: the Observability triad.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643307990979/V21r6MNv8.png" alt="Screen Shot 2022-01-27 at 15.25.54.png" /></p>
<p>You need to implement all these in our serverless applications to be able to understand the health of our application.</p>
<ul>
<li><strong>Logs</strong> are time stamped record of events with information about that discrete moment in time.</li>
<li><strong>Metrics</strong> gather a numerical data about things we want to track in our application. </li>
<li><strong>Traces</strong> are a single transaction end to end, how this transaction journey your whole application. </li>
</ul>
<p>So how you implement all these things when using AWS?</p>
<p>For logs we use CloudWatch logs, CloudWatch insights and structure logging libraries. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/2vpy8bi-fPk">https://youtu.be/2vpy8bi-fPk</a></div>
<p>For Metrics you can use CloudWatch metrics, the CloudWatch dashboard and CloudWatch alarms</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/PII5_luwcAo">https://youtu.be/PII5_luwcAo</a></div>
<p>For traces you can use AWS X-Ray and CloudWatch service lens. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/OOScvywKj9s">https://youtu.be/OOScvywKj9s</a></div>
<p><strong> How do you approach application lifecycle management?</strong> </p>
<p>Applications tend to have a similar lifecycle. First you code and build prototypes, new features, experiments. Then you build and deploy into a some kind of safe environment were you can run tests, and then finally you deploy to production. There can be more o less stages and environments in place, and this process can be or not automated. </p>
<p>This question covers many topics related to each other:</p>
<ol>
<li>Infrastructure as code</li>
<li>CICD pipelines</li>
<li>Deployment environments</li>
<li>Application configuration management</li>
<li>Testing </li>
</ol>
<p>For most of the topics in this list, are covered in the the session I recorded for AWS reInvent 2020.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/JKmzqozp4ys">https://youtu.be/JKmzqozp4ys</a></div>
<p>For IaC, I have many videos talking about AWS CloudFormation, AWS SAM, AWS CDK, Amplify and others. You can check this <a target="_blank" href="https://www.youtube.com/playlist?list=PLGyRwGktEFqdGlWCuNA5mru3wrJQTknge">playlist</a></p>
<p>For CI/CD pipelines and creating different environments, I have many videos on Code Pipelines built with CloudFormation, CDK pipelines, AWS SAM pipelines with Github, Gitlab pipelines and AWS Amplify CICD. And more are coming in the future for sure. Here you can find the <a target="_blank" href="https://www.youtube.com/playlist?list=PLGyRwGktEFqeBkAPkkFobdNfVQZHj1T1j">playlist</a></p>
<p>In those videos you can learn how to create multiple environments and how to automate your deployment from your computer to production. </p>
<p>Also I created videos related to deployment strategies for your applications, such as Canary and Linear deployments and how to do it with CodeDeploy.  </p>
<p>For Application configuration management, you need to learn about Parameter Store, KMS to encrypt the parameters, the Secret Store, and also how to juggle the application in an automated way in your application. You can achieve all these, using a service like AppConfig or by having environmental variables in your applications. Check the <a target="_blank" href="https://www.youtube.com/playlist?list=PLGyRwGktEFqdWH4uaC4KhUcQWlVjRMmax">playlist</a> for those videos</p>
<p><strong>And finally testing.</strong> There are so many places where we can test in a serverless application. It is important to learn to perform all the different kind of tests in the right level of our application.</p>
<p>For example, when we talk about source we do code reviews and pull requests. For that you can use a service such as Code Guru, if you have Lambda functions running in Java o libraries that perform similar checks in your remote repos. </p>
<p>For the build phase we run all the linting and unit testing of our application. Here is not only the code but the infrastructure that can be tested. </p>
<p>Then you need to focus in integration tests. Integration tests are tests that run in environments in the cloud with real cloud services. You can use Lambda functions for example to run integration tests.</p>
<p>Also you can do load testing of your serverless applications with services like <a target="_blank" href="https://www.artillery.io/">artillery</a>. That allow you to create simulations load in your application and see how the application responds to the high load.</p>
<p>To deploy your application safetely into production, there are many deployment strategies using AWS CodeDeploy. CodeDeploy runs integration tests before and after deploying a new version of your application to a specific environment. </p>
<p>For all the things mentioned here, there is a <a target="_blank" href="https://www.youtube.com/playlist?list=PLGyRwGktEFqddmWtpO5EMcemd3sGCLHuo">playlist</a> on how to implement everything in AWS.</p>
<h3 id="heading-evolve">Evolve</h3>
<p>This phase is about learning and continue improving everything you have built in the past </p>
<p>It answers the question</p>
<ul>
<li>OPS11 : How do you evolve operations?</li>
</ul>
<p>In this step you need to make time to make your operations better. There are always things that can improve. </p>
<p>Also this phase talks about creating feedback mechanisms to learn about services going down or with poor performance. Also mechanisms to share these learnings across the whole organization. </p>
<p>It also talks about how you save this lessons and monitor the data and metrics you use to create them. </p>
<p>I will add here that a great practice to evolve Operational Excellence is running regular <a target="_blank" href="https://aws.amazon.com/gameday/">Game Days</a> in your organization. Game days allows you to test all the things listed in this post and see all your mechanisms in practice.  Game day tests your process and systems in action and finds when process can goes wrong. </p>
<p>Also in this step you can think about exploring Chaos Engineering, and to create automatic tests for your organization.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=f-i7wL1G4iE">https://www.youtube.com/watch?v=f-i7wL1G4iE</a></div>
<p>I also have this post as a video if you prefer to watch instead than to read</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/jyz0WBNVhkA">https://youtu.be/jyz0WBNVhkA</a></div>
]]></content:encoded></item><item><title><![CDATA[Cómo convertirse en un desarrollador de la nube?]]></title><description><![CDATA[☁️ Querés ser un desarrollador en la nube y no sabes por dónde empezar?
En este articulo te dejo más de 30 videos en Español que te pueden orientar a empezar. 
🙏🏽 Si conoces a alguien que quiera aprender sobre esto, compartí este articulo
PARTE 1 -...]]></description><link>https://blog.marcia.dev/desarrollador-nube</link><guid isPermaLink="true">https://blog.marcia.dev/desarrollador-nube</guid><category><![CDATA[AWS]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[Marcia Villalba]]></dc:creator><pubDate>Mon, 24 Jan 2022 19:23:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1643052348026/-3Q1n0t9i.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>☁️ Querés ser un desarrollador en la nube y no sabes por dónde empezar?
En este articulo te dejo más de 30 videos en Español que te pueden orientar a empezar. </p>
<p>🙏🏽 Si conoces a alguien que quiera aprender sobre esto, compartí este articulo</p>
<h2 id="heading-parte-1-que-es-la-nube">PARTE 1 - Qué es la nube?</h2>
<p>Empecemos por lo primero, que es la nube ☁️? </p>
<p>Es un termino que usamos mucho pero que pasamos poco tiempo definiendo. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/EYWi4aARsDI">https://youtu.be/EYWi4aARsDI</a></div>
<p>Hay una serie de pasos que te van a ayudar a convertirte en un desarrollador en la nube. </p>
<p>🚀 Este es un buen video para empezar tu viaje hacia la nube. ☁️</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/MVvT9Aqeijo">https://youtu.be/MVvT9Aqeijo</a></div>
<p>Y ahora te estarás preguntando: 
"Bueno ta, precioso esto de la nube y AWS. Pero como creo una cuenta de forma segura y con las mejores prácticas en mente, sí recién estoy empezando."</p>
<p>No te preocupes, nosotras te damos todos los pasos! </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/k69OGQoHIzc">https://youtu.be/k69OGQoHIzc</a></div>
<p>Ahora sabes cómo crear la cuenta de AWS, pero todavía necesitas ayuda para crear la cuenta.</p>
<p>En este video Javier Ramirez te muestra paso a paso como hacerlo. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/9kJmy-wprJw">https://youtu.be/9kJmy-wprJw</a></div>
<p>Buenísimo, ahora creaste tu cuenta de AWS y lo primero que te pide es que crees un usuario de IAM! </p>
<p>Y te estarás preguntando: "Qué es eso? Cómo gestiono la seguridad de mi cuenta?"</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/t51vW-BDwF0">https://youtu.be/t51vW-BDwF0</a></div>
<p>Y también seguro que me vas a decir: "Pero me acabas de pedir que ponga mi tarjeta de crédito para crear una cuenta. Cómo me aseguro que no estoy gastando más de lo que espero!"</p>
<p>Por eso acá te dejo una lista de 7 consejos que te ayudaran a controlar tus gastos en AWS</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/yn1VsP65kOY">https://youtu.be/yn1VsP65kOY</a></div>
<p>Y si queres ir un nivel más y aprender a calcular los costes al detalle de tu infra en AWS. </p>
<p>En este video podes aprender cómo usar la calculadora de costos de AWS paso a paso para estimar los costes de tu infraestructura.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/4OLpOZ77crc">https://youtu.be/4OLpOZ77crc</a></div>
<p>Bien ahora sabes cómo crear tu cuenta y cómo asegurarte que no pases con la factura. Pero seguis sin saber por dónde empezar a estudiar AWS. </p>
<p>Las certificaciones son una gran forma de organizar tu estudio para poder aprender los temas en profundidad. </p>
<p>Querés saber más sobre estas esto? Mira mi conversación con Gabriel Ramirez sobre este tema.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/X4kHrn4eG1w">https://youtu.be/X4kHrn4eG1w</a></div>
<h2 id="heading-parte-2-como-empezar-a-desarrollar-aplicaciones-en-la-nube">PARTE 2 - Cómo empezar a desarrollar aplicaciones en la nube?</h2>
<p>Entonces sos desarrolladora y querés una introducción rápida a cómo empezar con AWS. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/3J04oNipq84">https://youtu.be/3J04oNipq84</a></div>
<p>Querés más detalles de las opciones de computación en la nube? </p>
<p>Te dejo un episodio del podcast donde hablamos en más detalle de los servicios de computación en la nube para que puedas entender cuál usar y cuando. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/xzyM0Fs-YNU">https://youtu.be/xzyM0Fs-YNU</a></div>
<h2 id="heading-parte-3-servicios-basicos-de-aws">PARTE 3 - Servicios básicos de AWS</h2>
<p>Hay muchos servicios en AWS, pero algunos más que otros nos van a ayudar a empezar a desarrollar nuestras aplicaciones. </p>
<p>El almacenamiento es un concepto importantísimo cuando desarrollamos aplicaciones. </p>
<p>Dónde y cómo guardamos nuestros archivos para poder acceder a ellos de forma fácil y rápida.</p>
<p>En este video hablamos de todas las opciones de almacenamiento en AWS para que sepas cual elegir</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/urfLdkPLuPc">https://youtu.be/urfLdkPLuPc</a></div>
<p>Amazon S3 es uno de los servicios más usados, ya que es la base de muchísimos de nuestros desarrollos.</p>
<p>Querés saber cómo empezar con S3?
Querés ver cómo solo usando S3 podés crear una página web estática en pocos minutos? </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/y3ld6W9xvs4">https://youtu.be/y3ld6W9xvs4</a></div>
<p>Y las bases de datos? Seguro que escuchaste que en AWS hay más de 16 bases de datos diferentes.</p>
<p>En este video te ayudo a elegir y te explico los servicios más populares. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/G1z3AZJb9_0">https://youtu.be/G1z3AZJb9_0</a></div>
<h2 id="heading-parte-4-buenas-practicas-y-arquitecturas-recomendadas">PARTE 4 - Buenas prácticas y arquitecturas recomendadas</h2>
<p>Las buenas prácticas son fundamentales para el desarrollo de software que sea sostenible en el tiempo. También tener arquitecturas correctas nos va a ayudar a que nuestra aplicación pueda escalar.</p>
<p>Y la primer pregunta que me vas a hacer seguro es: "Qué buenas prácticas tengo que tener para poder hacerlo de forma escalable en la nube?"</p>
<p>Aca Memo Doring te cuenta lo que son las aplicaciones modernas y muchísimas buenas prácticas.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/cev-JJSMKdM">https://youtu.be/cev-JJSMKdM</a></div>
<p>Los sistemas de microservicios en la nube son complejos y en general hablan entre ellos usando algún sistema de envio de mensajes. </p>
<p>En este video Vanessa Hernandez nos cuenta diferentes patrones de integración y nos muestra muchos ejemplos. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/g44G1fuuf5M">https://youtu.be/g44G1fuuf5M</a></div>
<p>Cuando hablamos de sistemas distribuidos muchas veces nos preguntamos cómo diseñarlos?, qué arquitecturas usar?arquitecturas orientadas a eventos or orquestradas? </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/3UwgnYByOk8">https://youtu.be/3UwgnYByOk8</a></div>
<p>Hablando de arquitecturas orquestradas, seguramente querés saber más sobre AWS Step Functions. Este es el servicio totalmente gestionado por AWS para orquestrar aplicaciones. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Zvdf_P5pJis">https://youtu.be/Zvdf_P5pJis</a></div>
<p>Y si querés usar la arquitectura orientada a eventos. AWS EventBridge es el servicio gestionado de AWS que nos ayuda. </p>
<p>En este video te muestro paso a paso como hacerlo y entramos en detalles de las arquitecturas orientadas a eventos.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/TkU1RS5Fw1o">https://youtu.be/TkU1RS5Fw1o</a></div>
<p>Otra buena práctica es Infraestructura como código.
Pero qué es? Para qué sirve?</p>
<p>En este video habló con Damian Olguin sobre esto y nos cuenta su experiencia.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/QDftQknk5K4">https://youtu.be/QDftQknk5K4</a></div>
<p>AWS Cloudformation es la forma de definir infraestructura como código de forma nativa en AWS.</p>
<p> Quéres saber más sobre CloudFormation y cómo utilizarlo? </p>
<p>En este video Memo Doring te cuenta cómo</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/cJQPhUHQTX4">https://youtu.be/cJQPhUHQTX4</a></div>
<p>AWS CDK es una forma de definir infraestructura usando lenguajes de programación populares, como Java, Javascript, .NET. </p>
<p>Esta genial para desarrolladores y en este video te muestro paso a paso como empezar </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/zOwYSX6ExSY">https://youtu.be/zOwYSX6ExSY</a></div>
<h2 id="heading-parte-5-serverless">PARTE 5 - Serverless</h2>
<p>Durante varios de estos videos, seguro que escuchaste la palabra SERVERLESS mil veces.
Pero qué es serverless? Qué significa que algo es serverless?</p>
<p>En este video en menos de 10 minutos te lo explico!</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Fzn2fGrs200">https://youtu.be/Fzn2fGrs200</a></div>
<p>AWS Lambda es un servicio de computo sin servidor. A veces parece hasta mágico. 
Pero los desarrolladores lo aman! </p>
<p>Querés saber más sobre Lambda? Y como arrancar con serverless en AWS</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/1wNb_RMvI9E">https://youtu.be/1wNb_RMvI9E</a></div>
<p>Te gustaría hacer aplicaciones serverless usando infraestructura cómo código de forma fácil y rápida</p>
<p>En este tutorial entramos paso a paso para aprender a usar AWS SAM.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Z_GAa9WToMM">https://youtu.be/Z_GAa9WToMM</a></div>
<h2 id="heading-parte-6-contenedores">PARTE 6 - Contenedores</h2>
<p>Si Serverless no es lo tuyo y necesitas tener contenedores, sabias que AWS tiene 18 formas diferentes en las cuales podes desplegar contenedores?</p>
<p>En este video te lo contamos todo con Isabel Huerga</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Pcp3tZWSihM">https://youtu.be/Pcp3tZWSihM</a></div>
<p>De las 18 formas de desplegar contenedores en #AWS esta en mi opinion es la forma más fácil de hacerlo es usando AWS Lightsail! </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/V-C_ZJi6-o0">https://youtu.be/V-C_ZJi6-o0</a></div>
<p>Otra forma muy fácil de desplegar contenedores en AWS usando contenedores es con AppRunner. </p>
<p>AppRunner es un servicio nuevo que nos permite de forma fácil desplegar aplicaciones conteneirizadas.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/foYzjX10K5c">https://youtu.be/foYzjX10K5c</a></div>
<p>Si vos ya sos un experto en #Kubernetes y te gustaría empezar a usarlos en #AWS, también hay una solución para ti.</p>
<p>En este video Mario Mercado nos introduce a Kubernetes, y a los servicios de AWS que nos ayudan a desplegar apps que usan Kubernetes</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/T6QPU-Ls_-g">https://youtu.be/T6QPU-Ls_-g</a></div>
<h2 id="heading-parte-7-otro-tipo-de-aplicaciones">PARTE 7 - Otro tipo de aplicaciones</h2>
<h3 id="heading-wordpress">Wordpress</h3>
<p>Y qué pasa si uso Wordpress, puedo usar #AWS?</p>
<p>En este video te muestro como hacer todo con AWS de forma super fácil y económica para hostear tu blog. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Md_jcvGJkf4">https://youtu.be/Md_jcvGJkf4</a></div>
<h3 id="heading-aplicaciones-web-o-mobile">Aplicaciones web o mobile</h3>
<p>Y si soy desarrollador de cliente o full-stack? Cómo empiezo con la nube?</p>
<p>Usando AWS Amplify! En este video les cuento sobre qué es y cómo empezar con el desarrollo full-stack en AWS.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/ktvHgQSrE0k">https://youtu.be/ktvHgQSrE0k</a></div>
<p>AWS Amplify esta buenísimo, y querés empezar a usarlo. Y te encantaría que tu equipo lo pueda usar sin tener una cuenta de AWS! </p>
<p>Acá te dejo un tutorial de cómo hacerlo. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/xIy0KVMOHHw">https://youtu.be/xIy0KVMOHHw</a></div>
<h3 id="heading-aplicaciones-de-inteligencia-artificial">Aplicaciones de Inteligencia Artificial</h3>
<p>AWS ofrece muchísimas APIs para construir aplicaciones super interesantes sin conocimientos de AI/ML.</p>
<p>En este video Nahia Orduña nos introduce a todos los servicios.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/ie5ucXlZIqw">https://youtu.be/ie5ucXlZIqw</a></div>
<p>Otra forma de desarrollar aplicaciones en Inteligencia Artificial en AWS es creando Alexa Skills. </p>
<p>Si querés saber cómo podes usar todo los conocimientos que aprendiste en este blog para hacer tu app de Alexa, mira este video donde Joaquin Engelmo (Kini) y Javier Ramirez nos cuentan cómo hacerlo.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/8E0Aq7UpYrQ">https://youtu.be/8E0Aq7UpYrQ</a></div>
<h2 id="heading-parte-8-migraciones">PARTE 8 - Migraciones</h2>
<p>Y por último me podes preguntar: "Y qué pasa si quiero migrar una aplicación que ya existe a la nube y a nuevas arquitecturas serverless y de contenedores?"</p>
<p>En este video Hernan Garcia te muestra como hacerlo</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/yp4uXq0tJz8">https://youtu.be/yp4uXq0tJz8</a></div>
<p>En este video te cuento unas historias de cómo se pueden migrar aplicaciones tradicionales a serverless y qué pasos seguir.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/_uz5azm9Tbs">https://youtu.be/_uz5azm9Tbs</a></div>
<h2 id="heading-fin">FIN!</h2>
<p>Llegamos al final del blog! Si te gusto compartilo! </p>
<p>Dejame un comentario que te parece que falta? Así durante el 2022 hacemos contenido de esos temas.</p>
<p>Todos los videos viven en una <a target="_blank" href="https://www.youtube.com/playlist?list=PLQh2jfOGN_IiqfxRIUrf_sPiF6Iv441i-">playlist</a> así los podes ver de forma ordenada. </p>
]]></content:encoded></item></channel></rss>