<?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>Forem: Gustavo Aleixo</title>
    <description>The latest articles on Forem by Gustavo Aleixo (@gustavo_aleixo).</description>
    <link>https://forem.com/gustavo_aleixo</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%2F2857344%2F0f039626-b363-43a5-b214-d565645da99e.jpeg</url>
      <title>Forem: Gustavo Aleixo</title>
      <link>https://forem.com/gustavo_aleixo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gustavo_aleixo"/>
    <language>en</language>
    <item>
      <title>Enhancing RAG Precision Using Bedrock Metadata</title>
      <dc:creator>Gustavo Aleixo</dc:creator>
      <pubDate>Sat, 14 Jun 2025 18:44:35 +0000</pubDate>
      <link>https://forem.com/gustavo_aleixo/enhancing-rag-precision-using-bedrock-metadata-5bk9</link>
      <guid>https://forem.com/gustavo_aleixo/enhancing-rag-precision-using-bedrock-metadata-5bk9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Enhance Your Retrieval Accuracy with Bedrock Knowledge Base Metadata&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In one of the projects where I worked with Retrieval-Augmented Generation (RAG) using AWS Bedrock and Knowledge Base, I encountered a retrieval accuracy issue. The client had multiple documents containing similar content, but each was tailored for different audiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Scenario:
&lt;/h2&gt;

&lt;p&gt;Imagine a &lt;strong&gt;high school textbook&lt;/strong&gt; and a &lt;strong&gt;college textbook&lt;/strong&gt;. Both may cover the same subject matter, but typically, the college version contains more advanced content.&lt;/p&gt;

&lt;p&gt;Now, how can we ensure that high school students only retrieve information from the high school materials, even when both files contain overlapping topics?&lt;/p&gt;

&lt;p&gt;The solution I implemented for this challenge was to use &lt;strong&gt;metadata filters&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Use Metadata Filters?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Metadata filters&lt;/strong&gt; allow you to classify your files in a way that Bedrock can understand and apply filters during retrieval. This ensures that responses are generated only from the relevant, filtered files, making your searches both faster and more accurate.&lt;/p&gt;

&lt;p&gt;In my case, since I needed to separate and categorize the search results based on the target audience, I created a custom metadata attribute for each document.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Use Metadata with Bedrock Knowledge Base
&lt;/h2&gt;

&lt;p&gt;If you’re using an S3 bucket as the source for your Knowledge Base, you can create a &lt;code&gt;.metadata.json&lt;/code&gt; file for each document you upload. This JSON file should have the same name as the indexed file, with the &lt;code&gt;.metadata.json&lt;/code&gt; extension.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example:
&lt;/h3&gt;

&lt;p&gt;For a &lt;strong&gt;college textbook&lt;/strong&gt; (&lt;code&gt;college-book.pdf&lt;/code&gt;), create:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File:&lt;/strong&gt; college-book.pdf.metadata.json&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content:&lt;/strong&gt;&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;"metadataAttributes"&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;"level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"college"&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;p&gt;For a &lt;strong&gt;college textbook&lt;/strong&gt; (&lt;code&gt;high-school-book.pdf&lt;/code&gt;), create:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File:&lt;/strong&gt; high-school-book.pdf.metadata.json&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content:&lt;/strong&gt;&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;"metadataAttributes"&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;"level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high-school"&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;p&gt;Upload this files to the bucket S3:&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%2Fxiomeqtk0iaf7f4f6yu2.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%2Fxiomeqtk0iaf7f4f6yu2.png" alt="Image description" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After, you need run the sync on Knowledge base, await few minutes and that’s it !!!&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%2Fncojry92wsskv8du05l4.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%2Fncojry92wsskv8du05l4.png" alt="Image description" width="800" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your sync history will show amount source and metadata files find in your bucket&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing your metadata
&lt;/h2&gt;

&lt;p&gt;To test your metadata, go to the Knowledge base scream and click in “Test Knowledge Base” button and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select your model&lt;/li&gt;
&lt;li&gt;Search for “Data manipulation” section&lt;/li&gt;
&lt;li&gt;Click in Filters&lt;/li&gt;
&lt;li&gt;Select “Manual filters” option&lt;/li&gt;
&lt;li&gt;Put in your metadata filter &lt;/li&gt;
&lt;/ul&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%2Fez1nqdue9vlhh2jitl5b.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%2Fez1nqdue9vlhh2jitl5b.png" alt="Image description" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Tip
&lt;/h2&gt;

&lt;p&gt;When making a query to the Knowledge Base, use the metadata filter option provided by Bedrock (e.g., filtering by "level": "high-school"), so only documents with the specified metadata will be considered during retrieval.&lt;/p&gt;

&lt;p&gt;By using this approach, you can dramatically improve the precision and relevance of your RAG applications with AWS Bedrock.&lt;/p&gt;

</description>
      <category>rag</category>
      <category>aws</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Escalando Containers com ECS Fargate Baseado em Mensagens SQS</title>
      <dc:creator>Gustavo Aleixo</dc:creator>
      <pubDate>Mon, 10 Mar 2025 10:41:28 +0000</pubDate>
      <link>https://forem.com/gustavo_aleixo/escalando-containers-com-ecs-fargate-baseado-em-mensagens-sqs-399g</link>
      <guid>https://forem.com/gustavo_aleixo/escalando-containers-com-ecs-fargate-baseado-em-mensagens-sqs-399g</guid>
      <description>&lt;p&gt;Em sistemas modernos, a necessidade de escalabilidade e processamento sob demanda é cada vez mais comum. Para lidar com grandes volumes de dados de forma eficiente, a combinação de serviços de mensageria, como o Amazon SQS, com uma plataforma de orquestração de containers, como o Amazon ECS, permite armazenar e distribuir mensagens de maneira assíncrona, garantindo que as aplicações processem as informações no seu próprio ritmo.&lt;/p&gt;

&lt;p&gt;Neste artigo, vamos explorar como configurar essa arquitetura, utilizando o Amazon ECS Fargate para hospedar containers que escalam automaticamente com base no volume de mensagens na fila do SQS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requisitos
&lt;/h2&gt;

&lt;p&gt;Para a realização deste laboratório, é necessário:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Possuir uma conta AWS.&lt;/li&gt;
&lt;li&gt;Ter o AWS CLI instalado e configurado em sua máquina.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Arquitetura
&lt;/h2&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%2F3iflwednb2mpi24et7u8.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%2F3iflwednb2mpi24et7u8.png" alt="Imagem da arquitetura proposta" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Recursos da Arquitetura
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon SQS&lt;/strong&gt;: Serviço de filas AWS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon ECS Fargate&lt;/strong&gt;: Serviço de containers serverless.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CloudWatch&lt;/strong&gt;: Serviço de monitoramento e geração de métricas para autoscaling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Auto Scaling&lt;/strong&gt;: Serviço de gerenciamento automático de escalabilidade.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fluxo da Arquitetura
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Um sistema externo ou API envia mensagens para a fila SQS.&lt;/li&gt;
&lt;li&gt;O Amazon CloudWatch monitora o número de mensagens na fila.&lt;/li&gt;
&lt;li&gt;O Application Auto Scaling ajusta dinamicamente o número de tasks no ECS Fargate com base nas métricas do CloudWatch.&lt;/li&gt;
&lt;li&gt;As tasks do ECS Fargate consomem e processam as mensagens.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Criando a Fila SQS
&lt;/h2&gt;

&lt;p&gt;Com o AWS CLI configurado para sua conta, acesse o terminal e execute o comando abaixo, substituindo &lt;code&gt;&amp;lt;regiao&amp;gt;&lt;/code&gt; pela sua região AWS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws sqs create-queue &lt;span class="nt"&gt;--region&lt;/span&gt; &amp;lt;regiao&amp;gt; &lt;span class="nt"&gt;--queue-name&lt;/span&gt; consumer-queue-ecs-sample.fifo &lt;span class="nt"&gt;--attributes&lt;/span&gt; &lt;span class="s1"&gt;'{"FifoQueue":"true"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saída esperada no terminal:&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="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"QueueUrl"&lt;/span&gt;: &lt;span class="s2"&gt;"https://sqs.&amp;lt;regiao&amp;gt;.amazonaws.com/&amp;lt;conta-aws&amp;gt;/consumer-queue-ecs-sample.fifo"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copie a URL da fila que foi retornada pelo terminal e armazene!&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando e Disponibilizando a Imagem no ECR
&lt;/h2&gt;

&lt;p&gt;Para exemplificar, utilizaremos um script previamente criado para consumir as mensagens da fila. Vamos iniciar?&lt;/p&gt;

&lt;h3&gt;
  
  
  Clonando o Repositório do GitHub
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/GustavoAleixo/consumer-queue-ecs-sample.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acesse a pasta do repositório:&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="nb"&gt;cd &lt;/span&gt;consumer-queue-ecs-sample
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesta pasta encontraremos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|_ ecs
|  |__ ecs-trust-policy.json
|  |__ task-definition.json
|_ Dockerfile
|_ index.mjs
|_ README.md
|_ .env.example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edite o arquivo &lt;code&gt;task-definition.json&lt;/code&gt; e substitua &lt;code&gt;&amp;lt;conta-aws&amp;gt;&lt;/code&gt; pelo número da sua conta AWS e &lt;code&gt;&amp;lt;regiao&amp;gt;&lt;/code&gt; pela região utilizada anteriormente na criação da fila.&lt;/p&gt;

&lt;p&gt;Renomeie o arquivo &lt;code&gt;.env.example&lt;/code&gt; para &lt;code&gt;.env&lt;/code&gt; e edite-o, substituindo &lt;code&gt;&amp;lt;regiao&amp;gt;&lt;/code&gt; pela região utilizada e &lt;code&gt;&amp;lt;url-fila&amp;gt;&lt;/code&gt; pela URL da fila armazenada anteriormente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando a Função IAM para o ECS
&lt;/h3&gt;

&lt;p&gt;O ECS precisa de permissões para acessar a fila SQS e registrar logs no CloudWatch. Execute os comandos abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam create-role &lt;span class="nt"&gt;--role-name&lt;/span&gt; ecsTaskExecutionRole &lt;span class="nt"&gt;--assume-role-policy-document&lt;/span&gt; file://ecs/ecs-trust-policy.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, anexe as permissões necessárias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam attach-role-policy &lt;span class="nt"&gt;--role-name&lt;/span&gt; ecsTaskExecutionRole &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
aws iam attach-role-policy &lt;span class="nt"&gt;--role-name&lt;/span&gt; ecsTaskExecutionRole &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; arn:aws:iam::aws:policy/AmazonSQSFullAccess
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Criando e Configurando o ECS
&lt;/h2&gt;

&lt;p&gt;Crie um cluster ECS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs create-cluster &lt;span class="nt"&gt;--cluster-name&lt;/span&gt; consumer-queue-ecs-sample-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois, registre a definição da task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs register-task-definition &lt;span class="nt"&gt;--cli-input-json&lt;/span&gt; file://ecs/task-definition.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crie o serviço no ECS, substituindo &lt;code&gt;&amp;lt;ID-SUBNET&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;ID-SECURITY-GROUP&amp;gt;&lt;/code&gt; pelos valores obtidos anteriormente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs create-service &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--cluster&lt;/span&gt; consumer-queue-ecs-sample-cluster &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--service-name&lt;/span&gt; consumer-queue-ecs-sample-service &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--task-definition&lt;/span&gt; consumer-queue-ecs-sample-task &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--launch-type&lt;/span&gt; FARGATE &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--desired-count&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--network-configuration&lt;/span&gt; &lt;span class="s2"&gt;"awsvpcConfiguration={subnets=[ID-SUBNET],securityGroups=[&amp;lt;ID-SECURITY-GROUP&amp;gt;],assignPublicIp=ENABLED}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurando Auto Scaling
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws application-autoscaling register-scalable-target &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--service-namespace&lt;/span&gt; ecs &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--scalable-dimension&lt;/span&gt; ecs:service:DesiredCount &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--resource-id&lt;/span&gt; service/consumer-queue-ecs-sample-cluster/consumer-queue-ecs-sample-service &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--min-capacity&lt;/span&gt; 0 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--max-capacity&lt;/span&gt; 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crie uma política de auto scaling baseada na fila:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws application-autoscaling put-scaling-policy &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--service-namespace&lt;/span&gt; ecs &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--scalable-dimension&lt;/span&gt; ecs:service:DesiredCount &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--resource-id&lt;/span&gt; service/consumer-queue-ecs-sample-cluster/consumer-queue-ecs-sample-service &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--policy-name&lt;/span&gt; SQS-Scaling-Policy &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--policy-type&lt;/span&gt; StepScaling &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--step-scaling-policy-configuration&lt;/span&gt; &lt;span class="s1"&gt;'{"AdjustmentType": "ChangeInCapacity","StepAdjustments": [{"MetricIntervalLowerBound": 1,"ScalingAdjustment": 1}]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, vincule a política a uma métrica do CloudWatch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws cloudwatch put-metric-alarm &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--alarm-name&lt;/span&gt; &lt;span class="s2"&gt;"SQS-Messages-Alarm"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--metric-name&lt;/span&gt; ApproximateNumberOfMessagesVisible &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--namespace&lt;/span&gt; AWS/SQS &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--statistic&lt;/span&gt; Sum &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--period&lt;/span&gt; 60 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--threshold&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--comparison-operator&lt;/span&gt; GreaterThanOrEqualToThreshold &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--dimensions&lt;/span&gt; &lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;QueueName,Value&lt;span class="o"&gt;=&lt;/span&gt;consumer-queue-ecs-sample.fifo &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--evaluation-periods&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--alarm-actions&lt;/span&gt; &amp;lt;POLITICA-ARN&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--unit&lt;/span&gt; Count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tudo pronto!!! 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Testando o Auto Scaling
&lt;/h2&gt;

&lt;p&gt;Agora que todos os componentes foram configurados, vamos validar se o Auto Scaling está funcionando corretamente.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Acesse o Console da AWS&lt;/strong&gt; e navegue até a região onde os recursos foram criados.
&lt;/li&gt;
&lt;li&gt;No campo de busca, procure por &lt;strong&gt;ECS&lt;/strong&gt; e selecione o serviço Amazon Elastic Container Service.
&lt;/li&gt;
&lt;/ol&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%2Fibw3qpo20y99fqolmpvr.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%2Fibw3qpo20y99fqolmpvr.png" alt="Imagem do console aws, pesquisando pelo serviço ECS" width="800" height="225"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No painel do ECS, clique no &lt;strong&gt;cluster&lt;/strong&gt; &lt;code&gt;consumer-queue-ecs-sample-cluster&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Selecione o &lt;strong&gt;serviço&lt;/strong&gt; &lt;code&gt;consumer-queue-ecs-sample-service&lt;/code&gt; e clique na aba &lt;strong&gt;Tasks&lt;/strong&gt; para visualizar as instâncias em execução.
&lt;/li&gt;
&lt;/ol&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%2F7zetsd3n0nchj2z40w5y.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%2F7zetsd3n0nchj2z40w5y.png" alt="Imagem do console AWS, dentro do service do ECS" width="800" height="63"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  Enviando Mensagens para a Fila SQS
&lt;/h3&gt;

&lt;p&gt;Agora, vamos testar o comportamento do Auto Scaling enviando mensagens para a fila SQS. Abra o terminal e execute os comandos abaixo, substituindo &lt;code&gt;&amp;lt;regiao&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;conta-aws&amp;gt;&lt;/code&gt; pelos valores correspondentes:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Envie a primeira mensagem:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   aws sqs send-message &lt;span class="se"&gt;\&lt;/span&gt;
       &lt;span class="nt"&gt;--queue-url&lt;/span&gt; https://sqs.&amp;lt;regiao&amp;gt;.amazonaws.com/&amp;lt;conta-aws&amp;gt;/consumer-queue-ecs-sample.fifo &lt;span class="se"&gt;\&lt;/span&gt;
       &lt;span class="nt"&gt;--message-body&lt;/span&gt; &lt;span class="s2"&gt;"Message of number 1"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
       &lt;span class="nt"&gt;--message-group-id&lt;/span&gt; &lt;span class="s2"&gt;"example"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
       &lt;span class="nt"&gt;--message-deduplication-id&lt;/span&gt; &lt;span class="s2"&gt;"number1"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Aguarde alguns segundos e envie a segunda mensagem:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws sqs send-message &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--queue-url&lt;/span&gt; https://sqs.&amp;lt;regiao&amp;gt;.amazonaws.com/&amp;lt;conta-aws&amp;gt;/consumer-queue-ecs-sample.fifo &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--message-body&lt;/span&gt; &lt;span class="s2"&gt;"Message of number 2"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--message-group-id&lt;/span&gt; &lt;span class="s2"&gt;"example"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--message-deduplication-id&lt;/span&gt; &lt;span class="s2"&gt;"number2"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Validando a Escala Automática
&lt;/h3&gt;

&lt;p&gt;Após alguns instantes, volte ao console do ECS e atualize a página. Você verá novas tasks sendo iniciadas automaticamente para processar as mensagens da fila.&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%2Fbbup6deajn6zctgyy1xb.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%2Fbbup6deajn6zctgyy1xb.png" alt="Imagem de duas tasks sendo executadas no console da AWS" width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Parabéns! 🎉 Agora, seu ambiente está configurado para escalar dinamicamente conforme a demanda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Com essa arquitetura implementada, conseguimos criar um sistema que processa mensagens de forma eficiente e escalável. O Amazon ECS Fargate, aliado ao Amazon SQS e ao Application Auto Scaling, garante que nossa aplicação consiga lidar com diferentes cargas de trabalho automaticamente. Esse modelo permite otimizar recursos, reduzir custos e melhorar a eficiência do processamento de mensagens em sistemas distribuídos.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>community</category>
      <category>fargate</category>
    </item>
    <item>
      <title>AWS Lambda vs Containers: Quando usar cada um?</title>
      <dc:creator>Gustavo Aleixo</dc:creator>
      <pubDate>Mon, 17 Feb 2025 11:08:16 +0000</pubDate>
      <link>https://forem.com/gustavo_aleixo/aws-lambda-vs-containers-quando-usar-cada-um-n5b</link>
      <guid>https://forem.com/gustavo_aleixo/aws-lambda-vs-containers-quando-usar-cada-um-n5b</guid>
      <description>&lt;p&gt;Com a crescente adoção da computação em nuvem, muitas empresas que migram para a AWS percebem a necessidade de modernizar ou refatorar suas aplicações para aproveitar ao máximo os benefícios da nuvem. Durante essa fase de descoberta do projeto, uma dúvida recorrente surge: &lt;strong&gt;Devo utilizar AWS Lambda ou contêineres?&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Ideal para arquiteturas orientadas a eventos e aplicações que exigem escalabilidade automática, o AWS Lambda é um serviço de computação serverless que permite a execução de código sem a necessidade de gerenciar servidores.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vantagens:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Escalabilidade automática&lt;/strong&gt;: o Lambda escala automaticamente conforme a demanda, sem necessidade de intervenção manual.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pagamento por uso&lt;/strong&gt;: você paga apenas pelo tempo de execução do código.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gerenciamento simplificado&lt;/strong&gt;: não há necessidade de configurar ou manter servidores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integração nativa com serviços AWS&lt;/strong&gt;: funciona perfeitamente com DynamoDB, S3, API Gateway e outros.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limitações:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tempo máximo de execução&lt;/strong&gt;: atualmente limitado a 15 minutos por invocação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restrições de ambiente&lt;/strong&gt;: não oferece controle total sobre a infraestrutura subjacente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold start&lt;/strong&gt;: pode haver um pequeno atraso na inicialização, especialmente para funções escritas em linguagens como Java e C#.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Containers
&lt;/h2&gt;

&lt;p&gt;Os contêineres, por outro lado, oferecem maior flexibilidade e controle sobre o ambiente de execução. Com serviços como Amazon ECS (Elastic Container Service) e Amazon EKS (Elastic Kubernetes Service), é possível gerenciar aplicações conteinerizadas de maneira mais eficiente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vantagens:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maior controle sobre o ambiente&lt;/strong&gt;: permite personalizar bibliotecas, runtime e configurações.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execução de processos mais longos&lt;/strong&gt;: ideal para workloads de longa duração e aplicações complexas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portabilidade&lt;/strong&gt;: facilita a movimentação de aplicações entre diferentes ambientes, como local, nuvem e híbrido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suporte a diversas linguagens e frameworks&lt;/strong&gt;: enquanto o Lambda possui restrições, contêineres podem rodar praticamente qualquer tecnologia.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Desvantagens:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gerenciamento de infraestrutura&lt;/strong&gt;: requer a configuração e manutenção de clusters e redes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custo fixo&lt;/strong&gt;: ao contrário do Lambda, pode haver custos mesmo quando a aplicação não está em uso.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalabilidade manual ou configurável&lt;/strong&gt;: exige ajustes para escalar adequadamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  E então, qual escolher?
&lt;/h2&gt;

&lt;p&gt;A decisão entre Lambda e contêineres depende do caso de uso específico:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Utilize Lambda&lt;/strong&gt; caso tenha uma aplicação baseada em eventos, que precise escalar rapidamente ou abstrair a necessidade de gerenciar uma infraestrutura.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utilize contêineres&lt;/strong&gt; caso precise de mais controle do seu ambiente, aplicações mais complexas ou que exijam um longo tempo de execução.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Tanto o AWS Lambda quanto os contêineres são ótimas opções para rodar aplicações na nuvem, cada um com suas vantagens e limitações. O ideal é avaliar os requisitos do seu projeto e considerar a melhor abordagem com base na escalabilidade, custo, tempo de execução e nível de controle necessário. Em muitos casos, uma abordagem híbrida combinando Lambda e contêineres pode ser a melhor solução para obter flexibilidade e eficiência na nuvem.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>lambda</category>
      <category>container</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Serverless na AWS: O que é e por que você deveria considerar essa arquitetura?</title>
      <dc:creator>Gustavo Aleixo</dc:creator>
      <pubDate>Thu, 13 Feb 2025 12:06:25 +0000</pubDate>
      <link>https://forem.com/gustavo_aleixo/serverless-na-aws-o-que-e-e-por-que-voce-deveria-considerar-essa-arquitetura-4868</link>
      <guid>https://forem.com/gustavo_aleixo/serverless-na-aws-o-que-e-e-por-que-voce-deveria-considerar-essa-arquitetura-4868</guid>
      <description>&lt;p&gt;Serverless é um modelo de computação em nuvem que permite que equipes de desenvolvimento criem e executem aplicações sem a necessidade de gerenciar servidores. Em vez de configurar, escalar e manter a infraestrutura, os desenvolvedores podem focar na lógica do negócio, enquanto a provedora de nuvem cuida automaticamente da alocação de recursos.&lt;/p&gt;

&lt;p&gt;Na AWS, existem diversos serviços baseados nessa arquitetura, como AWS Lambda, Amazon API Gateway, AWS Step Functions, DynamoDB, S3, entre outros. Quando integrados, proporcionam uma experiência totalmente gerenciada e escalável.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefícios da arquitetura Serverless
&lt;/h2&gt;

&lt;p&gt;A utilização do serveless traz diversos benefícios para as empresas e seus desenvolvedores, incluindo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agilidade na entrega&lt;/strong&gt; - Com menor preocupação com infraestrutura, os times podem focar ainda mais no desenvolvimento e lançamento de novas funcionalidades&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Abstração da necessidade de um servidor&lt;/strong&gt; - Por serem serviços gerenciados, não há necessidade de implantar atualizações, aplicar patches de segurança ou provisionar novas máquinas, pois tudo é gerenciado pela própria AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalabilidade automática&lt;/strong&gt; - A infraestrutura escala automaticamente de acordo com a demanda, garantindo que sua aplicação suporte picos de tráfego sem intervenção manual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redução de custos&lt;/strong&gt; - O modelo de cobrança é on-demand, ou seja, cobra apenas pelo tempo de execução do código, evitando custos fixos com servidores inativos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alta disponibilidade e tolerância a falhas&lt;/strong&gt; - A AWS distribui automaticamente a carga da aplicação para evitar interrupções, garantindo maior confiabilidade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integração com outros serviços AWS&lt;/strong&gt; - Por serem nativos, os serviços Serverless permitem conexão com vários outros serviços da AWS, facilitando a construção de soluções escaláveis e eficientes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quanto utilizar o serverless?
&lt;/h2&gt;

&lt;p&gt;Essa arquitetura é ideal para aplicações que precisam escalar de forma dinâmica, ter baixo custo de manutenção e responder rapidamente a eventos, como, por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;APIs e microservices&lt;/strong&gt; – Para aplicações altamente escaláveis e desacopladas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Processamento de dados via streaming&lt;/strong&gt; – Para análises em tempo real de eventos e logs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execução de tarefas assíncronas&lt;/strong&gt; – Para trabalhos como automação, notificações e ETL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pontos de atenção
&lt;/h2&gt;

&lt;p&gt;Nem tudo são flores, e há alguns desafios na adoção desse modelo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limite de tempo de execução&lt;/strong&gt; – No AWS Lambda, cada função tem um tempo máximo de execução de 15 minutos. Para workloads mais longos, é necessário utilizar serviços como ECS ou EC2.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custos imprevisíveis em picos de uso&lt;/strong&gt; – Como o modelo de cobrança é baseado em execução, períodos de alto tráfego podem gerar custos inesperados. Por isso, é essencial configurar alertas de custos e desenvolver pensando na otimização do fluxo de execução.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Serverless é uma excelente opção para muitas aplicações, mas não é uma solução universal. Avaliar bem os desafios e considerar casos de uso específicos ajuda a decidir se essa arquitetura é adequada para o seu projeto.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>lambda</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
