<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Joel Lutman</title>
    <description>The latest articles on DEV Community by Joel Lutman (@jhole89).</description>
    <link>https://dev.to/jhole89</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F380263%2F890031de-4431-4108-8eca-0218027ac141.jpeg</url>
      <title>DEV Community: Joel Lutman</title>
      <link>https://dev.to/jhole89</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jhole89"/>
    <language>en</language>
    <item>
      <title>Why you should embrace DevOps</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Mon, 22 Mar 2021 21:45:12 +0000</pubDate>
      <link>https://dev.to/aws-builders/why-you-should-embrace-devops-4oal</link>
      <guid>https://dev.to/aws-builders/why-you-should-embrace-devops-4oal</guid>
      <description>&lt;p&gt;&lt;em&gt;A cautionary tale of DevOps negligence &amp;amp; why it should be at the heart of any project&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After recently finishing up a HUGE terraform refactor, I was left reflecting on why it’s essential to establish DevOps principles at the start of any large project; and the horror stories that can happen when it’s not.&lt;/p&gt;

&lt;p&gt;Over the last decade, DevOps has gone from strength to strength and proven itself as a core component to many success stories. However despite this, in my experience as a software and cloud consultant, it’s still frequently overlooked and ignored in favour of application development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xEA4sVSS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1gtjwp64ck9ur61fx5s9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xEA4sVSS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1gtjwp64ck9ur61fx5s9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m not talking about Waterfall architecture here, but rather some of the fundamental technical DevOps principles of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Integration&lt;/strong&gt;: establishing tools and process for continuously merging code back to a single code repository and single source of truth (e.g. git, subversion, mercurial, peer review)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Testing&lt;/strong&gt;: establishing tools and process for continuously testing code during all stages of the software development lifecycle (e.g. unit tests, integrations tests, system tests, regression tests, chaos engineering)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release Management&lt;/strong&gt;: establishing tools and process for packaging and deploying releases&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;: infrastructure configuration, management, and infrastructure as code tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: performance monitoring and logs, end user experience&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Delivery&lt;/strong&gt;: automating the processes in software delivery&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many times I’ve seen these delayed or ignored until development starts reaching a critical mass, and developers start facing the deficits of not having these. They start getting messy merge conflicts. They need to work out how their application lives. What database do they need to connect to (and how do they manage this)? How do they deploy a new version without impacting the customer experience? Then there’s the dreaded cliff edge of deploying to production when they’ve only ever played around on smaller, more lenient dev/test environments.&lt;/p&gt;

&lt;p&gt;I’ve seen this result in many &lt;em&gt;“DevOps initiatives”&lt;/em&gt;, either in the middle of the application development or towards the end to try and ease some of the burden.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“What’s wrong with this?”&lt;/em&gt; I hear you ask.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While it is possible to establish these processes during the development lifecycle, or even afterwards, the time and effort to establish these fundamentals is exponentially increased. It can cause a great amount of refactoring that eats into time that could be better spent elsewhere.&lt;/p&gt;

&lt;p&gt;Let’s look at a real life example to see how these principles can be easily overlooked, and the consequences of offsetting DevOps to a later stage. The example is loosely inspired by a project that I was bought on to rescue at a late stage, though largely exaggerated for comedic effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Case study — Project Whale
&lt;/h3&gt;

&lt;p&gt;Say we have a standard 3 tier application called project Whale, with the 3 tiers representing;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the presentation/UI/frontend,&lt;/li&gt;
&lt;li&gt;the application/business-logic/backend,&lt;/li&gt;
&lt;li&gt;and the data/storage/database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The UI talks to the backend which in turn securely accesses the database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FRGlWB_g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r9ujal78d6q728vd49vo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FRGlWB_g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r9ujal78d6q728vd49vo.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During development of the frontend, we need to communicate with the backend, and likewise for the backend to database. The team decides to stand up a shared piece of infrastructure (a single EC2 instance) to run all three layers, which QA can also access to view features. Now they are able to continue their relevant development, whilst communicating to the necessary services.&lt;/p&gt;

&lt;p&gt;Fast forward a few months and they’re approaching delivery time — great!!!&lt;/p&gt;

&lt;p&gt;Everyone’s excited and the CEO’s about ready to pop a bottle of champagne. The developers need to run project Whale somewhere that’s accessible to the public internet. That EC2 they’ve been using for development seems like a great candidate — it’s already mostly set up with all the packages and utilities already configured by hand as and when the team realised they needed them.&lt;br&gt;
They push the latest versions of the frontend and backend, clean out the database, and project Whale goes live.&lt;/p&gt;

&lt;p&gt;As the champagne pours they start getting emails from customers about bugs in the frontend system. Small stuff, nothing that stops business, but things that could have easily been discovered if they’d invested in continuous testing, and it’s enough that requires a new version of Whale to be deployed. Except now they’ve got customers on the live system, and deploying a new version means taking the old one offline while they switch over.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RgIZIdq6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43vfmc3t6dr0e7l228l0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RgIZIdq6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43vfmc3t6dr0e7l228l0.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They’re left with a couple options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy anyway and annoy customers&lt;/li&gt;
&lt;li&gt;Schedule a deployment overnight when traffic is low and annoy the developers who have to pull an all-nighter&lt;/li&gt;
&lt;li&gt;Start up a fresh EC2 instance and turn off the old one&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The latter is clearly the best option for reducing downtime and keeping people happy, however upon doing this they realise all those little packages and utilities need to be set up again and reconfigured, and the last time anyone did this was 4 months ago. They documented it though, so even though it takes hours they’re able to get the new EC2 up with the new version of Whale deployed — this is where release management would have really been beneficial right?&lt;/p&gt;

&lt;p&gt;Except now customers are complaining more than before, because they can’t login and are being told that they don’t have an account — the database!&lt;/p&gt;

&lt;p&gt;Yup, they forgot about the data. While they were able to get the database running on the new EC2, they forgot about the customer account data that had been written to the old database on the old instance — this is a fresh database without any customer information.&lt;/p&gt;

&lt;h3&gt;
  
  
  BATTLESTATIONS!!!!
&lt;/h3&gt;

&lt;p&gt;As fires seem to spread they realise their mistake, they should have isolated the database from the rest of the stack, so they could deploy any number of EC2 instances running Whale and simply connect it to a persistent database. But none of them are database or networking experts and unsure how to expose the database connection across servers — this is where &lt;strong&gt;Infrastructure as Code&lt;/strong&gt; could have really helped.&lt;/p&gt;

&lt;p&gt;Let’s skip forward a few days, all the fires are now just smouldering pits. They managed to provision a managed database service in the form of AWS RDS and got some help with the networking. Whale is really gaining traction, and customers love it, then overnight the user base explodes. They go from tens of customers to a few thousand and are featured on the front page of Reddit.&lt;/p&gt;

&lt;p&gt;Then it happens.&lt;/p&gt;

&lt;p&gt;Everything just slows down and stops. No alarms, no errors, just nothing. Customers are once again adrift, and causing one hell of a Twitter storm. What happened? There were no recent code changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wxC-1-lK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d6y08erh6aqlfr8dauco.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wxC-1-lK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d6y08erh6aqlfr8dauco.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It turns out that they gained more users than the single EC2 instance could handle. As more users joined and started using Whale, the backend started dumping logs at an increased rate filling up the EC2’s local file storage, taking both it and the frontend offline. Something that could have been easily avoided if they’d shipped logs off to a &lt;strong&gt;Monitoring&lt;/strong&gt; solution.&lt;/p&gt;

&lt;p&gt;Now they need to work out how to scale Whale over multiple EC2 instances at once, and how to get the logs off of the local EC2 file system to somewhere else. All while Whale is currently offline, and they still haven’t got an automated solution for deploying new versions without users experiencing some downtime. This would have been a trivial task if they had embraced &lt;strong&gt;continuous delivery&lt;/strong&gt; and used containers to run Whale’s individual layers on ECS or Fargate — where shipping logs and autoscaling is given out of the box.&lt;/p&gt;

&lt;p&gt;So now the team is left trying to split the frontend and backend, and refactor both applications to run in containers. Then on the infrastructure side they need to set up and configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ECS/Farage Clusters to run the containers,&lt;/li&gt;
&lt;li&gt;Log routing and monitoring to CloudWatch,&lt;/li&gt;
&lt;li&gt;Auto scaling for their customer demands,&lt;/li&gt;
&lt;li&gt;Networking to their RDS instance,&lt;/li&gt;
&lt;li&gt;Deployment strategies for rolling out new versions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To make matters worse they’re still running on a single environment — so either they’d have to make all of these changes on their “production” environment, or spin up a separate isolated development environment, which to ensure both environments are identical. They’d really have to invest in &lt;strong&gt;Infrastructure as Code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hgm7Vpa5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bmkpgoi0x3v5p3wiphv9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hgm7Vpa5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bmkpgoi0x3v5p3wiphv9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a HUGE amount of technical debt for a small team which could easily stop any future development or bug fixes for 6 months or more — something that could easily sink the project, team, and potentially the company.&lt;/p&gt;

&lt;h3&gt;
  
  
  How DevOps principles could have helped?
&lt;/h3&gt;

&lt;p&gt;Now, as I said, this isn’t about Waterfall design, but more about involving DevOps principles from the start. By applying DevOps principles from the beginning they could have avoided some of these situations.&lt;/p&gt;

&lt;p&gt;By embracing &lt;strong&gt;Continuous Integration&lt;/strong&gt; they could have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensured that any code integrated back to their main branch be fully tested prior to deployment; avoiding small bugs interfering with the customer experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By embracing &lt;strong&gt;Continuous Testing&lt;/strong&gt; they could have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created isolated Development, QA, and Production environments. This would have ensured that development versions of Whale could be deployed and acceptance tested, rather than pushing untested versions onto their live customer facing Production environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By embracing &lt;strong&gt;Infrastructure&lt;/strong&gt; they could have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spun up a managed database, such as RDS, instead of running their own on the EC2 server; avoiding losing valuable customer data.&lt;/li&gt;
&lt;li&gt;Leveraged container autoscaling to easily scale horizontally, instead of running everything on a single server; avoiding outages due to increased customer usage.&lt;/li&gt;
&lt;li&gt;Codified their cloud estate using IaC (Infrastructure as Code) so that they could easily provision multiple dev/qa/prod environments, rather than trying to repeat months old work to manually configure a second environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By embracing &lt;strong&gt;Monitoring&lt;/strong&gt; they could have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shipped logs to persistent storage such as CloudWatch, instead of leaving them on the single server; avoiding filling up the local application storage and taking Whale offline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By embracing both &lt;strong&gt;Release Management&lt;/strong&gt; and &lt;strong&gt;Continuous Delivery&lt;/strong&gt; they could have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eased the release and roll out of the different layers in isolation; avoiding the lengthy rewrite to separate the backend and frontend layers, and enabling each layer to be developed at its own cadence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these problems could have been avoided if they had merely considered the wider picture outside of their own application code, and embracing these principles from the beginning, when the cost and burden would have been mere hours, rather than months.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;To me this is one of the biggest strengths of DevOps; by embracing DevOps principles we start thinking at a larger scale and building applications in a more holistic view. DevOps doesn’t require teams of DevOps engineers setting barriers or lengthy processes; it just requires individuals and teams to embrace those principles to build better, more scalable, and robust systems.&lt;/p&gt;

&lt;p&gt;Now, of course that’s not all DevOps is. It also involves building a no blame culture, doing technical postmortems, and involving the wider business to understand that code doesn’t stop at the application level. However, I really wanted to highlight the impact that ignoring DevOps can have on development and projects.&lt;/p&gt;

&lt;p&gt;It’s not all doom and gloom though, we can still bring DevOps into an existing project, but the technical burden will be increased exponentially, and would require significant investment both in time and resource.&lt;/p&gt;

&lt;p&gt;So the next time you’re thinking of starting a new project, product, or initiative; don’t put off applying these principles. DevOps and application development are two pieces of the same puzzle. They need to be done together, in tandem, rather than ignored until a later date, because by that later date, your product could already be dead in the water.&lt;/p&gt;

&lt;p&gt;Do you have any experiences of where DevOps was applied a little too late? If you are interested in learning more about DevOps, please check out my other blogs on my website, &lt;a href="https://manta-innovations.co.uk/blog"&gt;Manta Innovations&lt;/a&gt; and reach out to me on Twitter @ &lt;a href="https://twitter.com/JoelLutman"&gt;Joel Lutman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cpW1pMP4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f2lsxxbhn230f537u0cm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cpW1pMP4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f2lsxxbhn230f537u0cm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>architecture</category>
      <category>cloud</category>
    </item>
    <item>
      <title>A Deep Dive into Amazon Timestream</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Mon, 23 Nov 2020 19:00:19 +0000</pubDate>
      <link>https://dev.to/aws-builders/a-deep-dive-into-amazon-timestream-47gp</link>
      <guid>https://dev.to/aws-builders/a-deep-dive-into-amazon-timestream-47gp</guid>
      <description>&lt;p&gt;Amazon Timestream is AWS’s newest addition to their storage offerings. It’s a fast, scalable, and serverless time series database; something in my experience both the community and businesses have been clamoring for.&lt;/p&gt;

&lt;p&gt;Recently I spent an afternoon testing out Timestream and I thought I’d share what I learned during that time, and my initial impressions.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a time series database?
&lt;/h3&gt;

&lt;p&gt;A time series database is a system optimized for storing and serving time series data. A time series being a sequence of records represented as data points over an interval. While time series data can be stored in a traditional relational database, these often experience scaling issues. &lt;/p&gt;

&lt;p&gt;Typical time series use cases include any type of data where we repeatedly measure values or metrics at regular intervals, this includes;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IoT data (e.g. weather readings, device statuses)&lt;/li&gt;
&lt;li&gt;DevOps analytics (e.g. CPU utilisation, memory allocation, 
network transmission)&lt;/li&gt;
&lt;li&gt;App analytics (e.g. clickstream data, page load times, 
healthchecks, response times)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Timestream targets these use cases - in fact they even provide some sample IoT and DevOps data to play around with, which is exactly what I did.&lt;/p&gt;

&lt;h3&gt;
  
  
  Secure Serverless Infrastructure &amp;lt;3
&lt;/h3&gt;

&lt;p&gt;Setting up Timestream is incredibly easy.&lt;/p&gt;

&lt;p&gt;As a completely serverless offering, there is little to configure and no sizing or throughput settings to worry about. Additionally, being serverless it follows a rolling release schedule, meaning you are able to take advantage of new features as they become available, rather than worry about version upgrades. Additionally, in line with other AWS managed solutions you simply pay for usage rather than the underlying infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsq6wwkavcgghfp7wxpz3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsq6wwkavcgghfp7wxpz3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the few settings you specify is the encryption key. Timestream enforces data encryption and thankfully this setting cannot be turned off. Your options here allow you to specify how your data is encrypted (both at rest and in flight) using a CMK stored in AWS KMS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intelligent data storage
&lt;/h3&gt;

&lt;p&gt;The other main setting is how long your data lasts in each of Timestream’s storage options. &lt;/p&gt;

&lt;p&gt;Timestream currently has 2 types of storage:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A write optimized memory store; where data initially lands and is automatically deduplicated - I’ll talk about this more in a second.&lt;/li&gt;
&lt;li&gt;A read optimized magnetic store; for cost effective long term storage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F71y77o3uknpvkhaaccff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F71y77o3uknpvkhaaccff.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When setting up a Timestream table you’re required to set a retention policy to specify how long data should exist in each store before moving onto the next (from memory, to magnetic, to deletion), with the minimum values being 1hr for the memory store (up to a maximum 1 year) and 1 day for the magnetic store (up to a maximum 200 years).&lt;/p&gt;

&lt;h3&gt;
  
  
  Never worry about duplicate records again
&lt;/h3&gt;

&lt;p&gt;I briefly mentioned data duplication and I want to focus on that a bit more. Data duplication is a big problem in traditional relational databases. Large CRM systems often may find themselves with multiple entries for identical data points if uniqueness is not enforced by the schema. &lt;/p&gt;

&lt;p&gt;Timestream deals with this with an interesting approach, in that if an identical record is received, the write optimized memory store deduplicates this into a single record. This uses a “first writer wins” approach, so whichever record is sent first will be written to disk, with the duplicate record being thrown away. &lt;/p&gt;

&lt;p&gt;As far as I’ve been able to test these duplicate records must be 100% identical, however I would love to see an option in the future to tweak this down to a lower similarity threshold (e.g. two records being treated as duplicates if they are 90% similar).&lt;/p&gt;

&lt;h3&gt;
  
  
  The Timestream data model
&lt;/h3&gt;

&lt;p&gt;Being a type of NoSQL database, Timestream has its own type of data model distinct from both traditional SQL data models, and many other NoSQL data models. Timestream is considered a schema-less database as there is no enforced schema. &lt;/p&gt;

&lt;p&gt;However it still uses concepts such as databases and tables, along with Timestream specific concepts, so lets define these:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database&lt;/strong&gt;: a collection of tables;&lt;br&gt;
&lt;strong&gt;Table&lt;/strong&gt;: an encrypted container that holds our time series records;&lt;br&gt;
&lt;strong&gt;Record&lt;/strong&gt;: a combination of a timestamp, 1 or more dimensions, and a single measure;&lt;br&gt;
&lt;strong&gt;Dimensions&lt;/strong&gt;: attributes that describe metadata of record (e.g. region, AZ, vpc, hostname for DevOps metric data) - always stored as varchar;&lt;br&gt;
&lt;strong&gt;Measure&lt;/strong&gt;: the single named data value representing the measurement (e.g. cpu usage, memory allocation for DevOps metric data) - can be boolean, bigint, varchar, or double;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fef77fmxu7sxpfmd9n5qn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fef77fmxu7sxpfmd9n5qn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fpj3yz12boyl77s2466kp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fpj3yz12boyl77s2466kp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Timestream UI presents this model in a familiar column wise structure, however due to the data model it doesn’t support the standard CRUD operations you might expect. While records can be created and read back, they cannot be updated or deleted. Instead records can only be removed when they reach the retention limit on the magnetic storage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Schema-less SQL on steroids
&lt;/h3&gt;

&lt;p&gt;Despite Timestream being a schema-less NoSQL database, as mentioned it does present its data model as a column wise structure which anyone familiar with SQL will feel at home with. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fungly6fq9sa4zral8sia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fungly6fq9sa4zral8sia.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Timestream enables data to be queried using standard SQL (supporting CTE’s, filtering, and aggregations), with numerous scalar and aggregate functions and additional time series interpolation for data points that may be missing or lost in transmission. This means you can easily group data into different chunks of time and perform aggregates, even if certain points in time were missing data. The one limitation here is that while Timestream does support table joins, these can only be on the same table (a join back to itself), though this does make sense when you remember that tables are schema-less.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Feekvmuafqwlf6df4hdjk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Feekvmuafqwlf6df4hdjk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrations
&lt;/h3&gt;

&lt;p&gt;Whilst having a handy SQL interface is great, for many this is not the best way to present data to users and stakeholders, especially when trying to highlight trends or patterns over time. Thankfully Timestream comes with a number of built in integrations, both within the AWS ecosystem and for third party tools. &lt;/p&gt;

&lt;p&gt;These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboards and charts via Amazon QuickSight or Grafana &lt;/li&gt;
&lt;li&gt;Data ingestion AWS SDK and CLI, from AWS IoT via IoT rules, from 
Kinesis Data Analytics streams, or from Telegraf&lt;/li&gt;
&lt;li&gt;Connecting traditional SQL workbench tools over JDBC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg5cduczf1gw2ngfg68mk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg5cduczf1gw2ngfg68mk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Closing thoughts
&lt;/h3&gt;

&lt;p&gt;Overall, playing around with Timestream was very interesting. I think it’s a powerful service that further rounds out AWS’s storage offerings, and comes with some exciting features that are specific to Timestream. As mentioned, I was impressed by the deduplication of data, and I’d be keen to see this developed further, or being rolled out as a configurable option for other storage services - I think AWS could really be onto something with this feature. On top of that, having it being both schema-less and giving us an SQL interface is a nice middle ground for those not entirely sold on NoSQL data models.&lt;/p&gt;

&lt;p&gt;There’s a lot to like with Timestream, and I think that it could potentially be a good fit for lots of use cases. While Amazon mentions use cases such as DevOps metrics and IoT data; I think it could also have great potential for clickstream, stock market, currency, and asset management data - really anything where we want to be taking repeated measurements over time. &lt;/p&gt;

&lt;h3&gt;
  
  
  What do you think?
&lt;/h3&gt;

&lt;p&gt;I’m sure there’s many more use cases than the ones I mentioned above, so let me know what use cases you can think of, or perhaps are already using Timestream for. &lt;/p&gt;

&lt;p&gt;I’d also be interested to hear about how well Timestream scales for large datasets - it wasn’t something I was able to test that rigorously during my couple of hours with it. So any insight into performance and scaling would be great.&lt;/p&gt;

&lt;p&gt;For more tech insight follow me on Twitter at &lt;a href="https://twitter.com/joellutman" rel="noopener noreferrer"&gt;@JoelLutman&lt;/a&gt;; where I tweet and blog about AWS, serverless, big data, and software best practice.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>database</category>
    </item>
    <item>
      <title>My Top 10 AWS Services</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Tue, 13 Oct 2020 16:13:58 +0000</pubDate>
      <link>https://dev.to/aws-builders/my-top-10-aws-services-bp7</link>
      <guid>https://dev.to/aws-builders/my-top-10-aws-services-bp7</guid>
      <description>&lt;p&gt;AWS is huge. With its multitude of services and continuous updates AWS is a playground for developers, but the sheer scale of it can be overwhelming for newcomers. &lt;/p&gt;

&lt;p&gt;This is why I have put together a handy guide on my Top 10 AWS services, that I think all AWS developers should know, regardless of whether you are working on big data, &lt;br&gt;
machine learning, web apps, IoT, or networking, because you’ll likely need to interact with them at some point.&lt;/p&gt;

&lt;p&gt;In no particular order, here are my top 10: &lt;/p&gt;

&lt;h2&gt;
  
  
  EC2
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scalable servers in the cloud.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wdHx4uM4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dr8z7ag8unnka1j2kwj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wdHx4uM4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dr8z7ag8unnka1j2kwj7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ok, let’s get the big one done first. &lt;/p&gt;

&lt;p&gt;AWS EC2 is the backbone of AWS. It was one of the first services launched back in 2006 and took on the traditional concept of a data centre, but allows you to &lt;br&gt;
spin up and down servers with zero commitment at the click of a button. You can think of EC2 as a blank canvas in which you can install, configure, and run anything &lt;br&gt;
you want, even a minecraft server. Additionally you can launch preconfigured snapshots, called AMI’s, from the marketplace if you don’t want to install something yourself.&lt;/p&gt;

&lt;p&gt;On top of that, EC2 forms a huge part of many of the AWS Certification exams...so learn EC2.&lt;/p&gt;

&lt;h2&gt;
  
  
  ECS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scalable serverless container orchestration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qPveonJv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z38bsj68tndgz9rl7lkc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qPveonJv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z38bsj68tndgz9rl7lkc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Along with EC2, ECS is the other main way of running custom applications in AWS. &lt;/p&gt;

&lt;p&gt;It’s a managed (and can be completely serverless) container orchestration service. This means that instead of having to worry about any underlying hardware that your app is running on; you just have to ensure that your app can run inside a docker container. &lt;/p&gt;

&lt;p&gt;For a developer, this means their app can be easily ported to different cloud providers. Security wise this means no patching of the host OS, and financially this means you only pay for the compute you require, rather than paying for the entire server as with EC2.&lt;/p&gt;

&lt;p&gt;For application developers, knowing ECS is a must - personally, its my go to for custom applications. &lt;/p&gt;

&lt;h2&gt;
  
  
  RDS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Managed Relational Databases&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N7PW8GV1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/u04uun4tq39oc8brgpup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N7PW8GV1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/u04uun4tq39oc8brgpup.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whether you prefer SQL or NoSQL, the reality is that SQL databases are a massive industry themselves. Many complex applications will require a relational database of some sort, and RDS is the best way to achieve this.&lt;/p&gt;

&lt;p&gt;RDS takes away the pain of managing a relational DB yourself (along with the overhead cost of running a server to host it on) and supports numerous database engines including Oracle, MSSQL, MariaDB, MySQL, and of course the only real choice PostgreSQL.&lt;/p&gt;

&lt;p&gt;Having been around for a long time, RDS is another service that makes an appearance in AWS certifications, so make sure you spend some time understanding topics such as read-replicas and backing up from snapshots.&lt;/p&gt;

&lt;h2&gt;
  
  
  DynamoDB
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Managed key-value and document database&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6K8UgtFN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8pdrlqii5kltyvtjeyku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6K8UgtFN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8pdrlqii5kltyvtjeyku.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So we’ve talked about SQL in the form of RDS, now let's talk about NoSQL. DynamoDB is a managed serverless key value store, meaning once again you don’t worry about any underlying infrastructure, scaling, or maintenance. &lt;/p&gt;

&lt;p&gt;What makes DynamoDB unique is that rather than paying for the provisioned size of your database, you instead pay for the throughput required (how many reads/writes per second you require - which can be scaled up or down manually or on-demand) and the storage used. &lt;/p&gt;

&lt;p&gt;DynamoDB is schema-less, fast, resilient, and a great fit for any use case that wants a flat database hierarchy - it's your default NoSQL storage for AWS.&lt;/p&gt;

&lt;p&gt;As with some of the others, it's been around a long time and frequently pops up on many AWS certifications, though not to the same degree as RDS due to the decreased complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  S3
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Simple scalable resilient object storage&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K2VQ-4LN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ualwer7eiq7q6osp4h7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K2VQ-4LN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ualwer7eiq7q6osp4h7d.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3 is one of AWS’s simplest services. &lt;/p&gt;

&lt;p&gt;It is simply object storage, which you can store files on in the same way you would a traditional file system. What makes S3 important is that despite its simplicity it is incredibly flexible and used by many other AWS services as intermediary storage. Building a datalake? Use S3 for data storage. &lt;br&gt;
Want to use AWS CodePipeline - it uses S3 to store build artefacts. Want to query data on AWS Athena - it uses S3 to store query results.&lt;/p&gt;

&lt;p&gt;On top of all of this, S3 also has a tiered pricing structure, where you only pay for storage that you use, but that cost depends on how quickly and frequently you need to access your data. &lt;/p&gt;

&lt;p&gt;With all of this it's no surprise that S3 also comes up frequently across all AWS certifications...learn S3, because you’ll definitely be using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  VPC
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Isolated virtual network for AWS resources&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l_Klrbwc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xa2psiu2qx6io1lbr0rb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l_Klrbwc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xa2psiu2qx6io1lbr0rb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;VPC lets you provision a logically isolated section of the AWS Cloud which you can launch AWS resources in. &lt;/p&gt;

&lt;p&gt;Want to run an EC2 - you’ll need a VPC. Want to run an ECS cluster - you’ll need a VPC. Hosting a web application - you’ll need a VPC.&lt;/p&gt;

&lt;p&gt;VPC is an essential requirement for many AWS resources and includes everything from subnets and network gateways, through to route tables and NACL’s. &lt;/p&gt;

&lt;p&gt;Due to its complexity it forms a large part of many AWS certifications and it is a must-know for anyone wishing to deploy to AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lambda
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run code without needing servers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0M9Qvfbd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/plvib7uonnn47d465hqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0M9Qvfbd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/plvib7uonnn47d465hqm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While EC2 and ECS are great for running continuous processes or applications, what about when you just want to run a small script either on a schedule or in response to an event? &lt;/p&gt;

&lt;p&gt;This is where Lambda comes into play. &lt;/p&gt;

&lt;p&gt;Rather than having to run an oversized server and orchestration tool, Lambda provides a serverless platform to orchestrate and run small scripts, as long as they complete within 15 minutes. Need a script to run in response to data being uploaded to S3? Use Lambda. Need a script to run every other morning at 10am? Use Lambda. &lt;/p&gt;

&lt;p&gt;Lambda is your go to for event driven processing and script execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  KMS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Secure data encryption and key management&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tt7knzp---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4zzpsdige8b7wuphi7r6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tt7knzp---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4zzpsdige8b7wuphi7r6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Security is important, even more so on the cloud, where an incorrect setting can expose your resource to the rest of the world. KMS secures data and secrets in the cloud. &lt;/p&gt;

&lt;p&gt;Storing data on S3? Use a KMS key to encrypt it. Storing a confidential key in Secrets Manager - you need to use KMS for this.&lt;/p&gt;

&lt;p&gt;Using KMS is crucial for building secure AWS native solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  CloudWatch
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Logs, monitoring, and insights for resources&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K0sf3KIO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1kzl9o3q2a7gltccq737.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K0sf3KIO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1kzl9o3q2a7gltccq737.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once we’ve got resources and applications running in the cloud, we need to be able to observe them and access their logs. If something goes down we need to know what exactly happened. &lt;/p&gt;

&lt;p&gt;This is where CloudWatch comes into play. &lt;/p&gt;

&lt;p&gt;With CloudWatch we can gather logs from both managed services and our own applications running on ECS and EC2. We can also use CloudWatch for event processing, and scheduling lambda events. &lt;/p&gt;

&lt;p&gt;So whether you’re deploying a service to AWS or scheduling event driven architecture, CloudWatch is crucial.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS IAM
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;User and permissions management&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wTHxtqTM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bj5o1ijyfdyn4kn04lxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wTHxtqTM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bj5o1ijyfdyn4kn04lxe.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is it important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before you even start deploying a service to AWS you need to be thinking about IAM. IAM is how we assign privileges to both users and roles. &lt;/p&gt;

&lt;p&gt;So if you’re designing a service that requires access to a private S3 bucket, you’ll need to use IAM to assign s3 read access to the role your service is using. Learning IAM permissions is invaluable for application developers and security engineers alike. &lt;/p&gt;

&lt;p&gt;IAM is also another service that comes up frequently in AWS certifications so it’s worth familiarising yourself with the most common ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let me know what you think
&lt;/h3&gt;

&lt;p&gt;Thanks for taking the time to read this guide - I hope it helps! As mentioned these are my own personal views, and the services are not ranked in any particular order.&lt;/p&gt;

&lt;p&gt;If there is an AWS application that you swear by that hasn’t featured in this top 10 list, or you have any questions regarding these applications, I would love to hear from you. &lt;/p&gt;

&lt;p&gt;For more blogs and tech insight follow me on Twitter &lt;a href="https://twitter.com/joellutman"&gt;Joel Lutman&lt;/a&gt; for more info on AWS, cloud computing, serverless, and software development.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>architecture</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Set up a virtual call centre in 30 minutes with Amazon Connect</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Mon, 20 Jul 2020 17:12:12 +0000</pubDate>
      <link>https://dev.to/aws-builders/set-up-a-virtual-call-centre-in-30-minutes-with-amazon-connect-5cni</link>
      <guid>https://dev.to/aws-builders/set-up-a-virtual-call-centre-in-30-minutes-with-amazon-connect-5cni</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a step by step guide on how to set up Amazon Connect in under 30 mins.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Amazon Connect enables you to have your own virtual call centre, where agents can log into and receive calls from &lt;br&gt;
clients via a web portal using only a pair of headphones. &lt;/p&gt;

&lt;p&gt;If this is the first time you’ve heard of Amazon Connect then I suggest you checkout my recent &lt;a href="https://manta-innovations.co.uk/2020/06/30/Interested-in-a-virtual-call-centre-Try-AWS-Connect/" rel="noopener noreferrer"&gt;high level summary&lt;/a&gt; on it first.&lt;/p&gt;

&lt;p&gt;This demo does require you to already have an AWS account set up, ideally with admin level permissions to provision the required services. &lt;/p&gt;

&lt;p&gt;If you’ve got that then login to the AWS Console and head to the Amazon Connect page and we’ll get started. If not, you will need &lt;br&gt;
to create an account &lt;a href="https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fportal.aws.amazon.com%2Fbilling%2Fsignup%2Fresume&amp;amp;client_id=signup" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. First you’re going to set up your identity access management.
&lt;/h3&gt;

&lt;p&gt;If you want to manage your agents within Amazon Connect use the first option &lt;em&gt;“Store users with Amazon Connect”&lt;/em&gt;, and personalise the URL. &lt;/p&gt;

&lt;p&gt;If you already have and wish to use Active-Directory, you can use the second two options; to manage users via AWS AD, or non-AWS AD via SAML, respectively. &lt;/p&gt;

&lt;p&gt;This stage will also provide you with the URL for your agents to login with.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmdybv14vlfek37zy5828.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmdybv14vlfek37zy5828.png" alt="Alt Text" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Next you have the option to create an admin user.
&lt;/h3&gt;

&lt;p&gt;I suggest skipping this step for this walkthrough as you can use your IAM user instead, however you can use this opportunity to add other administrators here if you wish.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Next you’'ll configure the telephony options for both inbound and outbound calls.
&lt;/h3&gt;

&lt;p&gt;I’ve selected both options here as I want to receive and make calls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqvc2wzo1apj0snb9jqpz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqvc2wzo1apj0snb9jqpz.png" alt="Alt Text" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The last step of the initial set up is  to configure your data storage; which will contain call and chat logs.
&lt;/h3&gt;

&lt;p&gt;By default Amazon Connect generates its own S3 buckets and KMS keys to use for secure data encryption, but you can set this to use pre-existing buckets and keys should you wish to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4edvgwj9j8icwjexxr9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4edvgwj9j8icwjexxr9d.png" alt="Alt Text" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Now that you've done the initial setup you will be presented with a summary screen.
&lt;/h3&gt;

&lt;p&gt;Check through the options and if everything looks good, create the instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7ybcm358f4is7dudqwdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7ybcm358f4is7dudqwdg.png" alt="Alt Text" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Once your Amazon Connect instance has been created,  you can log into the dashboard and customise your virtual call centre.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcml27xjvizk0i3wythmf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcml27xjvizk0i3wythmf.png" alt="Alt Text" width="800" height="377"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  7. The first thing you need to do is claim a phone number to receive calls on.
&lt;/h3&gt;

&lt;p&gt;This can be from any country Amazon Connect supports, regardless of which region our instance is located in. &lt;/p&gt;

&lt;p&gt;I'm currently in Canada, so I chose a North American number, and opted for ‘Toll free’.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fb667fdndsll51axntxk3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fb667fdndsll51axntxk3.png" alt="Alt Text" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Next you will be presented with a screen advising you to claim the number.
&lt;/h3&gt;

&lt;p&gt;It advises you to dial the number, however from my experience with Amazon Connect all configuration changes can take up to 15 minutes to be pushed out. &lt;/p&gt;

&lt;p&gt;If you were to call at this stage you might not get through, but that doesn’t stop you continuing the setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F84jnzg6f98ulbd4kkjae.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F84jnzg6f98ulbd4kkjae.png" alt="Alt Text" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Next you can set the hours of operation; which is when you expect agents to be able to take calls.
&lt;/h3&gt;

&lt;p&gt;You can have multiple hours of operation if you want to represent multiple groups or group remote teams by time zones. &lt;/p&gt;

&lt;p&gt;I set all of my operational hours in Pacific Standard Time, and extended the hours into the evening a little. &lt;/p&gt;

&lt;p&gt;If your call centre isn’t operational at the weekend, you can remove these from the operational hours.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ff9atlqjlqsjj4qqd2mog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ff9atlqjlqsjj4qqd2mog.png" alt="Alt Text" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Following this, the next thing you need to do is set up queues.
&lt;/h3&gt;

&lt;p&gt;A queue here is not a queue in terms of a waiting queue, but rather a workflow queue that callers will transit through. &lt;/p&gt;

&lt;p&gt;As with the hours of operation, you can have multiple queues per call centre, for different workflows, and callers can be transferred between queues in the same way you might traditionally transfer callers between departments.&lt;/p&gt;

&lt;p&gt;If your call centre requires more than one workflow, add additional queues with the &lt;em&gt;“add new queue”&lt;/em&gt; button. I created an additional queue called &lt;em&gt;“VanQueue”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz18f4heebmlcy1g11bw7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz18f4heebmlcy1g11bw7.png" alt="Alt Text" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  11. Next, you will be given the option to create or upload your own prompts, which are audio files you may wish to playback to callers.
&lt;/h3&gt;

&lt;p&gt;I didn’t want to use any custom audio prompts, so I skipped this stage but feel to check them out, or add your own and apply them in your contact flow, speaking of which...&lt;/p&gt;

&lt;h3&gt;
  
  
  12. The next stage is the biggest and most complex bit - contact flows.
&lt;/h3&gt;

&lt;p&gt;This is how you design the flow that a customer may take, and that can be a complete end to end flow, or a small flow which can be composed into a larger flow. &lt;/p&gt;

&lt;p&gt;In this way you can use Software Engineering principles of composition and DRY (Don't Repeat Yourself) to create reusable flow elements. &lt;/p&gt;

&lt;p&gt;As an example, I have created a single end to end flow;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvayj59snkeo65ohftxw0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvayj59snkeo65ohftxw0.png" alt="Alt Text" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here I've just set up a very simple flow whereby I check those basic settings I've configured (opening hours, staff availability, and queue availability) and try to transfer the customer to an agent. &lt;/p&gt;

&lt;p&gt;If any of these fail, the system responds to the customer letting them know why (e.g. outside of opening hours) prior to terminating the call. &lt;/p&gt;

&lt;p&gt;If they can't be immediately transferred due to the queue being at capacity, I've implemented a loop to wait 5 minutes and try again.&lt;/p&gt;

&lt;p&gt;In this way I've been able to set up a very simple complete end to end flow for a call center, using a simple drag and drop UI. &lt;/p&gt;

&lt;p&gt;Flows can become a lot more complex, and I could have used things such as keypad entry, Lex skills, and even trigger an AWS Lambda (which in turn can be used to trigger many other AWS services via an SDK call).&lt;/p&gt;

&lt;h3&gt;
  
  
  13. Following this, you will need to set up a routing profile.
&lt;/h3&gt;

&lt;p&gt;Routing profiles act as the link between our agents and answer queues.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flhivhocwsvj97beizjxr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flhivhocwsvj97beizjxr.png" alt="Alt Text" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkd9g3l9zgxs95w17mdko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkd9g3l9zgxs95w17mdko.png" alt="Alt Text" width="800" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  14. Once the routing profile is in place, you can now start creating users and assigning them to the profile.
&lt;/h3&gt;

&lt;p&gt;When creating an agent/user you need to assign them both a routing profile (which we just spoke about above) and a security profile. &lt;/p&gt;

&lt;p&gt;Security profiles dictate the access control the agent has within AWS Connect, and can be selected from default options of &lt;em&gt;Admin, Agent, CallCenterManager, or QualityAnalyst&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Alternatively you can create our own Security Profiles and assign agents to them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0dmc8enxzgrs38u8m4qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0dmc8enxzgrs38u8m4qw.png" alt="Alt Text" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  15. The last thing you need to do is to switch your inbound number onto the correct contact flow.
&lt;/h3&gt;

&lt;p&gt;The reason to do this last is to ensure that everything related to that contact flow is set up and agents are available before making the flow live. &lt;/p&gt;

&lt;p&gt;If you switched the number onto the flow at the start, but hadn’t yet created agents to answer, or the correct operational hours, then clients may start calling in and receiving unexpected responses or be left waiting for an agent.&lt;/p&gt;

&lt;p&gt;We do this simply by going back to the phone number management screen and attaching it to our new contact flow.&lt;/p&gt;

&lt;p&gt;For instance, I switched it from ‘Sample inbound flow’ to ‘Demo’ which is the name I gave my demo contact flow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6r9nu7zi4k7ry3w042b6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6r9nu7zi4k7ry3w042b6.png" alt="Alt Text" width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  16. Once that’s done, you are ready to go.
&lt;/h3&gt;

&lt;p&gt;You have successfully set up a virtual call centre in (hopefully) under 30 minutes. Clients can now dial in, and after making their way through our contact flow will be connected to an available agent.&lt;/p&gt;

&lt;p&gt;You’ll be able to log onto your virtual call centre by clicking the phone logo in the top right.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2usuh2k2od53fh33s36k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2usuh2k2od53fh33s36k.png" alt="Alt Text" width="444" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhrhbi3wpy4c7zub4w53l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhrhbi3wpy4c7zub4w53l.png" alt="Alt Text" width="800" height="850"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was just a simple quick walkthrough of setting up Amazon Connect.&lt;/p&gt;

&lt;p&gt;Amazon Connect is a powerful tool and it can become complex when we start using some of the more interesting features such as AWS Lex and Lambda support.&lt;/p&gt;

&lt;p&gt;If you find yourself in need of some advice or just want to find out more, then feel free to reach out to me on Twitter (&lt;a href="https://twitter.com/joellutman" rel="noopener noreferrer"&gt;@joellutman&lt;/a&gt;), &lt;br&gt;
email &lt;a href="//mailto:joel@manta-innovations.co.uk"&gt;joel@manta-innovations.co.uk&lt;/a&gt; or via my &lt;a href="http://manta-innovations.co.uk/" rel="noopener noreferrer"&gt;site&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>devops</category>
    </item>
    <item>
      <title>What is AWS connect?</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Wed, 01 Jul 2020 17:43:05 +0000</pubDate>
      <link>https://dev.to/aws-builders/what-is-aws-connect-380i</link>
      <guid>https://dev.to/aws-builders/what-is-aws-connect-380i</guid>
      <description>&lt;p&gt;Recently I found myself spending some time with some of the less well known AWS services, and I wanted to draw attention to just how great some of these services are. &lt;/p&gt;

&lt;p&gt;One of them, AWS Connect, has proven to be an interesting use case. &lt;/p&gt;

&lt;p&gt;With the growing demand to work remotely, it has seen increased usage during the COVID-19 outbreak. It allows companies to create a virtual cloud based call centre, that enables and empowers staff to answer from anywhere they have access to a PC.&lt;/p&gt;

&lt;h2&gt;
  
  
  A cloud based call centre?
&lt;/h2&gt;

&lt;p&gt;AWS Connect markets itself as &lt;em&gt;“an omnichannel cloud contact center”&lt;/em&gt;, but what does that really mean?&lt;/p&gt;

&lt;p&gt;AWS Connect is a versatile way of building and managing a completely serverless call centre, and allows distributed teams to work remotely from anywhere over the world.&lt;/p&gt;

&lt;p&gt;It can be used as a simple way of managing agents and connecting customers with them, or as a way of building complex routing systems that can use multiple customer inputs and diverging paths to route customers to different agent teams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwu6uwf5jljvb22hdltq6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwu6uwf5jljvb22hdltq6.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: www.pexels.com/photo/woman-wearing-earpiece-using-white-laptop-computer-210647 



&lt;p&gt;What separates AWS Connect from a traditional call centre is its ability to create and scale call centres within minutes, and enables remote working as it relies on web interfaces rather than a traditional handset. &lt;/p&gt;

&lt;p&gt;AWS Connect provides an all in one service for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;acquiring public phone numbers&lt;/li&gt;
&lt;li&gt;creating distributed teams&lt;/li&gt;
&lt;li&gt;creating operational hours &lt;/li&gt;
&lt;li&gt;creating simple to complex call routing&lt;/li&gt;
&lt;li&gt;secure data storage and encryption of call logs on AWS&lt;/li&gt;
&lt;li&gt;Integration with AWS database for automatic logs and stats&lt;/li&gt;
&lt;li&gt;providing a simple user interface for agents to answer calls without needing a physical handset&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Just how simple is it?
&lt;/h2&gt;

&lt;p&gt;AWS Connect is one of those well designed products that can be downright simple, or incredibly complex, depending on what you design and the components that you use. &lt;/p&gt;

&lt;p&gt;It is designed to be used by anyone, and doesn’t require developer experience to configure, though some knowledge of S3 buckets and data encryption via AWS KMS is beneficial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fivb2wcg14xiwqor01t2u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fivb2wcg14xiwqor01t2u.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source:   https://unsplash.com/photos/BeVGrXEktIk 



&lt;p&gt;Without any prior experience, on my first attempt with AWS Connect I was able to get a full serverless call centre up and running in under 15 minutes, that included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A public dial in number&lt;/li&gt;
&lt;li&gt;Secure encrypted data storage for call logs&lt;/li&gt;
&lt;li&gt;Seniority roles for managers and agents with different admin rights&lt;/li&gt;
&lt;li&gt;Reports on call metrics and stats&lt;/li&gt;
&lt;li&gt;Operational hours for agents&lt;/li&gt;
&lt;li&gt;A call routing that made use of keypad entry, and queue checking to place customers on hold if no agent was available&lt;/li&gt;
&lt;li&gt;3 different user types (admin, managerial, agent) that could log in and receive inbound calls via PC and headset&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Complexity if you want it
&lt;/h1&gt;

&lt;p&gt;On the other side, AWS Connect supports a huge range of customisation and supported services. &lt;/p&gt;

&lt;p&gt;AWS Connect can be integrated into AWS Lambda and AWS Lex, meaning scripts can be written that would enable some of the following features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speech-to-text translation - providing agents with a summary of call&lt;/li&gt;
&lt;li&gt;Integration with AWS database solutions - providing queryable stats and metrics of calls&lt;/li&gt;
&lt;li&gt;Language detection - allowing key words and phrases to be identified and flagged during calls to help understand overall customer satisfaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvddmzt5jwbhewkk0i7z7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvddmzt5jwbhewkk0i7z7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: http://anthillonline.com/wp-content/uploads/2018/07/chatbot.jpg 



&lt;p&gt;AWS Connect is an incredibly versatile and scalable platform that allows companies to build a customised and flexible virtual call centre. Enabling them to adapt to pressures of scale, flexibility, and distribution to overcome the obstacles and rigid structures of a traditional call centre.&lt;/p&gt;

&lt;p&gt;This is just a high level summary of AWS connect, I’ll be looking to put together a more technical guide in the foreseeable future - so watch this space. &lt;/p&gt;

&lt;p&gt;For more information about AWS and Serverless feel free to check out my other blogs, and my website &lt;a href="https://manta-innovations.co.uk/blog" rel="noopener noreferrer"&gt;Manta Innovations&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Automating data pipeline with AWS step functions</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Tue, 23 Jun 2020 16:58:14 +0000</pubDate>
      <link>https://dev.to/aws-builders/automating-data-pipeline-with-aws-step-functions-3elk</link>
      <guid>https://dev.to/aws-builders/automating-data-pipeline-with-aws-step-functions-3elk</guid>
      <description>&lt;p&gt;Apache Spark, Serverless, and Microservice's are phrases you rarely hear spoken about together, but that's all about to change with AWS Step Functions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apache Spark vs Serverless
&lt;/h3&gt;

&lt;p&gt;As someone who works as a SME in Apache Spark it's been common for me to be working with large Hadoop clusters (either on premise or as part of an EMR cluster on AWS), which run up large bills even though the clusters are mostly idle, seeing short periods of intense compute when pipelines run. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F50l5zsly1o3imiyx6vpn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F50l5zsly1o3imiyx6vpn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In contrast we have the Serverless movement.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The severless movement aims to abstract away many of these issues with managed services, where you only pay for what you use, examples being AWS Lambda, Glue, DynamoDB, and S3.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fk1gpef0911ec59p5g5u0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fk1gpef0911ec59p5g5u0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here I’m going to talk about how we can bring these two concepts together to utilise serverless in delivering big data solutions to try and get the best of both worlds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hello &lt;del&gt;world&lt;/del&gt; AWS Step Functions
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6yi4428b2wdv9u8uem7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6yi4428b2wdv9u8uem7v.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome to AWS Step Functions, a managed service that lets us coordinate multiple AWS services into workflows. &lt;/p&gt;

&lt;p&gt;AWS Step Functions can be used for a number of use cases and workflows including; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sequence batch processing&lt;/li&gt;
&lt;li&gt;transcoding media files&lt;/li&gt;
&lt;li&gt;publishing events from serverless workflows&lt;/li&gt;
&lt;li&gt;sending messages from automated workflows&lt;/li&gt;
&lt;li&gt;or orchestrating big data workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A traditional enterprise Big Data architecture may involve many complex distributed self managed tools. This could include clusters for Apache Spark, Zookeeper, HDFS, and more. This type of architecture is heavily reliant on time based schedulers such as CRON and does a poor job of binding individual workflow steps together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fts5v5qqobbf59j56gob7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fts5v5qqobbf59j56gob7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The diagram above illustrates a typical big data workflow of sourcing data into a datalake, ETL'ing our data from source format to Parquet, and using a pre-trained Machine Learning model to predict based on the new data. Data is made available for user interaction via SQL queries.&lt;/p&gt;

&lt;p&gt;What if a single service goes down? How are we alerted? Our orchestration times have to be well defined and follow a synchronous blocking workflow. We have no contract between services - which leads to slow development of each component and drives a waterfall approach. These are all questions and problems that arise with such an architecture.&lt;/p&gt;

&lt;p&gt;So lets try to replicate this using serverless components and see if we can do a better job.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzyy8ayruukaakj35wydy.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzyy8ayruukaakj35wydy.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above diagram we’ve been able to replicate the previous architecture in a completely serverless approach, thanks to Step Functions enabling us a way of binding any AWS service into a workflow.  Additionally, using managed serverless components has enabled us to overcome many of the problems and issues identified with the previous approach.&lt;/p&gt;

&lt;p&gt;This serverless approach gives us the ability to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query the data at any stage via AWS Athena&lt;/li&gt;
&lt;li&gt;Handle any errors or timeouts across the entire stack, route the 
error to a SNS topic, then onto any support team&lt;/li&gt;
&lt;li&gt;Configure retries at a per service or entire stack level&lt;/li&gt;
&lt;li&gt;Inspect any file movement or service state via a simple query or 
HTTP request to DynamoDB&lt;/li&gt;
&lt;li&gt;Configure spark resources independently of each job, without 
worrying about cluster constraints or YARN resource sharing&lt;/li&gt;
&lt;li&gt;Orchestrate stages neatly together in many different ways 
(sequential, parallel, diverging)&lt;/li&gt;
&lt;li&gt;Trigger the entire pipeline on a CRON schedule or via events
Monitor ETL workflows via UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhqmddqmxu9qjltwi4c3c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhqmddqmxu9qjltwi4c3c.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In comparison to traditional single stack server based architecture, organisations and businesses also gain a number of advantages for both the development process and service management:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increase development velocity and flexibility by splitting the 
Sourcing Lambda, Spark ETL, View Lambda, and Sagemaker Scripts 
into micro-service's or monorepo's&lt;/li&gt;
&lt;li&gt;Treat each ETL stage as a standalone service which only requires 
data in S3 as the interface between services&lt;/li&gt;
&lt;li&gt;Recreate our services quickly and reproducibly by leveraging 
tools such as Terraform&lt;/li&gt;
&lt;li&gt;Create and manage workflows in a simple readable configuration 
language&lt;/li&gt;
&lt;li&gt;Avoid managing servers, clusters, databases, replication, or 
failure scenario's&lt;/li&gt;
&lt;li&gt;Reduce our cloud spend and hidden maintenance costs by consuming 
resources as a service.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuration as Code
&lt;/h3&gt;

&lt;p&gt;As mentioned, one of the clear benefits of using AWS Step Functions is being able to describe and orchestrate our pipelines with a simple configuration language. &lt;/p&gt;

&lt;p&gt;This enables us to remove any reliance on explicitly sending signals between services, custom error handling, timeouts, or retries. Instead defining these with the Amazon States Language - a simple, straightforward, JSON-based, structured configuration language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fy0zxlv4d1t1nhm5kb0tz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fy0zxlv4d1t1nhm5kb0tz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the states language we declare each task in our step function as a state. We define how that state transitions into subsequent states; what happens in the event of a state's failure (allowing for different transitions depending on the type of failure), and how we want a state to execute (sequential or in parallel alongside other states).&lt;/p&gt;

&lt;h3&gt;
  
  
  Not the only option, but...
&lt;/h3&gt;

&lt;p&gt;It's worth pointing out that some of these benefits are not limited to just AWS Step Functions. &lt;/p&gt;

&lt;p&gt;Airflow, Luigi, and NiFi are all alternative orchestration tools that are able to provide us with a subset of these benefits, in particular scheduling and a UI. &lt;/p&gt;

&lt;p&gt;However these rely on running on top of EC2 instances which in turn would have to be maintained. &lt;/p&gt;

&lt;p&gt;If the servers were to go offline our entire stack would be non-functional, which is not acceptable to any high performing business. They also lack many of the other benefits discussed such as; stack level error, timeout handling, and configuration as code, among others.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzhhb5jq7vxrhjfvrhnu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzhhb5jq7vxrhjfvrhnu7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Step Functions - a versatile and reliable tool
&lt;/h3&gt;

&lt;p&gt;AWS Step Functions is a versatile service which allows us to focus on delivering value through orchestrating components. &lt;/p&gt;

&lt;p&gt;Used in conjunction with serverless applications we can avoid waterfall architecture patterns. By swapping in different services to fulfil roles during development this allows developers to focus on the core use case, rather than solutionising. For instance, we could easily swap DynamoDB out for AWS RDS without any architecture burden. &lt;/p&gt;

&lt;p&gt;As we've demonstrated, it can be a powerful and reliable tool in leveraging big data within the serverless framework and should not be overlooked for anyone exploring orchestration of big data pipelines on AWS. &lt;/p&gt;

&lt;p&gt;Used in conjunction with the serverless framework, it can enable us to quickly deliver huge value without the traditional big (data) headaches.&lt;/p&gt;

&lt;p&gt;More for information about AWS and Serverless feel free to check out my other blogs, and my website, &lt;a href="https://manta-innovations.co.uk/" rel="noopener noreferrer"&gt;Manta Innovations&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>microservices</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How to test serverless workflows?</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Tue, 16 Jun 2020 17:44:29 +0000</pubDate>
      <link>https://dev.to/aws-builders/how-to-test-serverless-workflows-2ibj</link>
      <guid>https://dev.to/aws-builders/how-to-test-serverless-workflows-2ibj</guid>
      <description>&lt;p&gt;Serverless is a design pattern which aims to remove many issues development teams typically face when maintaining servers or services, enabling them to focus on delivering value and benefit quickly and efficiently.&lt;/p&gt;

&lt;p&gt;However using a large amount of serverless resources also has its drawbacks, in particular the difficulties in testing. &lt;/p&gt;

&lt;p&gt;In this blog I aim to discuss some of these problems, and propose a solution for testing heavily serverless workflow’s through regression testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Different Types of Testing
&lt;/h3&gt;

&lt;p&gt;When building applications it’s important that we write comprehensive test coverage to ensure our application behaves as expected, and protects us from unexpected changes during iteration. &lt;/p&gt;

&lt;p&gt;In both traditional and serverless development, when building apps and workflow’s that involve calls to other services, we need to test the boundaries.&lt;/p&gt;

&lt;p&gt;But how do we do this when our boundaries are managed services?&lt;/p&gt;

&lt;p&gt;Before continuing it’s important to understand the difference between unit, integration, and regression tests, as they are often easily mixed up:&lt;/p&gt;

&lt;h4&gt;
  
  
  Unit test
&lt;/h4&gt;

&lt;p&gt;The smallest type of test, where we test a function. When following Test Driven Development these are the kind of tests we write first.&lt;/p&gt;

&lt;p&gt;Given a function def addOne(input: Int): Int = input + 1 we would expect a corresponding test which may look something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;addOne(-1) shouldEqual 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;addOne(0) shouldEqual 1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Integration test
&lt;/h4&gt;

&lt;p&gt;A larger test, where we test a workflow which may call many functions. These are more behaviour focused and target how our system expects to run given different inputs.&lt;/p&gt;

&lt;p&gt;Given an application with an entrypoint def main(args: Seq[String]): Unit we may expect an integration test to look something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;main(Seq("localhost:8000", "/fake-url", "30s")) shouldRaise 404&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main(Seq("localhost:8000", "/mocked-url", "30s")) shouldNotRaiseException&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Regression test
&lt;/h4&gt;

&lt;p&gt;The largest type of test, also thought of as a systems test. While unit and integration tests look to test how our application behaves during changes to it, regression tests look to test how our systems behave due to our application changing. They also prevent unexpected regressions due to development.&lt;/p&gt;

&lt;p&gt;While integration testing of an api crawler may test what happens to the app when the api goes offline by utilising a local mock, regression testing should test what happens to downstream services should that api go offline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nAwJmf1h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/52yw7hxugjafn0j3pqg5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nAwJmf1h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/52yw7hxugjafn0j3pqg5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Problems with Serverless
&lt;/h3&gt;

&lt;p&gt;Let's work through a real world example where we will see that relying only on unit and integration tests is not enough for even simple serverless workflow’s. &lt;/p&gt;

&lt;p&gt;Given this demo workflow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z-qDjPES--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b499zmhkur1kcsya5pnk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z-qDjPES--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b499zmhkur1kcsya5pnk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda runs some simple code to get data from an api, do some processing, and publish the results to an S3 bucket&lt;/li&gt;
&lt;li&gt;S3 bucket has an event trigger that sends an alert to an SNS topic when new data is published to it&lt;/li&gt;
&lt;li&gt;SNS topic sends an email to users letting them know that the data is available to download from a link&lt;/li&gt;
&lt;li&gt;Users access the link, which is an AWS API Gateway endpoint, to download the data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll assume the Lambda has unit and integration tests. These may use mocks and utilities to test how this simple code would handle the various response codes, and capture the messages being sent to S3. This is testing the boundaries of the Lambda, however this leaves much of our workflow untested.&lt;/p&gt;

&lt;p&gt;In a traditional stack, where we would be self provisioning servers we could test these by running containers for them. However how do we do this with managed/cloud-native services which are not available in the form of local containers?&lt;/p&gt;

&lt;p&gt;Serverless and self provisioned servers may bear similarities, but they’re not the same, and any tests using it as a replacement would provide little benefit. However if we only test the Lambda code then we are leaving much of our workflow untested.&lt;/p&gt;

&lt;p&gt;What happens if someone logs into the console and changes the SNS topic name?&lt;/p&gt;

&lt;p&gt;The Lambda will still pass it’s unit and integration tests, and it will still publish data to the S3 bucket. However the SNS topic will no longer receive the event, and won’t be able to pass on alert to our users - our workflow is broken, and even worse we’re not aware of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5-rAZWmc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tormzwqf6amlnj90yrg8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5-rAZWmc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tormzwqf6amlnj90yrg8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the catch-22 of testing managed/cloud-native serverless - as our workflow’s become more complicated, we need rigorous testing, but the more services we include the less tested our workflow becomes.&lt;/p&gt;

&lt;p&gt;This is why regression/systems testing becomes more important with serverless workflow’s, and why it should become more of the norm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regression Testing Serverless Workflows
&lt;/h3&gt;

&lt;p&gt;So now that we understand what we want to test, and why it's important, we need to find a way of testing it.&lt;/p&gt;

&lt;p&gt;The traditional approach would be to deploy the stack onto an environment, where someone can manually trigger and evaluate the workflow. This is testing the happy path, as it doesn’t evaluate all the permutations of different components changing. &lt;/p&gt;

&lt;p&gt;Additionally, due to the manual process involved we are unlikely to be able to evaluate this frequently, and instead may only do this once per release which could contain many changes. Should we find any regressions, it becomes harder to identify the root cause due to the multiple changes that have been implemented between releases. &lt;/p&gt;

&lt;p&gt;This doesn’t scale well when we have more complex workflows that utilise parallel and diverging streams (for an example of such read my blog on building serverless data pipelines).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, how do we do better?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well, what we can do is take the same approach used for unit and integration tests, and look at how we can test our remit (in this case our entire workflow) as a black box.&lt;/p&gt;

&lt;p&gt;We can achieve this by; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spinning up infrastructure around our workflow&lt;/li&gt;
&lt;li&gt;Running a suite of tests to start the workflow &lt;/li&gt;
&lt;li&gt;Asserting on the results at the end of the workflow&lt;/li&gt;
&lt;li&gt;Destroying our test infrastructure afterwards - to do which we need to leverage IaC (Infrastructure as Code) tools such as terraform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For our demo workflow, we would achieve this by deploying managed/cloud-native services, which the Lambda at the start of our workflow will connect to, in lieu of the real external API. &lt;/p&gt;

&lt;p&gt;We can then run a suite of tests to trigger the Lambda, and assert the expected results exist at the end of our workflow via the workflow API Gateway.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vWM7KLUT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t1y82g6ghf5wqyb05hm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWM7KLUT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t1y82g6ghf5wqyb05hm8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this approach, we can now automate the traditional manual QA testing, and ensure we cover a much wider spectrum of BDD test cases, including scenarios such as “What alert do/should our users receive if the API is unavailable?”. &lt;/p&gt;

&lt;p&gt;In traditional unit/integration testing we wouldn’t be able to answer or test for this, as this process is handled outside of the Lambda. We could test what happens to the Lambda in the event of the external API becoming unavailable, but not how downstream processes would react - we’d be reliant on someone manually trying to mimic this scenario, which doesn’t scale.&lt;/p&gt;

&lt;p&gt;Furthermore, utilising IaC we can run a huge barrage of these larger workflow tests in parallel, and easily scale these up to incorporate elements of load and chaos testing. &lt;/p&gt;

&lt;p&gt;Instead of being reactive to our workflow breaking, we can push the limits to establish our redundancy prior to experiencing event outages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusions
&lt;/h3&gt;

&lt;p&gt;Hopefully I’ve sold you on the idea of regression/systems testing, and why as we move to a more serverless world, we need to establish a more holistic view on testing our systems as a whole, rather than only the components in isolation.&lt;/p&gt;

&lt;p&gt;It’s not to say that we should abandon the faithful unit test in favour of systems testing, but why we should not fall into the fallacy that just because our “code” is tested, our systems and workflows are also tested. &lt;/p&gt;

&lt;p&gt;This also highlights why Development, QA, and DevOps are not activities done in isolation by separate teams. Having a key understanding of each is required to implement and test such a workflow, and that ideally both the workflow and test framework should be implemented by a single cross functional team, rather than throwing tasks over the fence.&lt;/p&gt;

&lt;p&gt;For more on AWS and serverless, feel free to check out my other blogs on Dev.to, and my website, &lt;a href="https://manta-innovations.co.uk/"&gt;Manta Innovations&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>testing</category>
    </item>
    <item>
      <title>What was it like to attend a virtual conference? - AWS Online Summit Series</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Thu, 11 Jun 2020 17:39:12 +0000</pubDate>
      <link>https://dev.to/aws-builders/what-was-it-like-to-attend-a-virtual-conference-aws-online-summit-series-1h44</link>
      <guid>https://dev.to/aws-builders/what-was-it-like-to-attend-a-virtual-conference-aws-online-summit-series-1h44</guid>
      <description>&lt;h3&gt;
  
  
  What was a virtual conference like?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oph1mNzh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mb09x67ccsn8ee055u6x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oph1mNzh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mb09x67ccsn8ee055u6x.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before I go into talking about each talk, I thought I'd write a bit about what attending a virtual conference was like?&lt;/p&gt;

&lt;p&gt;The first thing I noticed is that all the videos were pre-recorded, rather than live streams. This meant that there was no back and forth with the presenters, and that any questions were instead answered by an "AWS Expert" via a text chat. That definitely didn't give me a feeling of being part of something in the same way a conference would. However it did mean that there were no latency or connection issues. It also meant that I could watch any of the talks once they had been released over the following days, compared to having to choose between which talks I could attend.&lt;/p&gt;

&lt;p&gt;Compared to a usual conference where I may attend with colleagues or friends, where we would talk and bounce around ideas about the subject matter, being virtual did not give me this sense of camaraderie. In hindsight, I should have tried to arrange for a group of friends to all dial into the conference on a shared zoom call, as I know this has worked for others in the past.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--26K-z9kF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hzpzwktihl1lbl6fmluk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--26K-z9kF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hzpzwktihl1lbl6fmluk.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the plus side, being able to listen to any talk I wanted to, and being able to quickly switch between talks if I realised the talk I was listening to wasn't actually of interest, gave me much more freedom.&lt;/p&gt;

&lt;p&gt;I would never get up and walk out of day talk if I were there in person, it's rude and distracting to the presenter. However, knowing that I could switch over to another stream within seconds meant I could be much more flexible in listening to a talk's opening 5 minutes, and deciding I wanted to stay for the whole thing.&lt;/p&gt;

&lt;p&gt;This flexibility also extends itself to the conference becoming more accessible for those that would not have typically been able to attend an in person conference. Whether due to travel, cost, physical accessibility, personal dependents, or work deadlines. There are many reasons why someone might not be able to attend a traditional conference, and many of these disappear in a virtual format.&lt;/p&gt;

&lt;h3&gt;
  
  
  Not as personal as traditional conferences, but there are lessons to be learnt
&lt;/h3&gt;

&lt;p&gt;Overall I would say this felt a lot less fun than a traditional conference, and I personally found it a lot more of a clinical and lonely experience.&lt;br&gt;
It might be awhile before we can attend conferences likes this again. The keynote and fireside chats did better at giving us a personal touch, as these were clearly filmed from the presenters personal office spaces, while the technical talks were presented in front of an AWS-orange screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ckjk1lrD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/69z5sy8xsoqsauoihr8t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ckjk1lrD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/69z5sy8xsoqsauoihr8t.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
It might be awhile before we can attend a conference like this again



&lt;p&gt;Given the circumstances I'm really glad AWS chose to do the summit, as an online summit is better than no summit, however if it's a choice between attending one online or in person, I'd prefer to go back to going in person. That said, it may be worth adopting some lessons from online conferences such as live recording the talks and sharing them with participants afterwards, as not all conferences provide these.&lt;/p&gt;

&lt;p&gt;However, who knows when we will be able to attend conferences again, so online conferences might become the norm for the foreseeable future.&lt;/p&gt;

&lt;h4&gt;
  
  
  If you've attended an online conference recently - what was your experience?
&lt;/h4&gt;

&lt;p&gt;As always, the content here describes my own thoughts and understandings from the material presented, not the views of the presenters, who I do not speak for.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is my last blog in my AWS’s Online Summit 2020 series. I hope you have enjoyed them.&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  For more on my AWS Summit series, check out the summaries on the talks I attended.
&lt;/h4&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>What is MLOps? - AWS Online Summit Series</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Tue, 09 Jun 2020 18:05:49 +0000</pubDate>
      <link>https://dev.to/aws-builders/what-is-mlops-aws-online-summit-series-4l8h</link>
      <guid>https://dev.to/aws-builders/what-is-mlops-aws-online-summit-series-4l8h</guid>
      <description>&lt;h3&gt;
  
  
  What is MLOps? - AWS Online Summit Series
&lt;/h3&gt;

&lt;p&gt;Having originally come from a Data Science and ML background, before focusing on Cloud implementations and Serverless, I was interested in AWS AI Specialist Solutions Architect &lt;em&gt;Julian Bright’s talk on Machine learning ops: DevOps for data science&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ops, Ops, Ops
&lt;/h3&gt;

&lt;p&gt;MLOps (Machine Learning Ops) is another new term, following the pattern of DevOps and GitOps (not to forget DevSecOps, DataOps, AIOps, and anything else you can append “Ops” onto), that I’m seeing more and more in the industry.&lt;/p&gt;

&lt;p&gt;MLOps largely revolves around solving similar issues as DevOps does - deployments. The only difference here being that instead of focusing on application deployment, MLOps is focused on model deployment.&lt;/p&gt;

&lt;p&gt;If I’m honest, I’m not sure we need another “Ops” title just to differentiate between a model and an application. In the end of the day a well written ML model is often a containerised application or binary object anyway, which are not that dissimilar from a standard containerised app or jar.&lt;/p&gt;

&lt;p&gt;But then again I work in the industry that brought us phrases such as “Python Ninja”, “10x Developer”, and recursive mindbender “SPARQL” (SPARQL Protocol and RDF Query Language); so maybe I shouldn’t be too critical.&lt;/p&gt;

&lt;h3&gt;
  
  
  ML still has a long way to go
&lt;/h3&gt;

&lt;p&gt;Julian opened by giving us some interesting facts about Machine Learning in industry. In particular, he quoted an Algorithma survey which found that “55% of companies have not deployed a machine learning model” (by “companies” Algorithma are referring to enterprise business, of which they had 750 respondents, though they do not publish what metric they used to classify a business as enterprise).&lt;/p&gt;

&lt;p&gt;Having worked on both the data science and software sides, I’m honestly not that surprised.&lt;/p&gt;

&lt;p&gt;ML is still a relatively novel concept to many enterprise businesses. From my personal experience many enterprise use cases are much more BI focused, and have yet to understand and tap into what a ML model can do for them, over their traditional dashboards and reports. The Algorithma survey shows 21% of the total survey were still evaluating use cases to see if they even had a need for an ML model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F61ay0dqv9lvxysgfzuwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F61ay0dqv9lvxysgfzuwf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: https://info.algorithmia.com/2020 



&lt;p&gt;In addition to this, the Algorithma survey, also found that of those 45% that had deployed a machine learning model, approximately 68% took somewhere between 1 week to over 1 year to deploy a single model.&lt;/p&gt;

&lt;p&gt;Keep in mind that in a best practice CI/CD workflow we deploy multiple times a day (and in GitOps we deploy each commit). So a single deployment taking even a week should be unacceptable in modern software design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs746du2rvljbgulbfgmb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs746du2rvljbgulbfgmb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: https://info.algorithmia.com/2020



&lt;h3&gt;
  
  
  Why so slow?
&lt;/h3&gt;

&lt;p&gt;Julian went on to talk about how the actual ML code is only a small part of an ML solution. Good machine learning solutions require accurate data, which needs, among others;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;collection&lt;/li&gt;
&lt;li&gt;verification&lt;/li&gt;
&lt;li&gt;feature&lt;/li&gt;
&lt;li&gt;engineering&lt;/li&gt;
&lt;li&gt;metadata management&lt;/li&gt;
&lt;li&gt;infrastructure management&lt;/li&gt;
&lt;li&gt;automation&lt;/li&gt;
&lt;li&gt;process management&lt;/li&gt;
&lt;li&gt;team structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these can introduce their own challenges. One of which he highlighted was that different teams could own parts of the process, each requiring their own handoff, integration points, and development workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fy1rw9v7ppd14yru6cr01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fy1rw9v7ppd14yru6cr01.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is something that I’ve definitely seen across all aspects of software development, it is not specific to ML.&lt;/p&gt;

&lt;p&gt;My own opinion on this matter is that the developer/engineer/scientist who develops the source code (whether that be an app or a model), should be the one to take it through its entire lifecycle through to deployment. This in my opinion speeds up the delivery, and provides a more coherent and consistent code base for the model, and avoids “throwing it over the fence” to other teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploying and Orchestrating ML Models
&lt;/h3&gt;

&lt;p&gt;Julian went on to talk about how we can use the AWS Developer Tools (Code Build, Deploy, Pipeline, etc) not only for deploying traditional apps but for ML models too, which follows the patterns demonstrated in Loh Yiang Meng’s talk: CI/CD at scale: Best practices with AWS DevOps services.&lt;/p&gt;

&lt;p&gt;This did make me think, if we can use the same processes and tooling for both application and ML models, then why should we treat ML models any differently to applications?&lt;/p&gt;

&lt;p&gt;Anyway, I deviate.&lt;/p&gt;

&lt;p&gt;So now that we are able to deploy our model, how do we orchestrate it?&lt;/p&gt;

&lt;p&gt;Compared to apps, many ML and Data Science models are written more as scripts than a service; and as highlighted, we may need to perform some small steps such as data cleansing and validation prior to using our model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serverless ML
&lt;/h3&gt;

&lt;p&gt;Julian demonstrated how we can use a number of tools to orchestrate SageMaker scripts to perform these steps. He mentioned a number of operators including Apache Airflow, Netflix Metaflow, Kubernetes, and AWS Step Functions (which provides first class support for SageMaker scripts).&lt;/p&gt;

&lt;p&gt;This was interesting to me, I’m a huge AWS Step Functions fan, having used it extensively within my serverless AWS implementations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fe2heja7ry77fj4vpatsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fe2heja7ry77fj4vpatsl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: https://aws.amazon.com/step-functions/use-cases



&lt;p&gt;Despite being around since 2015, AWS Step Functions does not have first class support for most other AWS services, and requires you to write a small Lambda function to invoke the actual service. The more AWS services that Step Functions gives first class support for, the better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Still some way to go
&lt;/h3&gt;

&lt;p&gt;Overall I came away thinking that ML in enterprise still has a long way to go, and that we’re still seeing a lot of gatekeeping in this area.&lt;/p&gt;

&lt;p&gt;We have data engineers writing code to deliver the data, data scientists writing models, developers writing apps to turn the model into a service, and operations deploying it to environments.&lt;/p&gt;

&lt;p&gt;No wonder things are slow and complex when we have this many handoffs. If approaches such as MLOps can assist in this then that’s great, but to me much of the deployment issues feel more like business and process problems than technical or tools based ones.&lt;/p&gt;

&lt;p&gt;These are of course my own opinions, and I would welcome to hear your thoughts on MLOps?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is part of my ongoing series on AWS’s recent Online Summit 2020.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As always, the content here describes my own thoughts and understandings from the material presented, not the views of the presenters, who I do not speak for.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>machinelearning</category>
      <category>devops</category>
    </item>
    <item>
      <title>CI/CD at scale - AWS Online Summit Series</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Thu, 04 Jun 2020 18:30:43 +0000</pubDate>
      <link>https://dev.to/aws-builders/ci-cd-at-scale-aws-online-summit-series-59jj</link>
      <guid>https://dev.to/aws-builders/ci-cd-at-scale-aws-online-summit-series-59jj</guid>
      <description>&lt;h3&gt;
  
  
  What is Best Practice?
&lt;/h3&gt;

&lt;p&gt;While I have my own opinion of best practice, I think it’s good to constantly check your standards against peers and industry leaders to ensure you haven’t fallen behind.&lt;/p&gt;

&lt;p&gt;Therefore I decided to dial into &lt;em&gt;AWS Solution Architect Loh Yiang Meng’s talk: CI/CD at scale: Best practices with AWS DevOps services&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Overall I felt that this talk was best pitched for those unfamiliar with the AWS CICD tools, as he gave a good overview of the AWS Developer tools (Code Commit/Build/Deploy/Pipeline), and how these integrate with each other. For more info on these check out the docs on &lt;a href="https://aws.amazon.com/codepipeline/" rel="noopener noreferrer"&gt;AWS CodePipeline&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Codepipeline now supports integration with Bitbucket Cloud
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fc8aan1d46sbw2y3878ma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fc8aan1d46sbw2y3878ma.png" alt="Alt Text"&gt;&lt;/a&gt; Source: CI/CD at scale: Best practices with AWS DevOps services -   Loh Yiang Meng, AWS Solution Architect&lt;/p&gt;

&lt;p&gt;One thing that he made a point of highlighting is that CodePipeline now supports integration with Bitbucket Cloud (I believe this went into Beta last December), which leaves GitLab as the only major git provider not supported. &lt;/p&gt;

&lt;p&gt;While I’ve used GitLab extensively in enterprise environments (and much prefer the experience over Bitbucket or CodeCommit), between this and all the great stuff GitHub is doing recently with Codespaces and Actions, I really can’t see any reason to not be using GitHub in 2020.&lt;/p&gt;

&lt;h3&gt;
  
  
  Electrify’s Journey with AWS CICD
&lt;/h3&gt;

&lt;p&gt;Lastly, Loh introduced Martin Lim, CEO, and Arshad Zackeriya, Senior DevOps Engineer, from Electrify Asia to talk about their CICD journey with AWS. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhtcgpt9154294xvebl3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhtcgpt9154294xvebl3t.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: CI/CD at scale: Best practices with AWS DevOps services -   Loh Yiang Meng, AWS Solution Architect



&lt;p&gt;Here they gave us an overview of their CICD pipeline, which followed Loh’s use of CodeCommit, CodeBuild, ECR, and CodePipeline for best practice CI. However they used a Lambda to deploy to their EKS cluster (deployment to EKS is something that CodeDeploy has yet to support), and then went further and built an Alexa skill to trigger deployments. &lt;/p&gt;

&lt;p&gt;While their design of sourcing (CodeCommit), building (CodeBuild), publishing (ECR), and orchestration (CodePipeline), followed best practice CI, and the Alexa skill definitely had the wow factor, this still involved some manual intervention to trigger deployments. Sure the Alexa skill made deployments easier, but is it really any different from someone clicking “run” on a jenkins job? &lt;/p&gt;

&lt;p&gt;I’m also not sure I’d trust Alexa with doing my production deployments - what happens if a colleague said the wrong release number?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1ub44apq266xfb10idq9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1ub44apq266xfb10idq9.png" alt="Alt Text"&gt;&lt;/a&gt; Source: boredpanda.com&lt;/p&gt;

&lt;h3&gt;
  
  
  “DevOps is not a product, but a culture”
&lt;/h3&gt;

&lt;p&gt;Overall, Loh Yiang Meng was very engaging as a presenter and some of his comments on best practice definitely aligned with my own. In particular he highlighted that we should automate everything because humans make mistakes &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fu34htev2tt74946cqp7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fu34htev2tt74946cqp7p.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: CI/CD at scale: Best practices with AWS DevOps services -   Loh Yiang Meng, AWS Solution Architect



&lt;p&gt;&lt;em&gt;This is part of my ongoing series on AWS’s recent Online Summit 2020&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As always, the content here describes my own thoughts and understandings from the material presented, not the views of the presenters, who I do not speak for.&lt;/p&gt;

&lt;h4&gt;
  
  
  For more on my AWS Summit series, check out the summaries on the talks I attended.
&lt;/h4&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>docker</category>
    </item>
    <item>
      <title>Enterprise &amp; Containerization - AWS Online Summit Series</title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Wed, 03 Jun 2020 16:44:57 +0000</pubDate>
      <link>https://dev.to/aws-builders/enterprise-containerization-aws-online-summit-series-22p4</link>
      <guid>https://dev.to/aws-builders/enterprise-containerization-aws-online-summit-series-22p4</guid>
      <description>&lt;h3&gt;
  
  
  What’s hard about containers?
&lt;/h3&gt;

&lt;p&gt;I tend to work with a lot of enterprise clients and, as much as I believe in and desire modern workflows with Kubernetes, Flux, and GitOps; my experience has been that many enterprise clients are still stuck in the traditional delivery format and have a tentative understanding of containerization and microservices.&lt;/p&gt;

&lt;p&gt;I believe this is due to the business concept of an “application” being easier to comprehend as a single monolithic codebase rather than a set of loosely coupled microservices. So I was interested to hear &lt;em&gt;AWS Senior Partner Solutions Architect Gaurav Arora’s&lt;/em&gt; thoughts on how we as technologists and consultants deal with that, and dialled into his talk on &lt;em&gt;Enterprise cloud migration meets application containerization&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Gaurav presented his approach to containerization of enterprise applications using a plan of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prepare&lt;/li&gt;
&lt;li&gt;Discover&lt;/li&gt;
&lt;li&gt;Design&lt;/li&gt;
&lt;li&gt;Migrate&lt;/li&gt;
&lt;li&gt;Operation&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Prepare
&lt;/h4&gt;

&lt;p&gt;The Prepare stage it’s all about understanding the enterprise viewpoint, and how to prepare them for containerization.&lt;/p&gt;

&lt;p&gt;He spoke of his experience with enterprise clients and how while many of them may have heard of containerization and potentially even kubernetes, some are still in the dark as to why these would benefit them.&lt;/p&gt;

&lt;p&gt;Those that were aware of the benefits cited such as “increase agility”, “productivity”, “cost optimisation”, and this is exactly the arguments we should hone in on when evangelising containerization for enterprise.&lt;/p&gt;

&lt;h4&gt;
  
  
  Discover
&lt;/h4&gt;

&lt;p&gt;Gaurav next spoke about the Discovery stage, and how when looking at pre-existing enterprise applications we need to assess what elements can be containerized.&lt;/p&gt;

&lt;p&gt;Do we need binaries? How does the licence work inside a container? Do we bundle our own dependencies? Is it stateless? Can it be containerized?&lt;/p&gt;

&lt;p&gt;This is something that I hadn’t appreciated. For so long I’ve been able to run any app inside a docker container and build my applications with docker in mind.&lt;/p&gt;

&lt;p&gt;I’d forgotten that so much enterprise software was reliant on obscure versions of specific software that might be entirely closed source, what about if an application is only built to run on some Windows platform - how do I containerize that?!?!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmrqif2wh9wxq43j0zfov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmrqif2wh9wxq43j0zfov.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: Enterprise cloud migration meets application containerization - Gaurav Arora, AWS Senior Partner Solutions Architect



&lt;h4&gt;
  
  
  Design, Migrate &amp;amp; Operation
&lt;/h4&gt;

&lt;p&gt;Gaurav talked about how for both Design and Migration, enterprise should consider a three tier/stage approach.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Stage one - would be the design and creation of the lowest level of the cloud, that of VPC’s, security groups, accounts, and tagging. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stage two - would be the design and creation of the cluster environment, would you use ECS or Fargate, what about kubernetes, do you use ECR, what about load balancers. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stage three - would be the actual container architecture, which base image do you use, how many replicas should we run?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fff4t4yfqdqfgypqk9b1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fff4t4yfqdqfgypqk9b1m.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Overall, although I completely agree with Gaurav and understand how recent containerization is in the eyes of some enterprise business, more than anything I was left a little disheartened.&lt;/p&gt;

&lt;p&gt;The fact that we are still talking about how we containerize enterprise applications shows how many applications there are out there that are still waiting to get, or just can’t be containerized.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is part of my ongoing series on AWS’s recent Online Summit 2020.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As always, the content here describes my own thoughts and understandings from the material presented, not the views of the presenters, who I do not speak for.&lt;/p&gt;

&lt;h4&gt;
  
  
  For more on my AWS Summit series, check out the summaries on the talks I attended.
&lt;/h4&gt;

</description>
      <category>aws</category>
      <category>docker</category>
      <category>serverless</category>
    </item>
    <item>
      <title>AWS meets GitOps </title>
      <dc:creator>Joel Lutman</dc:creator>
      <pubDate>Thu, 28 May 2020 17:07:37 +0000</pubDate>
      <link>https://dev.to/aws-builders/aws-meets-gitops-c7a</link>
      <guid>https://dev.to/aws-builders/aws-meets-gitops-c7a</guid>
      <description>&lt;p&gt;As someone who’s spending more and more time with kubernetes and but has only dipped my toe into GitOps, I was interested to hear what the AWS approach would be to GitOps.&lt;/p&gt;

&lt;p&gt;Therefore, I dialled into &lt;em&gt;AWS Solution Architect Jason Umiker’s Kubernetes GitOps on AWS&lt;/em&gt;, at the &lt;a href="https://aws.amazon.com/events/summits/?global-event-sponsorship.sort-by=item.additionalFields.sortdate&amp;amp;global-event-sponsorship.sort-order=asc" rel="noopener noreferrer"&gt;AWS Summit Online, May 2020&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This talk did not disappoint. &lt;/p&gt;

&lt;h3&gt;
  
  
  I've become a Flux convert
&lt;/h3&gt;

&lt;p&gt;After covering the basics concepts of CICD we went straight into an overview of &lt;a href="https://fluxcd.io/" rel="noopener noreferrer"&gt;Flux&lt;/a&gt;, the GitOps operator for Kubernetes and part of the CNCF; and what GitOps actually means to a workflow, mainly being able to control deployments via Pull Requests to your master/release branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnr8ha1bvi808scykmwne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnr8ha1bvi808scykmwne.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A convincing argument for GitOps.
&lt;/h3&gt;

&lt;p&gt;GitOps is a very new approach for release management and deployment, especially to those Enterprise clients, many of whom are still struggling with CICD and remain on traditional timed release cycles.&lt;/p&gt;

&lt;p&gt;He highlighted that all developers already use git for many great reasons that apply to not only development of software but release management too; namely a single source of truth, audit trail, built in peer review, and ease in gatewaying change.&lt;/p&gt;

&lt;p&gt;By tying the actual release management and deployment to git, we can now have a single tool in control of not only our development and iteration, but also our deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftfh4bvlmczkjv1mnkzze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftfh4bvlmczkjv1mnkzze.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
 Source: https://dzone.com/articles/what-devops-is-to-the-cloud-gitops-is-to-cloud-nat 





&lt;h3&gt;
  
  
  Ghost in the machine 👻
&lt;/h3&gt;

&lt;p&gt;Jason went on to explain and demonstrate how GitOps with Flux could be achieved on AWS using AWS CodeBuild and CodePipeline, alongside external kubernetes operators to deploy a change to his &lt;a href="https://ghost.org/" rel="noopener noreferrer"&gt;Ghost&lt;/a&gt; service running on EKS. &lt;/p&gt;

&lt;p&gt;Here he merged a PR that changed the RDS definition which the Ghost app used for storage (an AWS resource managed by the AWS CDK) and a change to his Ghost deployment (a kubernetes resource defined by the manifest). Because he is using GitHub as a source, CodePipeline is able to monitor the repo for changes and initiate a simple pipeline of Source (from git) and CodeBuild only, with the trick being that the CodeBuild stage is actually doing our deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4c71fchvhyvmw2ihgbq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4c71fchvhyvmw2ihgbq4.png" alt="Alt Text"&gt;&lt;/a&gt; Source: Kubernetes GitOps on AWS - Jason Umiker, AWS Solution Architect &lt;/p&gt;

&lt;p&gt;This CodeBuild stage actually has a very simple buildspec.yml that just issues the &lt;code&gt;cdk deploy&lt;/code&gt; (for those not familiar with AWS CDK this is the equivalent of a &lt;code&gt;terraform apply&lt;/code&gt;) which applies the change to the RDS resource. At the same time we have Flux monitoring the same repository via a webhook, which has performed a new deployment for the change to the Ghost manifest yaml.&lt;/p&gt;

&lt;p&gt;And there we had it, in a single PR he had committed, reviewed, and deployed a change to both the AWS managed infrastructure, and the Kubernetes managed service.&lt;/p&gt;

&lt;h3&gt;
  
  
  I need some more alone time with Flux 😉
&lt;/h3&gt;

&lt;p&gt;This talk was great and made me realise that I need to spend more time with Flux, especially in light of the Argo Flux collaboration which happened back in November, as this is the exact CICD workflow I’ve always desired.&lt;/p&gt;

&lt;p&gt;From a developers point of view being able to finish my tasks with a PR is the ideal. I don’t need to worry if my PR made it into the “Friday release”, or whether there was any issues during deployment, if it’s merged it’s done.&lt;/p&gt;

&lt;p&gt;This is part of my ongoing series on AWS’s recent Online Summit 2020. &lt;/p&gt;

&lt;p&gt;As always, the content here describes my own thoughts and understandings from the material presented, not the views of the presenters, who I do not speak for.&lt;/p&gt;

&lt;h4&gt;
  
  
  For more on my AWS Summit series, check out the other summaries on the talks I attended.
&lt;/h4&gt;

</description>
      <category>aws</category>
      <category>git</category>
      <category>kubernetes</category>
      <category>serverless</category>
    </item>
  </channel>
</rss>
