<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ AWS - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ AWS - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 29 May 2026 20:37:10 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/aws/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Perguntas e respostas de entrevistas sobre AWS Lambda ]]>
                </title>
                <description>
                    <![CDATA[ Neste artigo, abordarei algumas das perguntas mais comuns que surgem em entrevistas sobre o AWS Lambda. Observe que esta não é uma lista exaustiva – você pode usar este guia, no entanto, como uma referência para atualizar seu conhecimento e obter indicações de estudos mais aprofundados. A maioria das perguntas ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/perguntas-e-respostas-de-entrevistas-sobre-aws-lambda/</link>
                <guid isPermaLink="false">63b4674d44e27f060d7a5d83</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Rafael Fontenelle ]]>
                </dc:creator>
                <pubDate>Thu, 23 Feb 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/AWS-Lambda-Interview-Questions.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/aws-lambda-interview-questions/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">AWS Lambda Interview Questions and Answers</a>
      </p><p>Neste artigo, abordarei algumas das perguntas mais comuns que surgem em entrevistas sobre o AWS Lambda.</p><p>Observe que esta não é uma lista exaustiva – você pode usar este guia, no entanto, como uma referência para atualizar seu conhecimento e obter indicações de estudos mais aprofundados.</p><p>A maioria das perguntas será baseada em sua experiência ou em determinados cenários. As perguntas estão nos títulos e você encontrará, logo abaixo delas, observações sobre o raciocínio por trás de fazer as perguntas.</p><h2 id="explique-seu-ltimo-projeto-envolvendo-o-aws-lambda">Explique seu último projeto envolvendo o AWS Lambda</h2><p><em>O entrevistador quer saber sobre sua experiência na vida real usando o AWS Lambda. Não blefe aqui, pois o entrevistador pode fazer mais perguntas com base nas respostas a essa pergunta.</em></p><p>Você pode ter criado uma API sem servidor (em inglês, <em>serverless</em>), sistemas envolvendo microsserviços, conversão de imagem/vídeo, análise de <em>logs</em> e muito mais. Apenas explique seu projeto em detalhes e fale sobre os benefícios comerciais desse projeto para que o entrevistador saiba que você está vendo o quadro geral.</p><h2 id="quais-servi-os-voc-integrou-com-o-aws-lambda">Quais serviços você integrou com o AWS Lambda?</h2><p><em>Essa é uma extensão da pergunta anterior. Ela não é uma lista completa de todas as fontes de eventos que podem se conectar ao AWS Lambda. Conte apenas sobre os serviços que você realmente usou.</em></p><p>Você pode ter usado S3, SNS, SQS, Kinesis, DynamoDB, SES ou outros. Nem todos os projetos serão completamente sem servidor.</p><p>Se você usou algum componente sem servidor junto com o AWS Lambda, mencione-os também. Por exemplo, você pode ter usado AWS Lambda com RDS. Se você usou essa configuração, pode explicar sobre isso em seu raciocínio.</p><h2 id="explique-o-conceito-de-inicializa-es-a-quente-e-a-frio-warm-and-cold-starts-no-aws-lambda">Explique o conceito de inicializações a quente e a frio (<em>warm and cold starts</em>) no AWS Lambda</h2><p><em>Há duas razões para fazer esta pergunta. Eles querem saber os tempos de execução que você usou e querem saber se você conhece os outros tempos de execução que podem causar uma inicialização a frio.</em></p><p>Os serviços Lambda recebem uma solicitação para executar uma função lambda. O serviço prepara o ambiente de execução baixando o código da função do manipulador e alocando memória junto com outra configuração.</p><p>Mesmo que você não seja cobrado por esse tempo de preparação do ambiente de execução, terá que enfrentar o atraso na chamada de sua função lambda. Esse atraso é chamado de "inicialização a frio" (do inglês, "<em>cold start</em>").</p><p>O tempo de inicialização a frio é menos significativo para ambientes de tempo de execução do TypeScript e do Python, sendo um pouco maior para ambientes de tempo de execução do Java ou do C#.</p><p>Para melhorar o desempenho, o serviço lambda manterá o ambiente de execução por algum tempo. Quando você receber a solicitação para a mesma função lambda novamente durante esse período, seu manipulador poderá começar a executar imediatamente. Esse tipo de chamada é chamada de "<em>inicialização a quente</em>" (do inglês, "<em>warm start</em>").</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-18.png" class="kg-image" alt="image-18" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/image-18.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-18.png 890w" width="890" height="198" loading="lazy"><figcaption><a href="https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-1/">Fonte da imagem</a></figcaption></figure><h2 id="qual-a-diferen-a-entre-invoca-o-s-ncrona-e-ass-ncrona-no-aws-lambda">Qual é a diferença entre invocação síncrona e assíncrona no AWS Lambda?</h2><p><em>Mesmo que pareça uma pergunta direta, ela tem muitas implicações para o seu design e tratamento de erros.</em></p><p>Na invocação síncrona, o chamador aguardará a conclusão da execução. Na invocação assíncrona, contudo, o chamador colocará o evento em uma fila interna que, posteriormente, será processada na função lambda.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-19.png" class="kg-image" alt="image-19" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/image-19.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-19.png 627w" width="627" height="244" loading="lazy"><figcaption><a href="https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html">Fonte da imagem</a></figcaption></figure><p>Um ponto importante a ser observado aqui é que você não pode ditar o tipo de invocação. Isso depende do serviço que você usa com o AWS Lambda.</p><p>Por exemplo, se você estiver criando APIs sem servidor usando o API Gateway, será uma invocação síncrona. Se você, no entanto, estiver usando o S3, será uma invocação assíncrona.</p><h2 id="como-voc-implementa-tratamento-de-erros-e-l-gica-de-novas-tentativas-no-lambda">Como você implementa tratamento de erros e lógica de novas tentativas no Lambda?</h2><p><em>Qualquer componente no sistema orientado a eventos que possa falhar, falhará. Então, o entrevistador quer saber como você lidou com o erro e como tentou novamente em seus projetos anteriores. Abaixo estão alguns exemplos. Sempre explique com exemplos concretos.</em></p><p>Isso depende do serviço que você está usando com o AWS Lambda. Vamos discutir alguns exemplos.</p><p>Se você estiver criando uma API sem servidor, é melhor retornar esse erro para o <em>client</em> de chamada (pode ser uma aplicação de <em>front-end</em> neste caso). Em seguida, você permite que sua lógica de <em>front-end </em>decida o que exibir ao usuário com base no tipo de erro.</p><p>Se você estiver usando o Lambda com SQS, é melhor usar uma <em>Dead Letter Queue</em> para saber quais mensagens não foram processadas. Por esse mesmo motivo, muitos dos sistemas que usam SNS também podem usar SQS.</p><p>No código abaixo, estamos usando uma <em>dead letter queue</em>. Se alguma mensagem não for processada após um determinado número de vezes (conforme especificado por <code>maxReceiveCount</code>), ela será enviada para a "fila de mensagens mortas". Esse comportamento é específico para lambda quando usado junto com filas.</p><pre><code class="language-typescript">const queue = new sqs.Queue(this, 'AwsLambdaSqsQueue', {
      visibilityTimeout: cdk.Duration.seconds(300),
      receiveMessageWaitTime: cdk.Duration.seconds(20),
      deadLetterQueue: {
        queue: new sqs.Queue(this, 'AwsLambdaDlq'),
        maxReceiveCount: 5,
      },
    });</code></pre><p>Quando o lambda é invocado com qualquer outro serviço, você pode configurar o número de tentativas com um valor máximo de 2. Isso significa que você pode ter, no máximo, duas tentativas além da chamada inicial. Por exemplo, você deseja acionar com base no upload do objeto S3 e seu lambda tentará no máximo três vezes.</p><h2 id="explique-seus-fluxos-de-trabalho-para-desenvolvimento-e-implanta-o-de-fun-es-do-aws-lambda">Explique seus fluxos de trabalho para desenvolvimento e implantação de funções do AWS Lambda</h2><p><em>Fale sobre os frameworks que você usou. O entrevistador pode esperar que você fale sobre o teste de funções lambda também.</em></p><p>Você pode explicar quais <em>frameworks</em> você usou para desenvolver e implantar funções lambda. Você também pode falar sobre qualquer ferramenta de IaC (Infraestrutura como Código) que você usou.</p><p>Abaixo, temos uma lista não exaustiva dos <em>frameworks </em>mais usados:</p><ul><li>Serverless</li><li>AWS CDK</li><li>AWS SAM</li><li>CloudFormation</li><li>Pulumi</li></ul><p>Se você já usou o Terraform, também pode falar sobre isso.</p><h2 id="o-lambda-pode-ser-invocado-quando-voc-recebe-um-e-mail-para-um-determinado-endere-o-de-e-mail-de-suporte-se-sim-projete-esse-sistema-se-n-o-explique-por-qu-">O Lambda pode ser invocado quando você recebe um e-mail para um determinado endereço de e-mail de suporte? Se sim, projete esse sistema. Se não, explique por quê.</h2><p>Sim, você pode. Você pode criar um conjunto de regras de recebimento e adicionar uma regra que acione a função lambda.</p><p>Você deve armazenar o e-mail no S3 e acionar o lambda depois disso para que possa ter a cópia do e-mail para qualquer referência futura.</p><p>Você pode consultar <a href="https://www.freecodecamp.org/news/how-to-receive-emails-via-your-sites-contact-us-form-with-aws-ses-lambda-api-gateway/">este artigo</a> (em inglês) sobre como receber e-mails de um formulário de contato.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-20.png" class="kg-image" alt="image-20" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/image-20.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/image-20.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-20.png 1010w" width="1010" height="772" loading="lazy"><figcaption><a href="https://www.freecodecamp.org/news/how-to-receive-emails-via-your-sites-contact-us-form-with-aws-ses-lambda-api-gateway/">Fonte da imagem</a></figcaption></figure><h2 id="uma-fun-o-lambda-pode-chamar-outra-fun-o-lambda">Uma função lambda pode chamar outra função lambda?</h2><p><em>O entrevistador quer saber se você conhece esse antipadrão.</em></p><p>Você pode fazer isso, mas não é recomendado. Se quiser criar um fluxo de trabalho que envolva várias funções lambda, você pode usar as funções de etapa.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/12/image-21.png" class="kg-image" alt="image-21" width="600" height="400" loading="lazy"><figcaption><a href="https://aws.amazon.com/step-functions/">Fonte da imagem</a></figcaption></figure><p>Você pode ler mais sobre funções de etapa <a href="https://aws.amazon.com/step-functions/">aqui</a>.</p><p>Outra abordagem padrão é emitir um evento e acionar um lambda com base no evento. Você pode usar SQS, SNS ou EventBridge como intermediário para esses eventos.</p><h2 id="voc-pode-executar-consultas-em-uma-inst-ncia-do-rds-em-uma-sub-rede-privada-usando-o-lambda">Você pode executar consultas em uma instância do RDS (em uma sub-rede privada) usando o Lambda?</h2><p>Sim, você pode executar a consulta no RDS usando o AWS Lambda. Para isso, você pode ter seu lambda dentro da mesma VPC.</p><p>Pode haver algumas implicações de desempenho se você usar o AWS Lambda diretamente com o RDS. Isso ocorre devido ao tempo de criação da conexão do banco de dados. Para evitar essas implicações, você pode usar um RDS Proxy.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-22.png" class="kg-image" alt="image-22" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/image-22.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/image-22.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-22.png 1260w" sizes="(min-width: 1200px) 1200px" width="1260" height="960" loading="lazy"><figcaption><a href="https://www.freecodecamp.org/news/aws-lambda-rds/">Fonte da imagem</a></figcaption></figure><p>Aqui está um <a href="https://www.freecodecamp.org/news/aws-lambda-rds/">guia passo a passo detalhado</a> (em inglês) que mostra como fazer isso.</p><h2 id="o-aws-lambda-fornece-muitos-benef-cios-quais-s-o-as-desvantagens-de-se-usar-o-aws-lambda">O AWS Lambda fornece muitos benefícios. Quais são as desvantagens de se usar o AWS Lambda?</h2><p><em>O entrevistador quer saber sobre o seu processo de pensamento. Não diga que o AWS Lambda resolve todos os problemas. 🙂</em></p><p>Sim, o Lambda oferece muitos benefícios, como custo e escalabilidade, sem a necessidade de manter os servidores. Ele, porém, não é a resposta para tudo. Como qualquer serviço, ele tem seus próprios problemas (e você deve ser capaz de discuti-los):</p><ul><li>Depuração: se você estiver usando arquiteturas sem servidor usando o Lambda, talvez precise contar com o <em>log</em> para encontrar a causa raiz do problema. Isso ocorre porque seu aplicativo será distribuído em muitos serviços/funções lambda.</li><li>Teste: você pode simular serviços da AWS em seu teste local. É melhor, no entanto, ter um ambiente separado na AWS para testar seus lambdas. Isso torna o teste um pouco complexo.</li><li>Tarefas em segundo plano: o Lambda tem um limite de tempo limite de 15 minutos. Se você deseja que qualquer tarefa específica leve mais de 15 minutos, talvez seja necessário mudar para o Fargate ou alguma outra solução.</li><li>Custo: se você estiver executando um aplicativo de alto tráfego que processa as solicitações 24 horas por dia, 7 dias por semana, o uso de lambda pode ser caro. É melhor usar Fargate, EC2 ou outros serviços, se você tiver alto tráfego constante.</li></ul><h2 id="como-voc-gerencia-simultaneidade-e-dimensionamento-no-aws-lambda">Como você gerencia simultaneidade e dimensionamento no AWS Lambda?</h2><p><em>Você ganhará pontos de bônus se falar sobre os problemas que enfrentou nessas situações.</em></p><p>Simultaneidade (em inglês, <em>concurrency</em>) é a capacidade de executar várias funções lambda ao mesmo tempo. O dimensionamento (<em>scaling</em>) é o processo de aumentar o número de cópias de sua função lambda para lidar com as solicitações recebidas.</p><p>Você pode controlar a simultaneidade definindo o valor de simultaneidade reservada para que apenas o número mencionado de funções lambda seja invocado.</p><p>Abaixo está o diagrama de alto nível de como lambda escala de acordo com o número de mensagens na fila.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-23.png" class="kg-image" alt="image-23" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/image-23.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/image-23.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/02/image-23.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-23.png 1880w" sizes="(min-width: 1200px) 1200px" width="1880" height="960" loading="lazy"><figcaption><a href="https://www.cloudtechsimplified.com/aws-lambda-sqs/">Fonte da imagem</a></figcaption></figure><p>Observação: há algum <a href="https://www.cloudtechsimplified.com/aws-lambda-sqs/#weird-behavior">comportamento estranho</a> se você tentar limitar o AWS Lambda quando usado com a fila padrão do SQS. Você pode usar uma fila FIFO para resolver esse problema.</p><h2 id="como-voc-passa-vari-veis-de-ambiente-para-o-aws-lambda">Como você passa variáveis de ambiente para o AWS Lambda?</h2><p><em>O entrevistador pode querer saber como você passa informações sigilosas, por exemplo.</em></p><p>Existem diferentes maneiras de passar variáveis de ambiente para o AWS Lambda, dependendo do tipo de valor que está sendo passado.</p><p><strong>Dados não confidenciais:</strong> se você deseja passar informações não confidenciais, pode passar os valores diretamente para as variáveis de ambiente da função lambda. Esses valores, contudo, seriam visíveis no console da AWS no serviço Lambda. No exemplo de código abaixo, estamos passando o nome da tabela DynamoDB diretamente como variável de ambiente, pois não são dados confidenciais:</p><pre><code>   const readDDBLambdaFn = new NodejsFunction(this, 'readDDBLambdaFn', {
      entry: path.join(__dirname, '../src/lambdas', 'read-ddb.ts'),
      ...nodeJsFunctionProps,
      functionName: 'readDDBLambdaFn',
      environment: {
        tableName: table.tableName,
      },
    });</code></pre><p><strong>Dados confidenciais:</strong> se você deseja transmitir dados confidenciais, como senhas e chaves de API, pode usar um gerenciador de segredos ou um armazenamento de parâmetros. Porém, você precisa se certificar de fornecer as funções necessárias ao Lambda para acessar e descriptografar segredos dos respectivos serviços.</p><p>No trecho de código abaixo, NÃO estamos passando o segredo real. Em vez disso, estamos apenas passando o ARN (Amazon Resource Name) do segredo.</p><pre><code class="language-typescript">const rdsLambdaFn = new NodejsFunction(this, 'rdsLambdaFn', {
      entry: path.join(__dirname, '../src/lambdas', 'rds-lambda.ts'),
      ...nodeJsFunctionProps,
      functionName: 'rdsLambdaFn',
      environment: {
        DB_ENDPOINT_ADDRESS: dbInstance.dbInstanceEndpointAddress,
        DB_NAME: databaseName,
        DB_SECRET_ARN: dbInstance.secret?.secretFullArn || '',
      },
      vpc,
      vpcSubnets: vpc.selectSubnets({
        subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
      }),
    });</code></pre><p>Em seguida, no lambda, você pode obter o segredo real dinamicamente na função lambda, conforme mostrado abaixo:</p><pre><code class="language-typescript">export const handler = async (event: any, context: any): Promise&lt;any&gt; =&gt; {
    const host = process.env.DB_ENDPOINT_ADDRESS || '';
    const database = process.env.DB_NAME || '';
    const dbSecretArn = process.env.DB_SECRET_ARN || '';
    const secretManager = new AWS.SecretsManager({
      region: 'us-east-1',
    });
    const secretParams: AWS.SecretsManager.GetSecretValueRequest = {
      SecretId: dbSecretArn,
    };
    const dbSecret = await secretManager.getSecretValue(secretParams).promise();
    const secretString = dbSecret.SecretString || '';

    const { password } = JSON.parse(secretString);

}</code></pre><p>O autor deste artigo escreveu um tutorial detalhado <a href="https://www.cloudtechsimplified.com/environment-variables-secrets-database-password-aws-lambda/">aqui</a> sobre o mesmo tópico.</p><h2 id="digamos-que-voc-tenha-alguma-ferramenta-exe-execut-vel-dependente-do-windows-voc-pode-carreg-la-em-um-bucket-do-s3-voc-pode-executar-este-bin-rio-com-alguns-par-metros-usando-o-aws-lambda">Digamos que você tenha alguma ferramenta .exe executável dependente do Windows. Você pode carregá-la em um bucket do S3. Você pode executar este binário com alguns parâmetros usando o AWS Lambda?</h2><p><em>Essa é mais uma pergunta para garantir que você entende o ambiente de execução do AWS Lambda – especificamente, o sistema operacional que ele usa.</em></p><p>Não, você não seria capaz de fazer isso, pois o AWS Lambda usa o Linux como sistema operacional. O Linux não seria capaz de executar um binário dependente do Windows.</p><h2 id="como-voc-reutilizaria-c-digo-entre-fun-es-do-aws-lambda">Como você reutilizaria código entre funções do AWS Lambda?</h2><p>Existem duas maneiras de reutilizar o código em muitas funções do AWS Lambda:</p><ul><li>Usar as camadas do Lambda: você pode armazenar seu código ou lógica em camadas do lambda, que você pode reutilizar em diferentes funções do lambda.</li></ul><p>Abaixo está um código de alto nível para criar e consumir camadas do lambda usando <code>aws cdk</code>:</p><pre><code>    const logicLayer = new lambda.LayerVersion(this, 'logic-layer', {
      compatibleRuntimes: [
        lambda.Runtime.NODEJS_14_X,
        lambda.Runtime.NODEJS_16_X,
      ],
      layerVersionName: 'business-logic-layer',
      code: lambda.Code.fromAsset('src/layers/business-logic'),
      description: 'Business logic layer',
    });


    const lambdaWithLayer = new NodejsFunction(this, 'lambdaWithLayer', {
      entry: path.join(__dirname, '../src/lambdas', 'lambda.ts'),
      ...nodeJsFnProps,
      functionName: 'lambdaWithLayer',
      handler: 'handler',
      layers: [logicLayer, utilsLayer],
    });</code></pre><ul><li>Usar <code>monorepo</code>: você pode usar mono repos e pacotes criados dinamicamente em tempo de implantação.</li></ul><h2 id="o-que-acontece-com-suas-fun-es-lambda-se-voc-excluir-uma-camada-lambda">O que acontece com suas funções lambda se você excluir uma camada lambda?</h2><p><em>Nesta pergunta, o entrevistador quer ver o quanto você entende de camadas lambda.</em></p><p>As funções lambda existentes que usam essa camada excluída continuarão a funcionar – pois as camadas lambda são mescladas com as funções lambda no momento da implantação.</p><p>Você, no entanto, não poderá criar uma nova função lambda usando essa camada lambda excluída.</p><p>Você pode aprender mais sobre camadas lambda <a href="https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html">aqui</a> e eu escrevi um guia sobre o mesmo tópico <a href="https://www.cloudtechsimplified.com/aws-lambda-layers/">aqui</a> (ambas as referências em inglês).</p><h2 id="voc-pode-aumentar-o-tamanho-de-um-pacote-de-implanta-o-se-voc-usa-camadas-lambda">Você pode aumentar o tamanho de um pacote de implantação se você usa camadas lambda?</h2><p>Não, você não pode aumentar o tamanho do pacote de implantação se usar camadas lambda. O tamanho máximo de implantação de 50 MB compactado inclui o tamanho da função lambda e suas camadas lambda associadas.</p><p>Se você tiver uma grande base de código e quiser aumentar a implantação, poderá executar contêineres no AWS Lambda.</p><h2 id="posso-pegar-minha-aplica-o-da-web-dockerizada-existente-e-execut-la-usando-o-lambda">Posso pegar minha aplicação da web dockerizada existente e executá-la usando o Lambda?</h2><p>Não. Você não pode pegar nenhuma aplicação do Express, Springboot ou .NET Core (ou qualquer outra aplicação) como está e colocá-la dentro do lambda.</p><p>Dito isso, saiba que existem algumas bibliotecas que permitem colocar aplicações que usam esses <em>frameworks </em>da web no AWS Lambda. Internamente, essas bibliotecas convertem essas aplicações da web em APIs compatíveis com o AWS Lambda. Você pode ver um desses exemplos <a href="https://aws.amazon.com/blogs/aws/running-express-applications-on-aws-lambda-and-amazon-api-gateway/">aqui</a> (em inglês).</p><p>Ao usar esses <em>frameworks</em>, o tamanho de suas funções lambda será maior e resultará em tempos de inicialização mais longos.</p><p>Lembre-se de que, mesmo ao usar contêineres com Lambda, a API de tempo de execução existente do Lambda permanece a mesma. O Lambda ainda vai:</p><ul><li>ser uma única função</li><li>ser invocado por um evento ou manualmente</li><li>ter um limite de tempo de 15 minutos.</li></ul><p>Como você pode ver no código abaixo, não haverá alteração na API lambda. A vantagem de usar o Docker é que você pode usar pacotes grandes sem se preocupar com o tamanho.</p><pre><code class="language-typescript">import { Context, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda';

export const handler = async (
  event: APIGatewayEvent,
  context: Context
): Promise&lt;APIGatewayProxyResult&gt; =&gt; {
  console.log(`Event: ${JSON.stringify(event, null, 2)}`);
  console.log(`Context: ${JSON.stringify(context, null, 2)}`);
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Running this handler from docker',
    }),
  };
};</code></pre><p>e é assim que você o usa:</p><pre><code> const repo = ecr.Repository.fromRepositoryName(
      this,
      'dockerLambda',
      'docker-lambda'
    );

    const dockerLambda = new lambda.DockerImageFunction(
      this,
      'DockerLambdaFunction',
      {
        code: lambda.DockerImageCode.fromEcr(repo),
      }
    );</code></pre><p>O autor deste artigo escreveu um tutorial passo a passo sobre execução de contêineres do Docker para sua aplicação em <code>aws lambda</code> <a href="https://www.cloudtechsimplified.com/run-docker-containers-images-from-ecr-in-aws-lambda-along-with-cicd/">aqui</a> (em inglês).</p><h2 id="como-voc-compartilha-arquivos-grandes-entre-fun-es-lambda">Como você compartilha arquivos grandes entre funções lambda?</h2><p>Você pode usar o Elastic File System (EFS) para compartilhar arquivos grandes entre diferentes funções.</p><p>Você pode criar um <code>access point</code> (em português, ponto de acesso) no EFS, criado com as permissões apropriadas, e usar esse <code>access point</code> em seu caminho de montagem em seu lambda.</p><p>Todos os arquivos gravados nesse caminho de montagem estarão acessíveis a todas as outras funções lambda, desde que tenham o caminho de montagem com as permissões apropriadas.</p><p>Abaixo vemos o diagrama lógico de alto nível sobre como usar o AWS Lambda com o Elastic File System (EFS):</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-24.png" class="kg-image" alt="image-24" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/image-24.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/image-24.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/image-24.png 1180w" width="1180" height="800" loading="lazy"><figcaption><a href="https://www.cloudtechsimplified.com/elastic-file-system-efs-aws-lambda/">Fonte da imagem</a></figcaption></figure><p>Você pode ler sobre isso <a href="https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/">aqui</a> (em inglês e um pouco antigo). O autor deste artigo escreveu um guia passo a passo prático mais recente <a href="https://www.cloudtechsimplified.com/elastic-file-system-efs-aws-lambda/">aqui</a> (em inglês) sobre EFS com funções Lambda.</p><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Espero que este artigo tenha ajudado você a se preparar para entrevistas que envolvam o AWS Lambda.</p><p>Obrigado por ler até aqui. O autor também escreve sobre <code>aws</code> e tecnologias sem servidor em <a href="https://www.cloudtechsimplified.com/">https://www.cloudtechsimplified.com</a> (blog em inglês). Se estiver interessado, pode <a href="https://www.cloudtechsimplified.com/">se inscrever</a> no blog dele.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como implementar infraestrutura como código com a AWS ]]>
                </title>
                <description>
                    <![CDATA[ Infraestrutura como código (ou, em inglês, infrastructure as a code, ou IaC) é o processo de provisionamento e gerenciamento de seus recursos de nuvem escrevendo um arquivo de modelo que pode ser lido por humanos e consumível pela máquina. Para o desenvolvimento na nuvem com a AWS, a escolha integrada ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-implementar-infraestrutura-como-codigo-com-a-aws/</link>
                <guid isPermaLink="false">63b320a044e27f060d7a595d</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Rafael Fontenelle ]]>
                </dc:creator>
                <pubDate>Thu, 16 Feb 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/network-g381392bcb_1280.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-implement-infrastructure-as-code-with-aws/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Implement Infrastructure as Code with AWS</a>
      </p><p>Infraestrutura como código (ou, em inglês, <em>infrastructure as a code</em>, ou <em>IaC</em>) é o processo de provisionamento e gerenciamento de seus recursos de nuvem escrevendo um arquivo de modelo que pode ser lido por humanos e consumível pela máquina.</p><p>Para o desenvolvimento na nuvem com a AWS, a escolha integrada para infraestrutura como código é o AWS CloudFormation.</p><p>Usando a IaC, os desenvolvedores podem gerenciar a infraestrutura de um projeto com eficiência, permitindo que eles configurem e mantenham facilmente as alterações na arquitetura e nos recursos de um projeto.</p><p>Existem inúmeras ferramentas de IaC disponíveis, como Ansible, Puppet, Chef e Terraform.</p><p>Para este guia, no entanto, usaremos o CloudFormation, que foi feito especificamente para os recursos da AWS.</p><h2 id="o-que-voc-vai-aprender-neste-tutorial">O que você vai aprender neste tutorial</h2><p>Depois de passar por este tutorial, você entenderá como manter seus recursos em um arquivo de software.</p><p>Além disso, você aprenderá os benefícios relacionados à velocidade que a infraestrutura como código traz. Sem a IaC, o tempo e o custo da implantação manual de várias infraestruturas podem ser muito maiores em comparação com a manutenção da infraestrutura como software.</p><p>Neste artigo, vamos considerar um exemplo. Ele demonstrará o provisionamento manual de recursos versus a implantação de um script CloudFormation para criar uma função Lambda sem servidor e uma API REST na AWS.</p><h3 id="servi-os-que-vamos-usar-neste-tutorial">Serviços que vamos usar neste tutorial</h3><p>Vamos usar os seguintes serviços para implementar infraestrutura como código na AWS:</p><!--kg-card-begin: html--><table style="border:none;border-collapse:collapse;table-layout:fixed;width:468pt"><colgroup><col><col></colgroup><tbody><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;background-color:#cfe2f3;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;text-align: center;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Nome do serviço AWS</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;background-color:#cfe2f3;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;text-align: center;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Descrição</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">AWS API Gateway (API GW)</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Vamos usar este serviço para criar nossa API REST. Ele também permite criar, publicar e monitorar APIs Restful e Sockets seguros.</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">AWS Lambda</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Vamos usar este serviço para configurar uma função serverless (sem servidor) como exemplo no backend que será integrado a nossa API REST.</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Identity Access and Management (IAM)</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Serviço que permite que você gerencie o acesso a vários serviços AWS por meio de roles (funções) e permissões. Vamos criar uma role para nossa função Lambda de forma que possamos acessar o API gateway.</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">AWS CLI</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Para trabalhar com os serviços e recursos da AWS, você pode usar a interface de linha de comando em vez do console para um acesso mais fácil.</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">AWS SAM</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Uma abstração do CloudFormation que permite desenvolver as aplicações serverless.</span></p></td></tr></tbody></table><!--kg-card-end: html--><p>Para quem é novo na AWS, é bom ter algum conhecimento dela para entender o artigo. Então, você pode me acompanhar criando uma conta na AWS <a href="https://aws.amazon.com/console/">aqui</a> e certificando-se de ter a <a href="https://aws.amazon.com/cli/">AWS CLI</a> instalada para trabalhar com o exemplo.</p><h3 id="vis-o-geral-do-exemplo">Visão geral do exemplo</h3><p>Para o artigo, implementaremos uma API REST com um <em>gateway </em>de API. Ele será integrado a uma função Lambda de <em>back-end</em> sem servidor que lida com POST e obtém solicitações feitas por nossa API.</p><p>A primeira etapa mostrará como criar e implantar manualmente esses recursos usando o console AWS. A segunda etapa mostrará como automatizar o processo usando o CloudFormation.</p><h2 id="como-implantar-manualmente">Como implantar manualmente</h2><p>Na implantação (ou, em inglês, <em>deployment</em>) manual, trabalharemos dentro do console AWS. É um pouco difícil acompanhar as alterações ao trabalhar fora do IDE local, especialmente para projetos de grande escala.</p><p>Na primeira etapa, criaremos uma função Lambda.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.39.57-AM.png" class="kg-image" alt="Screenshot-2022-09-25-at-1.39.57-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/Screenshot-2022-09-25-at-1.39.57-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/Screenshot-2022-09-25-at-1.39.57-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.39.57-AM.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="724" loading="lazy"></figure><p>Se você deseja que sua função Lambda funcione com algum outro serviço como o <code>Comprehend</code>, deve conceder permissões para esse serviço. Portanto, certifique-se de criar uma função com essas permissões.</p><p>A seguir está nossa função Lambda que retornará "Hello World" quando integrada ao gateway da API.</p><pre><code class="language-py">import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello World!')
    }</code></pre><p>Agora que configuramos nossa função Lambda, a próxima etapa é criar uma API REST para interagir com a função Lambda.</p><p>Para isso, vá para o Amazon API Gateway, clique em "<em>Create API</em>" (Criar API) e selecione REST API nas opções fornecidas.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.40.24-AM.png" class="kg-image" alt="Screenshot-2022-09-25-at-1.40.24-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/Screenshot-2022-09-25-at-1.40.24-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/Screenshot-2022-09-25-at-1.40.24-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.40.24-AM.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="677" loading="lazy"></figure><p>Agora, vamos integrar o Lambda com a API. Para isso, crie um método GET no menu de ações e aponte nossa API REST para a função Lambda.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.40.51-AM.png" class="kg-image" alt="Screenshot-2022-09-25-at-1.40.51-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/Screenshot-2022-09-25-at-1.40.51-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/Screenshot-2022-09-25-at-1.40.51-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.40.51-AM.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="692" loading="lazy"></figure><p>Estamos em condições de implantar e testar nossa API para sua integração adequada com o Lambda. Selecione o nome que desejar – para este exemplo, estou usando "prod".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.41.22-AM.png" class="kg-image" alt="Screenshot-2022-09-25-at-1.41.22-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/Screenshot-2022-09-25-at-1.41.22-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/Screenshot-2022-09-25-at-1.41.22-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.41.22-AM.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="1005" loading="lazy"></figure><p>Depois de implantar a API, você pode ver um URL no estágio "prod". Atingir esse URL acionará a função Lambda. Como retornamos "Hello World" a partir de nossa função Lambda, você poderá ver o resultado desejado.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.41.46-AM.png" class="kg-image" alt="Screenshot-2022-09-25-at-1.41.46-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/Screenshot-2022-09-25-at-1.41.46-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/Screenshot-2022-09-25-at-1.41.46-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.41.46-AM.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="415" loading="lazy"></figure><h2 id="como-implantar-com-cloudformation">Como implantar com CloudFormation</h2><p>Até aqui, vimos como funciona a implantação manual, que costuma levar alguns minutos.</p><p>Vamos imaginar, no entanto, que temos mais de uma API, método e mais de um desenvolvedor trabalhando neles. Nesse cenário, rastrear todos os recursos e mudanças seria um desafio.</p><p>Portanto, nesta seção, usaremos o AWS CloudFormation. Ele dará flexibilidade aos desenvolvedores, permitindo que eles ajustem sua infraestrutura com um script simples.</p><h3 id="como-o-cloudformation-funciona">Como o CloudFormation funciona?</h3><p>Usaremos o arquivo YAML para provisionar e declarar esses recursos e implantá-los na AWS para criar uma <em>stack</em> do CloudFormation. O CloudFormation é uma <em>stack</em> que contém todos os recursos necessários para o projeto.</p><p>Usaremos o modelo SAM, conforme descrito acima na seção de serviços. É uma abstração do CloudFormation para criar aplicações sem servidor com menos código YAML.</p><p>Para quem não conhece o YAML, você pode pensar nele como se fosse um JSON. O CloudFormation, porém, usa esses dois formatos de arquivo.</p><p><strong>Na primeira etapa</strong>, vamos para nosso IDE local e escrevemos a mesma função Lambda que escrevemos no console da AWS.</p><p><strong>helloworld.py</strong>:</p><pre><code class="language-py">import json

def lambda_handler(event, context):
    # TODO implementar
    return {
        'statusCode': 200,
        'body': json.dumps('Hello World!')
    }</code></pre><p>Em seguida, criaremos um arquivo <strong>template.yaml</strong> contendo nossa infraestrutura. Definiremos nossa função Lambda e API Gateway neste arquivo.</p><p>Para criar este arquivo, precisamos adicionar algumas informações que são comuns a todos os modelos SAM.</p><p><strong>template.yaml</strong>:</p><pre><code class="language-yaml">AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: First CloudFormation template</code></pre><p>Agora, temos que adicionar "Globals" a este arquivo <code>template.yaml</code> do CloudFormation. <strong>Globals</strong> são as configurações comuns para os recursos que você vai implantar. <em>Globals</em> permitem que você declare informações globalmente para um tipo de recurso específico, em vez de especificá-las repetidas vezes para recursos diferentes.</p><p><strong>template.yaml</strong>:</p><pre><code class="language-yaml">Globals:
    #Comum a todas as funções Lambda que você cria
    Function:
      MemorySize: 128
      Runtime: python3.6
      Timeout: 5</code></pre><p>Temos que definir a tag Resources em nosso arquivo <code>template.yaml</code>. A função Lambda e a API REST estarão sob esta tag.</p><p><strong>template.yaml</strong>:</p><pre><code class="language-yaml">Resources:

    ##Lambda e API GW integrados
    helloworld:
        Type: AWS::Serverless::Function
        Properties:
          #nome_de_arquivo.nome_da_função
          Handler: helloworld.lambda_handler

          #REST API criada
          Events:
            PostAdd:
              Type: Api
              Properties:
                Path: /helloworld
                Method: get</code></pre><p>No código acima, definimos parâmetros para criar a função Lambda. Para o evento, criamos uma API REST que aciona a função Lambda.</p><p><strong>Observação:</strong> há alguns parâmetros, como <em>CodeURI</em> e <em>description</em>, que você pode especificar para sua função <em>serverless</em>. A melhor maneira de criar um arquivo de modelo é consultar os documentos do CloudFormation e ver os parâmetros disponíveis para seu recurso/serviço especificado.</p><h2 id="como-implantar-o-arquivo-de-modelo">Como implantar o arquivo de modelo</h2><p>Podemos implantar nosso arquivo <code>template.yaml</code> usando os dois comandos da AWS CLI a seguir:</p><pre><code class="language-yaml">##s3 bucket armazena o modelo sam que precisamos implantar
aws cloudformation package --template-file template.yaml --output-template-file sam-template.yaml --s3-bucket helloworld-sam</code></pre><p>Depois de executar o comando acima, você poderá ver um arquivo de modelo SAM. Usaremos esse arquivo no segundo comando abaixo.</p><p>Neste comando, forneça o caminho apropriado para o arquivo <code>sam-template.yaml</code>:</p><pre><code class="language-yaml">#Implantar a stack
#aponta para o arquivo modeleo criado por um comando anterior e um nome da stack, bem como a região na qual estamos implantando

aws cloudformation deploy --template-file /path to sam-template.yaml file --stack-name test-stack --capabilities CAPABILITY_IAM --region us-east-1</code></pre><p>Depois de executar esses dois comandos, você verá a <em>stack</em> criada na CLI. Você pode verificá-la usando o CloudFormation no console.</p><p>Aqui você verá todos os recursos provisionados por meio do código criado e implantado usando o arquivo <code>template.yaml</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.38.39-AM.png" class="kg-image" alt="Screenshot-2022-09-25-at-1.38.39-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/Screenshot-2022-09-25-at-1.38.39-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/Screenshot-2022-09-25-at-1.38.39-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screenshot-2022-09-25-at-1.38.39-AM.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="1168" loading="lazy"></figure><p>Você pode clicar na API e acessar o URL para verificar a saída, como fizemos para a implantação manual.</p><h2 id="resumo">Resumo</h2><p>Era isso! Você implementou com sucesso a infraestrutura como código na AWS usando o CloudFormation.</p><p>Espero que este artigo tenha sido útil para quem deseja entender a implementação de infraestrutura como código na AWS.</p><p>Conecte-se com o autor do artigo pelo <a href="https://www.linkedin.com/in/kadeniyi/">LinkedIn</a> e pelo <a href="https://twitter.com/mkbadeniyi">Twitter</a>.</p><p>Até a próxima! 🙂</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de funções da AWS Lambda para Cron Jobs – como agendar tarefas ]]>
                </title>
                <description>
                    <![CDATA[ Os Cron Jobs são normalmente usados para agendar comandos em um horário específico. Você pode usá-los para tarefas como executar backups, monitorar o status do sistema ou executar tarefas de manutenção do sistema. Os Cron Jobs são utilitários úteis para os administradores de sistemas. Quando você está administrando um sistema ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/tutorial-de-funcoes-da-aws-lambda-para-cron-jobs-como-agendar-tarefas-como-agendar-tarefas/</link>
                <guid isPermaLink="false">635fc2df7e77d305f28d8462</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Elizabete Nakamura ]]>
                </dc:creator>
                <pubDate>Thu, 22 Dec 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/aws-lambda---deno.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/using-lambda-functions-as-cronjobs/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Cron Job AWS Lambda Functions Tutorial – How to Schedule Tasks</a>
      </p><p>Os Cron Jobs são normalmente usados para agendar comandos em um horário específico. Você pode usá-los para tarefas como executar backups, monitorar o status do sistema ou executar tarefas de manutenção do sistema.</p><p>Os Cron Jobs são utilitários úteis para os administradores de sistemas. Quando você está administrando um sistema na nuvem, os Cron Jobs ainda são muito úteis – afinal, você ainda precisa fazer muitas tarefas administrativas nos sistemas.</p><p>Uma maneira de executar Cron Jobs na nuvem é usar uma função como um serviço (FaaS), como a Lambda no ecossistema AWS.</p><p>As funções executam quando são acionadas para isso e executam o código na nuvem sem a necessidade de prover ou manter qualquer infraestrutura. Elas também podem ser configuradas para serem executadas em um determinado momento ou com certa periodicidade, como os Cron Jobs tradicionais.</p><p>Neste artigo, usarei o ecossistema AWS para mostrar um exemplo concreto de como criar um Cron Job usando uma função na nuvem.</p><h2 id="eventos-da-amazon-cloudwatch"><strong>Eventos da Amazon CloudWatch </strong></h2><p>A fim de usar a função Lambda como um Cron Job, precisamos entender os eventos da Amazon CloudWatch.</p><p>Os eventos da Amazon CloudWatch são enviados quando há mudanças nos recursos da AWS. Esses eventos podem acionar uma função AWS Lambda. Quando os seus recursos da AWS mudam de estado, eles automaticamente enviam eventos CloudWatch para o stream de eventos.</p><p>Portanto, você pode criar uma regra que aciona uma função Lambda específica quando algo acontece. Por exemplo, você pode invocar automaticamente uma função Lambda quando há uma mudança em um grupo AutoScaling.</p><p>Além disso, os eventos CloudWatch podem invocar uma função Lambda para ser executada regularmente. Deste modo, você pode ter, por exemplo, uma função Lambda que desativa todos os seus testes e desenvolvimento em EC2 depois das 18h e outra que os ativa após as 8h.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/diagram2.png" class="kg-image" alt="diagram2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/diagram2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/diagram2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/diagram2.png 1338w" sizes="(min-width: 720px) 720px" width="1338" height="382" loading="lazy"><figcaption>Quando há uma mudança em um grupo AutoScaling, o evento de CloudWatch gerado aciona uma função Lambda</figcaption></figure><h2 id="configurando-a-demonstra-o"><strong>Configurando a demonstração</strong></h2><p>Quero mostrar a você um exemplo de uma função Lambda que pode realizar ações em suas instâncias da EC2. Vou usar o <a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html">AWS SAM</a> para definir a minha função Lambda como infraestrutura como código.</p><p>Se você quiser experimentar essa demonstração, precisará ter uma conta na AWS e uma ou mais instâncias da EC2 configuradas em sua conta da AWS. Estas são as que vamos manipular a partir das funções Lambda. As instâncias da EC2 são a versão da AWS das máquinas virtuais na nuvem.</p><p>Você pode tentar a demonstração no <a href="https://aws.amazon.com/cloud9/">IDE AWS Cloud9</a> (um IDE baseado em navegador), já que o AWS SAM já está configurado nesse IDE. Se você quiser saber como usar a IDE AWS Cloud9 para operar as funções Lambda, você pode conferir este <a href="https://youtu.be/JmEMBxfYtf4">vídeo</a> (em inglês).</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/JmEMBxfYtf4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="PAIR PROGRAMMING IN REAL TIME WITH LAMBDA FUNCTIONS using AWS Cloud9 and more" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><p>Neste exemplo, vamos começar e parar as instâncias da EC2 usando duas funções Lambda da AWS diferentes, que são acionadas em um determinado momento. Vamos iniciar as instâncias às 8h todos os dias e desativá-las às 18h, quando o dia terminar.</p><p>Para isso, vamos usar um evento CloudWatch para acionar a função Lambda no momento certo, além do AWS SDK para realizar as operações nas instâncias.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/digram1-1.png" class="kg-image" alt="digram1-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/digram1-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/digram1-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/digram1-1.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="384" loading="lazy"><figcaption>Em um momento específico, é acionada uma função Lambda que operará em um conjunto de instâncias da EC2</figcaption></figure><p>O código finalizado para o exemplo está disponível neste repositório do <a href="https://github.com/mavi888/lambda-cronjobs">GitHub</a>. Para que esse código funcione no IDE AWS Cloud9, você precisa<a href="https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account"> </a><a href="https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account"></a><a href="https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account">configurar</a> a<a href="https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account"> sua </a>conta do GitHub no IDE para poder clonar o projeto e depois cloná-lo dentro do IDE.</p><p>Quando tiver isso pronto, basta executar este comando dentro do diretório clonado:</p><pre><code>$ sam deploy --guided</code></pre><p>Ao executar esse comando, você receberá um conjunto de perguntas que precisa responder para configurar o projeto para que ele seja executado com sucesso.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/video1-1.gif" class="kg-image" alt="video1-1" width="600" height="544" loading="lazy"><figcaption>Como fazer o deploy do projeto na nuvem usando a CLI do AWS SAM</figcaption></figure><p>A primeira coisa que você precisa definir é um <strong>nome</strong> para o seu projeto. Em seguida, você definirá a <strong>região</strong> onde ele está sendo implantado – escolha a mesma região onde estão suas instâncias da EC2. Depois, precisamos dar ao roteiro de deploy uma <strong>lista das instâncias</strong> que queremos manipular. Estamos prontos – o deploy do projeto será feito em nossa conta da AWS.</p><h2 id="definindo-a-fun-o-aws-lambda"><strong>Definindo a função AWS Lambda</strong></h2><p>A primeira coisa que quero mostrar a você é como definimos uma função AWS Lambda, que é acionada em um tempo específico usando o AWS SAM. Esta definição estará no arquivo chamado "template.yml".</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/lambda-iac-start.png" class="kg-image" alt="lambda-iac-start" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/lambda-iac-start.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/lambda-iac-start.png 700w" width="700" height="654" loading="lazy"><figcaption>AWS SAM da função StartInstance</figcaption></figure><p>Essa é a aparência de uma função. Vejamos as linhas importantes:</p><p>A primeira linha é o nome da função – nesse caso, "<strong>StartInstanceFunction</strong>"<strong>.</strong></p><p>Depois, temos a definição de "<strong>Properties</strong>". A primeira propriedade é o "<strong>Handler</strong>". Aqui, especificaremos o módulo (arquivo) onde está o código que precisa ser executado e, depois, o método dentro desse módulo. </p><p>Então, temos "<strong>CodeUri</strong>", que é o caminho que mostra onde encontrar esse arquivo. Nesse caso, nosso código estará dentro de um diretório chamado "cron" em um arquivo chamado "handler.js" e em um método chamado "startInstance".</p><p>Depois disso, temos a definição de "<strong>Runtime</strong>". Usarei o NodeJS versão 12, mas você pode usar Python, Java, Go, C# ou qualquer outra linguagem de sua preferência. <a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html">A Lambda suporta múltiplos tempos de execução desde o princípio</a> e <a href="https://youtu.be/MS5pzddwwqU">você pode usar seu próprio ambiente de tempo de execução</a>, se quiser (links em inglês).</p><p>Temos a definição de "<strong>Environment</strong>", que usaremos para definir a única variável de ambiente. Essa variável nos permitirá enviar o código dinamicamente para diferentes instâncias de ids, dependendo da configuração de quando fazemos o deploy.</p><p>Depois disso, temos uma seção chamada "<strong>Policies</strong>", que é onde definimos as permissões que essa função Lambda específica terá.</p><p>É importante saber que todas as funções Lambda são criadas sem nenhuma permissão. Isso significa que elas não podem fazer nada em nenhum outro recurso da AWS.</p><p>Para que essa função Lambda possa iniciar uma instância da EC2, ela precisa de permissões para fazer essa ação específica sobre esse recurso específico da AWS. Nessa política específica, estamos concedendo permissões para iniciar TODAS as instâncias da EC2 nessa conta da AWS. TODAS são representadas com o "*" na seção de recursos.</p><p>Se você tiver esse código em produção, recomendo que você limite os recursos exatamente àqueles que você deseja que essa função Lambda possa iniciar.</p><p>Finalmente, a última seção é a seção "<strong>Events</strong>". Aqui, definiremos como essa função Lambda será acionada. Essa função será acionada com um evento CloudWatch agendado, que acionará a Lambda todos os dias às 8 da manhã. Basicamente, às 8 todos os dias, ela ativará todas as instâncias da EC2 que você especificar.</p><p>Há muitas regras para formar essa expressão Cron: por exemplo, para dizer que você gostaria que ela funcionasse apenas de segunda a sexta-feira (em inglês, <em>MONday-FRIday</em>), escreva <code>cron(0 8 ? * MON-FRI *)</code>. Você pode encontrar mais informações no site da documentação dos eventos CloudWatch <a href="https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-expressions.html">aqui</a>. </p><h2 id="programando-a-fun-o-aws-lambda"><strong>Programando a função AWS Lambda</strong></h2><p>Agora que definimos a função Lambda, precisamos fornecer algum código para ela. Na pasta "cron", no arquivo "handler.js", precisamos adicionar o método chamado "<strong>startInstance</strong>", que tem esta aparência:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/lambda-code-start.png" class="kg-image" alt="lambda-code-start" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/lambda-code-start.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/lambda-code-start.png 838w" sizes="(min-width: 720px) 720px" width="838" height="948" loading="lazy"><figcaption>Código da função startInstance</figcaption></figure><p>Este método será chamado quando a função for acionada todos os dias às 8 horas da manhã. Ele obterá a lista de instâncias da EC2 a partir de uma variável de ambiente em que passamos todas as ids de instâncias durante o tempo de deploy. Em seguida, ele criará um array com essas instâncias.</p><p>Quando tiver esse array, ele chamará o AWS SDK e enviará o array de ids de instâncias como um parâmetro. Se houver algum erro, ele o registrará e o completará. Imediatamente após essa Lambda terminar a execução, você pode ir até o seu console da EC2 e ver que suas instâncias foram ativadas.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/start-instances.gif" class="kg-image" alt="start-instances" width="600" height="274" loading="lazy"><figcaption>As instâncias da EC2 iniciam automaticamente quando a função Lambda é executada</figcaption></figure><p>A função de desativar as instâncias da EC2 é muito semelhante, com algumas pequenas diferenças. Você pode encontrar o código para essa função neste <a href="https://github.com/mavi888/lambda-cronjobs">link</a> e verificá-lo.</p><h2 id="executando-o-cron-job"><strong>Executando o Cron Job</strong></h2><p>Para executar esse Cron Job, não há muito o que fazer. Depois de feito o deploy das duas funções em sua conta da AWS, na mesma região em que as suas instâncias estão, elas executarão e farão o que foram programadas para fazer.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/lambda-console-1.png" class="kg-image" alt="lambda-console-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/lambda-console-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/lambda-console-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/lambda-console-1.png 1404w" sizes="(min-width: 720px) 720px" width="1404" height="636" loading="lazy"><figcaption>A AWS Lambda funciona para iniciar e parar instâncias implantadas na minha conta da AWS</figcaption></figure><p>Agora, é preciso esperar até as 8h ou 18h para ver se elas funcionam. Se você quiser testar agora mesmo, mude o horário do evento na definição Lambda para um horário que sirva para você. Certifique-se de que a instância esteja ligada se você estiver planejando desligá-las ou o contrário, para que você possa ver as mudanças.</p><p>Espere e veja o que acontece no console da EC2. Logo após a configuração, você verá a instância ser ativada ou desativada na hora que você configurar. Isto continuará para sempre até que você remova as funções Lambda.</p><h2 id="limpeza-da-sua-conta-aws"><strong>Limpeza da sua conta AWS</strong></h2><p>Após completar essa demonstração, recomendo que você desligue (ou remova a instância que criou para testar) e remova as funções Lambda que você acabou de criar.</p><p>A remoção das funções Lambda é tão fácil quanto colocá-las no seu serviço CloudFormation. Em seu console de gerenciamento da AWS, remova a pilha de recursos que o AWS SAM criou.</p><p>Não se esqueça de encerrar e remover as instâncias da EC2 se você as criou apenas para essa demonstração.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/delete-lambda.gif" class="kg-image" alt="delete-lambda" width="600" height="204" loading="lazy"><figcaption>Como remover as funções AWS Lambda que criamos nesta demonstração</figcaption></figure><h2 id="para-concluir"><strong>Para concluir</strong></h2><p>As funções AWS Lambda são uma ferramenta muito útil para realizar todos os tipos de tarefas em sua conta da AWS. Você pode, basicamente, obter notificações de qualquer mudança nos recursos da AWS através dos eventos CloudWatch e, então, pode acessar quase todos os serviços usando o AWS SDK. Assim, você pode realizar todos os tipos de tarefas de manutenção e tarefas automatizadas em sua infraestrutura.</p><p><strong>Obrigado pela leitura.</strong></p><p>A autora se chama <a href="https://twitter.com/mavi888uy">Marcia Villalba</a>, <em>advocate </em>de desenvolvimento da AWS e apresentadora de um canal no <a href="https://youtube.com/foobar_codes">YouTube</a> chamado FooBar, onde você encontrará mais de 250 tutoriais em vídeo sobre Serverless, AWS e práticas de engenharia de software.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como configurar o upload de imagens simples com Node e AWS S3 ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Filip Jerga Um guia passo a passo que explica como fazer o upload de uma imagem ou qualquer arquivo para o serviço Amazon S3. Esta é a primeira parte de um tutorial no qual trataremos da parte do servidor (Node.js) do código. Eu também preparei um tutorial em ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-configurar-o-upload-de-imagens-simples-com-node-e-aws-s3/</link>
                <guid isPermaLink="false">634ab6e495867606153feb2b</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Elizabete Nakamura ]]>
                </dc:creator>
                <pubDate>Thu, 20 Oct 2022 20:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/img-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-set-up-simple-image-upload-with-node-and-aws-s3-84e609248792/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to set up simple image upload with Node and AWS S3</a>
      </p><p>Escrito por: Filip Jerga</p><p><strong>Um guia passo a passo que explica como fazer o upload de uma imagem ou qualquer arquivo para o serviço Amazon S3.</strong></p><p>Esta é a primeira parte de um tutorial no qual trataremos da parte do servidor (Node.js) do código.</p><p>Eu também preparei um tutorial em vídeo no YouTube. Você pode encontrar um link nos recursos na parte inferior deste artigo.</p><h3 id="1-o-que-precisamos-instalar-e-uma-breve-descri-o-">1. O que precisamos instalar e uma breve descrição.</h3><p><strong>multer</strong>: middleware para manipulação de arquivos de dados. Usado principalmente para o upload de arquivos. Mais informações: <a href="https://www.npmjs.com/package/multer">link para o npm</a></p><p><strong>multer-s3</strong>: extensão do multer para o upload fácil de arquivos para o serviço Amazon S3. Mais informações: <a href="https://www.npmjs.com/package/multer-s3">link para o npm</a></p><p><strong>aws-sdk</strong>: pacote necessário para trabalhar com o AWS(Amazon Web Services) – no nosso caso, com o serviço S3. Mais informações: <a href="https://www.npmjs.com/package/aws-sdk">link para o npm</a></p><p><strong>Vá para seus projetos e vamos instalar os pacotes:</strong></p><pre><code>npm install —-save multer multer-s3 aws-sdk</code></pre><h3 id="2-login-na-aws">2. Login na AWS</h3><p>Primeiro, vamos criar uma conta em <a href="https://aws.amazon.com">https://aws.amazon.com</a>. A Amazon oferece um nível gratuito incrível, que você pode usar durante o primeiro ano. Após o login, procure pelo serviço S3.</p><p>Simplificando, o S3 é um serviço de nuvem para armazenar arquivos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_kL7kzofPaB83N7EmyV9P2g.png" class="kg-image" alt="1_kL7kzofPaB83N7EmyV9P2g" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/10/1_kL7kzofPaB83N7EmyV9P2g.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_kL7kzofPaB83N7EmyV9P2g.png 800w" sizes="(min-width: 720px) 720px" width="800" height="133" loading="lazy"><figcaption>Selecione o S3 aqui</figcaption></figure><p>Precisamos criar um <strong>Bucket</strong>. Você pode imaginar um <em>bucket </em>como sendo uma pasta para seus arquivos. Escolha um <strong>nome para o <em>bucket</em></strong> e sua <strong>região</strong>. Como esta é uma configuração simples, não estamos interessados em outras configurações (a configuração padrão já serve). Clique em "<strong>Next</strong>" (Avançar) até chegar na <strong>Revisão</strong> e crie seu <em>bucket</em>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_ds5x2m5EbltvbBK6b-UJdQ.png" class="kg-image" alt="1_ds5x2m5EbltvbBK6b-UJdQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/10/1_ds5x2m5EbltvbBK6b-UJdQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_ds5x2m5EbltvbBK6b-UJdQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="232" loading="lazy"><figcaption>Criação do <em>bucket</em></figcaption></figure><p><strong>Navegue até o <em>bucket</em> criado</strong> e verifique sua <strong>barra de URL</strong>. Lembre-se do <strong>nome do </strong><em><strong>bucket</strong></em> (para mim, "medium-test") e <strong>região</strong> (para mim, "us-east").</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_GYbZM5qHrPoto9Kgi7nryw.png" class="kg-image" alt="1_GYbZM5qHrPoto9Kgi7nryw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/10/1_GYbZM5qHrPoto9Kgi7nryw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_GYbZM5qHrPoto9Kgi7nryw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="220" loading="lazy"><figcaption>Confira sua barra de URL</figcaption></figure><p>Agora, precisamos obter nossas <strong>credenciais seguras</strong>. Navegue pelo nome de sua conta até "<strong>My Securuty Credentials</strong>" (minhas credenciais de segurança, em português). Depois "<strong>Access Keys</strong>" (chaves de acesso, em português) e "<strong>Create Access Key"</strong> (criar chave de acesso, em português).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_X5iF7gUqs_M2IzH2IwYC3Q.png" class="kg-image" alt="1_X5iF7gUqs_M2IzH2IwYC3Q" width="446" height="354" loading="lazy"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_VAAk0eS8PyT-v-QdnGxoXg.jpeg" class="kg-image" alt="1_VAAk0eS8PyT-v-QdnGxoXg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/10/1_VAAk0eS8PyT-v-QdnGxoXg.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_VAAk0eS8PyT-v-QdnGxoXg.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="510" loading="lazy"><figcaption>Minhas credenciais de segurança e chaves de acesso</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_kZNeP9KvC9hJRLyh6a7Abg.jpeg" class="kg-image" alt="1_kZNeP9KvC9hJRLyh6a7Abg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/10/1_kZNeP9KvC9hJRLyh6a7Abg.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_kZNeP9KvC9hJRLyh6a7Abg.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="304" loading="lazy"><figcaption>Criar chave de acesso</figcaption></figure><p><strong>Nunca compartilhe suas chaves com ninguém!</strong> Guarde temporariamente essas chaves em algum arquivo ou baixe o arquivo de chave, pois precisamos de chaves para configurar o upload de um arquivo.</p><p><strong>Tudo certo. a configuração da Amazon foi concluída!</strong></p><h3 id="3-uso-do-editor-de-c-digo">3. Uso do editor de código</h3><p><strong>Não vou explicar o básico de Node ou Express aqui</strong>. Este tutorial está focado apenas no upload do arquivo. Se você estiver interessado em toda a implementação do projeto, verifique meu repositório no GitHub ou assista o tutorial completo. (Você pode encontrar o link no final deste artigo).</p><ol><li>Crie seu serviço de upload de arquivos com a seguinte implementação (primeira parte):</li></ol><p><strong>Observação importante:</strong> nunca exponha suas credenciais secretas diretamente em um arquivo! Nunca divulgue suas credenciais secretas! Considere configurar variáveis de ambiente em seu ambiente local ou, no caso de projetos com o <em>deploy </em>realizado, variáveis em seu provedor de nuvem. A melhor solução seria usar os <strong><a href="https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html">perfis da AWS</a></strong> (texto em inglês).</p><p><strong>Primeiro</strong>, importamos todos os nossos pacotes instalados. A <strong>segunda</strong> parte é a <strong>configuração da AWS</strong>. Precisamos fornecer <strong>nossas chaves secretas e região</strong> a partir da barra de URLs que mostrei antes.</p><p>Após a configuração da AWS, podemos criar uma instância do nosso Amazon S3. Ainda não terminamos. Agora, vamos ver a segunda parte desta implementação.</p><p>Podemos criar uma solução para o upload do <em>multer</em>. Precisamos dar funcionalidade ao objeto do <em>multer</em> com as seguintes propriedades:</p><ol><li><strong>s3</strong>: instância do Amazon S3 que criamos antes.</li><li><strong>bucket</strong>: nome do nosso bucket (no meu caso: "medium-test")</li><li><strong>acl</strong>: controle de acesso ao arquivo ("<em>public read</em>" significa que qualquer pessoa pode ver os arquivos). Você pode verificar todos os tipos disponíveis aqui: <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl">link da documentação da Amazon</a> (texto em inglês)</li><li><strong>metada</strong>: função de callback para definir metadados dos arquivos carregados. Aqui, estou definindo metadados adicionais para um nome de campo. Você pode ver esses dados na imagem abaixo.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_NeYh6Kg4i3BAKD20_ZpfyQ.png" class="kg-image" alt="1_NeYh6Kg4i3BAKD20_ZpfyQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/10/1_NeYh6Kg4i3BAKD20_ZpfyQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_NeYh6Kg4i3BAKD20_ZpfyQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="346" loading="lazy"><figcaption>Metadados</figcaption></figure><p>5. <strong>key: </strong>função de callback para definir a propriedade <strong>key </strong>(chave na qual seu arquivo será salvo no <em>bucket</em>). Em nosso caso, estamos fazendo um <strong>carimbo de data/hora atual</strong> e salvando esse arquivo com um nome. Desse modo, nosso nome de arquivo será sempre único, mas você pode escolher o nome que quiser.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_vjRTskqhTeaGdVDNbtqWeQ.png" class="kg-image" alt="1_vjRTskqhTeaGdVDNbtqWeQ" width="322" height="84" loading="lazy"><figcaption>O arquivo enviado terá um nome associado ao carimbo de data/hora atual</figcaption></figure><p>Depois de toda a configuração, exportamos o objeto do <strong>upload</strong> a fim de utilizá-lo em outros arquivos.</p><h3 id="4-configura-o-de-uma-rota-para-o-upload-da-imagem">4. Configuração de uma rota para o upload da imagem</h3><p>Estamos quase terminando, mas os usuários do nosso aplicativo ainda não têm acesso ao upload da imagem. Precisamos expor essa funcionalidade a eles. Vamos criar um <em>endpoint</em> para salvar um arquivo.</p><p>Exportamos nosso objeto de upload criado anteriormente e criamos outro objeto a partir dele. O novo objeto é mais específico, com configuração adicional para um <strong>único upload de imagem</strong>. Fornecemos um valor de "<strong>image</strong>" para ele. <strong>Esse valor</strong> é muito importante, pois enviaremos nosso arquivo para um servidor sob esta chave.</p><p><strong>A segunda parte é a própria rota</strong>, o endpoint de <strong>POST</strong> para <strong>"/image-upload"</strong>. Dentro dela, chamamos <strong>singleUpload</strong>. Não se esqueça de <strong>passar req </strong>e <strong>res</strong> como parâmetros<strong>,</strong> pois o <em>multer </em>receberá o arquivo que estamos enviando para o servidor a partir do objeto de <strong>req</strong>.</p><p>Verificamos, então, a existência de erros. Se não houver nenhum, devolvemos o JSON com o valor da localização do nosso arquivo, que é apenas um <strong>URL para o arquivo da Amazon</strong>.</p><p><strong>Estamos prontos!</strong> Já podemos carregar arquivos no Amazon S3. Simples, não acha?</p><h3 id="5-teste-no-postman-">5. Teste no Postman.</h3><p>Para ver os resultados de nosso trabalho, precisamos enviar um pedido para o servidor com uma imagem da qual queremos fazer o upload. Nessa parte, vamos testar isso através do Postman. Na segunda parte do tutorial, criaremos uma implementação para uma aplicação em Angular.</p><p>Se você não tiver o <strong>Postman</strong>, pode simplesmente fazer o download dele como uma extensão do Google Chrome. Basta pesquisar por <strong>'postman</strong> <strong>google chrome extension'</strong>. O Postman é um aplicativo para inicializar, enviar e testar pedidos ao servidor de modo simplificado.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_OQiXF-lDa8GUhcKh7nZDGw.png" class="kg-image" alt="1_OQiXF-lDa8GUhcKh7nZDGw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/10/1_OQiXF-lDa8GUhcKh7nZDGw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/10/1_OQiXF-lDa8GUhcKh7nZDGw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="340" loading="lazy"><figcaption>Postman</figcaption></figure><ol><li><strong>Envie uma solicitação de post</strong> para o <em>endpoint</em> que criamos antes. No meu caso, especifiquei no caminho do node de <strong>/image-upload</strong>.</li><li>Selecione <strong>Body </strong>em<strong> form-data</strong>.</li><li>Forneça a <strong>chave</strong> de uma <strong>imagem</strong>. Você notará que essa é uma <strong>key </strong>(chave, em inglês) que estabelecemos antes em nosso código. Procure e selecione algum arquivo de imagem em seu computador.</li><li><strong>Envie a solicitação.</strong></li></ol><p>Você deve receber de volta o JSON com o URL de seu arquivo carregado.</p><p><strong>Aí está! É isso, pessoal.</strong> <strong>Este é um upload de arquivo simples para o Node.</strong> No próximo artigo, faremos uma implementação de front-end para o Angular.</p><p>Se gostou deste tutorial, fique à vontade para conferir meu curso completo na Udemy —<strong> <a href="https://www.udemy.com/course/practical-angular-react-node-airbnb-style-application/">The Complete Angular, React &amp; Node Guide | Airbnb style app</a>.</strong></p><p><strong>Tutorial em vídeo: </strong><a href="https://www.youtube.com/watch?v=ASuU4km3VHE&amp;t=1047s" rel="noopener">vídeo no YouTube</a></p><p><strong>Projeto concluído:</strong> <a href="https://github.com/Jerga99/bwm-ng" rel="noopener">meu repositório no GitHub</a></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
