<?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: Edson Fernandes Cunha</title>
    <description>The latest articles on DEV Community by Edson Fernandes Cunha (@efcunha).</description>
    <link>https://dev.to/efcunha</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%2F657351%2F89c99e74-40e9-4275-96b4-1339f6aab440.jpeg</url>
      <title>DEV Community: Edson Fernandes Cunha</title>
      <link>https://dev.to/efcunha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/efcunha"/>
    <language>en</language>
    <item>
      <title>[DevOps] - Projeto de exemplo com Terraform</title>
      <dc:creator>Edson Fernandes Cunha</dc:creator>
      <pubDate>Wed, 28 Sep 2022 23:09:31 +0000</pubDate>
      <link>https://dev.to/efcunha/devops-projeto-de-exemplo-com-terraform-n6j</link>
      <guid>https://dev.to/efcunha/devops-projeto-de-exemplo-com-terraform-n6j</guid>
      <description>&lt;h2&gt;
  
  
  Visão geral
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Este laboratório faz parte de um laboratórios DevOps com projetos de exemplo completo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tudo que você tem que fazer é seguir passo a passo para completá-lo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Este laboratório pode custar algum dinheiro, mas não muito se você mantê-lo funcionando por um curto período de tempo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que você vai aprender neste laboratório
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use o Terraform para configurar a infraestrutura na AWS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A infraestrutura inclui VPC, NAT gateway, security group, Auto Scaling group, EC2, ALB, Elastic IP, and Certificate Manager (SSL/TLS certificates).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Observe que esta é uma arquitetura de rede VPC de 3 níveis. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contamos com o módulo Terraform "terraform-aws-modules/vpc/aws" para criar a maioria dos componentes de rede aqui.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Diagrama de arquitetura
&lt;/h2&gt;

&lt;p&gt;Aqui está o que você vai criar neste laboratório!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/imagens%2FDiagrama-de-arquitetura.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/imagens%2FDiagrama-de-arquitetura.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pré-requisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.hashicorp.com/tutorials/terraform/install-cli" rel="noopener noreferrer"&gt;Instalar o Terraform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/pt_br/cli/latest/userguide/getting-started-install.html" rel="noopener noreferrer"&gt;Instalar o AWS CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/pt_br/cli/latest/userguide/cli-chap-configure.html" rel="noopener noreferrer"&gt;Configurar o AWS CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instalar visual Studio Code:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;https://code.visualstudio.com/download&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Crie uma conta de usuário na AWS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Você precisa de uma conta AWS e um usuário IAM. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Se você não tem uma conta AWS, inscreva-se, mas certifique-se de ter um cartão de credito internacional.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Para ambientes de laboratório, um usuário do IAM com a política de gerenciamento "AdministratorAccess" já serve. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Registre um domínio
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Este laboratório requer um domínio para configurar HTTPS! Melhor ter algum tipo de domínio de teste usado para fins de laboratório.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O domínio pode ser registrado em qualquer provedor de domínio ou direto na mesma conta AWS, dependendo de suas necessidades. &lt;br&gt;
Possuir um nome de domínio normalmente custará entre US$ 10 e US$ 20 por ano.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Você também precisa criar uma zona hospedada no Route53 para o domínio acima na mesma conta AWS e obter as informações de registro do NS a partir daí.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/imagens%2FRoute-53.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/imagens%2FRoute-53.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Em seguida, vá para as configurações do seu domínio e atualize seus servidores de nome para direcionar o tráfego para o Route53 da sua conta AWS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/imagens%2FDNS.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/imagens%2FDNS.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Armazenamento de estado remoto com S3 e DynamoDB
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;NOTA: Se você optar por não usar o estado remoto para uma abordagem mais simples, você pode pular esta etapa, mas certifique-se de comentar o conteúdo do arquivo "t1-02-backend.tf" mais tarde.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O estado terraform (arquivo "terraform.tfstate") também pode ser armazenado remotamente. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Neste laboratório, você precisa criar um Bucket S3 com antecedência para armazenar o arquivo state da seguinte forma:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bucket name: devops-projects-infra-test
Region: US-East &lt;span class="o"&gt;(&lt;/span&gt;N.Virginia&lt;span class="o"&gt;)&lt;/span&gt; us-east-1
Bucket Versioning: Enable
Create folder: dev/devops-01
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Em seguida, crie uma tabela DynamoDB que é usada para bloqueio de estado:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Table Name: dev-devops-01
Partition key &lt;span class="o"&gt;(&lt;/span&gt;Primary Key&lt;span class="o"&gt;)&lt;/span&gt;: LockID &lt;span class="o"&gt;(&lt;/span&gt;Type as String&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Confira o código-fonte
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Aqui está o código fonte para conferir:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;sua-pasta/do/seu/pc
&lt;span class="nv"&gt;$ &lt;/span&gt;git clone https://github.com/efcunha/devops-labs.git
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;devops-labs/terraform-aws/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Porque você terá um domínio de teste diferente, então você precisará modificar algum código para se adequar ao seu ambiente:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# File t06-02-datasource-route53-zone.tf&lt;/span&gt;
  name   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"your-domain.com"&lt;/span&gt;

&lt;span class="c"&gt;# File t11-acm-certificatemanager.tf&lt;/span&gt;
  &lt;span class="k"&gt;*&lt;/span&gt;.your-domain.com&lt;span class="s2"&gt;" # change this!

# File t12-route53-dnsregistration.tf
  name    = "&lt;/span&gt;devops01.your-domain.com&lt;span class="s2"&gt;" # change this!

# File t13-05-autoscaling-notifications.tf
  endpoint  = "&lt;/span&gt;someone@domain.com&lt;span class="s2"&gt;" # change this! (to your email)

# File my-canary/nodejs/node_modules/my-canary.js
  const urls = ['https://devops01.your-domain.com']; // change this!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Depois de mudar meu canary.js, você precisa re-executar o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-canary
zip &lt;span class="nt"&gt;-r&lt;/span&gt; my-canaryv1.zip nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Em seguida, você precisa criar um par-chave chamado "terraform-key" em sua conta AWS (usado para fazer login na sua instância EC2 mais tarde):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;private-key/

&lt;span class="nv"&gt;$ &lt;/span&gt;ssh-keygen &lt;span class="nt"&gt;-f&lt;/span&gt; terraform-key

&lt;span class="c"&gt;# Go to EC2 -&amp;gt; Key pairs -&amp;gt; Import key pair&lt;/span&gt;
&lt;span class="c"&gt;# and follow the guide.&lt;/span&gt;
&lt;span class="c"&gt;# Remember the key pair's name is "terraform-key".&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Parabéns! Agora tudo deve estar guase pronto, mais logo vamos descobrir.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Executando comandos terraform
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agora é hora de executar oficialmente os comandos terraform para criar o seu ambiente!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;terraform init é o primeiro comando a ser executado a fim de preparar o diretório de trabalho atual. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ele instalará plugins e módulos infantis, inicializará o backend, copiará um módulo de origem, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É seguro executar este comando várias vezes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;terraform init

Terraform has been successfully initialized!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Terraform validate
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Verificará se uma configuração é sintáticamente válida e internamente consistente, independentemente de quaisquer variáveis fornecidas ou estado existente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;É seguro executar este comando automaticamente, por exemplo, como uma verificação pós-salvamento em um editor de texto ou como um passo de teste para um módulo reutilizável em um sistema DE CI.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;terraform validate
Success! The configuration is valid.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Terraform plan
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ele criará um plano de execução, que permite visualizar as mudanças que a Terraform planeja fazer à sua infraestrutura.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O comando do plano por si só não realizará as alterações propostas, então você pode usar este comando para verificar se as mudanças propostas correspondem ao que você esperava.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Terraform apply
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Executará as ações propostas em um plano Terraform.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No caso padrão, sem nenhum arquivo de plano salvo, a terraform aplica cria seu próprio plano de ação, da mesma forma que o "terraform plan" faria.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;terraform apply

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only &lt;span class="s1"&gt;'yes'&lt;/span&gt; will be accepted to approve.

Enter a value: &lt;span class="nb"&gt;yes

&lt;/span&gt;Apply &lt;span class="nb"&gt;complete&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; Resources: 98 added, 0 changed, 0 destroyed.
Outputs:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explorar e confirmar os recursos da AWS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Verifique seu e-mail para a assinatura do SNS&lt;/li&gt;
&lt;li&gt;Instâncias EC2 (1 bastion e 2 servidores web)&lt;/li&gt;
&lt;li&gt;Auto Scaling Groups (and Launch template)&lt;/li&gt;
&lt;li&gt;Load Balancers&lt;/li&gt;
&lt;li&gt;Target Groups (and Health checks)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CloudWatch&lt;br&gt;
ALB Alarm, ASG Alarm, CIS Alarms, Synthetics&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Acesse o domínio do serviço:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://devops01.your-domain.com/" rel="noopener noreferrer"&gt;https://devops01.your-domain.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devops01.your-domain.com/app1/" rel="noopener noreferrer"&gt;https://devops01.your-domain.com/app1/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devops01.your-domain.com/app1/metadata.html" rel="noopener noreferrer"&gt;https://devops01.your-domain.com/app1/metadata.html&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Baixe o arquivo de estado remoto, se necessário:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;terraform state pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Faça login na instância Bastion:
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; private-key/terraform-key.pem ec2-user@BastionHost-Public IPv4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Limpar Instalação
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Destruir todos os objetos remotos gerenciados por uma configuração do terraform.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;terraform destroy

Acquiring state lock. This may take a few moments...

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only &lt;span class="s1"&gt;'yes'&lt;/span&gt; will be accepted to confirm.

Enter a value: &lt;span class="nb"&gt;yes

&lt;/span&gt;Releasing state lock. This may take a few moments...
Destroy &lt;span class="nb"&gt;complete&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; Resources: 98 destroyed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Alguns recursos AWS que você tem que excluir manualmente:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;CloudWatch &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Log &lt;span class="nb"&gt;groups
&lt;/span&gt;CloudWatch &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Alarms
Lambda &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Functions
S3 bucket
DynamoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;e também os seguintes arquivos locais:&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Delete Files
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; .terraform&lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; terraform.tfstate&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Parabéns por completar o laboratório. &lt;/p&gt;

&lt;p&gt;Não é fácil entender do que se trata, mas passando por todos os passos você aprendeu muito.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Criar AWS EKS Fargate usando Terraform (EFS, HPA, Ingress, ALB, IRSA, Kubernetes, Helm)</title>
      <dc:creator>Edson Fernandes Cunha</dc:creator>
      <pubDate>Wed, 28 Sep 2022 23:06:28 +0000</pubDate>
      <link>https://dev.to/efcunha/criar-aws-eks-fargate-usando-terraform-efs-hpa-ingress-alb-irsa-kubernetes-helm-3m0h</link>
      <guid>https://dev.to/efcunha/criar-aws-eks-fargate-usando-terraform-efs-hpa-ingress-alb-irsa-kubernetes-helm-3m0h</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Neste projeto, abordaremos as seguintes seções:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criar S3 buckets para armazenar o estado do Terraform&lt;/li&gt;
&lt;li&gt;Criar AWS VPC usando o Terraform&lt;/li&gt;
&lt;li&gt;Criar AWS EKS Fargate usando o Terraform&lt;/li&gt;
&lt;li&gt;Atualize o CoreDNS para execução no AWS Fargate&lt;/li&gt;
&lt;li&gt;Implantar aplicativo no AWS Fargate&lt;/li&gt;
&lt;li&gt;Implantar o Metrics Server no AWS Fargate&lt;/li&gt;
&lt;li&gt;Escala automática com HPA com base na CPU e na memória&lt;/li&gt;
&lt;li&gt;Melhore a estabilidade com o orçamento de interrupção do pod&lt;/li&gt;
&lt;li&gt;Criar provedor IAM OIDC usando o Terraform&lt;/li&gt;
&lt;li&gt;Implantar o AWS Load Balancer Controller usando o Terraform&lt;/li&gt;
&lt;li&gt;Criar entrada simples&lt;/li&gt;
&lt;li&gt;Entrada segura com SSL/TLS&lt;/li&gt;
&lt;li&gt;Criar balanceador de carga de rede&lt;/li&gt;
&lt;li&gt;Integrar o Amazon EFS ao AWS Fargate&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Requisitos de criação do Ambiente
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Configurar DNS no Route53 ou seu provedor de DNS preferido&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Criar um certificado SSL/TLS para o domínio&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Exemplo: &lt;span class="k"&gt;*&lt;/span&gt;.exemplo.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Instalar EKS-Fargate
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
git clone https://github.com/efcunha/aws-eks-fargate-terraform.git

&lt;span class="nb"&gt;cd &lt;/span&gt;aws-eks-fargate-terraform/terraform-eks/env/

Escolha qual ambiente você deseja criar:

&lt;span class="s2"&gt;"dev"&lt;/span&gt; ou &lt;span class="s2"&gt;"prod"&lt;/span&gt;

terraform init
terraform &lt;span class="nb"&gt;fmt
&lt;/span&gt;terraform validate
terraform plan
terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Depois de provisionar o EKS com o terraform, você precisará atualizar o contexto do Kubernetes para acessar o cluster com o comando a seguir. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basta atualizar a região e o nome do cluster para corresponder ao seu.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws eks update-kubeconfig &lt;span class="nt"&gt;--name&lt;/span&gt; &amp;lt; dev / prod &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;O EKS foi desenvolvido para ser usado como um cluster Kubernetes regular. &lt;/li&gt;
&lt;li&gt;Ele espera que um pool de nós padrão execute componentes do sistema, como CoreDNS. &lt;/li&gt;
&lt;li&gt;Se você executar kubectl get pods -A, verá que os pods CoreDNS estão presos em um estado pendente. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;Antes de prosseguirmos, precisamos resolver esse problema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Você pode verificar se não tem nós usando este comando.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get nodes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Vamos dividir o terminal e, na primeira execução da janela, kubectl get events. &lt;/li&gt;
&lt;li&gt;É muito útil quando você precisa depurar problemas do Kubernetes.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get events &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Na segunda janela, basta executar get pods.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;watch &lt;span class="nt"&gt;-n&lt;/span&gt; 1 kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Instalando APP de teste
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use kubectl para aplicar a implantação.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; k8s/simple-deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Desta vez podemos aplicar a pasta inteira.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; k8s/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Para a demonstração, novamente, divida a tela. &lt;/li&gt;
&lt;li&gt;Na primeira janela, podemos executar get pods. No momento, temos uma única réplica.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;watch &lt;span class="nt"&gt;-n&lt;/span&gt; 1 &lt;span class="nt"&gt;-t&lt;/span&gt; kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;No segundo, você pode assistir ao autoescalador de pod horizontal. &lt;/li&gt;
&lt;li&gt;Leva alguns segundos para o autoescalador atualizar corretamente os destinos.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get hpa php-apache &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Vamos obter PDBs no namespace de teste.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pdb &lt;span class="nt"&gt;-n&lt;/span&gt; staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Verificar classe de entrada criada pelo controlador aws load balancer.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get ingressclass
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Para verificar a entrada, precisamos criar um registro CNAME em seu provedor de hospedagem DNS e apontar para o nome do host do balanceador de carga. &lt;/li&gt;
&lt;li&gt;Verifique se você pode resolver corretamente o DNS.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig +short php-apache.exemplo.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Por fim, vamos executar a ferramenta de geração de carga. &lt;/li&gt;
&lt;li&gt;Ele ativará um pod adicional e executará continuamente tarefas com uso intensivo de CPU no apache.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl run &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;--tty&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; staging load-generator &lt;span class="nt"&gt;--pod-running-timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5m0s &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox:1.28 &lt;span class="nt"&gt;--restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Never &lt;span class="nt"&gt;--&lt;/span&gt; /bin/sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"while sleep 0.01; do wget -q -O- http://php-apache; done"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Se não implantar o helm, você pode verificar o status da liberação do helm.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm list &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Além disso, verifique o status do pod. &lt;/li&gt;
&lt;li&gt;Caso o pod não possa ser agendado, ele pode falhar no terraform.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Você pode usar o comando list-open-id-connect-providers para descobrir se o provedor foi criado.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam list-open-id-connect-providers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
  </channel>
</rss>
