<?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: Annysah</title>
    <description>The latest articles on DEV Community by Annysah (@annysah).</description>
    <link>https://dev.to/annysah</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%2F329518%2Fe2cf11d9-6151-4a45-943b-ede2d8aa96e1.jpg</url>
      <title>DEV Community: Annysah</title>
      <link>https://dev.to/annysah</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/annysah"/>
    <language>en</language>
    <item>
      <title>Using Amazon Transcribe to Generate Accessible Captions for Video Content</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Thu, 01 Jan 2026 05:59:18 +0000</pubDate>
      <link>https://dev.to/aws-builders/using-amazon-transcribe-to-generate-accessible-captions-for-video-content-44bk</link>
      <guid>https://dev.to/aws-builders/using-amazon-transcribe-to-generate-accessible-captions-for-video-content-44bk</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Captions matter for more than compliance. They support deaf and hard-of-hearing users, non-native speakers, people watching in sound-restricted environments, and anyone who processes information better through text. In practice, captions improve clarity and reach for everyone.&lt;/p&gt;

&lt;p&gt;Captioning a single video is straightforward with today’s tools. The challenge appears when captioning becomes part of a platform or an ongoing content pipeline. At that point, the question shifts from “How do I caption this video?” to “How do I build captioning into my workflow?”&lt;/p&gt;

&lt;p&gt;Consider a small engineering, product, or DevRel team that regularly produces video content. At first, captions are handled manually using simple tools. This works until volume and expectations grow.&lt;/p&gt;

&lt;p&gt;Over time, captioning shifts from an occasional task to a recurring workflow. Videos are published regularly, more contributors are involved, and accessibility expectations increase. At this point, captioning stops being a one-off task and becomes a workflow problem.&lt;/p&gt;

&lt;p&gt;This is where Amazon Transcribe becomes relevant.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Amazon Transcribe Is
&lt;/h2&gt;

&lt;p&gt;Amazon Transcribe is AWS's speech-to-text service. It converts spoken audio into time-aligned text. For video workflows, it outputs subtitle files in formats like WebVTT (.vtt) and SubRip (.srt), which are widely supported by video players and streaming platforms.&lt;/p&gt;

&lt;p&gt;The service abstracts away the complexity of speech recognition. There's no model training or ML pipeline to manage. You provide the media file, and the service returns captions. This matters when you need captioning to be a repeatable, automated part of your system rather than a manual task.&lt;/p&gt;

&lt;p&gt;Amazon Transcribe is a managed service, which means AWS handles the infrastructure, scaling, and maintenance. You focus on integrating it into your workflow and ensuring the output meets your accessibility standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;If you're planning to work with Amazon Transcribe, you'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://signin.aws.amazon.com/signup?request_type=register" rel="noopener noreferrer"&gt;AWS account access&lt;/a&gt;&lt;/strong&gt; - You'll need an account with permissions for Amazon Transcribe and Amazon S3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS familiarity&lt;/strong&gt; - Basic understanding of AWS services, particularly &lt;a href="https://aws.amazon.com/s3/" rel="noopener noreferrer"&gt;S3 for storing media files&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Media files&lt;/strong&gt; - Video or audio files in supported formats (MP3, MP4, WAV, FLAC, and others)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development tools&lt;/strong&gt; - AWS &lt;a href="https://aws.amazon.com/cli/" rel="noopener noreferrer"&gt;CLI&lt;/a&gt; or &lt;a href="https://aws.amazon.com/what-is/sdk/" rel="noopener noreferrer"&gt;SDK&lt;/a&gt; for automation (the examples in this guide use Python and boto3)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also use Amazon Transcribe through the AWS Console without writing code, which is useful for exploring the service and understanding its capabilities before building automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  When You'd Use Amazon Transcribe
&lt;/h2&gt;

&lt;p&gt;Amazon Transcribe isn't trying to replace simple, one-click captioning tools. Those work perfectly well for occasional use. Instead, it solves a different problem: captioning at scale within an existing workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Specific Scenarios
&lt;/h3&gt;

&lt;p&gt;You might consider Amazon Transcribe if you are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Building a platform&lt;/strong&gt; that hosts video content and needs built-in captioning capabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Producing content regularly&lt;/strong&gt; as part of training, documentation, or educational programs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working with accessibility requirements&lt;/strong&gt; that are part of your product or organizational standards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automating media workflows&lt;/strong&gt; using AWS services and need captioning to fit into that automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon Transcribe becomes valuable when you need automation, integration, consistency, and scalability. Whether it's five videos or five hundred, the workflow stays the same. It's less about convenience and more about control and integration.&lt;/p&gt;

&lt;p&gt;If you're captioning a single video occasionally, simpler tools are probably faster. If captioning is part of your product or process, Amazon Transcribe fits naturally into your infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Amazon Transcribe Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Architecture Overview
&lt;/h3&gt;

&lt;p&gt;Thinking in workflows rather than individual tools helps clarify how this fits together. At a conceptual level, a captioning pipeline on AWS looks like this:&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%2F394d874x1ozr0fprbj7b.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%2F394d874x1ozr0fprbj7b.png" alt=" " width="400" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The flow is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Amazon S3 stores uploaded files&lt;/li&gt;
&lt;li&gt;Amazon Transcribe processes the audio and generates caption files&lt;/li&gt;
&lt;li&gt;Captions are reviewed for accuracy&lt;/li&gt;
&lt;li&gt;Captions are attached to the video player or publishing platform&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Optional services like AWS Lambda can automate orchestration, and AWS Elemental MediaConvert can be used if captions need to be embedded directly into video outputs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Basic Implementation
&lt;/h3&gt;

&lt;p&gt;Here's an example on what starting a transcription job looks like using the AWS SDK for Python (boto3):&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;transcribe&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;transcribe&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="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;us-east-1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;job_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;video-caption-job-001&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;job_uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;s3://your-bucket-name/your-file.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;transcribe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_transcription_job&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;TranscriptionJobName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;job_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Media&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;MediaFileUri&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;job_uri&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;MediaFormat&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mp4&lt;/span&gt;&lt;span class="sh"&gt;'&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-US&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;OutputBucketName&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-output-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;Subtitles&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;Formats&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;vtt&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;srt&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="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;Subtitles&lt;/code&gt; parameter tells Transcribe to format the output specifically for video players. Without it, you'd get a JSON transcript that you'd need to convert to caption format yourself.&lt;/p&gt;

&lt;p&gt;Transcription jobs run asynchronously. You start the job, then check its status until it completes:&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;time&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;transcribe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_transcription_job&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;TranscriptionJobName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;job_name&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;job_status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;TranscriptionJob&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;TranscriptionJobStatus&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;job_status&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;COMPLETED&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;FAILED&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="k"&gt;break&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;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;job_status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Checking again...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&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;job_status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;COMPLETED&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;transcript_uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;TranscriptionJob&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;Transcript&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;TranscriptFileUri&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;Caption files available in S3 output bucket&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;When the job completes, Amazon Transcribe writes the caption files to your specified S3 bucket. You get both the caption files (VTT and SRT) and a JSON file containing the full transcript with detailed timing information.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding the Output
&lt;/h3&gt;

&lt;p&gt;A VTT caption file looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WEBVTT

00:00:00.000 --&amp;gt; 00:00:03.450
Welcome to this guide on Amazon Transcribe.

00:00:03.450 --&amp;gt; 00:00:07.890
Today we'll explore how to generate captions for your video content.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each caption block has a timestamp range and the corresponding text. Video players that support VTT will display this text at the right moments during playback.&lt;/p&gt;

&lt;p&gt;The JSON output includes confidence scores for each word, which helps you identify sections that might need manual review:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start_time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"end_time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.450"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"alternatives"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.9987"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Welcome"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Additional Features
&lt;/h3&gt;

&lt;p&gt;Amazon Transcribe supports several features that improve accuracy for specific use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom vocabularies&lt;/strong&gt; help with domain-specific terms, product names, and technical terms:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;transcribe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_transcription_job&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;TranscriptionJobName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;job_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Media&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;MediaFileUri&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;job_uri&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;MediaFormat&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mp4&lt;/span&gt;&lt;span class="sh"&gt;'&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-US&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Settings&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;VocabularyName&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;tech-terms-vocabulary&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;Subtitles&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;Formats&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;vtt&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;srt&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="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speaker identification&lt;/strong&gt; distinguishes between different speakers in interviews or panel discussions:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Settings&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;ShowSpeakerLabels&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MaxSpeakerLabels&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multiple languages&lt;/strong&gt; are supported, allowing you to caption content in dozens of languages using the same workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Important Considerations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Human Review Is Required
&lt;/h3&gt;

&lt;p&gt;Like all automated captioning systems, Amazon Transcribe has limitations. Common issues could include missing punctuation, incorrect terminology, poor speaker identification, misheard words, etc.&lt;/p&gt;

&lt;p&gt;While automation is valuable for scaling, it doesn't eliminate the need for quality control. Someone needs to review the generated captions for accuracy and readability before publishing. The captions represent your content, and errors can confuse viewers or change meaning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Audio Quality Matters
&lt;/h3&gt;

&lt;p&gt;Caption quality is closely tied to audio quality. Clear audio and minimal background noise tend to produce more accurate results, which is worth keeping in mind when recording video intended for transcription.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cost and Scale Considerations
&lt;/h3&gt;

&lt;p&gt;Amazon Transcribe charges per second of audio transcribed. For occasional use, costs are minimal. For large-scale operations processing hours of content daily, it's important to monitor usage and costs carefully. &lt;/p&gt;

&lt;h3&gt;
  
  
  Integration with Your Platform
&lt;/h3&gt;

&lt;p&gt;Most video platforms support VTT and SRT caption files. For custom video players using HTML5, you add captions with a track element:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;controls&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"your-file.mp4"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"video/mp4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;track&lt;/span&gt; &lt;span class="na"&gt;label=&lt;/span&gt;&lt;span class="s"&gt;"English"&lt;/span&gt; &lt;span class="na"&gt;kind=&lt;/span&gt;&lt;span class="s"&gt;"captions"&lt;/span&gt; &lt;span class="na"&gt;srclang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt; 
         &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"captions.vtt"&lt;/span&gt; &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For YouTube, you can upload caption files directly. For streaming platforms like AWS Elemental MediaConvert or AWS Elemental MediaPackage, you can include caption files as part of your video processing workflow.&lt;/p&gt;

&lt;p&gt;Consider where caption files will be stored in your storage system, how they'll be linked to their corresponding videos, and how your application will retrieve and display them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;Start small. Try transcribing a few videos using the AWS Console or a simple script. See how the accuracy matches your specific content. Identify common error patterns. Build confidence in the process before automating and scaling up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Ready to explore further? Here are resources to help you move forward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Official Documentation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/transcribe/" rel="noopener noreferrer"&gt;Amazon Transcribe Developer Guide&lt;/a&gt; - Comprehensive documentation covering all features and API references&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/transcribe/latest/dg/getting-started.html" rel="noopener noreferrer"&gt;Getting Started with Amazon Transcribe&lt;/a&gt; - Step-by-step tutorials for your first transcription jobs&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/transcribe/latest/dg/subtitles.html" rel="noopener noreferrer"&gt;Subtitles Documentation&lt;/a&gt; - Detailed guide on generating subtitle files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/orgs/aws-samples/repositories?type=all&amp;amp;q=transcribe" rel="noopener noreferrer"&gt;AWS Samples on GitHub&lt;/a&gt; - Search for "transcribe" to find complete code examples and reference architectures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Related AWS Services:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/lambda/" rel="noopener noreferrer"&gt;AWS Lambda Documentation&lt;/a&gt; - For automating your transcription workflow&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/s3/" rel="noopener noreferrer"&gt;Amazon S3 Documentation&lt;/a&gt; - For managing your media files and outputs&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/mediaconvert/" rel="noopener noreferrer"&gt;AWS Elemental MediaConvert&lt;/a&gt; - For embedding captions directly into video files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing and Costs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/transcribe/pricing/" rel="noopener noreferrer"&gt;Amazon Transcribe Pricing&lt;/a&gt; - Current pricing information to estimate your costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AWS documentation includes complete tutorials, API references, and best practices that go beyond what this guide covers. Start with the Getting Started guide, experiment with a few videos, and build from there.&lt;/p&gt;

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

&lt;p&gt;Amazon Transcribe provides a practical way for teams to generate captions as part of their workflow, not as an afterthought. When captions are treated as part of the content lifecycle and reviewed with care, Amazon Transcribe helps shift the work from manual transcription to quality review, making consistent captioning achievable at any scale.&lt;/p&gt;

&lt;p&gt;If captioning is becoming a recurring need in your work, it's worth exploring how this kind of automation can support your accessibility goals while maintaining the quality your audience deserves.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>aws</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Introduction to AWS AI Concepts: A Beginner's Guide</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Mon, 29 Dec 2025 05:28:22 +0000</pubDate>
      <link>https://dev.to/aws-builders/introduction-to-aws-ai-concepts-a-beginners-guide-16i8</link>
      <guid>https://dev.to/aws-builders/introduction-to-aws-ai-concepts-a-beginners-guide-16i8</guid>
      <description>&lt;p&gt;Artificial Intelligence (AI) as a concept can sometimes feel abstract and overwhelming to understand. New terms and tools are evolving quickly, and it might not always seem clear what AI is actually meant to do in real-world systems. &lt;/p&gt;

&lt;p&gt;The goal of this article is to help you understand AWS AI concepts, how the pieces fit together, and how beginners can explore AI responsibly and confidently without diving into the technical implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AWS Means by AI
&lt;/h2&gt;

&lt;p&gt;On AWS, AI is an umbrella term that covers a range of technologies designed to help systems perform tasks that typically require human judgment. These tasks include recognizing patterns, understanding language, analyzing images, or making predictions based on data.&lt;/p&gt;

&lt;p&gt;AWS generally groups AI-related technologies into three closely related areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Artificial Intelligence (AI)&lt;/strong&gt; - The broad field focused on building systems that can perform intelligent tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Machine Learning (ML)&lt;/strong&gt; - A subset of AI where systems learn patterns from data rather than relying on fixed rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deep Learning&lt;/strong&gt; - A subset of machine learning that uses neural networks to solve more complex problems, such as image recognition or speech processing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When AWS refers to AI services, it is usually describing managed services built on top of machine learning models. These services allow users to &lt;strong&gt;apply AI capabilities&lt;/strong&gt; without needing to design or train models from scratch. An example could be Amazon Comprehend an AWS AI service, which can analyze customer reviews to determine if sentiment is positive or negative, without you needing to build a sentiment analysis model yourself.&lt;/p&gt;

&lt;p&gt;Machine learning, the &lt;strong&gt;foundation behind most AI services on AWS&lt;/strong&gt;, works by learning from examples. Instead of writing instructions for every possible scenario, you provide data and allow the system to identify patterns within that data. For example, a system might learn how to classify emails as spam by analyzing large numbers of previous emails and their labels.&lt;/p&gt;

&lt;p&gt;As a beginner, you do not need to understand the mathematical details behind these steps. What matters is understanding that ML outcomes depend heavily on data quality and context.&lt;/p&gt;

&lt;h2&gt;
  
  
  How AWS Organizes AI Capabilities
&lt;/h2&gt;

&lt;p&gt;AWS provides AI functionality through managed services that can be grouped into three broad categories. Understanding these categories makes it easier to choose where to start.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. AI Services
&lt;/h3&gt;

&lt;p&gt;As described earlier, these are pre-built services designed to solve specific problems. You do not train models yourself; you provide input and receive results.&lt;/p&gt;

&lt;p&gt;Common use cases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyzing text for sentiment or key phrases using &lt;a href="https://aws.amazon.com/comprehend/" rel="noopener noreferrer"&gt;Amazon Comprehend&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Recognizing objects or faces in images and videos using &lt;a href="https://aws.amazon.com/rekognition/" rel="noopener noreferrer"&gt;Amazon Rekognition&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Converting speech to text or text to speech using &lt;a href="https://aws.amazon.com/transcribe/" rel="noopener noreferrer"&gt;Amazon Transcribe&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Translating content between languages using &lt;a href="https://aws.amazon.com/translate/" rel="noopener noreferrer"&gt;Amazon Translate&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Generating text, images, or code from prompts using &lt;a href="https://aws.amazon.com/bedrock/" rel="noopener noreferrer"&gt;Amazon Bedrock&lt;/a&gt; or &lt;a href="https://aws.amazon.com/q/" rel="noopener noreferrer"&gt;Amazon Q&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These services are designed to be used through simple API calls and follow a managed service model, allowing users to apply AI capabilities without training custom models.&lt;/p&gt;

&lt;p&gt;For beginners, these services are often the easiest entry point because they abstract away most of the underlying complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Machine Learning Platforms
&lt;/h3&gt;

&lt;p&gt;For users who need more flexibility, AWS also provides platforms that allow you to build, train, and deploy custom machine learning models.&lt;/p&gt;

&lt;p&gt;These platforms are typically used when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data is highly specialized.&lt;/li&gt;
&lt;li&gt;Pre-built services do not meet specific requirements.&lt;/li&gt;
&lt;li&gt;Greater control over training and behavior is needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example of this category is Amazon SageMaker, which supports the end-to-end machine learning lifecycle, including data preparation, model training, and deployment. These platforms usually come later in the learning journey and are not required for understanding AI fundamentals.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Infrastructure for AI Workloads
&lt;/h3&gt;

&lt;p&gt;Behind all AI services is cloud infrastructure such as compute, storage, and networking. AWS offers specialized infrastructure to support AI workloads at scale.&lt;/p&gt;

&lt;p&gt;At this level, AI workloads may run on GPU-enabled Amazon EC2 instances and use scalable storage services like Amazon S3 for datasets and model artifacts. This infrastructure supports traditional machine learning, deep learning, and generative AI workloads alike.&lt;/p&gt;

&lt;p&gt;Beginners typically do not need to manage this layer directly when using managed AI services, but it is useful to understand that AI systems still rely on standard cloud building blocks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "Managed AI" Means on AWS?
&lt;/h2&gt;

&lt;p&gt;A key concept for beginners is the idea of managed services. When an AI service on AWS is managed, AWS handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infrastructure provisioning and scaling&lt;/li&gt;
&lt;li&gt;Model maintenance and updates&lt;/li&gt;
&lt;li&gt;Service availability and reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You focus on using the service rather than maintaining the underlying system. This significantly lowers the barrier to entry and reduces operational risk.&lt;/p&gt;

&lt;p&gt;Managed does not mean guaranteed accuracy. Results still depend on the input you provide and the way outputs are interpreted. Understanding limitations remains important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with AWS AI as a Beginner
&lt;/h2&gt;

&lt;p&gt;For beginners, the best way to approach AWS AI is gradually and through a practical starting path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clearly defining the problem you want to solve.&lt;/li&gt;
&lt;li&gt;Evaluating whether AI is actually needed.&lt;/li&gt;
&lt;li&gt;Exploring AWS pre-built AI services that align with your goal.&lt;/li&gt;
&lt;li&gt;Running small experiments in low-risk environments.&lt;/li&gt;
&lt;li&gt;Reviewing outputs carefully and critically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is important to note that AWS AI services have associated costs, but the &lt;a href="https://aws.amazon.com/free/ai/" rel="noopener noreferrer"&gt;AWS Free Tier&lt;/a&gt; includes usage limits for many AI services that allow you to experiment and learn without immediate expense.&lt;/p&gt;

&lt;p&gt;In addition, for learners who prefer structured guidance, AWS also offers the &lt;a href="https://skillbuilder.aws/category/exam-prep/ai-practitioner-AIF-C01" rel="noopener noreferrer"&gt;AWS Certified AI Practitioner certification&lt;/a&gt;. This optional certification focuses on foundational AI concepts, common AWS AI services, and responsible AI practices. It is designed for both technical and non-technical audiences. Preparing for this certification can help you build a shared vocabulary and understand how AWS AI services fit together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Responsible Use of AI
&lt;/h2&gt;

&lt;p&gt;Using AI responsibly is an essential part of working with AWS AI services. Some principles to keep in mind include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Understanding limitations&lt;/strong&gt;: AI outputs are probabilistic and may not always be correct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoiding blind trust&lt;/strong&gt;: Results should be reviewed, especially in sensitive contexts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protecting privacy&lt;/strong&gt;: Only use data you are authorized to process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Being aware of bias&lt;/strong&gt;: Models learn from data, and biased data can influence outcomes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS provides guidance and tools to support &lt;a href="https://aws.amazon.com/ai/responsible-ai/" rel="noopener noreferrer"&gt;responsible AI use&lt;/a&gt;, but responsibility ultimately rests with the user.&lt;/p&gt;

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

&lt;p&gt;Think of AWS AI as a set of tools designed to help you make better decisions, not replace you. By understanding what AI can actually do, how AWS organizes its AI services, and when it makes sense to use it, you build a foundation that grows with your experience.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Automatically Generate Alt Text for Images Using Amazon Rekognition</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Mon, 13 Jan 2025 00:04:01 +0000</pubDate>
      <link>https://dev.to/aws-builders/how-to-automatically-generate-alt-text-for-images-using-amazon-rekognition-gee</link>
      <guid>https://dev.to/aws-builders/how-to-automatically-generate-alt-text-for-images-using-amazon-rekognition-gee</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Accessibility is a vital aspect of web development. One key component of web accessibility is providing alt text for images. Alt text (alternative text) is a textual description of an image that helps screen readers convey the image's content to users who cannot see it. &lt;/p&gt;

&lt;p&gt;Thinking of the right words for alt text can be tricky, especially when you're unsure of what to call an object. In addition, describing multiple images can quickly become tedious. Amazon Rekognition is a powerful image analysis service that can help automate some of the process. &lt;/p&gt;

&lt;p&gt;This guide will walk you through how to set up and use Rekognition to quickly generate alt text for your images, saving time and improving accessibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Amazon Rekognition?
&lt;/h2&gt;

&lt;p&gt;Amazon Rekognition is a powerful machine learning service offered by AWS that can analyze images and videos to identify objects, scenes, activities, and people. It can also recognize text, faces, and other visual elements in images.&lt;/p&gt;

&lt;p&gt;When you use Rekognition, it generates labels for an image, such as "Person," "Dog," or "Car," which describe the objects or scenes it detects. These labels can be a great starting point for alt text. However, it's important to remember that Rekognition is not a replacement for human judgment. It is essential to ensure that alt text is accurate, informative, and user-friendly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical Example of When to Use Rekognition
&lt;/h3&gt;

&lt;p&gt;Let’s say you manage an online store with hundreds of product images. Manually writing alt text for each product image can be time-consuming. Using Rekognition, you can automatically generate labels useful to write alt text for your product images in minutes, without having to spend a lot of time thinking about what to describe each image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin, ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/free/" rel="noopener noreferrer"&gt;AWS Account&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/cli/" rel="noopener noreferrer"&gt;AWS CLI&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user_manage_add-key.html" rel="noopener noreferrer"&gt;IAM user with an access key ID and secret key&lt;/a&gt; set up&lt;/li&gt;
&lt;li&gt;Basic Terminal Knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step-by-Step Guide: How to Generate Alt Text Using Rekognition
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Set Up AWS CLI
&lt;/h3&gt;

&lt;p&gt;The first step is to set up your AWS credentials in the CLI.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open your terminal and run &lt;code&gt;aws configure&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter your &lt;strong&gt;AWS Access Key ID, AWS Secret Access Key, and the default region&lt;/strong&gt; (e.g., &lt;code&gt;us-east-1&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This sets up your AWS CLI with the necessary credentials to interact with AWS services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Prepare Your Image
&lt;/h3&gt;

&lt;p&gt;You can use images stored locally on your computer or images stored in an AWS S3 bucket.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For local images&lt;/strong&gt;: You need to either encode the image to base64 format or upload it to S3. For simplicity, we'll focus on using the base64 method here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For images in an S3 bucket&lt;/strong&gt;: You can refer directly to the image in the S3 bucket by providing the bucket name and image file name.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Run the Rekognition Command
&lt;/h3&gt;

&lt;p&gt;Once your AWS CLI is set up and your image is ready, you can use the Rekognition &lt;code&gt;detect-labels&lt;/code&gt; command to generate labels.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For Local Images (Base64 Encoding)&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run the following command, replacing &lt;code&gt;/path/to/your/image.jpg&lt;/code&gt; with the actual path to your image file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws rekognition detect-labels &lt;span class="nt"&gt;--image&lt;/span&gt; &lt;span class="s2"&gt;"Bytes=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;base64&lt;/span&gt; /path/to/your/image.jpg | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'\n'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--max-labels&lt;/span&gt; 10 &lt;span class="nt"&gt;--min-confidence&lt;/span&gt; 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s what each part does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Bytes=$(base64 ...)&lt;/code&gt;: Encodes the image to base64 so it can be passed to Rekognition.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--max-labels 10&lt;/code&gt;: Limits the result to 10 labels.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--min-confidence 80&lt;/code&gt;: Filters out labels with a confidence lower than 80%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The command will return a JSON output with labels detected in the image. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Labels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Woman"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;99.5&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Baby"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;95.1&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For Images in an S3 Bucket&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your image is stored in an S3 bucket, use the following command, replacing &lt;code&gt;&amp;lt;your-bucket-name&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;image-name&amp;gt;&lt;/code&gt; with your S3 bucket and image names:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws rekognition detect-labels &lt;span class="nt"&gt;--image&lt;/span&gt; &lt;span class="s2"&gt;"S3Object={Bucket=&amp;lt;your-bucket-name&amp;gt;,Name=&amp;lt;image-name&amp;gt;}"&lt;/span&gt; &lt;span class="nt"&gt;--max-labels&lt;/span&gt; 10 &lt;span class="nt"&gt;--min-confidence&lt;/span&gt; 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Upon following either of the steps above, you’ll receive a JSON response with detected labels. You can use these labels as the starting point of your alt text. In this case, the alt text could be: "&lt;strong&gt;A woman carrying a baby&lt;/strong&gt;."&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Automate the Process (Optional)
&lt;/h3&gt;

&lt;p&gt;If you have many images, you can automate the process to make it more efficient.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Batch Processing with S3&lt;/strong&gt;: You can use AWS Lambda to automatically trigger Rekognition whenever an image is uploaded to your S3 bucket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using a Shell Script&lt;/strong&gt;: You can also write a shell script to process multiple images in a folder. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;image &lt;span class="k"&gt;in&lt;/span&gt; /path/to/images/&lt;span class="k"&gt;*&lt;/span&gt;.jpg&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;aws rekognition detect-labels &lt;span class="nt"&gt;--image&lt;/span&gt; &lt;span class="s2"&gt;"Bytes=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nv"&gt;$image&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'\n'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--max-labels&lt;/span&gt; 10 &lt;span class="nt"&gt;--min-confidence&lt;/span&gt; 80
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Considerations
&lt;/h2&gt;

&lt;p&gt;While Rekognition is a powerful tool that can be helpful for generating alt text, it’s important to keep the following in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use Rekognition as a starting point&lt;/strong&gt;: Rekognition can help you identify key objects and scenes in an image. It may not always generate the most precise labels for your images. It’s a good idea to review the generated labels and adjust them if necessary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt;: The labels generated by Rekognition are generic, so you may want to adjust them to fit the specific context of your image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limitations&lt;/strong&gt;: Rekognition generates labels based on visual content, but it doesn’t provide nuanced descriptions like a human might. You may need to fine-tune the alt text to provide a more detailed description when needed.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Rekognition can be a valuable tool for assisting with image alt text, but it should always be used as part of a human-centered workflow. By following these steps, you can automate the process of generating alt text for your images. This saves time, improves accessibility, and ensures that your website is more inclusive for all users.&lt;/p&gt;

&lt;p&gt;In addition, make your alt text brief and to the point, and use a screen reader to test it, ensuring it is accessible.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>rekognition</category>
      <category>a11y</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Leveraging AWS Services for Accessible Cloud Solutions</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Mon, 06 Jan 2025 03:32:18 +0000</pubDate>
      <link>https://dev.to/aws-builders/leveraging-aws-services-for-accessible-cloud-solutions-1mob</link>
      <guid>https://dev.to/aws-builders/leveraging-aws-services-for-accessible-cloud-solutions-1mob</guid>
      <description>&lt;p&gt;Cloud computing has become widely adopted over the years, powering everything from simple websites to complex technologies. Amazon Web Services (AWS) provides a wide array of services to businesses and developers worldwide. But do you know that some of these tools also play a significant role in improving accessibility for people with disabilities? &lt;/p&gt;

&lt;p&gt;In this post, we’ll explore these tools and practical examples of how to leverage them for accessible solutions. &lt;/p&gt;

&lt;h2&gt;
  
  
  Key AWS Tools that Aid Accessibility
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Amazon Rekognition
&lt;/h3&gt;

&lt;p&gt;This tool uses machine learning to identify objects, text, and scenes in images and videos. Developers can use it to build applications that describe visual content, aiding users with visual impairments.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Amazon Transcribe
&lt;/h3&gt;

&lt;p&gt;Amazon Transcribe converts spoken language into accurate, readable text, improving accessibility by providing transcripts for audio and video content. Transcribe is commonly used in customer support and e-learning platforms, providing live captions that make content more accessible.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Amazon Polly
&lt;/h3&gt;

&lt;p&gt;With this text-to-speech service, you can create applications that convert written content into natural-sounding speech, helping users with reading difficulties or visual impairments.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Amazon IVS (Interactive Video Service)
&lt;/h3&gt;

&lt;p&gt;AWS IVS allows for live video streaming with added accessibility features like closed captions, making live content more inclusive.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. AWS Amplify
&lt;/h3&gt;

&lt;p&gt;Though not solely focused on accessibility, AWS Amplify simplifies the development of accessible front-end applications by integrating best practices and tools that support accessibility standards. The Amplify UI library provides pre-built components that comply with WCAG and WAI-ARIA standards, making it easier to create applications with accessible user interfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Examples of AWS Tools in Action
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Amazon Rekognition&lt;/strong&gt;: A shopping app can use Rekognition to analyze product images and describe them (color, size, brand) in text. By integrating text-to-speech services like Amazon Polly, the app can read these descriptions aloud, helping visually impaired users shop independently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Amazon Transcribe&lt;/strong&gt;: An online learning platform can use Transcribe to generate subtitles for videos. This provides access to deaf or hard-of-hearing users while also supporting multiple languages to reach a global audience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Amazon Polly&lt;/strong&gt;: A news app can use Polly to read articles aloud, making it more accessible for users with visual impairments or reading difficulties. This feature also allows users to listen while multitasking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Amazon IVS&lt;/strong&gt;: For a live streaming platform, combining IVS with Amazon Transcribe can provide real-time captions during virtual events, ensuring that deaf or hard-of-hearing viewers can fully engage with the content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS Amplify&lt;/strong&gt;: When building an e-commerce platform with Amplify, developers can use the built-in UI components like forms that comply with WCAG standards, making it inclusive for everyone.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;AWS offers a range of tools that empower developers to create more inclusive applications. Whether you're enabling text-to-speech, automatic transcription, or accessible video content, AWS tools can help you improve accessibility and enhance user experiences for people with disabilities. By integrating these tools, you can help make the digital world a more inclusive place for all users.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>a11y</category>
      <category>cloud</category>
    </item>
    <item>
      <title>10 Web Accessibility Principles Every Developer Should Know</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Mon, 11 Mar 2024 04:25:22 +0000</pubDate>
      <link>https://dev.to/annysah/10-web-accessibility-principles-every-developer-should-know-3d89</link>
      <guid>https://dev.to/annysah/10-web-accessibility-principles-every-developer-should-know-3d89</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Web accessibility ensures that people with disabilities can perceive, understand, navigate, and interact with web content effectively. As developers, it's essential to incorporate accessibility principles into our work to ensure inclusivity and provide a seamless experience for all users. In this article, we'll explore ten key accessibility principles every developer should be familiar with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semantic HTML
&lt;/h2&gt;

&lt;p&gt;Semantic HTML elements help search engines understand the structure of your content and also assist screen readers in interpreting the information correctly. Utilizing proper tags like , , , , , etc. provides a clear hierarchy and meaning to your web pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keyboard Accessibility
&lt;/h2&gt;

&lt;p&gt;Many users rely on keyboards for navigation instead of a mouse. Ensure that all interactive elements, such as links, buttons, and form fields, are accessible via keyboard navigation. Additionally, avoid trapping users in keyboard traps where they cannot navigate away using keyboard commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alt Text for Images
&lt;/h2&gt;

&lt;p&gt;Provide descriptive alt text for images to convey their content and function to users who cannot see them. The alt text should be concise yet descriptive enough to convey the purpose of the image.&lt;/p&gt;

&lt;p&gt;It is important to note that decorative images should have empty alt attributes &lt;code&gt;alt=""&lt;/code&gt; to indicate they are for visual presentation only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Color Contrast
&lt;/h2&gt;

&lt;p&gt;Maintaining sufficient color contrast between a text and its background ensures readability, especially for users with low vision or color blindness. Always aim for a minimum contrast ratio of 4.5:1 for normal text and 3:1 for large text. There are various online tools available to help evaluate color contrast ratios. To learn more, you can check out 5 Essential Tools for Web Accessibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proper Form Labels
&lt;/h2&gt;

&lt;p&gt;Ensure that every form field has a corresponding label, and use the for attribute to explicitly associate labels with their respective inputs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Focus Management
&lt;/h2&gt;

&lt;p&gt;Proper focus management ensures that users can navigate your website efficiently, especially those using assistive technologies. Provide a clear visual indication, such as an outline or change in color, for focused elements. This will help users easily identify which element has the keyboard focus.&lt;/p&gt;

&lt;h2&gt;
  
  
  ARIA Roles and Attributes
&lt;/h2&gt;

&lt;p&gt;Accessible Rich Internet Applications (ARIA) attributes can enhance the accessibility of complex web applications. Use ARIA roles and attributes to convey the purpose, state, and structure of dynamic content for assistive technologies. However, use them sparingly and prioritize native HTML elements whenever possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logical Document Structure
&lt;/h2&gt;

&lt;p&gt;Organize your content using a logical document structure that follows best practices. Headings should be used to outline the content hierarchy, and lists should be used for grouped items. A well-structured document enhances navigation and comprehension for all users, including screen readers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Video and Audio Accessibility
&lt;/h2&gt;

&lt;p&gt;Provide captions for videos and transcripts for audio content to make them accessible to users with hearing impairments. Additionally, it offers controls for users to adjust the volume, pause, and play media content. Consider providing alternatives, such as text-based summaries, for users who cannot access multimedia content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing with Accessibility Tools:
&lt;/h2&gt;

&lt;p&gt;Regularly test your website for accessibility using automated and manual testing tools. Automated tools like Lighthouse, Axe, and WAVE can help identify common accessibility issues, while manual testing ensures a comprehensive evaluation of your website's accessibility across different devices and assistive technologies.&lt;/p&gt;

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

&lt;p&gt;By adhering to these ten web accessibility principles, developers can create websites and web applications that are inclusive and accessible to all users, regardless of their abilities or disabilities. Prioritizing accessibility enhances the user experience and aligns with ethical and legal obligations to provide equal access to digital content. As developers, let's commit to building a web that is accessible to everyone.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>accessibilty</category>
      <category>beginners</category>
      <category>developer</category>
    </item>
    <item>
      <title>5 Essential Tools for Web Accessibility</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Mon, 11 Mar 2024 04:08:49 +0000</pubDate>
      <link>https://dev.to/annysah/5-essential-tools-for-web-accessibility-doj</link>
      <guid>https://dev.to/annysah/5-essential-tools-for-web-accessibility-doj</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Web accessibility is crucial for ensuring that all users, including people with disabilities, can access and interact with web content effectively. Fortunately, there are numerous tools available to help developers assess and improve the accessibility of their websites and web applications. In this article, you'll learn about five essential web accessibility tools that every developer should be familiar with.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Axe
&lt;/h2&gt;

&lt;p&gt;Axe is a widely used accessibility testing tool developed by Deque Systems. It integrates seamlessly with popular web development tools such as Chrome DevTools and Firefox Developer Tools, making it convenient for developers to identify accessibility issues during development.&lt;/p&gt;

&lt;p&gt;It performs automated accessibility scans on web pages and provides detailed reports highlighting violations of accessibility standards, along with suggestions for improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. WAVE
&lt;/h2&gt;

&lt;p&gt;The WAVE evaluation tool is another popular accessibility testing tool that provides comprehensive evaluations of web content for accessibility issues. Developed by WebAIM (Web Accessibility in Mind), Wave is available as a browser extension for Chrome and Firefox as well as a web-based tool.&lt;/p&gt;

&lt;p&gt;This tool evaluates web pages against the Web Content Accessibility Guidelines (WCAG) criteria and provides visual feedback directly within the page, making it easy for developers to identify and understand accessibility issues. Wave also offers detailed reports with explanations and suggestions for fixing accessibility problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Lighthouse
&lt;/h2&gt;

&lt;p&gt;Lighthouse is an open-source tool developed by Google that helps developers improve the quality of their web pages across various dimensions, including performance, accessibility, best practices, and Search Engine Optimization (SEO).&lt;/p&gt;

&lt;p&gt;Integrated into Chrome DevTools, Lighthouse performs automated audits of web pages and generates detailed reports with actionable insights for optimization. Its accessibility audits cover a wide range of accessibility criteria, including semantic HTML, focus management, color contrast, and ARIA usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Color Contrast Analyzers
&lt;/h2&gt;

&lt;p&gt;Color contrast is essential for ensuring that text content is readable for users with low vision or color blindness. Color contrast analyzers help developers assess the contrast ratio between text and its background color to ensure compliance with accessibility standards.&lt;/p&gt;

&lt;p&gt;There are various color contrast analyzers available, including browser extensions such as ColorZilla and WebAIM's Color Contrast Checker. These tools allow developers to input foreground and background colors and instantly determine whether the color combination meets the required contrast ratio according to WCAG guidelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Screen Readers
&lt;/h2&gt;

&lt;p&gt;Screen readers are assistive technologies that convert on-screen content into synthesized speech or braille output, enabling users with visual impairments to access and navigate digital content. While not strictly a developer tool, understanding how screen readers interact with web content is essential for building accessible websites.&lt;/p&gt;

&lt;p&gt;Developers should test their websites with screen readers to ensure that all content is perceivable and navigable using assistive technologies. Popular screen readers include JAWS, NVDA, and VoiceOver (built into macOS and iOS devices). By testing with screen readers, developers can gain insights into how users with visual impairments experience their websites and identify areas for improvement in terms of navigation, content structure, and interactive elements.&lt;/p&gt;

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

&lt;p&gt;Web accessibility tools play a crucial role in helping developers create websites and web applications that are inclusive and accessible to all users. By utilizing tools like Axe, Wave Evaluation Tool, Lighthouse, color contrast analyzers, and screen readers, developers can identify accessibility issues, understand their impact on users with disabilities, and implement necessary improvements to ensure a seamless and inclusive user experience.&lt;/p&gt;

&lt;p&gt;Prioritizing web accessibility not only benefits users with disabilities but also contributes to the overall usability and quality of web content. As developers, let's leverage these essential accessibility tools to build a web that is accessible to everyone.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>accessbility</category>
      <category>design</category>
    </item>
    <item>
      <title>Connecting AWS with Terraform: A Short Guide</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Sat, 27 Jan 2024 06:01:32 +0000</pubDate>
      <link>https://dev.to/aws-builders/connecting-aws-with-terraform-a-short-guide-4bda</link>
      <guid>https://dev.to/aws-builders/connecting-aws-with-terraform-a-short-guide-4bda</guid>
      <description>&lt;p&gt;Infrastructure as Code (IaC) has become an essential component of modern software development, allowing teams to manage and provision infrastructure in a consistent and automated manner using tools like Terraform. In this guide, you'll learn how to connect AWS with Terraform, enabling users to seamlessly provision and manage resources on the AWS cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before diving into the article, ensure that you have the following prerequisites in place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;AWS Account&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" rel="noopener noreferrer"&gt;AWS CLI&lt;/a&gt; installed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user_manage_add-key.html" rel="noopener noreferrer"&gt;IAM user with an access key ID and secret key&lt;/a&gt; set up&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.terraform.io/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; installed&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are a Windows user, you can checkout my &lt;a href="https://dev.to/annysah/step-by-step-guide-to-installing-terraform-on-windows-m2e"&gt;Step-by-step Guide to Installing Terraform on Windows&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 1: Configure AWS CLI
&lt;/h2&gt;

&lt;p&gt;Run the following command to configure the AWS CLI with your AWS credentials:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

aws configure


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

&lt;/div&gt;

&lt;p&gt;You will be prompted to enter your AWS Access Key ID, Secret Access Key, default region, and output format. Make sure to provide the necessary information. &lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 2: Set Up AWS Provider in Terraform
&lt;/h2&gt;

&lt;p&gt;Create a new Terraform file, for example, &lt;code&gt;main.tf&lt;/code&gt;, and specify the AWS provider, and configure the region as shown below:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "~&amp;gt; 5.0"    
    }
  }
}

provider "aws" {
  # Configuration options
  region = "us-east-1" 
}


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;You can replace the region with the appropriate AWS region code where you want to deploy your resources.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 3: Initialize Terraform Configuration
&lt;/h2&gt;

&lt;p&gt;Next initialize your Terraform project by running the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

terraform init


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

&lt;/div&gt;

&lt;p&gt;This command downloads the necessary provider plugins.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 4: Write Terraform Configuration
&lt;/h2&gt;

&lt;p&gt;Now, you can start writing your Terraform configuration to define the AWS resources you want to create. For example, to create an S3 bucket, you can add the following code to your main.tf file:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

resource "aws_s3_bucket" "annysahbucket" {
  bucket = "annysah-terraform-practice"
}


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Step 5: Apply Terraform Configuration
&lt;/h2&gt;

&lt;p&gt;Apply the Terraform configuration to create the specified AWS resources:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

terraform apply


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

&lt;/div&gt;

&lt;p&gt;Upon running the command above, enter 'yes' for each prompt displayed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Verify Resources in AWS Console
&lt;/h2&gt;

&lt;p&gt;Check the AWS Management Console to ensure that the resources provided in your Terraform configuration file have been successfully created.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to destroy the created resources, you can run &lt;code&gt;terraform destroy&lt;/code&gt; from your terminal.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;In this guide, you've gained an overview of how to connect AWS with Terraform, allowing you to automate and scale your infrastructure deployments with ease. &lt;/p&gt;

</description>
      <category>aws</category>
      <category>terraform</category>
      <category>devops</category>
      <category>iac</category>
    </item>
    <item>
      <title>Step-by-step Guide to Installing Terraform on Windows</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Mon, 08 Jan 2024 01:44:13 +0000</pubDate>
      <link>https://dev.to/annysah/step-by-step-guide-to-installing-terraform-on-windows-m2e</link>
      <guid>https://dev.to/annysah/step-by-step-guide-to-installing-terraform-on-windows-m2e</guid>
      <description>&lt;p&gt;Installing a new software package on your PC can sometimes feel daunting. Trust me, I did feel this way when I was trying to install Terraform on my Windows PC. So, if you are new to Terraform and want it installed on your Windows PC, this guide will walk you through the process.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can also check out my previous article on &lt;a href="https://dev.to/annysah/a-brief-introduction-to-terraform-fhm"&gt;a brief introduction to Terraform&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 1: Download Terraform
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the &lt;a href="https://www.terraform.io/" rel="noopener noreferrer"&gt;Terraform homepage&lt;/a&gt; and click on &lt;strong&gt;"Download Terraform"&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Select Windows under the &lt;strong&gt;"Operating Systems"&lt;/strong&gt; section.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on &lt;strong&gt;"AMD64"&lt;/strong&gt; to download Terraform binary for a 64-bit operating system (OS) or &lt;strong&gt;"386"&lt;/strong&gt; for a 32-bit OS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to your PC's Windows directory and create a new folder named &lt;strong&gt;&lt;code&gt;terraform&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;In your Downloads, right-click on the downloaded Terraform binary file and select &lt;strong&gt;"Extract All..."&lt;/strong&gt; The window below will pop up.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;"Browse..."&lt;/strong&gt; and navigate to the &lt;code&gt;terraform&lt;/code&gt; folder created earlier. This is where you will extract the file. Once you are in the 'terraform' folder, click on &lt;strong&gt;"Extract."&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Step 2: Set Terraform Path to System Environment Variables
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In your Windows start menu, type environment and click &lt;strong&gt;"Edit system environment variables."&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on &lt;strong&gt;"Environment Variables"&lt;/strong&gt; in the System Properties window.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;"System variables,"&lt;/strong&gt; select the &lt;strong&gt;"Path"&lt;/strong&gt;, then click &lt;strong&gt;"Edit."&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;"New"&lt;/strong&gt; and enter the path of the Terraform folder, which is &lt;code&gt;C:\terraform&lt;/code&gt;. Click &lt;strong&gt;"OK"&lt;/strong&gt; to close each window.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Step 3: Verify Terraform Installation and Configuration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the folder path &lt;code&gt;C:\terraform&lt;/code&gt; in a new command prompt window and type the &lt;code&gt;terraform -version&lt;/code&gt; to verify the installed version.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;To see more Terraform commands, you can simply type &lt;code&gt;terraform&lt;/code&gt; in the terminal.&lt;/p&gt;

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

&lt;p&gt;Now, you have successfully installed and configured Terraform on your Windows PC. Cheers to more learning!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Brief Introduction to Terraform</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Sun, 07 Jan 2024 04:59:04 +0000</pubDate>
      <link>https://dev.to/annysah/a-brief-introduction-to-terraform-fhm</link>
      <guid>https://dev.to/annysah/a-brief-introduction-to-terraform-fhm</guid>
      <description>&lt;p&gt;In DevOps and cloud infrastructures, efficient management and provisioning of resources (compute, network, storage, and database) are very important because they tend to get complex quickly. As a result, a robust tool like Hashicorp's Terraform can handle this and even eliminate errors that can occur with a manual setup. This article provides an overview of what Terraform is, its importance and basic concepts. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Terraform?
&lt;/h2&gt;

&lt;p&gt;Terraform is an open-source infrastructure as code (IaC) tool that enables DevOps teams to define and provision infrastructure resources in a configuration file (with the &lt;code&gt;.tf&lt;/code&gt; extension) using the Hashicorp Configuration Language (HCL). This means that instead of manually configuring resources, it allows you to describe your complete infrastructure in the form of code. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Terraform?
&lt;/h2&gt;

&lt;p&gt;Terraform plays a crucial role in the DevOps lifecycle by providing numerous benefits, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facilitates rapid development cycles by automating the provisioning and management of infrastructure.&lt;/li&gt;
&lt;li&gt;Improves team collaborations due to the ability to version control infrastructure configurations&lt;/li&gt;
&lt;li&gt;Supports multiple providers such as AWS, Azure, GCP and more&lt;/li&gt;
&lt;li&gt;Seamless CI/CD (continuous integration and continuous deployment) pipeline integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Basic Concepts of Terraform
&lt;/h2&gt;

&lt;p&gt;The following are a few of the basic concepts you would often come across when using Terraform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Providers&lt;/li&gt;
&lt;li&gt;Resources&lt;/li&gt;
&lt;li&gt;Modules&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Providers
&lt;/h3&gt;

&lt;p&gt;In Terraform, providers act as connectors to different cloud platforms or infrastructure services by giving access to the API you will need to interact with to create resources. Users specify the provider they want to use in their configuration files, and all Terraform does is translate it into the specific API calls needed for each service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = "us-east-2"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code above is an example of how to declare a provider. The "provider" keyword is used to specify the service you want, in this case "aws". Users can then put all the necessary configurations within the curly braces.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;p&gt;In Terraform configuration file, resources are the most important element. They represent the infrastructure components you want to create or manage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_s3_bucket" "first_bucket" {
    bucket = "my-first-bucket"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resource block above tells Terraform to create an AWS S3 bucket with the specified name as "first-bucket" and then set the necessary configurations for the bucket within the curly braces. &lt;/p&gt;

&lt;h3&gt;
  
  
  Modules
&lt;/h3&gt;

&lt;p&gt;Modules in Terraform are helpful in defining a reusable block of Terraform code, of which we can have many instances in the main configuration file. Modules are a great way to maintain and manage complex infrastructure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module "web_server" {
  source = "./modules/web_server"
  instance_count = 3
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code above is an example of how to write a module configuration. Here, this module block is instructing Terraform to use the "web_server" module. It also sets a specific parameter, "instance_count," to 3, influencing the behavior of the module when executed.&lt;/p&gt;

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

&lt;p&gt;Terraform is a really powerful solution for managing infrastructure as code, offering automation, scalability, and collaboration benefits in the DevOps and cloud worlds. &lt;/p&gt;

&lt;p&gt;This article introduces you to the basics of Terraform. You’ve learned about some of its benefits and concepts. To further deepen your knowledge of Terraform, you can visit the &lt;a href="https://developer.hashicorp.com/terraform/docs"&gt;documentation&lt;/a&gt;. Cheers to more learning!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>infrastructureascode</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Building a CI/CD Integration with Amazon EC2, Jenkins and Docker</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Tue, 12 Dec 2023 02:26:39 +0000</pubDate>
      <link>https://dev.to/aws-builders/building-a-cicd-integration-with-amazon-ec2-jenkins-and-docker-5bnh</link>
      <guid>https://dev.to/aws-builders/building-a-cicd-integration-with-amazon-ec2-jenkins-and-docker-5bnh</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Continuous integration (CI) and continuous delivery (CD) are the development practices of committing code to a shared repository frequently and reliably, allowing for continuous software improvement. Each commit triggers automated workflows on a CI/CD server, which can alert the development team of a potential issue.&lt;/p&gt;

&lt;p&gt;In this article, you'll learn how to use DevOps tools like Amazon EC2, Jenkins, and Docker to build a CI/CD integration of a simple React app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;The following is required to follow along smoothly with the tutorial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;a href="https://aws.amazon.com" rel="noopener noreferrer"&gt;AWS account&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A simple React application you would like to deploy. Here is the &lt;a href="https://github.com/Annysah/tasky" rel="noopener noreferrer"&gt;repository&lt;/a&gt; for the React app used in this tutorial.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon EC2 (Elastic Compute Cloud)&lt;/strong&gt;&lt;/a&gt; is a cloud computing service that allows for the deployment of virtual servers within an AWS environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.jenkins.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Jenkins&lt;/strong&gt;&lt;/a&gt; is an open-source automation tool that allows developers to build, test and deploy software.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt; is an open-source software development platform that uses virtualization technology to ease the development and deployment of applications in containerized environments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You can learn more about &lt;a href="https://dev.to/annysah/what-is-docker-and-why-is-it-important-1one"&gt;What Docker is and why it is important&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Module 1: Create an EC2 Instance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Go to the AWS management console and sign in with your AWS account credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Use the services search box in the console to look up "EC2". Click on it to navigate to the dashboard, and then select the "Launch instance" button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Launch an EC2 instance&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give the instance any name e.g. tasky.&lt;/li&gt;
&lt;li&gt;Select the Ubuntu AMI and the t2.micro free tier instance type.&lt;/li&gt;
&lt;li&gt;Choose "Create new key pair," then pick either RSA or ED25519 as the key-pair type. Afterward, select the Private key file format as .pem and .ppk. Then, click the "Create key pair" button.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;In this tutorial, RSA and the .pem format were specifically chosen.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Under the network settings, click edit and set the inbound security group rules as shown in the image below;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;The custom TCP with port range 8080 is for the Jenkins that will be installed later in this tutorial.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Finally, launch the instance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Choose the instance you recently created from the instances table, click the connect button, and opt for the "EC2 Instance Connect" tab to enable SSH access to the CLI.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Module 2: Configure Jenkins on the EC2 Instance
&lt;/h2&gt;

&lt;p&gt;Jenkins utilizes Java as its underlying framework, so be sure to install it on your EC2 virtual server instance by doing the following:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Update its package source list to acquire the latest versions of packages from the repositories by running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then install Java and validate the installation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install openjdk-11-jre

java --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: The next step is to install Jenkins by running the following command;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list &amp;gt; /dev/null

sudo apt-get update

sudo apt-get install jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;You can always check for the updated Jenkins releases &lt;a href="https://www.jenkins.io/doc/book/installing/linux/#long-term-support-release" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Start Jenkins by running the following commands;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl enable jenkins

sudo systemctl start jenkins

sudo systemctl status jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Open the Jenkins application in your web browser by entering the public IP address of your instance, followed by port 8080.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://&amp;lt;your-ec2-ip&amp;gt;:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see this in your browser&lt;/p&gt;

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

&lt;p&gt;To access your administrator password, enter &lt;code&gt;sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;/code&gt; in your instance terminal.&lt;/p&gt;

&lt;p&gt;Then, copy the password, return to your browser, paste it into the Administrator password field, and click "Continue."&lt;/p&gt;

&lt;p&gt;Next, select "install suggested plugins." Create first admin user; upon clicking "Save and Continue," it leads you to the dashboard as shown below&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;: Set up Jenkins; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the left side of the dashboard, select "New Item" and type in any name.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose "Freestyle Project" and click Ok.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a short project description, select "Github Project," and paste the link to your project repo as shown below&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;: Run the following in your EC2 instance terminal so you can access your instance RSA private and public keys&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh-keygen

cd .ssh

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

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The expected output will be &lt;code&gt;authorized_keys id_rsa id_rsa.pub&lt;/code&gt;. To get the public key, run &lt;code&gt;sudo cat id_rsa.pub&lt;/code&gt; while to get the private key, run &lt;code&gt;sudo cat id_rsa&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;: Go to your Github profile settings and look for "SSH and GPG keys" on the left pane. Click on "New SSH key."&lt;/p&gt;

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

&lt;p&gt;Enter a name, type in your RSA public key, and click "Add SSH key."&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;: Copy your &lt;code&gt;.git&lt;/code&gt; URL and paste it into the "Repository URL" within the "Source Management" section of your Jenkins dashboard.&lt;/p&gt;

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

&lt;p&gt;Click on the "Add" button to add credentials and select "Jenkins Credentials Provider." In the dialog box, under kind, select "SSH with private key" and type an ID and description, and set the username to ubuntu&lt;/p&gt;

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

&lt;p&gt;In the private key, tick "Enter directly" and enter your private key, then click Add.&lt;/p&gt;

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

&lt;p&gt;You can then select the created credential in the "Credentials" field.&lt;/p&gt;

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

&lt;p&gt;The next step is to click "Save" and "Build Now."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can check the "console output" for build details.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt;: In your instance terminal, run the command below to access your Jenkins workspace&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /var/lib/jenkins/workspace/{your-project-name}
ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, proceed to install the necessary dependencies listed below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install nodejs

sudo apt install npm

sudo npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 10&lt;/strong&gt;: In your AWS console, navigate to Instance -&amp;gt; Security -&amp;gt; Security groups -&amp;gt; Edit inbound rules. Add the rule as illustrated below and save the changes to enable access to the app from your instance server later on.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Module 3: Set up Docker
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Inside your Jenkins workspace on your instance terminal, install Docker by executing the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install docker.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Create a Dockerfile. This file will be used to build an image&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vim Dockerfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Add the following content to the Dockerfile;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:12.2.0-alpine
WORKDIR app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["npm","start"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;To exit vim, type &lt;code&gt;:wq&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Then, build your image&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build . -t tasky
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;To fix any permission issues, execute the commands below:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo usermod -a -G docker $USER

sudo reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a container from the image&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d --name tasky -p 3000:3000 tasky
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify if it is running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;Access your application in the web browser by entering the public IP address of your instance, followed by port 3000&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://&amp;lt;your-ec2-ip&amp;gt;:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Module 4: Automate Jenkins
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Now configure "Build Steps" in your Jenkins dashboard as shown below&lt;/p&gt;

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

&lt;p&gt;Then, click Save -&amp;gt; Build Now&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Navigate to Manage Jenkins -&amp;gt; Plugins -&amp;gt; Available Plugins, search for the "GitHub Integration" plugins, and install.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Go to your Github project repo settings and look for "Webhook" on the left pane. Add your Jenkins URL, appended with &lt;code&gt;/github-webhook/&lt;/code&gt;, select the content type as "application/json," and click "Add webhook."&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Navigate to Jenkins configuration for your project and check the "GitHub hook trigger for GITScm polling."&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;You can test your modified Jenkins build job by making changes to any file in your project repository. After completing the update, Jenkins will automatically trigger a build job.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;In this article, you learned how to integrate a simple CI/CD practice into an application by utilizing DevOps tools such as AWS EC2, Jenkins, and Docker.&lt;/p&gt;

&lt;p&gt;Integrating Jenkins with AWS EC2 and Docker creates an effective CI/CD pipeline that automates software delivery. This combination allows for easy scalability and repeatability in the development, testing, and deployment of applications. Adopting these technologies allows development teams to easily detect errors, accelerate release cycles, while maintaining high quality requirements.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>jenkins</category>
      <category>docker</category>
    </item>
    <item>
      <title>Dockerizing a Next.js App: A Step-by-Step Guide</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Tue, 21 Nov 2023 06:33:29 +0000</pubDate>
      <link>https://dev.to/annysah/dockerizing-a-nextjs-app-a-step-by-step-guide-a40</link>
      <guid>https://dev.to/annysah/dockerizing-a-nextjs-app-a-step-by-step-guide-a40</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Docker is a helpful tool in software development, especially when integration of new features and frequent deployments are required. This tool makes it easy to containerize applications and their dependencies, ensuring they remain consistent across various environments. In this article, you'll learn how to dockerize a &lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt; application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before getting started, you will need to have the following tools installed on your system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Create a Next.js App
&lt;/h2&gt;

&lt;p&gt;If you don't have a Next.js app yet, create one using the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app my-next-app
cd my-next-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;npm run dev&lt;/code&gt; to see if the app is running properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Setup a Dockerfile
&lt;/h2&gt;

&lt;p&gt;Create a file called &lt;code&gt;Dockerfile&lt;/code&gt; in the root of your Next.js app. This file will contain the following instructions for building a Docker image for your application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:21

WORKDIR usr/src/app

COPY . .

RUN npm install

CMD ["npm", "start"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the file above, the:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;FROM node:21&lt;/code&gt; command defines the image we want to build from, often called the &lt;strong&gt;base image&lt;/strong&gt;. Here, we used the latest version of Node available as seen from the &lt;a href="https://hub.docker.com/_/node"&gt;Docker Hub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WORKDIR usr/src/app&lt;/code&gt; specifies the working directory as &lt;code&gt;usr/src/app&lt;/code&gt;, for executing any command you add in the Dockerfile.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COPY . .&lt;/code&gt; command copies all the files and folders from the current directory to the working directory.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RUN npm install&lt;/code&gt; installs all the necessary dependencies inside the container.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CMD ["npm", "start"]&lt;/code&gt; command defines how to start the application in the container.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Create a .dockerignore File
&lt;/h2&gt;

&lt;p&gt;Create a &lt;code&gt;.dockerignore&lt;/code&gt; file at the root of your app and add the code below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules
.next
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows Docker to know what to ignore during the build process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Build the Docker Image
&lt;/h2&gt;

&lt;p&gt;Open your terminal and run the following command to build the Docker image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t my-next-app .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command tells Docker to build an image using the instructions in the Dockerfile and give it the name &lt;code&gt;my-next-app&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Run the Docker Container
&lt;/h2&gt;

&lt;p&gt;After successfully building the Docker image, run the container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -p 3000:3000 my-next-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command maps port 3000 on your local machine to port 3000 in the Docker container. Open your browser and navigate to &lt;a href="http://localhost:3000"&gt;http://localhost:3000&lt;/a&gt; to see your Next.js app running inside a Docker container.&lt;/p&gt;

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

&lt;p&gt;In this article, you learned how to dockerize your Next.js application by following the steps outlined.&lt;/p&gt;

&lt;p&gt;Dockerizing a Next.js app allows for easy deployment and ensures consistency across environments. This approach makes project development and deployment processes more efficient and scalable.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>nextjs</category>
      <category>javascript</category>
      <category>cloud</category>
    </item>
    <item>
      <title>What is Docker and why it is important?</title>
      <dc:creator>Annysah</dc:creator>
      <pubDate>Mon, 06 Nov 2023 07:59:43 +0000</pubDate>
      <link>https://dev.to/annysah/what-is-docker-and-why-is-it-important-1one</link>
      <guid>https://dev.to/annysah/what-is-docker-and-why-is-it-important-1one</guid>
      <description>&lt;p&gt;In the constantly evolving DevOps and cloud computing space, Docker has become a helpful tool. At some point, you may have heard about it, and the idea behind it may sound a little confusing. In this article, you will understand what Docker is and its importance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Docker?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; is an open-source software development platform that uses virtualization technology to ease the development and deployment of applications in containerized environments. It is a lightweight tool that bundles applications and their dependencies into virtual containers that would work efficiently in different environments without worrying about constant configurations and compatibility issues. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Docker?
&lt;/h2&gt;

&lt;p&gt;In a development team scenario, for example, team members use different operating systems. While working on a project and making frequent changes and deployments to the software, compatibility issues can occur due to these varied operating systems. It may lead to problems like "it works on your machine, but it doesn't work on mine."&lt;/p&gt;

&lt;p&gt;With the help of &lt;strong&gt;containers&lt;/strong&gt;, Docker solves this problem by ensuring that applications run consistently, regardless of the operating system they are running on. It allows us to work in several different environments without compromising anything on our local machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Containers
&lt;/h3&gt;

&lt;p&gt;To further comprehend Docker, let's talk about the concept of containers. Think of a container as Tupperware for your applications that encapsulates everything they need to function, such as the application's code, libraries, dependencies, and OS, all neatly packaged to run as soon as you deploy it. &lt;/p&gt;

&lt;p&gt;In other words, Docker simplifies the management of containers, making it accessible for developers, system administrators, and DevOps teams.&lt;/p&gt;

&lt;p&gt;Containers offer several advantages, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: Containers ensure that your application behaves consistently across different environments. Just like following a precise recipe for baking cookies, containers follow a set of instructions for predictable performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Portability&lt;/strong&gt;: Containers can run on any platform that supports them, offering the flexibility to deploy your application wherever needed. It is just like enjoying your homemade cookies at home, at work, or at a friend's house.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficiency&lt;/strong&gt;: Containers are lightweight, consuming fewer resources compared to traditional virtual machines. It's like sending a compact parcel with only the essentials instead of a bulky package with a lot of unnecessary padding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Isolation&lt;/strong&gt;: Containers keep your applications separate, similar to the Tupperware in a fridge. If one container encounters a problem, it won't affect the others.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In conclusion, Docker is a game-changer in the world of DevOps and cloud computing. With Docker, the "it works on your machine, but it doesn't work on mine" scenario becomes a thing of the past, as it ensures consistent performance across different operating systems. Just like Tupperware keeps your food fresh and separate, Docker keeps your applications isolated and ready to run seamlessly. &lt;/p&gt;

&lt;p&gt;So, whether you're working with a diverse team or deploying software in various environments, Docker ensures that your applications function predictably, efficiently, and with the utmost consistency.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>cloud</category>
      <category>devops</category>
      <category>containers</category>
    </item>
  </channel>
</rss>
