

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Implantar um cluster `IPv6` do Amazon EKS e nós gerenciados do Amazon Linux
<a name="deploy-ipv6-cluster"></a>

Neste tutorial, você implanta uma Amazon VPC `IPv6`, um cluster do Amazon EKS com a família `IPv6` e um grupo de nós gerenciados com nós do Amazon Linux do Amazon EC2. Não é possível implantar nós do Windows para Amazon EC2 em um cluster do `IPv6`. Você também pode implantar nós do Fargate em seu cluster. Para simplificar, tais instruções não são fornecidas neste tópico.

## Pré-requisitos
<a name="_prerequisites"></a>

Antes de começar o tutorial, conclua as seguintes etapas:

Instale e configure as ferramentas e recursos a seguir, necessários para criar e gerenciar um cluster do Amazon EKS.
+ Recomendamos que você se familiarize com todas as configurações e implante um cluster com aquelas que atendam aos seus requisitos. Para obter mais informações, consulte [Criar um cluster do Amazon EKS](create-cluster.md), [Simplificar o ciclo de vida dos nós com grupos de nós gerenciados](managed-node-groups.md) e as [Considerações](cni-ipv6.md) sobre este tópico. Só é possível habilitar algumas configurações durante a criação do seu cluster.
+ A ferramenta da linha de comando `kubectl` está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser a mesma ou até uma versão secundária anterior ou posterior à versão do Kubernetes do seu cluster. Por exemplo, se a versão do cluster for a `1.29`, será possível usar o `kubectl` versão `1.28`, `1.29` ou `1.30` com ele. Para instalar ou atualizar o `kubectl`, consulte [Configurar o `kubectl` e o `eksctl`](install-kubectl.md).
+ A entidade principal de segurança do IAM que você está usando deve ter permissões para trabalhar com perfis do IAM do Amazon EKS, perfis vinculadas a serviços, AWS CloudFormation, um VPC e recursos relacionados. Para obter mais informações, consulte [Ações](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html) e [uso de perfis vinculadas a serviços](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) no Guia do Usuário do IAM.
+ Caso use o eksctl, instale a versão `0.215.0` ou mais recente no seu computador. Para instalá-la ou atualizá-la, consulte [Instalação](https://eksctl.io/installation) na documentação do `eksctl`.
+ Versão `2.12.3` ou posterior ou versão `1.27.160` ou posterior da AWS Command Line Interface (AWS CLI) instalada e configurada no seu dispositivo ou no AWS CloudShell. Para verificar sua versão atual, use `aws --version | cut -d / -f2 | cut -d ' ' -f1`. Os gerenciadores de pacotes, como `yum`, `apt-get` ou Homebrew para macOS, geralmente estão várias versões atrás da versão mais recente da AWS CLI. Para instalar a versão mais recente, consulte [Installing](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) e [Quick configuration with aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config), no *Guia do usuário da AWS Command Line Interface*. A versão da AWS CLI instalada no AWS CloudShell também pode estar várias versões atrás da versão mais recente. Para atualizá-lo, consulte [Instalar a AWS CLI no seu diretório pessoal](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software), no * Guia do usuário do AWS CloudShell*. Se você usar o AWS CloudShell, talvez seja necessário [instalar a versão 2.12.3 ou superior ou a versão 1.27.160 ou superior da AWS CLI](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software), pois a versão padrão da CLI do AWS instalada no AWS CloudShell pode ser uma versão anterior.

Você pode usar o eksctl ou a CLI para implantar um cluster do `IPv6`.

## Implantar um cluster do IPv6 com o eksctl
<a name="_deploy_an_ipv6_cluster_with_eksctl"></a>

1. Crie o arquivo `ipv6-cluster.yaml`. Copie o conteúdo a seguir no seu dispositivo. Faça as seguintes modificações no comando, conforme necessário, e execute o comando modificado:
   + Substitua *my-cluster* por um nome para seu cluster. O nome só pode conter caracteres alfanuméricos (sensíveis a maiúsculas e minúsculas) e hifens. Ele deve começar com um caractere alfanumérico e não pode ter mais de 100 caracteres. O nome deve ser exclusivo na região da AWS e na conta da AWS em que você está criando o cluster.
   + Substitua *region-code* por qualquer região AWS com suporte ao Amazon EKS. Para obter uma lista das regiões da AWS, consulte [Endpoints e cotas de serviço do Amazon EKS](https://docs.aws.amazon.com/general/latest/gr/eks.html) no guia Referência geral da AWS.
   + O valor para `version` com a versão do seu cluster. Para obter mais informações, consulte [versões compatíveis do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html).
   + Substitua *my-nodegroup* por um nome para o seu grupo de nós. O nome do grupo de nós não pode exceder 63 caracteres. Deve começar com uma letra ou um dígito, mas pode incluir hifens e sublinhados para os demais caracteres.
   + Substitua *t3.medium* por qualquer [tipo de instância do AWS Nitro System](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances).

     ```
     cat >ipv6-cluster.yaml <<EOF
     ---
     apiVersion: eksctl.io/v1alpha5
     kind: ClusterConfig
     
     metadata:
       name: my-cluster
       region: region-code
       version: "X.XX"
     
     kubernetesNetworkConfig:
       ipFamily: IPv6
     
     addons:
       - name: vpc-cni
         version: latest
       - name: coredns
         version: latest
       - name: kube-proxy
         version: latest
     
     iam:
       withOIDC: true
     
     managedNodeGroups:
       - name: my-nodegroup
         instanceType: t3.medium
     EOF
     ```

1. Crie o seu cluster.

   ```
   eksctl create cluster -f ipv6-cluster.yaml
   ```

   A criação do cluster leva muitos minutos. Não prossiga até ver a última linha de saída, que deve parecer com a seguinte.

   ```
   [...]
   [✓]  EKS cluster "my-cluster" in "region-code" region is ready
   ```

1. Verifique se os pods padrão estão atribuídos a endereços `IPv6`.

   ```
   kubectl get pods -n kube-system -o wide
   ```

   Veja abaixo um exemplo de saída.

   ```
   NAME                       READY   STATUS    RESTARTS   AGE     IP                                       NODE                                            NOMINATED NODE   READINESS GATES
   aws-node-rslts             1/1     Running   1          5m36s   2600:1f13:b66:8200:11a5:ade0:c590:6ac8   ip-192-168-34-75.region-code.compute.internal   <none>           <none>
   aws-node-t74jh             1/1     Running   0          5m32s   2600:1f13:b66:8203:4516:2080:8ced:1ca9   ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   coredns-85d5b4454c-cw7w2   1/1     Running   0          56m     2600:1f13:b66:8203:34e5::                ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   coredns-85d5b4454c-tx6n8   1/1     Running   0          56m     2600:1f13:b66:8203:34e5::1               ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   kube-proxy-btpbk           1/1     Running   0          5m36s   2600:1f13:b66:8200:11a5:ade0:c590:6ac8   ip-192-168-34-75.region-code.compute.internal   <none>           <none>
   kube-proxy-jjk2g           1/1     Running   0          5m33s   2600:1f13:b66:8203:4516:2080:8ced:1ca9   ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   ```

1. Confirme se os serviços padrão são atribuídos a endereços `IPv6`.

   ```
   kubectl get services -n kube-system -o wide
   ```

   Veja abaixo um exemplo de saída.

   ```
   NAME       TYPE        CLUSTER-IP          EXTERNAL-IP   PORT(S)         AGE   SELECTOR
   kube-dns   ClusterIP   fd30:3087:b6c2::a   <none>        53/UDP,53/TCP   57m   k8s-app=kube-dns
   ```

1. (Opcional) [Implante uma aplicação de amostra](sample-deployment.md) ou implante [AWS Load Balancer Controller](aws-load-balancer-controller.md) e uma aplicação de amostra para realizar o balanceamento de carga de aplicações HTTP com [Roteamento de aplicações e tráfego HTTP com Application Load Balancers](alb-ingress.md) ou de tráfego de rede com [Roteamento de tráfego TCP e UDP com Network Load Balancers](network-load-balancing.md) para pods `IPv6`.

1. Após a conclusão de criação do cluster e nós para este tutorial, você deverá limpar os recursos que criou com o comando a seguir.

   ```
   eksctl delete cluster my-cluster
   ```

## Implante um cluster IPv6 com AWS CLI
<a name="deploy_an_ipv6_cluster_with_shared_aws_cli"></a>

**Importante**  
Você deve concluir todas as etapas deste procedimento como o mesmo usuário. Execute o seguinte comando para verificar o usuário atual:  

  ```
  aws sts get-caller-identity
  ```
Você deve concluir todas as etapas deste procedimento no mesmo shell. Várias etapas usam variáveis definidas em etapas anteriores. As etapas que usam variáveis não funcionarão corretamente se os valores das variáveis forem definidos em um shell diferente. Se você usar o [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html) para concluir o procedimento a seguir, lembre-se de que, se não interagir com ele usando o teclado ou o ponteiro por aproximadamente 20 a 30 minutos, a sessão do shell será encerrada. Os processos em execução não contam como interações.
As instruções são redigidas para o shell bash e podem precisar de ajustes em outros shells.

Substitua todos os valores de exemplo nas etapas deste procedimento pelos seus próprios valores.

1. Execute os comandos a seguir para definir algumas variáveis usadas em etapas posteriores. Substitua *region-code* pela região da AWS na qual você deseja implementar seus recursos. O valor pode ser qualquer região da AWS compatível com o Amazon EKS. Para obter uma lista das regiões da AWS, consulte [Endpoints e cotas de serviço do Amazon EKS](https://docs.aws.amazon.com/general/latest/gr/eks.html) no guia Referência geral da AWS. Substitua *my-cluster* por um nome para seu cluster. O nome só pode conter caracteres alfanuméricos (sensíveis a maiúsculas e minúsculas) e hifens. Ele deve começar com um caractere alfanumérico e não pode ter mais de 100 caracteres. O nome deve ser exclusivo na região da AWS e na conta da AWS em que você está criando o cluster. Substitua *my-nodegroup* por um nome para o seu grupo de nós. O nome do grupo de nós não pode exceder 63 caracteres. Deve começar com uma letra ou um dígito, mas pode incluir hifens e sublinhados para os demais caracteres. Substitua *111122223333* pelo ID da sua conta.

   ```
   export region_code=region-code
   export cluster_name=my-cluster
   export nodegroup_name=my-nodegroup
   export account_id=111122223333
   ```

1. Crie uma Amazon VPC com sub-redes públicas e privadas que atenda aos requisitos do Amazon EKS e `IPv6`.

   1. Execute o seguinte comando para definir uma variável para o nome da pilha do AWS CloudFormation. É possível substituir *my-eks-ipv6-vpc* por qualquer nome de sua preferência.

      ```
      export vpc_stack_name=my-eks-ipv6-vpc
      ```

   1. Crie um VPC `IPv6` usando um modelo AWS CloudFormation.

      ```
      aws cloudformation create-stack --region $region_code --stack-name $vpc_stack_name \
        --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-ipv6-vpc-public-private-subnets.yaml
      ```

      A pilha leva alguns minutos para ser criada. Execute o comando a seguir. Não prossiga para a próxima etapa até que a saída do comando seja `CREATE_COMPLETE`.

      ```
      aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name --query Stacks[].StackStatus --output text
      ```

   1. Recupere os IDs das sub-redes públicas que foram criadas.

      ```
      aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \
          --query='Stacks[].Outputs[?OutputKey==`SubnetsPublic`].OutputValue' --output text
      ```

      Veja um exemplo de saída abaixo.

      ```
      subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE
      ```

   1. Habilite a opção de atribuição automática de endereços `IPv6` para as sub-redes públicas que foram criadas.

      ```
      aws ec2 modify-subnet-attribute --region $region_code --subnet-id subnet-0a1a56c486EXAMPLE --assign-ipv6-address-on-creation
      aws ec2 modify-subnet-attribute --region $region_code --subnet-id subnet-099e6ca77aEXAMPLE --assign-ipv6-address-on-creation
      ```

   1. Recupere os nomes das sub-redes e grupos de segurança criados pelo modelo na pilha implantada do AWS CloudFormation e armazene-os em variáveis para usar em uma etapa posterior.

      ```
      security_groups=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \
          --query='Stacks[].Outputs[?OutputKey==`SecurityGroups`].OutputValue' --output text)
      
      public_subnets=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \
          --query='Stacks[].Outputs[?OutputKey==`SubnetsPublic`].OutputValue' --output text)
      
      private_subnets=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \
          --query='Stacks[].Outputs[?OutputKey==`SubnetsPrivate`].OutputValue' --output text)
      
      subnets=${public_subnets},${private_subnets}
      ```

1. Crie um perfil do IAM de cluster e associe a política gerenciada do Amazon EKS IAM a ele. Os clusters do Kubernetes gerenciados pelo Amazon EKS fazem chamadas a outros serviços da AWS em seu nome para gerenciar os recursos que você usa com o serviço.

   1. Execute o seguinte comando para criar o arquivo `eks-cluster-role-trust-policy.json`.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "eks.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. Execute o seguinte comando para definir uma variável para o nome da sua função. É possível substituir *myAmazonEKSClusterRole* por qualquer nome de sua preferência.

      ```
      export cluster_role_name=myAmazonEKSClusterRole
      ```

   1. Crie a função.

      ```
      aws iam create-role --role-name $cluster_role_name --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
      ```

   1. Recupere o ARN da função do IAM e o armazene em uma variável para uma etapa posterior.

      ```
      CLUSTER_IAM_ROLE=$(aws iam get-role --role-name $cluster_role_name --query="Role.Arn" --output text)
      ```

   1. Anexe a política do IAM gerenciada pelo Amazon EKS ao perfil.

      ```
      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name $cluster_role_name
      ```

1. Crie o seu cluster.

   ```
   aws eks create-cluster --region $region_code --name $cluster_name --kubernetes-version 1.XX \
      --role-arn $CLUSTER_IAM_ROLE --resources-vpc-config subnetIds=$subnets,securityGroupIds=$security_groups \
      --kubernetes-network-config ipFamily=ipv6
   ```

   1. OBSERVAÇÃO: talvez você receba um erro porque uma das zonas de disponibilidade em sua solicitação não tem capacidade suficiente para criar um cluster do Amazon EKS. Se isso acontecer, o resultado do erro conterá as zonas de disponibilidade que são compatíveis com o novo cluster. Tente criar o cluster com pelo menos duas sub-redes que estejam localizadas nas zonas de disponibilidade compatíveis de sua conta. Para obter mais informações, consulte [Capacidade insuficiente](troubleshooting.md#ice).

      A criação do cluster domora alguns minutos. Execute o comando a seguir. Não prossiga para a próxima etapa até que a saída do comando esteja `ACTIVE`.

      ```
      aws eks describe-cluster --region $region_code --name $cluster_name --query cluster.status
      ```

1. Crie ou atualize um arquivo `kubeconfig` para o seu cluster para que você possa se comunicar com ele.

   ```
   aws eks update-kubeconfig --region $region_code --name $cluster_name
   ```

   Por padrão, um arquivo `~/.kube` é criado em `config` ou o novo cluster é adicionado a um arquivo `config` existente no `~/.kube`.

1. Crie um perfil do IAM para o nó.

   1. Execute o seguinte comando para criar o arquivo `vpc-cni-ipv6-policy.json`.

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ec2:AssignIpv6Addresses",
                      "ec2:DescribeInstances",
                      "ec2:DescribeTags",
                      "ec2:DescribeNetworkInterfaces",
                      "ec2:DescribeInstanceTypes"
                  ],
                  "Resource": "*"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateTags"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:network-interface/*"
                  ]
              }
          ]
      }
      ```

   1. Crie a política do IAM.

      ```
      aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
      ```

   1. Execute o seguinte comando para criar o arquivo `node-role-trust-relationship.json`.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. Execute o seguinte comando para definir uma variável para o nome da sua função. É possível substituir *AmazonEKSNodeRole* por qualquer nome de sua preferência.

      ```
      export node_role_name=AmazonEKSNodeRole
      ```

   1. Crie o perfil do IAM.

      ```
      aws iam create-role --role-name $node_role_name --assume-role-policy-document file://"node-role-trust-relationship.json"
      ```

   1. Anexe a política do IAM à função do IAM.

      ```
      aws iam attach-role-policy --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy \
          --role-name $node_role_name
      ```
**Importante**  
Para simplificar este tutorial, a política é anexada a esta função do IAM. No entanto, em um cluster do produção, recomendamos que você anexe a política a uma função do IAM separada. Para obter mais informações, consulte [Configurar o plug-in CNI da Amazon VPC para usar IRSA](cni-iam-role.md).

   1. Anexe duas políticas do IAM gerenciadas necessárias à função do IAM.

      ```
      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \
        --role-name $node_role_name
      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \
        --role-name $node_role_name
      ```

   1. Recupere o ARN da função do IAM e o armazene em uma variável para uma etapa posterior.

      ```
      node_iam_role=$(aws iam get-role --role-name $node_role_name --query="Role.Arn" --output text)
      ```

1. Crie um grupo de nós gerenciado.

   1. Exiba os IDs das sub-redes que você criou em uma etapa anterior.

      ```
      echo $subnets
      ```

      Veja um exemplo de saída abaixo.

      ```
      subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE,subnet-0377963d69EXAMPLE,subnet-0c05f819d5EXAMPLE
      ```

   1. Crie o grupo de nós. Substitua *0a1a56c486EXAMPLE*, *099e6ca77aEXAMPLE*, *0377963d69EXAMPLE* e *0c05f819d5EXAMPLE* pelos valores retornados na saída da etapa anterior. Certifique-se de remover as vírgulas entre IDs de sub-redes da saída anterior no comando a seguir. Você pode substituir *t3.medium* por qualquer [tipo de instância do AWS Nitro System](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances).

      ```
      aws eks create-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \
          --subnets subnet-0a1a56c486EXAMPLE subnet-099e6ca77aEXAMPLE subnet-0377963d69EXAMPLE subnet-0c05f819d5EXAMPLE \
          --instance-types t3.medium --node-role $node_iam_role
      ```

      A criação do grupo de nós demora alguns minutos. Execute o comando a seguir. Não prossiga para a próxima etapa até que a saída recebida esteja `ACTIVE`.

      ```
      aws eks describe-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \
          --query nodegroup.status --output text
      ```

1. Verifique se os pods padrão estão atribuídos a endereços `IPv6` na coluna `IP`.

   ```
   kubectl get pods -n kube-system -o wide
   ```

   Veja abaixo um exemplo de saída.

   ```
   NAME                       READY   STATUS    RESTARTS   AGE     IP                                       NODE                                            NOMINATED NODE   READINESS GATES
   aws-node-rslts             1/1     Running   1          5m36s   2600:1f13:b66:8200:11a5:ade0:c590:6ac8   ip-192-168-34-75.region-code.compute.internal   <none>           <none>
   aws-node-t74jh             1/1     Running   0          5m32s   2600:1f13:b66:8203:4516:2080:8ced:1ca9   ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   coredns-85d5b4454c-cw7w2   1/1     Running   0          56m     2600:1f13:b66:8203:34e5::                ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   coredns-85d5b4454c-tx6n8   1/1     Running   0          56m     2600:1f13:b66:8203:34e5::1               ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   kube-proxy-btpbk           1/1     Running   0          5m36s   2600:1f13:b66:8200:11a5:ade0:c590:6ac8   ip-192-168-34-75.region-code.compute.internal   <none>           <none>
   kube-proxy-jjk2g           1/1     Running   0          5m33s   2600:1f13:b66:8203:4516:2080:8ced:1ca9   ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   ```

1. Confirme se os serviços padrão são atribuídos a endereços `IPv6` na coluna `IP`.

   ```
   kubectl get services -n kube-system -o wide
   ```

   Veja abaixo um exemplo de saída.

   ```
   NAME       TYPE        CLUSTER-IP          EXTERNAL-IP   PORT(S)         AGE   SELECTOR
   kube-dns   ClusterIP   fd30:3087:b6c2::a   <none>        53/UDP,53/TCP   57m   k8s-app=kube-dns
   ```

1. (Opcional) [Implante uma aplicação de exemplo](sample-deployment.md) ou o [AWS Load Balancer Controller](aws-load-balancer-controller.md) e uma aplicação de exemplo para balancear a carga de aplicações de HTTP com o [Roteamento de aplicações e tráfego HTTP com Application Load Balancers](alb-ingress.md) ou o tráfego de rede com o [Roteamento de tráfego TCP e UDP com Network Load Balancers](network-load-balancing.md) para pods do `IPv6`.

1. Após a conclusão de criação do cluster e nós para este tutorial, você deverá limpar os recursos que criou com os comandos a seguir. Certifique-se de que você não esteja usando nenhum dos recursos fora deste tutorial antes de excluí-los.

   1. Se você estiver concluindo esta etapa em um shell diferente daquele em que concluiu as etapas anteriores, defina os valores de todas as variáveis usadas nas etapas anteriores, substituindo os valores de exemplo pelos valores especificados ao concluir as etapas anteriores. Se você estiver concluindo esta etapa no mesmo shell em que concluiu as etapas anteriores, pule para a próxima etapa.

      ```
      export region_code=region-code
      export vpc_stack_name=my-eks-ipv6-vpc
      export cluster_name=my-cluster
      export nodegroup_name=my-nodegroup
      export account_id=111122223333
      export node_role_name=AmazonEKSNodeRole
      export cluster_role_name=myAmazonEKSClusterRole
      ```

   1. Exclua o seu grupo de nós.

      ```
      aws eks delete-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name
      ```

      A exclusão demora alguns minutos. Execute o comando a seguir. Não prossiga para a próxima etapa se receber alguma saída.

      ```
      aws eks list-nodegroups --region $region_code --cluster-name $cluster_name --query nodegroups --output text
      ```

   1. Excluir o cluster.

      ```
      aws eks delete-cluster --region $region_code --name $cluster_name
      ```

      Demora alguns minutos até que o cluster seja excluído. Antes de continuar, verifique se o cluster foi excluído com o seguinte comando.

      ```
      aws eks describe-cluster --region $region_code --name $cluster_name
      ```

      Não prossiga para a próxima etapa até que a saída seja semelhante à seguinte saída.

      ```
      An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: my-cluster.
      ```

   1. Exclua os recursos do IAM que você criou. Substitua *AmazonEKS\$1CNI\$1IPv6\$1Policy* pelo nome que você escolheu, se o mesmo for diferente do que foi usado nas etapas anteriores.

      ```
      aws iam detach-role-policy --role-name $cluster_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
      aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
      aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
      aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy
      aws iam delete-policy --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy
      aws iam delete-role --role-name $cluster_role_name
      aws iam delete-role --role-name $node_role_name
      ```

   1. Exclua a pilha do AWS CloudFormation que criou a VPC.

      ```
      aws cloudformation delete-stack --region $region_code --stack-name $vpc_stack_name
      ```