<?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: Wonder Agudah</title>
    <description>The latest articles on DEV Community by Wonder Agudah (@wonder717).</description>
    <link>https://dev.to/wonder717</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%2F656206%2F90ddb2b8-17fc-4950-b7f6-1b1d1846b20a.png</url>
      <title>DEV Community: Wonder Agudah</title>
      <link>https://dev.to/wonder717</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wonder717"/>
    <language>en</language>
    <item>
      <title>Analysing Drivers of Digital Transformation in Corporate Innovation Capacity Using Amazon SageMaker Studio and Kaggle API</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Tue, 30 Dec 2025 14:46:56 +0000</pubDate>
      <link>https://dev.to/aws-builders/analysing-drivers-of-digital-transformation-in-corporate-innovation-capacity-using-amazon-sagemaker-2md9</link>
      <guid>https://dev.to/aws-builders/analysing-drivers-of-digital-transformation-in-corporate-innovation-capacity-using-amazon-sagemaker-2md9</guid>
      <description>&lt;p&gt;The discourse on digital transformation has received a myriad of contributions on how the advent of technological tools, cloud computing, a culture of digitalisation, and especially in recent times; how the adoption of Artificial Intelligence(AI) can be used to drive performance, innovation, growth and development in  business organisations and corporate entities in general. Economists, social scientists, business and technological analysts have propounded and relied on a number of key indicators to evaluate the phenomenon of Corporate Digital Transformation. This includes metrics that span across the spectrum of operations, innovation, and organisational structure to mention but a few.&lt;/p&gt;

&lt;p&gt;An example of a dataset that captures these metrics will be extracted from Kaggle(a data science and machine learning community platform) to conduct a data ingestion and analysis project using python programming language and a ML service offered by AWS known as Amazon Sagemaker.&lt;/p&gt;

&lt;p&gt;The measure of the value and importance of data analysis and visualization is not just restricted to gathering information and insights on the data. These insights can drive innovation by tools such as AI &amp;amp; ML to train models that can make important predictions based on the data that was analyzed. A useful service offered by AWS that helps to achieve this is Sagemaker. Amazon Sagemaker is a managed ML service offered by AWS that is used to test, train and build models in the cloud. The essence of performing data analysis and visualisation in an Amazon sagemaker notebook is that it presents an opportunity to have a central hub for your data analytics workload to also be leveraged by ML engineers to train and build models that can make insightful predictions based on this data. To get started with creating a Sagemaker notebook, follow this steps provided in the Sagemaker developer guide: 

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-create-open.html" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;docs.aws.amazon.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


 

&lt;p&gt;&lt;strong&gt;NB&lt;/strong&gt;: In the configuration window of your sagemaker notebook instance. Select the VPC option with an internet gateway attached to enable internet access for the underlying EC2 instance to have access to the kaggle api to pull the dataset used in this project. However, it’s important to note that for security purposes and unique workload requirements use the No VPC, only VPC options to prevent exposure from external traffic.&lt;/p&gt;

&lt;p&gt;Additionally, you must have an account on Kaggle to generate API access keys to pull the dataset that I will use for the demonstration in the notebook below.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;




&lt;p&gt;This simple analysis of digital transformation metrics dataset is just a brief demonstration of how the integration of kaggle into your Amazon Sagemaker studio notebook can aid data ingestion and analysis, by having ready access to a plethora of datasets to conduct any data analysis project and also train and build models that can make valuable predictions that your project requires.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>dataengineering</category>
      <category>aws</category>
      <category>programming</category>
    </item>
    <item>
      <title>Utility Scripts to Expedite Machine Learning(ML) Adoption Leveraging AWS ML Service APIs.</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Tue, 07 Jan 2025 17:25:26 +0000</pubDate>
      <link>https://dev.to/aws-builders/utility-scripts-to-expedite-machine-learningml-adoption-leveraging-aws-ml-service-apis-405e</link>
      <guid>https://dev.to/aws-builders/utility-scripts-to-expedite-machine-learningml-adoption-leveraging-aws-ml-service-apis-405e</guid>
      <description>&lt;p&gt;This article seeks to articulate a number of common machine learning features and capabilities that can be integrated into applications, data pipelines, business intelligence tools and many other projects depending on your peculiar use case by leveraging utility scripts that invoke the Application Programming Interface(API) of managed ML services provided by AWS.&lt;/p&gt;

&lt;p&gt;Prerequisites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS credentials: Configure AWS Access Keys via the Command Line Interface(CLI) &amp;gt;&amp;gt; Environment Variables can equally be utilised to ensure secure and persistent access to your AWS account.&lt;/li&gt;
&lt;li&gt;AWS Software Development Kit(SDK) for Python: Boto3
&lt;code&gt;pip install boto3&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Utility scripts can be very useful when considering an idea to test and develop for a specific feature of a program without necessarily having a full stack application developed yet. Some utility scripts to perform cloud operations can be found in this GitHub repository which I compiled for both Python and Bash scripts: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Wonder717" rel="noopener noreferrer"&gt;
        Wonder717
      &lt;/a&gt; / &lt;a href="https://github.com/Wonder717/Utility-Scripts" rel="noopener noreferrer"&gt;
        Utility-Scripts
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Below are some utility scripts to implement specific machine learning features that you can use in your projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Language Translation Utility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use Case:&lt;/em&gt; Translate text files or strings into various languages.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Service:&lt;/em&gt; Amazon Translate&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Implementation:&lt;/em&gt;&lt;br&gt;
Automate the translation of text or files into target languages. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Utility Script:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;

&lt;span class="n"&gt;translate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;translate&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Utility Scripts to Expedite Machine Learning(ML) Adoption Leveraging AWS ML Service APIs.
&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;translate_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;SourceLanguageCode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;en&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;TargetLanguageCode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;fr&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;TranslatedText&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  
&lt;span class="c1"&gt;# Output: 'Scripts utilitaires pour accélérer l'adoption de l'apprentissage automatique (ML) en tirant parti des API de service AWS ML.'
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;B. Text/Data Extraction Utility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use Case:&lt;/em&gt; Extract key data from invoices (Example: invoice numbers, totals) and classify them into categories for financial processing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Service:&lt;/em&gt; Amazon Textract is a machine learning service offered by AWS that reduces the manual efforts and automates the process involved in the extraction of any kind of data such as forms, tables, and texts from scanned documents, making it expedient to derive important information from different sources. I wrote an article that explores this service in detail.Check it out here: &lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/aws-builders" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&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%2Fuploads%2Forganization%2Fprofile_image%2F2794%2F88da75b6-aadd-4ea1-8083-ae2dfca8be94.png" alt="AWS Community Builders " width="350" height="350"&gt;
      &lt;div class="ltag__link__user__pic"&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%2Fuploads%2Fuser%2Fprofile_image%2F656206%2F90ddb2b8-17fc-4950-b7f6-1b1d1846b20a.png" alt="" width="420" height="420"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/aws-builders/implementing-an-organisational-cloud-resource-tagging-strategy-using-amazon-textract-aws-lambda-and-boto3-5l0" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Implementing an Organisational Cloud Resource Tagging Strategy Using Amazon Textract, AWS Lambda and Boto3.&lt;/h2&gt;
      &lt;h3&gt;Wonder Agudah for AWS Community Builders  ・ Feb 29 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#machinelearning&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#community&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#lambda&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Utility Script:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;

&lt;span class="n"&gt;s3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;textract&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;textract&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;upload_files_to_s3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;walk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.pdf&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.jpg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.png&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
                &lt;span class="n"&gt;filepath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upload_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;extract_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;document_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;textract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;analyze_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;S3Object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bucket&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;document_name&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
        &lt;span class="n"&gt;FeatureTypes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FORMS&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_invoice_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textract_response&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;textract_response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Blocks&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BlockType&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;KEY_VALUE_SET&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EntityTypes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
                &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Text&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Relationships&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Text&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;
            &lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Invoice Number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Total&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
                    &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Text&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Relationships&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Text&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;
                &lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save_to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;csv_file&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csv_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;newline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Invoice Number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Total&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;

&lt;span class="c1"&gt;# Main function
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;folder_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;./invoices&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="n"&gt;bucket_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;your-invoice-bucket&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="n"&gt;csv_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;invoice_data_output.scv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

         &lt;span class="c1"&gt;# Upload files to S3
&lt;/span&gt;         &lt;span class="nf"&gt;upload_files_to_s3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

         &lt;span class="c1"&gt;# Process each file in the S3 bucket
&lt;/span&gt;         &lt;span class="n"&gt;processed_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
         &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_objects_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Bucket&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Contents&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]):&lt;/span&gt;
             &lt;span class="n"&gt;file_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
             &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Processing file: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

             &lt;span class="c1"&gt;# Extract text using Textract
&lt;/span&gt;             &lt;span class="n"&gt;textract_response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extract_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

             &lt;span class="c1"&gt;# Parse relevant data
&lt;/span&gt;             &lt;span class="n"&gt;parsed_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parse_invoice_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textract_response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;parsed_data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                 &lt;span class="n"&gt;processed_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parsed_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

         &lt;span class="c1"&gt;# Save extracted data to CSV
&lt;/span&gt;         &lt;span class="nf"&gt;save_to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;processed_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;csv_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Processed data saved to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;csv_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

     &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
         &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;C. Text Classification and Analysis Utility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use Case:&lt;/em&gt; Analyze text data for sentiment and language detection.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Service:&lt;/em&gt; Amazon Comprehend&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Utility Script:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;

&lt;span class="n"&gt;comprehend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;comprehend&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Education is necessary for development!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;comprehend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;detect_sentiment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LanguageCode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;en&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sentiment&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  

&lt;span class="c1"&gt;# Output: 'POSITIVE'
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;D. Image Classification and Processing Utility&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Use Case:&lt;/em&gt; Automate image analysis for object detection and facial recognition.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Service:&lt;/em&gt; Amazon Rekognition&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Utility Script:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;

&lt;span class="n"&gt;s3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;rekognition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rekognition&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;upload_to_s3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;walk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.png&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.jpg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.jpeg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
                &lt;span class="n"&gt;filepath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upload_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;label_images&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_csv&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_csv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;newline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Image&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Labels&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_objects&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Bucket&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Contents&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]):&lt;/span&gt;
            &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rekognition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;detect_labels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;S3Object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bucket&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]}},&lt;/span&gt;
                &lt;span class="n"&gt;MaxLabels&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Labels&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
            &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;

&lt;span class="n"&gt;folder_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;./images&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;bucket_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;your-bucket-name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;output_csv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image_labels.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="nf"&gt;upload_to_s3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;label_images&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_csv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Labels stored in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;output_csv&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The  utility scripts in this article are by no means conclusive! Consider them a starting point to explore different managed machine learning services offered by AWS that you can integrate into your applications and projects. You can go through the official documentation for Boto3: &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://docs.aws.amazon.com/code-library/latest/ug/python_3_code_examples.html" rel="noopener noreferrer"&gt;
      docs.aws.amazon.com
    &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;to explore more code snippets you can customise and tailor to your unique case scenarios for implementing machine learning capabilities by leveraging AWS managed ML services.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>machinelearning</category>
      <category>api</category>
      <category>development</category>
    </item>
    <item>
      <title>Architecting a Notification Platform on AWS and how to Implement Personalization of Delivery Channels</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Sat, 14 Dec 2024 22:19:03 +0000</pubDate>
      <link>https://dev.to/aws-builders/architecting-a-notification-platform-on-aws-and-how-to-implement-personalization-of-delivery-51ck</link>
      <guid>https://dev.to/aws-builders/architecting-a-notification-platform-on-aws-and-how-to-implement-personalization-of-delivery-51ck</guid>
      <description>&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%2Fuploads%2Farticles%2Fg0ei4vjg81uz6ftwwomc.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%2Fuploads%2Farticles%2Fg0ei4vjg81uz6ftwwomc.png" alt="Image description" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Design Overview:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This design serves as a simple and efficient architecture for a standard notification platform that can be expanded during the lifecycle of the system, as and when extra specific, use case requirements are introduced for further improvements.&lt;/p&gt;

&lt;p&gt;The notification platform leverages a number of AWS serverless technologies, which can be either deployed with CloudFormation or its extension for serverless applications and resources; AWS SAM.&lt;/p&gt;

&lt;p&gt;The entry point to this system is designed with API Gateway and interfaced by AWS WAF to filter incoming requests by providing protection against common web attacks based on defined conditions. Filtered requests are then authenticated by API Gateway through Cognito for external services and via IAM for services that might be accessing the platform internally.&lt;/p&gt;

&lt;p&gt;The design module employed for the notification platform leverages an event driven architecture(EDA)—in effect, all authenticated requests call an API Gateway endpoint that sets the system in motion by either invoking a lambda function for individual requests or routing batch requests through SQS. The notification gateway as indicated in the attached architectural diagram is responsible for this initial process of handling individual and batch requests. In the event, where real time data processing of notifications are required, Amazon Kinesis can be leveraged instead.&lt;/p&gt;

&lt;p&gt;The preliminary requests(individual and batch) made in the notification gateway are then routed accordingly using SNS and SQS to the notification processing and distribution service where AWS Lambda functions are invoked and tasked with custom business logic to validate, format and schedule notification content, as well as to interact with a DynamoDB table that stores contact information and delivery channel preferences of users(subscribers).&lt;/p&gt;

&lt;p&gt;After the notification distribution service is done executing, an event bus is provisioned with Amazon EventBridge to route processed notifications using event rules that push these notification events to queues designated for each delivery channel to be polled and processed in concurrency. Each&lt;br&gt;
notification event will be tagged with a specific category for respective delivery channels in order to be routed to its corresponding queue. A number of Lambda functions here will be provisioned to run specific delivery jobs that poll their assigned queues and fetch notification templates from a S3 bucket&lt;br&gt;
to forward notifications to integrated delivery channels configured with the subscriptions of consumers. Amazon SES will be used for delivering emails, while Amazon SNS will be used for both SMS and mobile push notifications. A fourth queue and delivery job to be customised is provided to interact with the API of any third party service channel that needs to be connected in the future. Amazon Pinpoint can be used to replace these services if campaigns and a more interactive session is required with the users to be notified.&lt;/p&gt;

&lt;p&gt;The status of notification delivery jobs(sent/failed) as well as delivery channels(delivered/failed) will be logged into a DynamoDB table.&lt;/p&gt;

&lt;p&gt;CloudWatch Metrics will be collected and analysed from all applicable services.&lt;/p&gt;

&lt;p&gt;The following points are some features of the AWS services used that ensure non-functional requirements of the notification platform are met&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;br&gt;
● Amazon S3: Provides virtually unlimited storage for logs, tracking data, and notification&lt;br&gt;
templates, automatically scaling as data grows.&lt;br&gt;
● Amazon SQS/SNS: Scales to handle millions of messages per second.&lt;br&gt;
● AWS Lambda: Scales by creating instances for high concurrency workloads.&lt;br&gt;
● Amazon DynamoDB: On-demand scaling for unpredictable workloads.&lt;br&gt;
● Amazon Kinesis: Shard-based horizontal scaling for real-time data streams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High Availability&lt;/strong&gt;&lt;br&gt;
● Amazon S3: Designed for 99.99% availability, with data replication across multiple AZs.&lt;br&gt;
● SQS, SNS, DynamoDB: Multi-AZ replication ensures fault tolerance.&lt;br&gt;
● AWS Lambda: Auto-retries failed executions and operates across multiple AZs.&lt;br&gt;
● Amazon Pinpoint: Multi-AZ operations for continuous message delivery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;br&gt;
The recent feature of API gateway to provide support for TLS(API Gateway now supports TLS 1.3) satisfies the requirement for data encryption in transit. Integration with Amazon Cognito will ensure authentication and authorization is maintained by verifying access for services that need to access the platform using their application users directory(user pool) or by leveraging an identity provider(identity pools) IAM entities, specifically roles can also be assigned to internal services for authentication. AWS services roles will be capitalised with specific policies to provide limited access for specific operations and API calls in a bid to strengthen the security posture of the platform.&lt;br&gt;
● Encryption in Transit:&lt;br&gt;
● All services, including S3, SQS, SNS, API Gateway, and Lambda, support TLS&lt;br&gt;
(Transport Layer Security) to encrypt data during transmission.&lt;br&gt;
● Amazon S3:&lt;br&gt;
● Bucket Policies and IAM: Restrict access to sensitive data like logs and templates.&lt;br&gt;
● Encryption at Rest: Uses server-side encryption (SSE-S3, SSE-KMS) or client-side&lt;br&gt;
encryption.&lt;br&gt;
● IAM Roles/Policies: Fine-grained access control ensures secure access to resources.&lt;br&gt;
● API Gateway Security: Supports Cognito, IAM, and custom Lambda authorisers for&lt;br&gt;
authentication.&lt;br&gt;
● AWS WAF: Protects APIs from DDoS, SQL injection, and other threats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitoring and Logging&lt;/strong&gt;&lt;br&gt;
● Amazon CloudWatch:&lt;br&gt;
● Metrics: Monitors key metrics such as SQS queue depth, SNS delivery success&lt;br&gt;
rates, Lambda execution times, DynamoDB throughput, and API Gateway requests.&lt;br&gt;
● Alarms: Sends alerts for anomalies or performance issues (e.g., high queue backlog,&lt;br&gt;
failed deliveries).&lt;br&gt;
● Service Lens: Provides an integrated view of performance and availability across&lt;br&gt;
services, combining metrics, logs, and traces for end-to-end observability.&lt;br&gt;
● AWS X-Ray:&lt;br&gt;
● Traces requests through the system to identify performance bottlenecks and&lt;br&gt;
dependencies.&lt;br&gt;
● Provides detailed insights into latencies, errors, and service interactions.&lt;br&gt;
● CloudWatch Logs:&lt;br&gt;
● Aggregates runtime logs from Lambda, API Gateway, and other services.&lt;br&gt;
● Supports detailed querying for debugging and analysis.&lt;br&gt;
● CloudTrail:&lt;br&gt;
● Tracks all API actions for audit and compliance, ensuring a secure and traceable&lt;br&gt;
system.&lt;br&gt;
● Dead Letter Queues (DLQs):&lt;br&gt;
● Captures failed or undeliverable messages from SQS or SNS for analysis and&lt;br&gt;
troubleshooting.&lt;br&gt;
● Amazon DynamoDB:&lt;br&gt;
● The status of notification delivery jobs(sent/failed) as well as delivery&lt;br&gt;
channels(delivered/failed) will be logged into a DynamoDB table.&lt;br&gt;
● Amazon S3:&lt;br&gt;
● Stores logs, archived notifications, and tracking data for long-term analysis and&lt;br&gt;
compliance reporting.&lt;/p&gt;



&lt;p&gt;The notification system can be enhanced with machine learning features using AWS ML services to optimise operations, improve user experience, and enable personalisation. Here are some ML features to include, along with the AWS services that can support them:&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;A. Personalization&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ML Feature&lt;/strong&gt;: Predict the most effective delivery channel or time for each user. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Service&lt;/strong&gt;: &lt;strong&gt;Amazon Personalize&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Trains custom ML models to recommend delivery preferences based on user behaviour and history (E.g: channel preference, response patterns).
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;B. Intelligent Scheduling&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ML Feature&lt;/strong&gt;: Analyze user behaviour and historical engagement data to send notifications at the best time (E.g: optimal open rates).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Service&lt;/strong&gt;: &lt;strong&gt;Amazon SageMaker&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Build models to predict engagement and dynamically schedule notifications.
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Amazon Forecast&lt;/strong&gt; for time-series predictions, such as predicting the best times for notifications.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;C. Content Optimization&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ML Feature&lt;/strong&gt;: Automatically analyze and improve the effectiveness of notification content (E.g: subject lines, message body) for higher engagement.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Service&lt;/strong&gt;: &lt;strong&gt;Amazon Comprehend&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Perform sentiment analysis and key phrase extraction on notification content.
&lt;/li&gt;
&lt;li&gt;Tailor content to match user preferences and sentiment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;D. Fraud Detection&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ML Feature&lt;/strong&gt;: Detect and prevent fraudulent activities or malicious notifications (E.g: spam detection or unusual activity in the system).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Service&lt;/strong&gt;: &lt;strong&gt;Amazon Fraud Detector&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Automatically identifies anomalies in notification delivery patterns or content based on historical data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;E. Audience Segmentation&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ML Feature&lt;/strong&gt;: Automatically segment users based on behavior, demographics, or engagement levels for targeted notifications.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Service&lt;/strong&gt;: &lt;strong&gt;Amazon SageMaker&lt;/strong&gt; or &lt;strong&gt;Amazon Pinpoint&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Train ML models for advanced clustering or use Pinpoint's built-in segmentation features for simpler implementations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;F. Tracking and Analytics Insights&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ML Feature&lt;/strong&gt;: Use ML models to analyze delivery metrics and provide actionable insights, such as trends in user engagement or areas for improvement.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Service&lt;/strong&gt;: &lt;strong&gt;Amazon Lookout for Metrics&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Automatically detects anomalies in delivery rates, open rates, or click-through rates, enabling faster troubleshooting.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following section will provide guidelines to implement personalization by sending delivery notifications via the most effective channel for each user based on their historical preferences and behaviour.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Steps to Implement Personalization&lt;/strong&gt;
&lt;/h3&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;1. Collect Data&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;You need a dataset to train the recommendation model. Include the following attributes:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User ID&lt;/strong&gt;: Unique identifier for the user.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Channel Used&lt;/strong&gt;: Delivery channel.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engagement Metrics&lt;/strong&gt;: Open rates, click rates, or read receipts.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timestamp&lt;/strong&gt;: When the notification was sent.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Data&lt;/strong&gt;: Device type, location, time of day, etc.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Source&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Export data from &lt;strong&gt;Amazon Pinpoint&lt;/strong&gt;, &lt;strong&gt;Amazon S3&lt;/strong&gt; (logs), or your database.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2. Prepare and Store Data&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;AWS Glue&lt;/strong&gt; to clean and transform the raw data.
&lt;/li&gt;
&lt;li&gt;Store the processed data in &lt;strong&gt;Amazon S3&lt;/strong&gt; as input for ML models.
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;AWS Glue Data Catalog&lt;/strong&gt; to create metadata for structured access to your data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;3. Train a Recommendation Model&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Amazon Personalize&lt;/strong&gt;:

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a Dataset Group&lt;/strong&gt;: Upload your data to &lt;strong&gt;Amazon Personalize&lt;/strong&gt; (user-interaction data).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose a Recipe&lt;/strong&gt;: Select the &lt;strong&gt;Personalized Ranking&lt;/strong&gt; recipe for this use case.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Train the Model&lt;/strong&gt;: Use your data to create a machine learning model. Personalize automatically tunes the model using AutoML.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;4. Deploy the Model&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Deploy the trained model in &lt;strong&gt;Amazon Personalize&lt;/strong&gt; as a real-time recommendation engine.
&lt;/li&gt;
&lt;li&gt;Generate a recommendation for each user by providing their &lt;strong&gt;User ID&lt;/strong&gt; and optional &lt;strong&gt;context data&lt;/strong&gt; .
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;5. Integrate with the Notification System&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Real-Time Inference&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use the &lt;strong&gt;Amazon Personalize Runtime API&lt;/strong&gt; to query recommendations (E.g: which channel to use).
&lt;/li&gt;
&lt;li&gt;Example Input: User ID + Context (E.g: time of day, location).
&lt;/li&gt;
&lt;li&gt;Example Output: Ranked list of channels (For instance, Email &amp;gt; SMS &amp;gt; Push).
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lambda Function for Decision Making&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger &lt;strong&gt;AWS Lambda&lt;/strong&gt; from your notification gateway.
&lt;/li&gt;
&lt;li&gt;The Lambda function calls the &lt;strong&gt;Personalize API&lt;/strong&gt;, selects the top-ranked channel, and routes the notification appropriately.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;6. Monitoring and Feedback Loop&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Amazon CloudWatch&lt;/strong&gt; to track the performance of key metrics of the recommendation system.
&lt;/li&gt;
&lt;li&gt;Collect feedback: Track if users engage with the suggested channel and store this data back in &lt;strong&gt;Amazon S3&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Regularly retrain the model in &lt;strong&gt;Amazon Personalize&lt;/strong&gt; with updated interaction data for continuous improvement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope this document is helpful. Please let me know if you have any other questions in the comment section. You can use the link below to optionally view this presentation on YouTube:&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xiz5psps4CQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AWS CB Swag Kit-Year 2🎉</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Fri, 02 Aug 2024 15:21:52 +0000</pubDate>
      <link>https://dev.to/wonder717/aws-cb-swag-kit-year-2-3lhl</link>
      <guid>https://dev.to/wonder717/aws-cb-swag-kit-year-2-3lhl</guid>
      <description>&lt;p&gt;My second year AWS CB swag kit arrived this week &amp;amp; I must say: it’s quite neat!😎 I look forward to continue my active participation and contribution in the AWS community. Special thanks to &lt;a class="mentioned-user" href="https://dev.to/jasondunn"&gt;@jasondunn&lt;/a&gt; for the opportunity and incentives to motivate community builders. To learn more about the program, click this link &lt;a href="https://aws.amazon.com/developer/community/community-builders/" rel="noopener noreferrer"&gt;https://aws.amazon.com/developer/community/community-builders/&lt;/a&gt;&lt;br&gt;
Happy Friday Everyone &amp;amp; Cheers to the weekend 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqief3rf27gvvombp1puq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqief3rf27gvvombp1puq.jpeg" alt="Image description" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fch4gh41mwll384lez01w.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fch4gh41mwll384lez01w.jpeg" alt="Image description" width="800" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>community</category>
    </item>
    <item>
      <title>AWS re:Invent—All Builders Welcome Grant</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Wed, 31 Jul 2024 17:37:05 +0000</pubDate>
      <link>https://dev.to/wonder717/aws-reinvent-all-builders-welcome-grant-12nm</link>
      <guid>https://dev.to/wonder717/aws-reinvent-all-builders-welcome-grant-12nm</guid>
      <description>&lt;p&gt;As part of efforts by AWS to reduce disparity due to financial constraints and increase accessibility towards training &amp;amp; educational programs offered by re:Invent—-The All Builders Welcome Grant provides an opportunity for early career technologists who are still in the first five years of their careers to be afforded an all expense paid trip that covers the essentials  such as travel and accommodation costs to attend re:Invent.The deadline is on the 2nd of August so it’s not too late to put in an application!&lt;/p&gt;

&lt;p&gt;Apply here: &lt;a href="https://reinvent.awsevents.com/all-builders-welcome/" rel="noopener noreferrer"&gt;https://reinvent.awsevents.com/all-builders-welcome/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>reinvent</category>
      <category>community</category>
    </item>
    <item>
      <title>Implementing an Organisational Cloud Resource Tagging Strategy Using Amazon Textract, AWS Lambda and Boto3.</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Thu, 29 Feb 2024 15:00:04 +0000</pubDate>
      <link>https://dev.to/aws-builders/implementing-an-organisational-cloud-resource-tagging-strategy-using-amazon-textract-aws-lambda-and-boto3-5l0</link>
      <guid>https://dev.to/aws-builders/implementing-an-organisational-cloud-resource-tagging-strategy-using-amazon-textract-aws-lambda-and-boto3-5l0</guid>
      <description>&lt;p&gt;Asset management is imperative in the execution of a cloud governance framework. The process of applying key value pairs known as tagging that contains important information and constitutes the metadata  of resources in a cloud environment(An AWS account in this case) helps achieve this goal. Services such as Tag Editor and Resource Groups in AWS offer the ability to perform this action(tagging). However, this process can quickly get cumbersome. Especially when there is a large number of tags to be collected from a variety of sources and applied across a wide array of resources and workloads provisioned in an AWS account. &lt;/p&gt;

&lt;p&gt;I recently had to perform this operation at work and I encountered the challenge that arises when there are many tags to be applied on many resources in an AWS account. &lt;/p&gt;

&lt;p&gt;In pursuit of the company's cloud governance objectives. Forms were distributed to each department under the company to collect tag info. To appreciate the vast amount of data to be collected, an itemised list of some departmental units that are operative in any large scale organisation and business have been outlined below.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Human Resources (HR):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Personnel Management&lt;/li&gt;
&lt;li&gt;Recruitment&lt;/li&gt;
&lt;li&gt;Training&lt;/li&gt;
&lt;li&gt;Employee Relations&lt;/li&gt;
&lt;li&gt;Compliance with Employment Laws&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finance and Accounting:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Financial Planning&lt;/li&gt;
&lt;li&gt;Budgeting&lt;/li&gt;
&lt;li&gt;Accounting&lt;/li&gt;
&lt;li&gt;Financial Reporting&lt;/li&gt;
&lt;li&gt;Financial Analysis&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Marketing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Marketing Strategy&lt;/li&gt;
&lt;li&gt;Advertising&lt;/li&gt;
&lt;li&gt;Branding&lt;/li&gt;
&lt;li&gt;Market Research&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sales:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selling Products or Services&lt;/li&gt;
&lt;li&gt;Customer Relationship Management&lt;/li&gt;
&lt;li&gt;Sales Target Achievement&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Information Technology (IT):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Technology Infrastructure Management&lt;/li&gt;
&lt;li&gt;Hardware and Software Management&lt;/li&gt;
&lt;li&gt;Network Management&lt;/li&gt;
&lt;li&gt;Cybersecurity&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Operations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Day-to-Day Business Operations&lt;/li&gt;
&lt;li&gt;Process Optimization&lt;/li&gt;
&lt;li&gt;Supply Chain Management&lt;/li&gt;
&lt;li&gt;Production Oversight&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Customer Service:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer Inquiry Handling&lt;/li&gt;
&lt;li&gt;Customer Support&lt;/li&gt;
&lt;li&gt;Complaint Resolution&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Research and Development (R&amp;amp;D):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research for New Products&lt;/li&gt;
&lt;li&gt;Improvement of Existing Products&lt;/li&gt;
&lt;li&gt;Innovation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Legal:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legal Counsel&lt;/li&gt;
&lt;li&gt;Contract Management&lt;/li&gt;
&lt;li&gt;Compliance with Laws and Regulations&lt;/li&gt;
&lt;li&gt;Management of Legal Risks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Administration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Office Management&lt;/li&gt;
&lt;li&gt;Facilities Management&lt;/li&gt;
&lt;li&gt;Administrative Support&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Quality Assurance (QA) or Quality Control (QC):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensuring Product or Service Quality&lt;/li&gt;
&lt;li&gt;Compliance with Quality Standards&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Supply Chain or Logistics:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Goods Movement&lt;/li&gt;
&lt;li&gt;Inventory Management&lt;/li&gt;
&lt;li&gt;Overall Supply Chain Oversight&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Public Relations (PR):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Communication with the Public&lt;/li&gt;
&lt;li&gt;Media Relations&lt;/li&gt;
&lt;li&gt;Stakeholder Communication&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Project Management:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project Planning&lt;/li&gt;
&lt;li&gt;Project Execution Oversight&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Strategic Planning:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long-Term Goal Setting&lt;/li&gt;
&lt;li&gt;Growth and Success Planning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compliance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensuring Adherence to Laws and Regulations&lt;/li&gt;
&lt;li&gt;Industry Standards Compliance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Internal Audit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal Auditing&lt;/li&gt;
&lt;li&gt;Compliance Audits&lt;/li&gt;
&lt;li&gt;Financial Practice Audits&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Training and Development:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Employee Training Programs&lt;/li&gt;
&lt;li&gt;Professional Development Initiatives&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cost Center&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Application Owner&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After the painstaking effort involved in the manual collection and entry of tag information across all departments of an organisation into one comprehensive document. A more cumbersome task is involved in manually entering this tags on all development, QA and production EC2 instances and their associated EBS volumes as well as snapshots after they have been scanned and stored in a digital format. &lt;/p&gt;

&lt;p&gt;Amazon Textract is a machine learning service offered by AWS that reduces the manual efforts and automates the process involved in the extraction of any kind of data such as forms, tables, and texts from scanned documents, making it expedient to derive important information from different sources.&lt;/p&gt;

&lt;p&gt;Combining the above service with Boto3; the Python SDK for AWS and AWS Lambda, I architected a solution to ease and automate this effort using Amazon Textract. By automating the process of extracting this info I was able to write a script that applied this extracted data to all EC2 instances and further replicated them to their associated EBS volumes and snapshots.&lt;/p&gt;

&lt;p&gt;This project will be demonstrated in a two part series. This article will demonstrate how to perform this action using &lt;br&gt;
the Amazon Textract console to ensure that users who are just starting out with AWS can get comfortable implementing this solution using the AWS console. A second article as part of this series will also be put out and focus will be centered on how to perform this entire solution programmatically by using the AWS Boto3 documentation for Amazon Textract targeted for intermediate cloud practitioners in AWS and with considerable experience in programming.&lt;/p&gt;
&lt;h2&gt;
  
  
  Extracting Text from Documents with Amazon Textract in the AWS Console
&lt;/h2&gt;

&lt;p&gt;Since tags are essentially key value pairs, I drafted a sample document as attached below and in the cover image of this article showing varying field entries and their associated keys in this scenario in order to adhere with compliance and security standards as the actual scanned tagging document contains company's info.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58nuclbd69w08czfc078.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58nuclbd69w08czfc078.jpeg" alt="Image description" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Sign in and Access Textract:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign in to the AWS Management Console at &lt;a href="https://aws.amazon.com/"&gt;https://aws.amazon.com/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Search for "Amazon Textract" and select it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ferylcwr0f88hfye3o5q0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ferylcwr0f88hfye3o5q0.png" alt="Image description" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Choose a Document:&lt;/strong&gt;&lt;br&gt;
    * &lt;strong&gt;Upload document:&lt;/strong&gt; Upload your own document in PNG, JPEG, or PDF format.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbrs6r19ji69bub3kpep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbrs6r19ji69bub3kpep.png" alt="Image description" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. Analyze the Document:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the right pane, select the type of information you want to extract:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Raw text:&lt;/strong&gt; Extracts all text using Optical Character Recognition (OCR).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lines:&lt;/strong&gt; Extracts individual lines of text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Words:&lt;/strong&gt; Extracts individual words.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;D. Explore the Extracted Data:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explore the other tabs for further analysis options:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blocks:&lt;/strong&gt; Identifies and categorizes text blocks based on their location and content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tables:&lt;/strong&gt; Extracts data from tables within the document.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forms:&lt;/strong&gt; Identifies form fields and extracts their corresponding values.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mvjidv1a8m7oert4hws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mvjidv1a8m7oert4hws.png" alt="Image description" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa36m1y2kbadf8nfy9nl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa36m1y2kbadf8nfy9nl.png" alt="Image description" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E. Download Results (Optional):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click the "Download JSON" button to download the extracted data in JSON format for further processing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; This tutorial provides a basic overview. For detailed information and advanced functionalities, refer to the official Amazon Textract documentation: &lt;a href="https://docs.aws.amazon.com/textract/"&gt;https://docs.aws.amazon.com/textract/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point,  as depicted in the above process on using Amazon Textract to extract the key value pair information that was manually entered in the sample form for collecting tag information, the extracted tags can be applied to the specified EC2 resources. Considering the fact these are just a few instances, the tag information can be applied using AWS Tag Editor. The second part of this article will perform this action programatically to cater for use cases were there are a myriad of instances.&lt;/p&gt;

&lt;p&gt;After applying the tags to DEV-EC1, DEV-EC2, DEV-EC3, and DEV-EC4, a lambda function with runtime; Python 3.9 can be created using the code block below to replicate the applied tags to all EBS volumes attached to the respective EC2 instances as well as the captured snapshots. Also attach the IAM policy;AmazonEC2FullAccess to the permissions of the role of the AWS Lambda function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Get a list of all AWS regions
&lt;/span&gt;    &lt;span class="n"&gt;ec2_regions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;region&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;RegionName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;region&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ec2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;describe_regions&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Regions&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;

    &lt;span class="c1"&gt;# Iterate through each region
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;region&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ec2_regions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Working in region: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;region&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Initialize the EC2 client for the current region
&lt;/span&gt;        &lt;span class="n"&gt;ec2_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ec2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;region&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Get all instances with their tags
&lt;/span&gt;        &lt;span class="n"&gt;instances_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ec2_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe_instances&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Filters&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;instance-state-name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Values&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;running&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]}])&lt;/span&gt;

        &lt;span class="c1"&gt;# Prepare a mapping of instance ID to its tags
&lt;/span&gt;        &lt;span class="n"&gt;instance_tags_map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;reservation&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;instances_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Reservations&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;reservation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Instances&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="n"&gt;instance_tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Tags&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DEV:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
                &lt;span class="n"&gt;instance_tags_map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;InstanceId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;instance_tags&lt;/span&gt;

        &lt;span class="c1"&gt;# Get all EBS volumes and their snapshots in this region
&lt;/span&gt;        &lt;span class="n"&gt;volumes_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ec2_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe_volumes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;snapshots_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ec2_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe_snapshots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OwnerIds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;self&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

        &lt;span class="c1"&gt;# Iterate through each volume and its associated snapshots
&lt;/span&gt;        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;volume&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;volumes_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Volumes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="c1"&gt;# Get the volume ID
&lt;/span&gt;            &lt;span class="n"&gt;volume_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;VolumeId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

            &lt;span class="c1"&gt;# Check if the volume has attachments
&lt;/span&gt;            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Attachments&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="c1"&gt;# Get the instance ID to which the volume is attached
&lt;/span&gt;                &lt;span class="n"&gt;instance_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Attachments&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;InstanceId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

                &lt;span class="c1"&gt;# Get tags of the associated instance
&lt;/span&gt;                &lt;span class="n"&gt;instance_tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;instance_tags_map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instance_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;

                &lt;span class="c1"&gt;# Apply instance tags to the volume
&lt;/span&gt;                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;instance_tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;ec2_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_tags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                        &lt;span class="n"&gt;Resources&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;volume_id&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                        &lt;span class="n"&gt;Tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;instance_tags&lt;/span&gt;
                    &lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="c1"&gt;# Tag the snapshots associated with the volume
&lt;/span&gt;                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;snapshots_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Snapshots&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;VolumeId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;volume_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="n"&gt;ec2_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_tags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                            &lt;span class="n"&gt;Resources&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SnapshotId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
                            &lt;span class="n"&gt;Tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;instance_tags&lt;/span&gt;
                        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tags copied from EC2 instances to their associated EBS volumes and snapshots in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;region&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Script completed in all regions.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code I listed a few instances to perform this process on by indicating the instance name prefix “DEV”. To apply this same process on a fleet of EC2 instances with a naming convention for Dev,Test and Prod, the logic can be modified to perform this action on all instances with a prefix of Prod for instances rather than manually entering the instance ids of all EC2 instances.&lt;/p&gt;

&lt;p&gt;Since AWS Lambda has a default timeout of 3 seconds, increment this value accordingly to accommodate the number of instance tags to be replicated across attached EBS volumes and captured snapshots. The execution time of Lambda has a threshold of 15 minutes. Thus, ensure that the processing logic for your use case is written to be as efficient as possible. &lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>aws</category>
      <category>community</category>
      <category>lambda</category>
    </item>
    <item>
      <title>Applications Opened For The AWS Community Builders Program!</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Tue, 16 Jan 2024 17:59:42 +0000</pubDate>
      <link>https://dev.to/wonder717/applications-opened-for-the-aws-community-builders-program-jmm</link>
      <guid>https://dev.to/wonder717/applications-opened-for-the-aws-community-builders-program-jmm</guid>
      <description>&lt;p&gt;Good day everyone. Applications for the 2024 AWS Community Builders Program is open! This is a great opportunity for all AWS enthusiasts who are passionate about sharing knowledge in the community and creating awareness on how cloud services can be used to achieve digital transformation whiles addressing the pressing problems of businesses and society in general. You can apply for the program using this link: &lt;a href="https://pulse.aws/application/ZDVCOXKA"&gt;https://pulse.aws/application/ZDVCOXKA&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>community</category>
      <category>learning</category>
    </item>
    <item>
      <title>Leveraging Amazon CodeWhisperer for Agile Cloud Development and IaC.</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Tue, 28 Nov 2023 16:49:04 +0000</pubDate>
      <link>https://dev.to/aws-builders/leveraging-amazon-codewhisperer-for-agile-cloud-development-and-iac-5fhl</link>
      <guid>https://dev.to/aws-builders/leveraging-amazon-codewhisperer-for-agile-cloud-development-and-iac-5fhl</guid>
      <description>&lt;p&gt;The influx of tools that facilitate managing cloud resources especially at an abstract level leveraging Infrastructure as Code(IaC) has been very instrumental in the growth and adoption of cloud computing. More recently, the widespread use and application of generative AI has also redefined the way and manner in which we approach instrumenting code to implement cloud resource functionalities in a given workload. There is no doubt that documentation on how to use a given library, framework or SDK is invaluable when programming in general and specifically too when writing code for a cloud resource or service. Nonetheless, a much more efficient approach has been introduced with the inception of generative AI tools that render a coding environment or IDE sufficient to code without the constant switch between an IDE and your browser. AWS recently launched one such tool know as Amazon CodeWhisperer.&lt;/p&gt;

&lt;p&gt;Amazon CodeWhisperer is an AI-powered code development tool that helps developers write better code faster. It can provide code completion, code generation, and other suggestions based on your current context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started with AWS CodeWhisperer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An AWS account&lt;/li&gt;
&lt;li&gt;An IDE supported by CodeWhisperer (VS Code, IntelliJ IDEA, AWS Cloud9, Lambda, JupyterLab, or Amazon SageMaker Studio)&lt;/li&gt;
&lt;li&gt;The AWS Toolkit for your IDE installed and configured&lt;/li&gt;
&lt;li&gt;An AWS Builder ID or IAM credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Setting Up CodeWhisperer&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Choose your IDE.&lt;/strong&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install or update your IDE (if applicable).&lt;/strong&gt; Make sure you are using the latest version of your IDE to ensure compatibility with CodeWhisperer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install or update the AWS Toolkit.&lt;/strong&gt; The AWS Toolkit is required for CodeWhisperer to function properly. You can install the toolkit from the IDE's plugin marketplace. For this demonstration, I will be using VSCode as my IDE of choice.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;As indicated from the screenshot above, I have installed the AWS Toolkit from the "Extensions" panel in VSCode.&lt;/p&gt;

&lt;p&gt;After clicking on the AWS Toolkit icon in VSCode a number of options are presented to you as shown below from the "DEVELOPER TOOLS" menu list. We will proceed to click on Amazon CodeWhisperer and select an authentication method.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Choose your authentication method.&lt;/strong&gt; You can authenticate with CodeWhisperer using an AWS Builder ID, IAM Identity Center, or IAM credentials.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set up your Builder ID, IAM Identity Center, or IAM credentials.&lt;/strong&gt; Follow the instructions in the AWS CodeWhisperer documentation for your chosen authentication method.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For this demonstration I will be using the Builder ID authentication method&lt;/p&gt;

&lt;p&gt;Set up your AWS Builder ID:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the AWS Builder ID portal and sign in with your AWS account credentials.&lt;/li&gt;
&lt;li&gt;Click on the Create a new Builder ID button.&lt;/li&gt;
&lt;li&gt;Enter your email address and choose Next.&lt;/li&gt;
&lt;li&gt;Enter your name and choose Next.&lt;/li&gt;
&lt;li&gt;AWS will send an email to the address you provided. Open the email and click on the Verify button.&lt;/li&gt;
&lt;li&gt;Your Builder ID is now created. Copy the Builder ID code from the portal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click "Allow" after authentication to enable Amazon CodeWhisperer to have access to code you write in your IDE of choice.&lt;/p&gt;

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

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

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

&lt;p&gt;As shown above, I have been able to successfully authenticate CodeWhisper in VSCode using the AWS Builder ID method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using CodeWhisperer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your IDE and start coding.&lt;/li&gt;
&lt;li&gt;Position your cursor in the code where you want CodeWhisperer to provide assistance.&lt;/li&gt;
&lt;li&gt;Type the &lt;code&gt;Alt&lt;/code&gt; + &lt;code&gt;Space&lt;/code&gt; keyboard shortcut (Windows and Linux) or &lt;code&gt;Cmd&lt;/code&gt; + &lt;code&gt;Space&lt;/code&gt; keyboard shortcut (macOS).&lt;/li&gt;
&lt;li&gt;CodeWhisperer will display a list of suggestions for completing your code.&lt;/li&gt;
&lt;li&gt;Select the suggestion you want to use and press &lt;code&gt;Enter&lt;/code&gt; or &lt;code&gt;Tab&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The screenshot below provides a short demonstration of how CodeWhisperer aided me in writing code to list all S3 buckets in a region, simply by just commenting about the action I want to perform.&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Extra Points&lt;/strong&gt;&lt;br&gt;
The following are some advantages of using Amazon CodeWhisperer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Increased productivity:&lt;/strong&gt; CodeWhisperer can help you write code faster by providing code suggestions, generating code from comments, and detecting and remediate security vulnerabilities. This can free up your time to focus on other tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reduced risk:&lt;/strong&gt; Increase security posture of your codebase by leveraging security scans powered by CodeWhisperer to detect security vulnerabilities such as hard coded credentials and by providing code suggestions that are aligned with security best practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved code quality:&lt;/strong&gt; CodeWhisperer can help you write higher-quality code by providing code suggestions that are idiomatic and follow best practices. It can also help you to identify and refactor code that is difficult to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Greater adherence to coding best practices:&lt;/strong&gt; CodeWhisperer can help you to adhere to coding best practices by providing code suggestions that are aligned with industry standards. It can also help you to identify and refactor code that is not in compliance with best practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enhanced collaboration:&lt;/strong&gt; CodeWhisperer can help you to collaborate more effectively with other developers by providing a shared platform for generating code suggestions and discussing code changes.&lt;/p&gt;

&lt;p&gt;Here are some additional merits of using CodeWhisperer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It supports over 15 programming languages.&lt;/li&gt;
&lt;li&gt;CodeWhisperer can be used to complete code snippets, generate code from comments, and provide code recommendations.&lt;/li&gt;
&lt;li&gt;It is available in both personal and professional editions.&lt;/li&gt;
&lt;li&gt;It is easy to use and integrate with your existing development workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Troubleshooting&lt;/strong&gt;&lt;br&gt;
If you are having trouble getting started with CodeWhisperer, refer to the AWS CodeWhisperer documentation or contact AWS support.&lt;/p&gt;

&lt;p&gt;I hope this document is helpful. Please let me know if you have any other questions in the comment section.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>programming</category>
      <category>python</category>
    </item>
    <item>
      <title>Mistakes I Made Deploying an IaC Project in GCP Using Terraform (and How I Fixed Them)</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Wed, 12 Jul 2023 09:19:54 +0000</pubDate>
      <link>https://dev.to/wonder717/mistakes-i-made-deploying-an-iac-project-in-gcp-using-terraform-and-how-i-fixed-them-3h4</link>
      <guid>https://dev.to/wonder717/mistakes-i-made-deploying-an-iac-project-in-gcp-using-terraform-and-how-i-fixed-them-3h4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I recently deployed an IaC project in GCP using Terraform. The project was a simple web application, but it was a good learning experience. In this blog post, I'll discuss some of the mistakes that I made deploying the project, and how I fixed them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake #1: Not using modules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest mistakes I made was not using modules. Modules are a way to reuse code in Terraform, and they can make your code much more maintainable. For example, I had a set of resources that I used to create a database. I could have put these resources in a module, and then I could have reused the module in other projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I fixed the mistake:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I fixed this mistake by starting to use modules. I created a module for the database resources, and then I reused the module in other projects. This made my code much more maintainable, and it made it easier to deploy the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here are some of the benefits of using modules:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reusability:&lt;/strong&gt; Modules can be reused in multiple projects, which can save you time and effort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability:&lt;/strong&gt; Modules make your code easier to maintain, because you only have to make changes in one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency:&lt;/strong&gt; Modules can help you to ensure that your code is consistent across different projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mistake #2: Not using variables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another mistake I made was not using variables. Variables are a way to pass data into Terraform, and they can make your code more flexible. For example, I had a set of resources that I used to create a web server. I could have used variables to pass the web server's name and port number into Terraform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I fixed the mistake:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I fixed this mistake by starting to use variables. I created variables for the web server's name and port number, and then I passed the variables into Terraform. This made my code more flexible, and it made it easier to deploy the project to different environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here are some of the benefits of using variables:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; Variables can make your code more flexible, by allowing you to change the values of the variables without having to change the code itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reusability:&lt;/strong&gt; Variables can make your code more reusable, by allowing you to use the same code in different environments with different values for the variables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; Variables can help you to document your code, by providing a clear explanation of the values that the variables can take.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mistake #3: Not using Terraform Cloud&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also made the mistake of not using Terraform Cloud. Terraform Cloud is a hosted version of Terraform, and it can make it easier to manage your Terraform projects. For example, Terraform Cloud can help you to track your changes, and it can help you to collaborate with others on your projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I fixed the mistake:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I fixed this mistake by starting to use Terraform Cloud. I created a Terraform Cloud account, and I imported my Terraform projects into Terraform Cloud. This made it easier to manage my projects, and it made it easier to collaborate with others on my projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here are some of the benefits of using Terraform Cloud:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Centralized management:&lt;/strong&gt; Terraform Cloud provides a centralized location for managing your Terraform projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration:&lt;/strong&gt; Terraform Cloud makes it easy to collaborate with others on your Terraform projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditing:&lt;/strong&gt; Terraform Cloud provides auditing features that can help you to track changes to your Terraform projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mistake #4: Not testing my code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Finally, I made the mistake of not testing my code. Testing is important to make sure that your code works as expected. For example, I could have written some unit tests to test the database resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I fixed the mistake:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I fixed this mistake by starting to test my code. I wrote some unit tests to test the database resources, and I also wrote some integration tests to test the entire project. This made me more confident that my code worked as expected, and it made it easier to find and fix bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here are some of the benefits of testing your code:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confidence:&lt;/strong&gt; Testing your code can give you confidence that your code works as expected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bug fixing:&lt;/strong&gt; Testing your code can help you to find and fix bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; Testing your code can help you to document your code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I made a lot of mistakes when I was deploying the IaC project in GCP using Terraform. However, I learned from my mistakes, and I was able to fix them. I hope that this blog post will help you to avoid making the same mistakes that I made.&lt;/p&gt;

&lt;p&gt;Here is the link to the full post detailing how I completed this project:&lt;a href="https://dev.to/wonder717/deploying-an-infrastructure-as-code-project-in-gcp-using-terraform-25jn"&gt;https://dev.to/wonder717/deploying-an-infrastructure-as-code-project-in-gcp-using-terraform-25jn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About Me&lt;/strong&gt;&lt;br&gt;
My name is Wonder; a cloud architect/engineer doubling in AWS and GCP but more inclined to AWS 😉. Excited to embark on this journey with you lot and hopefully we learn from each other so we can grow collectively. Here are my socials;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/wonder-agudah-784268183"&gt;https://www.linkedin.com/in/wonder-agudah-784268183&lt;/a&gt;&lt;br&gt;
Dev community: &lt;a href="https://dev.to/wonder717"&gt;https://dev.to/wonder717&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/Wonder717"&gt;https://github.com/Wonder717&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Applications Opened For The AWS Community Builders Program!</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Fri, 07 Jul 2023 07:25:24 +0000</pubDate>
      <link>https://dev.to/wonder717/applications-opened-for-the-aws-community-builders-program-c0p</link>
      <guid>https://dev.to/wonder717/applications-opened-for-the-aws-community-builders-program-c0p</guid>
      <description>&lt;p&gt;Happy Friday Everyone. Applications for the I AWS Community Builders Program is open! This is a great opportunity for all AWS enthusiasts who are passionate about sharing knowledge in the community and creating awareness on how cloud services can be used to achieve digital transformation whiles addressing the pressing problems of businesses and society in general. You can apply for the program using this link: &lt;a href="https://lnkd.in/e74CKxmB"&gt;https://lnkd.in/e74CKxmB&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>community</category>
      <category>learning</category>
    </item>
    <item>
      <title>AWS Community Builders Welcome Kit🎉</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Fri, 30 Jun 2023 17:38:21 +0000</pubDate>
      <link>https://dev.to/wonder717/aws-community-builders-welcome-kit-46ni</link>
      <guid>https://dev.to/wonder717/aws-community-builders-welcome-kit-46ni</guid>
      <description>&lt;p&gt;I’m glad to have received my 1st ever AWS CB welcome kit🥳. I look forward to continue my active participation and contribution in the AWS community. Special thanks to &lt;a class="mentioned-user" href="https://dev.to/jasondunn"&gt;@jasondunn&lt;/a&gt; for the opportunity and incentives to motivate community builders. To learn more about the program, click this link &lt;a href="https://aws.amazon.com/developer/community/community-builders/"&gt;https://aws.amazon.com/developer/community/community-builders/&lt;/a&gt;&lt;br&gt;
Happy Friday Everyone &amp;amp; Cheers to the weekend 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6Xd0c7wC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nr6tojhon1crvadhla8v.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6Xd0c7wC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nr6tojhon1crvadhla8v.jpeg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mUkkf-Sd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rg84g5h6nbhq8wzpzri5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mUkkf-Sd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rg84g5h6nbhq8wzpzri5.jpeg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NntwXYvm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/atux82vec9ksbrtfv4lq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NntwXYvm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/atux82vec9ksbrtfv4lq.jpeg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aZsOYFHZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnaeproep0nfa5pnmyzx.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aZsOYFHZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnaeproep0nfa5pnmyzx.jpeg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

</description>
      <category>aws</category>
      <category>machinelearning</category>
      <category>community</category>
      <category>cloud</category>
    </item>
    <item>
      <title>I am an AWS Community Builder!💪🏾🥳</title>
      <dc:creator>Wonder Agudah</dc:creator>
      <pubDate>Mon, 27 Feb 2023 17:46:15 +0000</pubDate>
      <link>https://dev.to/wonder717/i-am-an-aws-community-builder-4e9i</link>
      <guid>https://dev.to/wonder717/i-am-an-aws-community-builder-4e9i</guid>
      <description>&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%2Fuploads%2Farticles%2F3i4r1vflqorg182jqtzh.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%2Fuploads%2Farticles%2F3i4r1vflqorg182jqtzh.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
I’m beside myself with joy to have been recognized and accepted into the AWS community builders program(ML) as an active builder of the community. The efforts made to learn and understand disruptive tech like Cloud, AI &amp;amp; ML, and Programming is undoubtedly exciting! However, a more significant impact of this knowledge is to make and effect meaningful contributions to the community. A very effective way to do this is by sharing knowledge with the community, that is, for both builders, end users and all stakeholders. The AWS community builders program was designed for this exact purpose and I am delighted to contribute in this cause that gives back to a community that is continually providing excellent resources to deepen our understanding &amp;amp; use of AWS! I’m grateful for the opportunity AWS &amp;amp; I look forward to create more awareness in the community about the innovation and monumental strides that can be achieved with cloud services that are powered by AWS.&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%2Fuploads%2Farticles%2F6e774zkj3kanoq80ady9.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%2Fuploads%2Farticles%2F6e774zkj3kanoq80ady9.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>infosec</category>
      <category>cybersecurity</category>
      <category>socialmedia</category>
    </item>
  </channel>
</rss>
