

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial: implante no Amazon EKS com CodePipeline
<a name="tutorials-eks-deploy"></a>

Este tutorial ajuda você a criar uma ação de implantação CodePipeline que implanta seu código em um cluster que você configurou no Amazon EKS.

A ação do EKS oferece suporte a clusters do EKS públicos e privados. Os clusters privados são do tipo recomendado pelo EKS. No entanto, ambos os tipos são compatíveis.

**nota**  
Como parte da criação de um pipeline no console, um bucket de artefatos S3 será usado CodePipeline por for artefacts. (Este bucket não é o mesmo utilizado para uma ação de origem do S3.) Se o bucket de artefatos do S3 estiver em uma conta diferente da conta do seu pipeline, certifique-se de que o bucket de artefatos do S3 Contas da AWS seja de propriedade de quem é seguro e confiável.

**nota**  
Essa ação usa CodeBuild computação CodePipeline gerenciada para executar comandos em um ambiente de compilação. A execução da ação Comandos incorrerá em cobranças separadas no AWS CodeBuild.

**nota**  
A ação de implantação `EKS` está disponível somente para pipelines do tipo V2.

## Pré-requisitos
<a name="tutorials-eks-deploy-prereqs"></a>

Para você usar este tutorial para criar seu pipeline de CD, alguns recursos precisam estar em operação. Veja aqui estão os itens que você precisa para começar:

**nota**  
Todos esses recursos devem ser criados na mesma AWS região.
+ Um repositório de controle de origem (este tutorial usa GitHub) onde você adicionará um `deployment.yaml` arquivo de amostra.
+ Você deve usar uma função CodePipeline de serviço existente que você atualizará com as permissões para essa ação usando [Etapa 3: atualizar a política CodePipeline de função de serviço no IAM](#tutorials-eks-deploy-role) abaixo. As permissões necessárias se baseiam no tipo de cluster que você criou. Para obter mais informações, consulte [Permissões de política de perfil de serviço](action-reference-EKS.md#action-reference-EKS-service-role).
+ Uma imagem de trabalho e uma tag de repositório que você enviou por push para o ECR ou o repositório de imagens.

Assim que você atender a esses pré-requisitos, poderá continuar com o tutorial e criar seu pipeline de CD.

## Etapa 1: (Opcional) Criar um cluster no Amazon EKS
<a name="tutorials-eks-deploy-cluster"></a>

Você pode optar por criar um cluster do EKS com um endpoint público ou privado. 

Nas etapas a seguir, você criará um cluster público ou privado no EKS. Esta etapa será opcional se você já tiver criado o cluster.

### Criar um cluster público no Amazon EKS
<a name="tutorials-eks-deploy-cluster-public"></a>

Nesta etapa, você cria um cluster no EKS.

**Criar um cluster público**

1. Abra o console do EKS e escolha **Criar cluster**.

1. Em **Nome**, nomeie o cluster. Escolha **Próximo**.

1. Escolha **Criar**.

### Criar um cluster privado no Amazon EKS
<a name="tutorials-eks-deploy-cluster-private"></a>

Se você optar por criar um cluster com um endpoint privado, não se esqueça de conectar apenas as sub-redes privadas e verificar se elas têm conexão com a Internet.

Siga as próximas cinco sub-etapas para criar um cluster com um endpoint privado.

**Criar uma VPC no console**

1. Abra o console da VPC e escolha **Criar VPC**.

1. Em **Configurações da VPC**, escolha **VPC e mais**.

1. Opte por criar uma sub-rede pública e 4 privadas. Escolha **Criar VPC**.

1. Na página de sub-redes, escolha **Privada**. 

**Determinar as sub-redes privadas na VPC**

1. Navegue até a VPC e escolha a ID da VPC para abrir a página de detalhes da VPC.

1. Na página Detalhes da VPC, escolha a guia **Mapa de recursos**.

1. Consulte o diagrama e anote as sub-redes privadas. As sub-redes são exibidas com rótulos para indicar o status público ou privado, e cada sub-rede é mapeada para uma tabela de rotas.  
![\[\]](http://docs.aws.amazon.com/pt_br/codepipeline/latest/userguide/images/eks-deploy-subnets.png)

   Um cluster privado terá todas as sub-redes privadas.

1. Crie uma sub-rede pública para hospedar o gateway NAT. Só é possível anexar um gateway da Internet a uma VPC de cada vez.

**Criar um gateway NAT em uma sub-rede pública**

1. Na sub-rede pública, crie um gateway NAT. Navegue até o console da VPC e escolha **Gateways da Internet**. Escolha **Criar gateway da Internet**.

1. Em Nome, digite um nome para o gateway da internet. Escolha **Criar gateway da Internet**.

Atualize a tabela de rotas da sub-rede privada a fim de direcionar o tráfego para o gateway NAT.

**Adicionar o gateway NAT às tabelas de rotas das sub-redes privadas**

1. Navegue até o console da VPC e escolha **Sub-redes**.

1. Para cada sub-rede privada, escolha-a e, em seguida, escolha a tabela de rotas dessa sub-rede na página de detalhes. Escolha **Editar tabela de rotas**. 

1. Atualize a tabela de rotas da sub-rede privada a fim de direcionar o tráfego de internet para o gateway NAT. Selecione **Adicionar rota**. Escolha o **Gateway NAT** dentre as opções a serem adicionadas. Escolha o gateway da internet criado por você.

1. Para a sub-rede pública, crie a tabela de rotas personalizada. Verifique se a lista de controle de acesso (ACL) da rede da sub-rede pública permite o tráfego de entrada vindo da sub-rede privada.

1. Escolha **Salvar alterações**.

Nesta etapa, você cria um cluster no EKS.

**Criar um cluster privado**

1. Abra o console do EKS e escolha **Criar cluster**.

1. Em **Nome**, nomeie o cluster. Escolha **Próximo**.

1. Especifique a VPC e as outras informações de configuração. Escolha **Criar**.

O cluster do EKS pode ser um cluster público ou privado. Esta etapa é para clusters que tenham APENAS um endpoint privado. Verifique se o cluster é privado.

## Etapa 2: Configurar o cluster privado no Amazon EKS
<a name="tutorials-eks-deploy-cluster-private-configure"></a>

Esta etapa será aplicável somente se você tiver criado um cluster privado. Esta etapa é para clusters que tenham APENAS um endpoint privado. 

**Configure seu cluster**

1. Só anexe sub-redes privadas no cluster do EKS na guia **Redes**. Anexe as sub-redes privadas capturadas na seção **Determinar as sub-redes privadas na VPC** em [Etapa 1: (Opcional) Criar um cluster no Amazon EKS](#tutorials-eks-deploy-cluster).

1. Certifique-se de que as sub-redes privadas tenham acesso à Internet, pois CodePipeline armazena e recupera artefatos do bucket de artefatos do S3 para seu pipeline.

## Etapa 3: atualizar a política CodePipeline de função de serviço no IAM
<a name="tutorials-eks-deploy-role"></a>

Nesta etapa, você atualizará uma função de CodePipeline serviço existente, por exemplo`cp-service-role`, com as permissões exigidas CodePipeline para se conectar ao seu cluster. Se você não tiver uma função existente, crie uma nova.

Atualize sua função CodePipeline de serviço com as etapas a seguir.

**Para atualizar sua política CodePipeline de função de serviço**

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)).

1. No painel do console, escolha **Roles (Funções)**.

1. Pesquise sua função CodePipeline de serviço, como`cp-service-role`.

1. Adicione uma nova política em linha.

1. No **Editor de políticas**, insira a opção a seguir.
   + Para um cluster público, adicione as permissões a seguir.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             }
         ]
     }
     ```

------
   + Para um cluster privado, adicione as permissões a seguir. Os clusters privados exigirão permissões adicionais para a VPC, se aplicável.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterfacePermission",
                 "Resource": "*",
                 "Condition": {
                     "ArnEquals": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:DeleteNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             }
         ]
     }
     ```

------

1. Escolha **Atualizar política**.

## Etapa 4: criar uma entrada de acesso para a função CodePipeline de serviço
<a name="tutorials-eks-deploy-access-entry"></a>

Nesta etapa, você cria uma entrada de acesso em seu cluster que adicionará a função de CodePipeline serviço que você atualizou na Etapa 3, junto com uma política de acesso gerenciado.

1. Abra o console do EKS e navegue até o cluster.

1. Escolha a guia **Acesso**.

1. Em **Entradas de acesso do IAM**, escolha **Criar entrada de acesso**.

1. No **ARN da entidade principal do IAM**, insira a função recém-atualizada por você para a ação, como `cp-service-role`. Escolha **Próximo**.

1. Na página **Etapa 2: Adicionar política de acesso**, em **Nome da política**, escolha a política gerenciada para acesso, como `AmazonEKSClusterAdminPolicy`. Escolha **Add policy**. Escolha **Próximo**.
**nota**  
Essa é a política que a CodePipeline ação usa para falar com o Kubernetes. Como prática recomendada, para diminuir o escopo das permissões na política com o privilégio mínimo em vez da política administrativa, anexe uma política personalizada.

1. Na página de revisão, escolha **Criar**.

## Etapa 5: Criar um repositório de origem e adicionar os arquivos de configuração `helm chart`
<a name="tutorials-eks-deploy-source"></a>

Nesta etapa, você cria um arquivo de configuração que seja indicado para a ação (arquivos de manifesto do Kubernetes ou chart do Helm) e armazena o arquivo de configuração no repositório de origem. Use o arquivo indicado para a configuração. Para obter mais informações, consulte [https://kubernetes. ](https://kubernetes.io/docs/reference/kubectl/quick-reference/)io/docs/reference/kubectl/quick[-reference/ ou https://helm. sh/docs/topics/charts](https://helm.sh/docs/topics/charts/)/.
+ Para Kubernetes, use um arquivo de manifesto.
+ Para Helm, use um chart do Helm.

1. Crie ou use um GitHub repositório existente.

1. Crie uma nova estrutura no repositório para os arquivos de chart do Helm, conforme mostrado no exemplo abaixo.

   ```
   mychart
   |-- Chart.yaml
   |-- charts
   |-- templates
   |   |-- NOTES.txt
   |   |-- _helpers.tpl
   |   |-- deployment.yaml
   |   |-- ingress.yaml
   |   `-- service.yaml
   `-- values.yaml
   ```

1. Adicione o arquivo ao nível raiz do repositório.

## Etapa 6: Criação do pipeline
<a name="tutorials-eks-deploy-pipeline"></a>

Use o CodePipeline assistente para criar seus estágios de funil e conectar seu repositório de origem.

**Para criar o pipeline**

1. Abra o CodePipeline console em [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. Na página **Welcome (Bem-vindo)**, **Getting started (Conceitos básicos)** ou **Pipelines**, selecione **Create pipeline (Criar pipeline)**.

1. Na página **Etapa 1: Escolher opção de criação**, em **Opções de criação**, selecione a opção **Criar pipeline personalizado**. Escolha **Próximo**.

1. Em **Etapa 2: Escolher as configurações do pipeline**, em **Nome do pipeline**, insira **MyEKSPipeline**.

1. CodePipeline fornece tubulações do tipo V1 e V2, que diferem em características e preço. O tipo V2 é o único tipo que você pode escolher no console. Para ter mais informações, consulte [Pipeline types](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel). Para obter informações sobre preços de CodePipeline, consulte [Preços](https://aws.amazon.com/codepipeline/pricing/).

1. Em **Perfil de serviço**, escolha o perfil de serviço atualizado por você na etapa 3.

1. Deixe as configurações em **Advanced settings (Configurações avançadas)** como padrão e escolha **Next (Próximo)**.

1. Na página **Etapa 3: Adicionar estágio de origem**, em **Provedor de origem**, escolha **criar uma conexão com seu GitHub repositório**.

1. Na página **Etapa 4: Adicionar etapa de compilação**, escolha **Ignorar**.

1. Na página **Etapa 5: Adicionar etapa de implantação**, escolha **Amazon EKS**.  
![\[Deploy configuration form with Helm selected, showing fields for release name and chart location.\]](http://docs.aws.amazon.com/pt_br/codepipeline/latest/userguide/images/eks-action-example.png)

   1. Em **Tipo de configuração da implantação**, escolha **Helm**.

   1. Em **Local de chart do Helm**, insira o nome da versão, como `my-release`. Para **Local de chart do Helm**, insira o caminho dos arquivos de chart do Helm, como `mychart`.

   1. Escolha **Próximo**.

1. Na página **Step 6: Review**, revise a configuração do pipeline e escolha **Create pipeline** para criá-lo.  
![\[\]](http://docs.aws.amazon.com/pt_br/codepipeline/latest/userguide/images/eks-deploy-pipeline.png)

1. Depois que o pipeline for executado com êxito, escolha **Visualizar detalhes** para exibir os logs na ação a fim de exibir a saída da ação.