<?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: Luca Silvestri</title>
    <description>The latest articles on DEV Community by Luca Silvestri (@silvestriluca).</description>
    <link>https://dev.to/silvestriluca</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%2F746875%2Ff435098e-8139-4c0e-970d-440a703ff3e1.jpeg</url>
      <title>DEV Community: Luca Silvestri</title>
      <link>https://dev.to/silvestriluca</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/silvestriluca"/>
    <language>en</language>
    <item>
      <title>Digital Twin service: extracting data continuously from a data pipeline with a fully serverless infrastructure.</title>
      <dc:creator>Luca Silvestri</dc:creator>
      <pubDate>Mon, 08 Nov 2021 10:11:02 +0000</pubDate>
      <link>https://dev.to/silvestriluca/digital-twin-service-extracting-data-continuously-from-a-data-pipeline-with-a-fully-serverless-infrastructure-28c2</link>
      <guid>https://dev.to/silvestriluca/digital-twin-service-extracting-data-continuously-from-a-data-pipeline-with-a-fully-serverless-infrastructure-28c2</guid>
      <description>&lt;p&gt;&lt;em&gt;This post has been originally published as Case Study on &lt;a href="https://www.amanox.ch/case-study-sbb-cargo-digitaltwinservice/"&gt;Amanox blog&lt;/a&gt;. Customer is &lt;a href="https://www.sbbcargo.com/"&gt;SBB Cargo&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@ashwinv11?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Ashwin Vaswani&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/digital?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: Digital Twin.
&lt;/h2&gt;

&lt;p&gt;Our customer needed to extract the most recent data points from a wide range of live data provider.&lt;br&gt;
Those data are continuously acquired through a set of data pipelines (as described in this blog article).&lt;br&gt;
Also customer wanted that the most recent data points were made available through a HTTP REST API.&lt;br&gt;
The resulting service has been called "Digital Twin", because it collects and exposes the most recent data for a wide array of data sets coming from physical objects, making them a "digital representation" of objects' states.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical challenges.
&lt;/h2&gt;

&lt;p&gt;The data has various structure and formats, according to which service they come from. Many of these services provide near real time data which are acquired with a rate that vary from 15 minutes to 1 second. Those data need to be filtered in real time, normalized, and persisted in a database that can be subsequently queried from the API users.&lt;/p&gt;

&lt;h2&gt;
  
  
  A serverless solution based on AWS.
&lt;/h2&gt;

&lt;p&gt;We wanted the solution to be consistent with data pipelines architecture and with the "serverless design philosophy" which we've successfully embraced together with the customer.&lt;br&gt;
We also wanted to keep using tools and managed services provided by AWS.&lt;br&gt;
During architectural design, we kept an eye to allow easy maintenance and incremental extensions.&lt;br&gt;
The resulting architecture is depicted in the following picture and has been described using Terraform as IaC tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xpplWRgr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wkiw2d7k911gsq6utcg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xpplWRgr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wkiw2d7k911gsq6utcg.png" alt="Digitaltwin" width="800" height="940"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Digital Twin service takes fully advantage of the pluggability of data streaming architecture: it collects data by hooking to the Kinesis Streams/Firehose buffers which are deployed in every data pipelines.&lt;br&gt;
The services used in this implementation are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Kinesis Analytics as data extraction service.&lt;/li&gt;
&lt;li&gt;AWS Kinesis Stream as data stream service provider.&lt;/li&gt;
&lt;li&gt;AWS Lambda as computing infrastructure to run storage access microservice.&lt;/li&gt;
&lt;li&gt;Amazon DynamoDB as persistence layer.&lt;/li&gt;
&lt;li&gt;AWS API Gateway to provide HTTPs REST interfaces.&lt;/li&gt;
&lt;li&gt;Amazon Cognito to provide OAuth2 infrastructure.&lt;/li&gt;
&lt;li&gt;AWS KMS as encryption service.&lt;/li&gt;
&lt;li&gt;AWS IAM for policy / roles definition.&lt;/li&gt;
&lt;li&gt;AWS CloudWatch to provide logging infrastructure and observability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What follows is the description of each component.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Extractor =&amp;gt; AWS Kinesis Analytics:&lt;/strong&gt; Once data are retrieved by pipeline's sourcing workers, they are buffered for a configurable amount of time in Kinesis Stream, being available for near real-time analysis, ETL transformations or continuous monitoring. By creating a Data Extractor as Kinesis consumer, we were able to leverage the almost instant data availability in Kinesis and modular architecture of data streaming services. Instead of implementing a Kinesis consumer from scratch, we've opted for using Kinesis Analytics and its SQL capabilities. Hence, data extractor became a simple Kinesis Analytics jobs which does 3 things: mapping data properties ("data templating"), continuously extracting a subset of them ("data pumping") and providing a normalized output which is sent to Digitaltwin Kinesis Stream ("data delivery"). By hooking a different data extractor for every data pipeline with consistent output, we've achieved data normalization across all data pipelines. All this has been done by just defining a Kinesis Analytics Terraform resource and a set of SQL statements saved in a single file for every Extractor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digitaltwin stream =&amp;gt; AWS Kinesis Stream:&lt;/strong&gt; A data stream with short data expiration is a good choice to buffer extracted data as they wait to be persisted (or further analyzed in future improvements of this architecture). A good choice on AWS is to use Kinesis Stream.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage Access microservice =&amp;gt; AWS Lambda:&lt;/strong&gt; We've used AWS Lambda as the computing infrastructure to build a serverless microservice that writes and reads data to/from the persistence layer. Lambda has been chosen because of its flexible invocation model: the code to access the persistence layer is the same regardless which service needs it and it can be triggered by a Kinesis Event (data coming from Extractors) or by an API Gateway one (REST API request by an external consumer service).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistance layer =&amp;gt; Amazon DynamoDB:&lt;/strong&gt; We needed to store the most recent value for a given component metric. This access pattern can be efficiently served by a K-V store, where the Key is Component.MetricName and the value is the actual metric (plus some metadata to identify its lineage). DynamoDB is a serverless NoSQL store which fits perfectly in this scenario. Thanks to conditional writing capability it's simple to enforce that a write attempt is successful only with the most recent data. Through autoscaling capabilities DynamoDB is also capable of absorbing any amount of access load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTPs REST interfaces =&amp;gt; AWS API Gateway:&lt;/strong&gt; To provide external access to Digital Twin data we've deployed an API Gateway which has been integrated with Storage Access microservice (that retrieves and serves data). It's a serverless solution, fully integrated with AWS Lambda for computing needs and Amazon Cognito for user/service-based access control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth 2.0 infrastructure =&amp;gt; Amazon Cognito:&lt;/strong&gt; Implementing OAuth 2.0 server side is not trivial. Cognito offers a set of tools and resources that makes a lot easier to implement OAuth 2.0 flows, providing AUTH endpoints and signed JWT tokens to authorized users/service clients. It's also fully integrated with API Gateway for simple JWT auth checks, while more complex authorization logics can be implemented by using a Lambda Authorizer in API Gateway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security/1 =&amp;gt; KMS:&lt;/strong&gt; Data in transit and at rest are encrypted using KMS with scope limited CMKs (Customer Master Keys).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security/2 =&amp;gt; Lambda specific role &amp;amp; policies:&lt;/strong&gt; Lambda functions run using scoped-down permissions, expressed through IAM policy documents attached to a specific role which is assigned to the lambda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security/3 =&amp;gt; Kinesis Analytics specific role &amp;amp; policies:&lt;/strong&gt; Kinesis Analytics execution is linked to scoped-down permissions, expressed through IAM policy documents attached to a specific role which is assigned to the Kinesis Analytics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging and observability =&amp;gt; CloudWatch:&lt;/strong&gt; All logs (execution, access, errors) are collected by CloudWatch. Operational metrics are plotted in a specific CloudWatch Dashboard, providing an easy way to set custom alarms for any kind of DevOps activities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything in this implementation is described using IaC and under version control in a git repository.&lt;br&gt;
A CICD pipeline is attached to the repository, providing automatic infrastructure build and deployment at every new commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusions.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Building this Digital Twin service was not trivial given the many moving parts and heterogeneous data sources, with different acquisition rates and structure.&lt;/li&gt;
&lt;li&gt;By adopting the data pipeline paradigm and by integrating the service in that paradigm, leveraging the data stream architecture, the problem can be divided in smaller and simpler parts, making it easier to solve from the methodological point of view.&lt;/li&gt;
&lt;li&gt;By using the tools and services provided by AWS, all the infrastructure and application server provisioning is offloaded completely to the cloud provider, letting us developers and our customer to focus only on business logic and making the implementation achievable in few days by a single developer with greatly reduced operational costs.&lt;/li&gt;
&lt;li&gt;Maintenance is provided through IaC and git commits.&lt;/li&gt;
&lt;li&gt;DevOps new services can be easily introduced by leveraging operational metrics, most of them collected in the CloudWatch dashboard for live surveillance.&lt;/li&gt;
&lt;li&gt;Also expanding the service to future datasets will be as simple as adding a new Kinesis Analytics job and a new SQL set of statements, making this implementation fully modular.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>serverless</category>
      <category>aws</category>
      <category>bigdata</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Data lakes: building a serverless data pipeline</title>
      <dc:creator>Luca Silvestri</dc:creator>
      <pubDate>Mon, 08 Nov 2021 09:50:23 +0000</pubDate>
      <link>https://dev.to/silvestriluca/data-lakes-building-a-serverless-data-pipeline-2d1n</link>
      <guid>https://dev.to/silvestriluca/data-lakes-building-a-serverless-data-pipeline-2d1n</guid>
      <description>&lt;p&gt;&lt;em&gt;This post has been originally published as Case Study on &lt;a href="https://www.amanox.ch/case-study-sbbcargo/" rel="noopener noreferrer"&gt;Amanox blog&lt;/a&gt;. Customer is &lt;a href="https://www.sbbcargo.com/" rel="noopener noreferrer"&gt;SBB Cargo&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Header photo by &lt;a href="https://unsplash.com/@riegal?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;René Riegal&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/silo?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The silo problem
&lt;/h2&gt;

&lt;p&gt;In modern businesses, data are ubiquitous and come from a wide array of different sources like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Company website(s).&lt;/li&gt;
&lt;li&gt;Company app(s).&lt;/li&gt;
&lt;li&gt;IoT devices.&lt;/li&gt;
&lt;li&gt;CRMs.&lt;/li&gt;
&lt;li&gt;Social Media.&lt;/li&gt;
&lt;li&gt;Inventories &amp;amp; logistics tools (like SAP).&lt;/li&gt;
&lt;li&gt;Data warehouses.&lt;/li&gt;
&lt;li&gt;Internal reports.&lt;/li&gt;
&lt;li&gt;Sales channels.&lt;/li&gt;
&lt;li&gt;You name it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main problem of such a scenario is that each of those data are saved into so called "vertical siloes" and those siloes aren't designed to allow cross-siloes data sharing.  &lt;/p&gt;

&lt;p&gt;This root problem, generates many other issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trying to analyze those data with aggregation tools and transversally across siloes requires a lot of error-prone and tedious handwork, involving data exporting, data extraction, spreadsheet "mambo-jambos": in few years, companies end up with a set of handcrafted tools.&lt;/li&gt;
&lt;li&gt;Such handcrafted tools are quite fragile and heavily dependent on who implemented it originally, making them a nightmare to be maintained.&lt;/li&gt;
&lt;li&gt;When it comes to data, it's not clear what the "single source of truth is".&lt;/li&gt;
&lt;li&gt;It's even more unclear where data reside, especially in mid-large organizations.&lt;/li&gt;
&lt;li&gt;Raw (unmodified) data are often missing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following diagram summarize the silo architecture.&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%2Fuploads%2Farticles%2F78ba7qrpyi2z9k14pct8.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%2Fuploads%2Farticles%2F78ba7qrpyi2z9k14pct8.png" alt="Silo architecture"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;b&gt;Silo architecture&lt;/b&gt;


 

&lt;h2&gt;
  
  
  The data lake solution.
&lt;/h2&gt;

&lt;p&gt;A way to solve the "vertical siloes" problem is to build a data lake. It's a place where data, coming from different sources, can be stored and accessed in a consistent way.&lt;br&gt;
Data are stored in theirs natural/raw format, making possible future data manipulation.&lt;br&gt;
Sometime transformed data are stored in data lake also; they are necessary for tasks such as reporting, visualization, advanced analytics, and machine learning.&lt;br&gt;
Usually data "lineage" (where data comes from, when it was acquired and manipulated and by whom/what) is saved together with datasets (as metadata or using some easy-to-search way).&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a data pipeline?
&lt;/h2&gt;

&lt;p&gt;To "hydrate" a data lake, workers that acquire data from sources (siloes) need to be provisioned.&lt;br&gt;
Each worker is specific for a data source and is attached to services that allow further near-real-time data analysis.&lt;br&gt;
This set of functionalities (worker + services) is commonly referred as "data pipelines". In analogy to water pumps and pipes, data are extracted ("pumped") from sources and "flow" through services until they land in data lakes or specific storage/database solutions.&lt;br&gt;
The following pictures exemplify these concepts.&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%2Fuploads%2Farticles%2F2q8zl3r2aog7treq8aps.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%2Fuploads%2Farticles%2F2q8zl3r2aog7treq8aps.png" alt="Datalake"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;b&gt;
Data lake and data pipelines&lt;/b&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%2Fuploads%2Farticles%2F1cwf6a16k39weal85oaf.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%2Fuploads%2Farticles%2F1cwf6a16k39weal85oaf.png" alt="Data pipeline"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;b&gt;Data pipeline general architecture&lt;/b&gt;


 

&lt;h2&gt;
  
  
  Going serverless
&lt;/h2&gt;

&lt;p&gt;Building a data lake and hydrating data pipelines can be achieved using:&lt;br&gt;
a) On-prem services.&lt;br&gt;
b) Cloud based self-managed services.&lt;br&gt;
c) Cloud based fully managed services.&lt;br&gt;
d) Cloud based serverless infrastructure.  &lt;/p&gt;

&lt;p&gt;The level of commitment required to operate the previous architectures significally decreases from a) to d).&lt;br&gt;
On a) all the ops work is on IT team, including hardware management.&lt;br&gt;
On d) the only things that the IT team must focus on are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;application logic development (Worker logic);&lt;/li&gt;
&lt;li&gt;using the right tools for the job and use their API, following proper security best practices.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since data lakes involve a lot of moving part and different technologies, going fully serverless is a choice worth to be considered to reduce operational complexity.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation on AWS
&lt;/h2&gt;

&lt;p&gt;AWS is all about choices, so there are services to build each of the architectures mentioned before. Customers can go from fully on-prem (renting bare metal machines) to fully serverless event-driven infrastructure. And even in a serverless scenario there are several options to choose from.&lt;br&gt;
What follows is an implementation that we've developed for one of our key customers and that is running in production.&lt;br&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%2Fuploads%2Farticles%2Fry2g3xv428mp0dt17xgj.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%2Fuploads%2Farticles%2Fry2g3xv428mp0dt17xgj.png" alt="Implementation on AWS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The services used in this implementation are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda as computing infrastructure to run data sourcing worker and transformation worker.&lt;/li&gt;
&lt;li&gt;AWS Kinesis stream / Firehose as data stream service provider.&lt;/li&gt;
&lt;li&gt;Amazon S3 as data lake storage system.&lt;/li&gt;
&lt;li&gt;AWS KMS as encryption service.&lt;/li&gt;
&lt;li&gt;AWS System Manager Parameter Store as repository for secrets.&lt;/li&gt;
&lt;li&gt;AWS IAM for policy / roles definition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's go briefly on each component to analyze the logic behind the architectural choices.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Sourcing Worker =&amp;gt; AWS Lambda:&lt;/strong&gt; This worker needs to connect to the silo/ service and to extract data from it. According to the type of data and its usage, this worker could run few times per day or continuously. In a serverless environment on AWS, the choices are:

&lt;ul&gt;
&lt;li&gt;Lambda (scheduled execution).&lt;/li&gt;
&lt;li&gt;A container deployed on ECS using Fargate as computing infrastructure (continuous execution).
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;We've opted for Lambda because customer desired to have a data pipeline architecture able to deal with different data frequency; for nearly continuous data flows, a short invocation rate coupled with small datasets per execution provides a good solution to use a simple Lambda function instead of a more complicated containerized worker, keeping also architectural consistency with discrete data flows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transformation Worker =&amp;gt; AWS Lambda:&lt;/strong&gt; This worker transforms data according to specific criteria, which depend on the actual data source. Lambda is the recommended solution to be used together with AWS Kinesis Firehose. An input event is generated from Kinesis with raw sourced data, Lambda process and transform data according to the logic implemented by code and the transformed data is sent back to Kinesis Firehose for that can be persisted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stream Service =&amp;gt; Kinesis Stream / Firehose:&lt;/strong&gt; Streams are particularly useful in data ingestion because they buffer input data for a configurable period and enable a pluggable architecture to consume, analyze and process data, in batch and/or near real-time. Kinesis Firehose is a serverless managed data stream service, whose purpose is to dump data continuously to a specific target type. In this specific case, the target is a S3 bucket. Like Kinesis Stream, Firehose can generate events attaching data flowing in it. Those events can be used to execute code through Lambda or to trigger complex tasks using AWS Step-Functions or other AWS services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data lake =&amp;gt; Amazon S3:&lt;/strong&gt; Infinite storage capacity, configurable lifecycle policies and custom metadata are perfect to build a data lake. Amazon S3 offers that, together with a powerful API and a seamless integration with other AWS services, like Firehose. The data lake may consist in a single bucket or in multiple ones (raw data, transformed data, aggregated data...).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security/1 =&amp;gt; KMS:&lt;/strong&gt; Data in transit and at rest are encrypted using KMS with scope limited CMKs (Customer Master Keys).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security/2 =&amp;gt; Lambda specific role &amp;amp; policies:&lt;/strong&gt; Lambda functions run using scoped-down permissions, expressed through IAM policy documents attached to a specific role which is assigned to the lambda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security/3 =&amp;gt; Secrets:&lt;/strong&gt; To store secrets and service wide parameters, Parameter Store is used. Secrets are saved as secure-strings and encrypted with KMS using a dedicated CMK.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benefits/1:&lt;/strong&gt; One of the key properties of this implementation is its modularity: once it is described by using some IaC tools (like CloudFormation or, like in our case, Terraform) it can be easily templated and reproduced for every other data-pipelines and in different environments, as the only differentiation between pipelines is the code in Lambdas and its execution parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benefits/2:&lt;/strong&gt; Standardizing architecture with templates helps tremendously with multi-region failover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benefits/3:&lt;/strong&gt; Using serverless and fully decoupled stateless services also makes them scalable out-of-the-box.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Data lakes are the key for freeing data and making them available across multiple users and standard tools.&lt;br&gt;
They are also quite challenging to be correctly implemented from scratch, as they require cloud expertise and good development skills. Having the right partner in this phase helps and speeds up the process a lot.&lt;br&gt;
Major cloud providers like AWS provide a huge set of tools and services to make the transition from data-siloes to data ubiquity much easier and operationally sustainable in the long term. &lt;br&gt;
We proved that with our customer, where a fully remote &lt;a href="https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/two-pizza-teams.html" rel="noopener noreferrer"&gt;pizza-box size team&lt;/a&gt; developed and deployed to production multiple data-pipelines, making data widely accessible to business and operational units. &lt;br&gt;
In 2021 there are less excuses to not introduce data-lakes and automated data ingestion through data-pipelines in company data strategy.&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>bigdata</category>
      <category>aws</category>
      <category>datapipelines</category>
    </item>
  </channel>
</rss>
