<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Henrique Santos</title>
    <description>The latest articles on DEV Community by Henrique Santos (@henbsantos).</description>
    <link>https://dev.to/henbsantos</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%2F1112681%2F472bcf8e-21bd-424a-b474-d0d8243a56d1.jpeg</url>
      <title>DEV Community: Henrique Santos</title>
      <link>https://dev.to/henbsantos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/henbsantos"/>
    <language>en</language>
    <item>
      <title>Copia de Snapshot de Banco de Dados RDS criptografado entre Contas AWS</title>
      <dc:creator>Henrique Santos</dc:creator>
      <pubDate>Tue, 16 Jan 2024 19:24:44 +0000</pubDate>
      <link>https://dev.to/henbsantos/transferencia-segura-de-snapshot-de-banco-de-dados-rds-criptografado-entre-contas-aws-59ak</link>
      <guid>https://dev.to/henbsantos/transferencia-segura-de-snapshot-de-banco-de-dados-rds-criptografado-entre-contas-aws-59ak</guid>
      <description>&lt;p&gt;1- Crie o Snapshot do seu banco de dados RDS, verifique se a chave de criptografia dele é a padrão; caso seja, crie uma nova chave KMS e realize uma cópia do Snapshot criado, trocando a chave KMS para a que foi criada, conforme exemplificado abaixo (caso você já tenha uma chave de criptografia que não seja a padrão, pode prosseguir para o passo 2 sem realizar a cópia do snapshot criado):&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-Criação de snapshot&lt;/em&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ambpDg7r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3mi7h9rsmsp38ohj6ix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ambpDg7r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3mi7h9rsmsp38ohj6ix.png" alt="Image description" width="778" height="451"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;-Criação de copia do snpashopt&lt;/em&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8J-srBpo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khxc7of8z546l3n801dq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8J-srBpo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khxc7of8z546l3n801dq.png" alt="Image description" width="800" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-Trocando a chave kms da copia&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;2- Acesse a chave KMS vinculada ao seu snapshot ou cópia, vá para a aba "Other AWS accounts" &amp;gt; "Add other AWS accounts", e adicione o ID da conta à qual deseja compartilhar o Snapshot.&lt;/p&gt;

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

&lt;p&gt;3- Vá até a cópia do snapshot à qual foi trocada a chave do KMS em "Actions" &amp;gt; "Share snapshot".&lt;/p&gt;

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

&lt;p&gt;4- Adicione o ID da conta à qual deseja compartilhar o Snapshot e clique em "Salvar".&lt;/p&gt;

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

&lt;p&gt;5- Vá até a conta à qual o snapshot foi compartilhado, navegue até RDS, na aba "Snapshots" &amp;gt; "Shared with me", será possível visualizar o snapshot. Com isso, é possível realizar uma cópia desse snapshot para a nova conta, alterando a chave do KMS para uma de sua escolha pertencente a essa nova conta.&lt;/p&gt;

&lt;p&gt;Ao realizar esse processo, você conseguirá criar um novo banco de dados RDS em sua nova conta sem depender da chave de criptografia da conta antiga.&lt;/p&gt;

&lt;h2&gt;
  
  
  A utilidade de poder copiar Snapshots criptografados
&lt;/h2&gt;

&lt;p&gt;Copiar um snapshot RDS criptografado de uma conta da AWS para outra é como ter uma cópia de backup segura que você pode levar para onde precisar. Isso é útil porque, por exemplo, você pode querer testar algo novo em um ambiente separado ou compartilhar dados com outra equipe, ou até mesmo migrar um ambiente de uma conta para outra.&lt;/p&gt;

&lt;p&gt;A criptografia adiciona uma camada extra de segurança, como um cadeado digital, para garantir que seus dados estejam protegidos durante todo o processo. Essa flexibilidade é como ter uma chave que permite mover informações importantes de maneira fácil e segura entre diferentes partes da nuvem.&lt;/p&gt;

&lt;p&gt;Resumindo, ser capaz de copiar snapshots criptografados é como garantir seus dados, facilitando sua movimentação e mantendo-os protegidos, não importa onde você precise usá-los na nuvem AWS.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>rds</category>
      <category>awsrds</category>
    </item>
    <item>
      <title>Copia de Buckets S3 entre contas AWS</title>
      <dc:creator>Henrique Santos</dc:creator>
      <pubDate>Tue, 09 Jan 2024 13:50:32 +0000</pubDate>
      <link>https://dev.to/henbsantos/copia-de-buckets-s3-entre-contas-46ip</link>
      <guid>https://dev.to/henbsantos/copia-de-buckets-s3-entre-contas-46ip</guid>
      <description>&lt;p&gt;&lt;strong&gt;Na conta para qual o Bucket será copiado (Conta de destino)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criar o bucket que irá receber os arquivos copiados.&lt;/li&gt;
&lt;li&gt;Criar um usuário IAM e coloque a policy abaixo:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::&amp;lt;NOME-DO-BUCKET-DE-ORIGEM&amp;gt;",
                "arn:aws:s3:::&amp;lt;NOME-DO-BUCKET-DE-ORIGEM&amp;gt;/*",
                "arn:aws:s3:::&amp;lt;NOME-DO-BUCKET-DE-DESTINO&amp;gt;",
                "arn:aws:s3:::&amp;lt;NOME-DO-BUCKET-DE-DESTINO&amp;gt;/*"
            ]
        }
    ]
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Gere uma credencial programática e a configure em sua maquina ou em uma instância utilizando o AWS CLI. &lt;/li&gt;
&lt;li&gt;caso não saiba como realizar essa configuração,&lt;a href="https://dev.to/henbsantos/configurando-o-aws-cli-1ok1"&gt;clique aqui&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Na conta a qual o Bucket está (Conta de Origem)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inserir a policy abaixo no bucket que será copiado:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::&amp;lt;ID-DA-CONTA-DESTINO&amp;gt;:user/&amp;lt;NOME-DO-USUARIO-IAM-CRIADO-NA-CONTA-DESTINO&amp;gt;""
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::&amp;lt;NOME-DO-BUCKET-QUE-ESTÁ-INSERINDO-ESSA-POLICY&amp;gt;/*",
                "arn:aws:s3:::&amp;lt;NOME-DO-BUCKET-QUE-ESTÁ-INSERINDO-ESSA-POLICY&amp;gt;"
            ]
        }
    ]
}

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Acesse a maquina a qual foi configurada as credenciais&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;-Execute o comando para que a copia seja realizada.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws s3 sync s3://&amp;lt;NOME-DO-BUCKET-DE-ORIGEM&amp;gt; s3://&amp;lt;NOME-DO-BUCKET-DE-DESTINO&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pode utilizar o comando aws cp, porem o sync é mais eficiente caso queria rodar a copiar mais de uma vez sincronizando os arquivos&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EXTRA&lt;/strong&gt;&lt;br&gt;
Se o bucket for muito grande, vale a pena executar a cópia utilizando o comando 'screen' (em ambientes Linux). Esse comando fará com que a cópia seja executada em segundo plano. Dessa forma, em situações em que as credenciais estejam configuradas em uma instância EC2 e a conexão com a mesma seja perdida, a cópia não será interrompida.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criar uma sessao nomeada &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;screen -S nome_da_sessao&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimizar sessão&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;Ctrl+A+D&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lista sessões ativar &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;screen -ls&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ir para a sessao &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;screen -r id_da_sessao&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encerrar sessão &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;screen -r id_da_sessao &lt;br&gt;
Ctrl+C&lt;br&gt;
exit&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Create VPN Client to site Open Source in AWS EC2 (PrituNL)</title>
      <dc:creator>Henrique Santos</dc:creator>
      <pubDate>Tue, 07 Nov 2023 18:02:03 +0000</pubDate>
      <link>https://dev.to/henbsantos/create-vpn-client-to-site-open-source-in-aws-pritunl-4e50</link>
      <guid>https://dev.to/henbsantos/create-vpn-client-to-site-open-source-in-aws-pritunl-4e50</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Create instânce EC2 in public subnet, i used t3a.micro instance type (in tutorial i use Ubuntu 20.4).&lt;/li&gt;
&lt;li&gt;Add Elastic IP in your instance. &lt;/li&gt;
&lt;li&gt;In Route 53 add record 
subdomain  &amp;gt;&amp;gt;&amp;gt; elastic ip &lt;/li&gt;
&lt;li&gt;In Security Group add roles &lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;- 80   &amp;gt;&amp;gt;  0.0.0.0/0&lt;/li&gt;
&lt;li&gt;- 443 &amp;gt;&amp;gt; 0.0.0.0/0&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 1: Update your system
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt -y full-upgrade

[ -f /var/run/reboot-required ] &amp;amp;&amp;amp; sudo reboot -f

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Add Pritunl, MongoDB repositories and public key
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "deb http://repo.pritunl.com/stable/apt $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/pritunl.list

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

curl -fsSL https://www.mongodb.org/static/pgp/server-5.0.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb-5.gpg

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7AE645C0CF8E292A

sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Install Pritunl and MongoDB
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt --assume-yes install pritunl mongodb-org

sudo systemctl start pritunl mongod

sudo systemctl enable pritunl mongod

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Configure Pritunl on Ubuntu 20.04
&lt;/h2&gt;

&lt;p&gt;Access console vpn&lt;br&gt;
&lt;a href="https://YOUR_ELASTICIP"&gt;https://YOUR_ELASTICIP&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Ubuntu terminal run comands for get initial  password
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pritunl setup-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add key generete in your console vpn
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pritunl default-password

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Login in console vpn with these credentials, and go to Settings. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In settings rename admin user and change passaword. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Lets Encrypt Domain, add your domain for get SSL acces with certificate and save. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 5: Configurate Server
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In server, Add new server. &lt;/li&gt;
&lt;li&gt;In console aws, give acess for 0.0.0.0/0 for port your server. &lt;/li&gt;
&lt;li&gt;DNS server, if you want private access only, add DNS server of yours VPC and save. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 6: Add route
&lt;/h2&gt;

&lt;p&gt;If you want access in your VPN only, click in Add route, and put your VPN CIDR, and remove route 0.0.0.0. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Organization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In User, click in add organization,come to server, seletct your server and add your organization in your server. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After this, create your users and give URL for access. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>vpn</category>
      <category>pritunl</category>
    </item>
    <item>
      <title>VPN AWS Site-to-site</title>
      <dc:creator>Henrique Santos</dc:creator>
      <pubDate>Wed, 13 Sep 2023 20:56:33 +0000</pubDate>
      <link>https://dev.to/henbsantos/vpn-aws-site-to-site-13dj</link>
      <guid>https://dev.to/henbsantos/vpn-aws-site-to-site-13dj</guid>
      <description>&lt;p&gt;1- Caso não exista para a VPC que será fechada a conexão , crie um “Virtual private gateway”.&lt;/p&gt;

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

&lt;p&gt;1.1 - Apos criar atache-o a sua vpc&lt;/p&gt;

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

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

&lt;p&gt;2 - Customer gateways - O Customer gateway sera o IP publico do Firewall que fechara a VPN com a AWS (deve ser fornecido pelo cleinte). &lt;br&gt;
Após ter essa informação crie o Customer gateway para a sua conexão.&lt;/p&gt;

&lt;p&gt;OBS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;So pode ser usado 1 Customer gateway por conexão de VPN.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*É possível trocar o Customer gateway configurado em um túnel por um novo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criando um Customer gateway:&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;3- Criando o tunel de VPN&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Va em VPN-Site-to-site  e clique em Create VPN connection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nesse caso iremos utilizar o Privete gateway que criamos. (É possível criar um tunel utilizando Transity Gateway ao invés do virtual private gateway, (mas isso é feito apenas em ambientes maiores, o mais utilizado e o VPG). &lt;br&gt;
Iremos utilizar também o Costumer Gateway  que criamos.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Em rota iremos definir como statica, raramente sera utilziada Dynamic.&lt;/li&gt;
&lt;li&gt;Satic IP prefixes e os ranges de IP privado da rede que fechara o tunel, pode ser inserido mais de um.&lt;/li&gt;
&lt;li&gt;Nesse exemplo sera utilizado o 192.168.1.0/24 e 192.168.10.0/24&lt;/li&gt;
&lt;li&gt;Em casos em que o cliente tiver mais de um range de IP privado, na opção  “Local IPv4 network CIDR”, pode ser colocado 0.0.0.0/0, mas se for somente um range de IP privado pode inserir ele ao invez do 0.0.0.0/0.&lt;/li&gt;
&lt;li&gt;Nesse caso iremos utilziar somente uma VPC com somente um range de IP 172.31.0.0/16, então em
“ Remote IPv4 network CIDR” iremos colocar somente ele. Mas em casos que tenha mais de um range na VPC ou seja um ambiente com Transity Gateway pode colacado como 0.0.0.0/0&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Nesse formato ja é possível criar a VPN nas configurações Default, basta da um Create VPN Conection e baixar o arquivo de configurações para a outra ponta direto do console AWS. Porem caso o cliente deseja uma configuração personalizada de Private Key e Criptografia basta expandir as configurações do Tunel 1 e Tunel 2 e aplica-las conforme for necessário.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4- Definindo configurações personalizadas para o Tunel. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-shared key - A pre-shared key pode ser personalizada, porém o console da AWS não aceita caracteres especiais&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Edit tunnel 1 options - Por padrão, todas as opções de criptografia já vêm habilitadas, permitindo que a outra ponta possa usar qualquer uma para fechar o túnel. No entanto, o cliente pode solicitar uma criptografia específica. Caso isso ocorra, basta seguir o exemplo e selecionar as opções desejadas.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;É possível também definir um Lifetime personalizado para a phase 1 e phase 2 (respeitando os limites impostos pela AWS)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Pronto, agora basta replicar as configurações do Tunel 1 para o Tunel 2 (redundância AWS). &lt;/p&gt;

&lt;p&gt;Obs:&lt;/p&gt;

&lt;p&gt;Caso o túnel não se feche, pode-se validar junto à outra ponta as configurações personalizadas aplicadas, todas elas são editáveis após a criação do túnel.&lt;/p&gt;

&lt;p&gt;Após a criação do tunel va na Route table das subnetes que deseja que comunique com essa vpn e habilite a propagação de rotas.&lt;/p&gt;

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

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

</description>
      <category>aws</category>
      <category>vpn</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Configurando o AWS CLI</title>
      <dc:creator>Henrique Santos</dc:creator>
      <pubDate>Mon, 17 Jul 2023 23:43:52 +0000</pubDate>
      <link>https://dev.to/henbsantos/configurando-o-aws-cli-1ok1</link>
      <guid>https://dev.to/henbsantos/configurando-o-aws-cli-1ok1</guid>
      <description>&lt;p&gt;&lt;strong&gt;1- Gerando credencial programática&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesso o console AWS e navegue ate a aba IAM. &lt;/li&gt;
&lt;li&gt;Crie um novo usuário ou selecione o usuário o qual deseja gerar a credencial programática.&lt;/li&gt;
&lt;li&gt;Caso seja um usuário já existente vá ate a aba &lt;strong&gt;Security credentials&lt;/strong&gt;, caso seja um novo usuário, após vá ate o usuário e navegue ate a aba &lt;strong&gt;Security credentials&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Navegue ate a opção &lt;strong&gt;Create access key&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Selecione o Use Case e de um &lt;em&gt;next&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;De uma descrição para sua Key e em seguia clique em &lt;strong&gt;Create access key&lt;/strong&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Pronto, sua credencial esta criada, salve esses dados com bastante cuidado e não compartilhe  os mesmos.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.1- Configurando a credencial no Linux.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesse o seu terminal e execute o comando:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;apt-get install awscli&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Após instalar execute os comandos de configuração:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;aws configure --profile &amp;lt;COLOQUE O NOME QUE VOCE QUER PARA SEU PROFILE&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Em seguida será solicitado que responda os dados da sua credencial.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;AWS Access Key ID [None]:&amp;lt;COLOQUE O ID DA SUA KEY&amp;gt;&lt;br&gt;
AWS Secret Access Key [None]: &amp;lt;COLOQUE SUA SECRET ACCES KEY&amp;gt;&lt;br&gt;
Default region name [None]: &amp;lt;COLOQUE A REGIÃO A QUAL IRA TRABALHAR&amp;gt;&lt;br&gt;
Default output format [None]: &amp;lt;PODE DEIXAR EM BRANCO&amp;gt;&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Para usar a credencial configurada basta executar o comando.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;export AWS_PROFILE=&amp;lt;NOME DO PROFILE QUE FOI DEFINIDO NAS CONFIGURAÇÕES&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pronto, sua credencial já esta configurada no seu Linux.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2- Configurando a credencial no Windows.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Abra o cmd e execute o comando:&lt;br&gt;
&lt;code&gt;msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Será aberto o laucher de instalação, apenas clique em Next e aceite os termos, next novamente e install. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Após a instalação, feche o cmd e abra-o novamente, e execute o comando:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;aws configure --profile &amp;lt;COLOQUE O NOME QUE VOCE QUER PARA SEU PROFILE&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Em seguida será solicitado que responda os dados da sua credencial.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;AWS Access Key ID [None]:&amp;lt;COLOQUE O ID DA SUA KEY&amp;gt;&lt;br&gt;
AWS Secret Access Key [None]: &amp;lt;COLOQUE SUA SECRET ACCES KEY&amp;gt;&lt;br&gt;
Default region name [None]: &amp;lt;COLOQUE A REGIÃO A QUAL IRA TRABALHAR&amp;gt;&lt;br&gt;
Default output format [None]: &amp;lt;PODE DEIXAR EM BRANCO&amp;gt;&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Para usar a credencial configurada basta executar o comando.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;setx AWS_PROFILE &amp;lt;NOME DO PROFILE QUE FOI DEFINIDO NAS CONFIGURAÇÕES&amp;gt;&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Pronto, sua credencial já esta configurada no seu Windows.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>AWS Backup utilizando Tags</title>
      <dc:creator>Henrique Santos</dc:creator>
      <pubDate>Mon, 03 Jul 2023 23:04:01 +0000</pubDate>
      <link>https://dev.to/henbsantos/aws-backup-utilizando-tags-40h0</link>
      <guid>https://dev.to/henbsantos/aws-backup-utilizando-tags-40h0</guid>
      <description>&lt;p&gt;1- Na console pesquise por &lt;strong&gt;AWS Backup&lt;/strong&gt; e navegue ate a aba  &lt;strong&gt;Bakcup Plans&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2- Clieque em &lt;strong&gt;Create backup plan&lt;/strong&gt; e selecione &lt;strong&gt;Build a new plan&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;3- Defina um nome para um plano e um nome para rule.&lt;/p&gt;

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

&lt;p&gt;4-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Em &lt;strong&gt;Backup valut&lt;/strong&gt; foi definido como Default neste exemplo (pode ser criado um novo Valut).&lt;/li&gt;
&lt;li&gt;Frequência dos Backups será diária.&lt;/li&gt;
&lt;li&gt;Em &lt;strong&gt;Backup Window&lt;/strong&gt; utilize uma janela customizada, o horário que aparece no console é de UTC. Por exemplo, se desejar que os backups se iniciem as 01:00 AM o Start Time fica como 04:00 UTC time, pois o horário de Brasília é UTC -3.&lt;/li&gt;
&lt;li&gt;Em &lt;strong&gt;Start within&lt;/strong&gt; nessa configuração foi colocado para iniciar dentro de 1h conforme o horário programado, com um tempo de 8 h para completar o backup. Esse tempo de &lt;strong&gt;Complete within&lt;/strong&gt; é muito importante, visto que se existirem muitas instâncias e que possam ser grandes em questão de armazenamento e modificações diárias, pode ser que o tempo determinado para completar seja insuficiente, com isso esse tempo é necessário ser ajustado conforme a demanda.&lt;/li&gt;
&lt;li&gt;Em &lt;strong&gt;Retention period&lt;/strong&gt; foi definido como 7 dias, pois esse era o tempo que cada backup será retido na conta ate ser excluído.(Isso pode ser ajustado conforme a necessidade).&lt;/li&gt;
&lt;li&gt;Esse backup será mantido apenas nessa região de criação do plano, então na aba &lt;strong&gt;Copy to destination&lt;/strong&gt; não será selecionado nenhuma opção, mas caso queira uma cópia desse backup em outras regiões basta selecionar a região desejada.&lt;/li&gt;
&lt;li&gt;Em seguida clique em Create plan.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;5- O plano de backup está criado, agora será definido para quais recursos esse plano ira ser utilizado, nesse exemplo será apenas para Ec2, porem o mesmo pode ser utilizado para outros recursos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primeiro será definido o nome e a IAM role, pode ser criado uma role personalizada, mas nesse exemplo será utilizada a Default.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Em Define &lt;strong&gt;resource selection&lt;/strong&gt; serão especificados os recursos, selecionando “&lt;strong&gt;Include specific resource types&lt;/strong&gt;”.&lt;/li&gt;
&lt;li&gt;Em “Select specific resource types” nesse exemplo foi selecionado apenas EC2 e deixar como &lt;strong&gt;All Instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A etapa 3 não será preenchida.&lt;/li&gt;
&lt;li&gt;A etapa “&lt;strong&gt;4. Refine selection using tags&lt;/strong&gt;” será definido a Tag das instâncias que farão parte desse plano de backup. Utilizaremos nesse exemplo a tag Backup = True.&lt;/li&gt;
&lt;li&gt;Em seguida clique em “Assign resources”. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;6- Nas instâncias Ec2  que necessitem da realização do backup basta adicionar a tag criada, que nesse exemplo foi utilizada a Backup = True.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Expansão de disco automática EC2 (Lambda+CloudWatch+SNS)</title>
      <dc:creator>Henrique Santos</dc:creator>
      <pubDate>Mon, 03 Jul 2023 16:31:13 +0000</pubDate>
      <link>https://dev.to/henbsantos/expansao-de-disco-automatica-lambdacloudwatchsns-2g1a</link>
      <guid>https://dev.to/henbsantos/expansao-de-disco-automatica-lambdacloudwatchsns-2g1a</guid>
      <description>&lt;p&gt;1- Crie uma política no IAM com as  permissões.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "ec2:DescribeTags"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter"
            ],
            "Resource": "arn:aws:ssm:::parameter/AmazonCloudWatch-*"
        }
    ]
}

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

&lt;/div&gt;



&lt;p&gt;2- Crie uma função (role) para EC2 e adicione a politica criada na etapa 1.&lt;/p&gt;

&lt;p&gt;3- Instale o agente do CloudWatch na instância. (nesse exemplo estou utilizando em uma maquina linux ubuntu).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb&lt;br&gt;
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para coletar as métricas necessárias rode os comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /opt/aws/amazon-cloudwatch-agent/bin 
wget https://raw.githubusercontent.com/railandermarques/cloudwatchmonitoring/master/config.json 
cd /opt/aws/amazon-cloudwatch-agent/etc/ 
cp -av ../bin/config.json amazon-cloudwatch-agent.json 
mkdir -p /usr/share/collectd/ 
touch /usr/share/collectd/types.db 
sudo sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s 
systemctl enable amazon-cloudwatch-agent 
systemctl status amazon-cloudwatch-agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4-Crie um tópico SNS com nome de sua escolha.&lt;/p&gt;

&lt;p&gt;5- Acesse o CloudWatch no console AWS &amp;gt; All Alarms &amp;gt; Create Alarm &amp;gt; Select metric, e pesquise por CWAgent, verifique o que possui métricas de disco. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selecione a métrica “disk_used_percent” com o path da partição que o disco utiliza. (Nesse caso estou monitorando para expandir o disco root.)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Defina o período no qual você deseja receber alertas e indique a porcentagem igual ou maior na qual você deseja que o disco seja expandido. Em seguida, clique em "Next".&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;6 - Na aba "Notificação", selecione "Em alarme", "Selecionar um tópico SNS existente" e escolha o tópico que foi criado na etapa 4. Em seguida, clique em "Next".&lt;/p&gt;

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

&lt;p&gt;7- Defina um nome para o alarme, clique em "Next" e, em seguida, em "Create alarm".&lt;/p&gt;

&lt;p&gt;8- Este exemplo envia alertas para um grupo do Discord e para que isso funcione, é necessário adicionar a camada "requests" ao Lambda. Siga as etapas abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Caso não sabia criar as dependências do request baixe o arquivo - &lt;a href="https://github.com/henbsantos/requests-lambda/blob/main/requests.zip"&gt;https://github.com/henbsantos/requests-lambda/blob/main/requests.zip&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Acesse o AWS Lambda, vá ate a aba Layers &amp;gt; Create Layer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Defina um nome &amp;gt; Faça o upload do Zip Baixado &amp;gt; Compatible runtimes selecione Python 3.9 &amp;gt; Create.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;9- Crie uma função Lambda com um nome de sua escolha, selecione Python 3.9 e atribua uma função que permita o acesso a todos os EBS e instâncias EC2 (neste exemplo, foi utilizado o acesso de Administrador, mas é possível ajustar isso para uma permissão mais restrita).&lt;/p&gt;

&lt;p&gt;10- Dentro da função Lambda, na aba "Layers", clique em "Add a Layer" e selecione a camada criada na etapa 8.&lt;/p&gt;

&lt;p&gt;11- Cole o código python no lambda_function.py&lt;/p&gt;

&lt;p&gt;Observação: esse código esta expandindo o disco root,  partição /dev/xvda 1, tipo ext4. Caso o disco tenha uma configuração diferente é necessario alterar os comandos da linha 50. &lt;br&gt;
Linha 41 - alterar ID do volume que será expandido.&lt;br&gt;
Linha 48 - alterar o ID da instância.&lt;br&gt;
Linha 55 - Alterar endereço do webhook do discord (colocar o do chat que ira receber os alertas da finalização de expansão).&lt;br&gt;
Linha 56 - Editar mensagem a ser enviada para o alerta do Discord.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3
import time
import json
import requests


def expandir_volume_ebs(volume_id):
    ec2_client = boto3.client('ec2')

    response = ec2_client.describe_volumes(VolumeIds=[volume_id])
    current_size = response['Volumes'][0]['Size']
    new_size = current_size + 1

    response = ec2_client.modify_volume(
        VolumeId=volume_id,
        Size=new_size
    )

    return response

def executar_comandos_shell(instance_id, comandos):
    ssm_client = boto3.client('ssm')

    response = ssm_client.send_command(
        InstanceIds=[instance_id],
        DocumentName="AWS-RunShellScript",
        Parameters={'commands': comandos}
    )

    return response

def enviar_mensagem_discord(webhook_url, message):
    data = {
        'content': message
    }
    response = requests.post(webhook_url, json=data)
    if response.status_code != 204:
        print('Falha ao enviar mensagem para o Discord:', response.text)

def lambda_handler(event, context):
    volume_id = "vol-0d2dfdd723adb27bd"

    response = expandir_volume_ebs(volume_id)
    print("Volume expandido:", response)

    time.sleep(180)

    instance_id = "i-0ac8a7a16a50b9f06"

    comandos = ['sudo su', 'growpart /dev/xvda 1', 'resize2fs /dev/xvda1']

    response = executar_comandos_shell(instance_id, comandos)
    print("Comandos executados:", response)

    webhook_url = 'https://discord.com/api/webhooks/1123651003187728464/OYQ_--_Am'
    message = 'O disco root /dev/xvda 1 da instância i-0ac8a7a16a50b9f06 foi expandido!'
    enviar_mensagem_discord(webhook_url, message)

    return {
        'statusCode': 200,
        'body': json.dumps('Lambda executada !')
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;12 -Após o lambda ser executado você deve receber um alerta no chat do discord do webhook. &lt;/p&gt;

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

</description>
      <category>aws</category>
      <category>python</category>
      <category>lambda</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
