

 **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.

# Funcionalidades do EKS
<a name="capabilities"></a>

**dica**  
Conceitos básicos: [Criação de funcionalidades do ACK](create-ack-capability.md) \$1 [Criação de funcionalidades do Argo CD](create-argocd-capability.md) \$1 [Criação de funcionalidades do kro](create-kro-capability.md) 

As funcionalidades do Amazon EKS são um conjunto, em camadas. de recursos de cluster totalmente gerenciados que auxiliam a aumentar a produtividade dos desenvolvedores e a reduzir a complexidade de desenvolvimento e de escalabilidade com o Kubernetes. As funcionalidades do EKS são recursos nativos do Kubernetes para implantação contínua declarativa, gerenciamento de recursos da AWS e criação e orquestração de recursos do Kubernetes, tudo totalmente gerenciado pela AWS. Com as funcionalidades do EKS, é possível concentrar-se mais na criação e na escalabilidade das workloads, transferindo a carga operacional desses serviços fundamentais de plataforma para a AWS. Essas funcionalidades são executadas no próprio EKS, e não em seus clusters, dispensando a instalação, a manutenção e a escalabilidade de componentes essenciais de plataforma nos nós de processamento.

Para começar a usar, você pode criar uma ou mais funcionalidades do EKS em um cluster do EKS novo ou já existente. Para realizar essa ação, é possível usar a AWS CLI, o Console de gerenciamento da AWS, as APIs do EKS, o eksctl ou suas ferramentas preferidas de infraestrutura como código. Apesar das funcionalidades do EKS serem desenvolvidas para operar em conjunto, elas são recursos de nuvem independentes, permitindo que você realize a escolha de acordo com as necessidades e o caso de uso da sua aplicação.

Todas as versões do Kubernetes com suporte por parte do EKS são compatíveis com as funcionalidades do EKS.

**nota**  
As funcionalidades do EKS estão disponíveis para uso em todas as regiões comerciais da AWS nas quais o Amazon EKS está disponível. Para obter uma lista das regiões com suporte, consulte [Endpoints e cotas do Amazon EKS](https://docs.aws.amazon.com/general/latest/gr/eks.html) na Referência geral da AWS.

## Capacidades disponíveis
<a name="_available_capabilities"></a>

### AWS Controlllers for Kubernetes (ACK)
<a name="shared_aws_controllers_for_kubernetes_ack"></a>

O ACK viabiliza o gerenciamento de recursos da AWS por meio de APIs do Kubernetes, permitindo a criação e o gerenciamento de buckets do S3, bancos de dados do RDS, perfis do IAM e outros recursos da AWS utilizando recursos personalizados do Kubernetes. O ACK faz a reconciliação contínua entre o estado desejado e o estado atual na AWS, corrigindo qualquer desvio ao longo do tempo para manter a integridade do sistema e dos recursos configurados conforme especificado. É possível gerenciar recursos da AWS juntamente com as workloads do Kubernetes usando as mesmas ferramentas e fluxos de trabalho, com suporte para mais de 50 serviços da AWS, incluindo o S3, o RDS, o DynamoDB e o Lambda. O ACK fornece suporte para o gerenciamento de recursos entre contas e entre regiões, permitindo arquiteturas complexas de gerenciamento de sistemas com várias contas e vários clusters. O ACK é compatível com recursos somente leitura e a adoção somente leitura, facilitando a migração de outras ferramentas de infraestrutura como código para os sistemas baseados em Kubernetes.

 [Saiba mais sobre o ACK →](ack.md) 

### Argo CD
<a name="_argo_cd"></a>

O Argo CD aplica o modelo de implantação contínua baseada em GitOps para as aplicações, utilizando repositórios do Git como a fonte da verdade para as workloads e para o estado do sistema. O Argo CD faz a sincronização automática de recursos de aplicações para os clusters com base em repositórios do Git, identificando e corrigindo desvios para assegurar que as aplicações implantadas estejam alinhadas ao estado desejado. É possível implantar e gerenciar aplicações em vários clusters de uma única instância do Argo CD, com a implantação automatizada de repositórios do Git sempre que alterações forem confirmadas. O uso conjunto do Argo CD e do ACK fornece um sistema de GitOps fundamental, simplificando o gerenciamento de dependências das workloads, além de fornecer suporte a projetos de sistemas completos, incluindo o gerenciamento de clusters e de infraestrutura em grande escala. O Argo CD se integra ao Centro de Identidade da AWS para autenticação e autorização, e fornece uma interface do usuário do Argo hospedada para a visualização da integridade das aplicações e do status de implantação.

 [Saiba mais sobre o Argo CD →](argocd.md) 

### kro (Kube Resource Orchestrator)
<a name="_kro_kube_resource_orchestrator"></a>

O kro possibilita a criação de APIs personalizadas do Kubernetes que compõem vários recursos em abstrações de nível superior, permitindo que as equipes responsáveis pela plataforma definam padrões reutilizáveis para combinações comuns de recursos, os blocos de criação da nuvem. Com o kro, você pode compor recursos do Kubernetes e da AWS em abstrações unificadas, usando uma sintaxe simplificada que viabiliza configurações dinâmicas e o uso de lógica condicional. O kro permite que as equipes responsáveis pela plataforma disponibilizem funcionalidades de autoatendimento com as devidas barreiras de proteção, possibilitando que os desenvolvedores provisionem infraestruturas complexas por meio de APIs simples e especializadas, enquanto preservam os padrões e as práticas recomendadas da organização. Os recursos do kro nada mais são do que recursos do Kubernetes, definidos em manifestos do Kubernetes, que podem ser armazenados no Git ou enviados para registros compatíveis com OCI, como o Amazon ECR, para facilitar a distribuição por toda a organização.

 [Saiba mais sobre o kro →](kro.md) 

## Benefícios das funcionalidades do EKS
<a name="_benefits_of_eks_capabilities"></a>

As funcionalidades do EKS são totalmente gerenciadas pela AWS, o que dispensa a instalação, a manutenção e a escalabilidade de serviços essenciais do cluster. A AWS lida com a aplicação de patches de segurança, atualizações e gerenciamento operacional, permitindo que as equipes concentrem esforços no desenvolvimento na AWS e não nas operações de cluster. Ao contrário dos complementos convencionais do Kubernetes que consomem recursos do cluster, as funcionalidades são executadas no EKS, e não em nós de processamento. Essa abordagem libera capacidade e recursos do cluster para as workloads, enquanto minimiza a carga operacional necessária para o gerenciamento de controladores internos do cluster e de outros componentes de plataforma.

Com as funcionalidades do EKS, é possível gerenciar implantações, recursos da AWS, recursos personalizados do Kubernetes e composições usando APIs nativas do Kubernetes e ferramentas como o `kubectl`. Todas as funcionalidades funcionam no contexto dos clusters, identificando e corrigindo automaticamente desvios de configuração em recursos de aplicações e de infraestrutura de nuvem. Você pode implantar e gerenciar recursos em vários clusters, contas da AWS e regiões usando um único ponto de controle, simplificando as operações em ambientes distribuídos de alta complexidade.

As funcionalidades do EKS são projetadas para fluxos de trabalho de GitOps, o que fornece um gerenciamento declarativo e com versionamento de aplicações e de infraestrutura. As alterações seguem do Git para todo o sistema, fornecendo trilhas de auditoria, funcionalidades de reversão e fluxos de trabalho colaborativos que se integram às práticas de desenvolvimento existentes. Esta abordagem nativa do Kubernetes dispensa o uso de diversas ferramentas ou o gerenciamento de sistemas de infraestrutura como código externos aos clusters, garantindo a existência de uma única fonte de verdade como referência. O estado desejado, definido em configurações declarativas do Kubernetes com versionamento, é continuamente aplicado em todo o seu ambiente.

## Preços
<a name="_pricing"></a>

Com as funcionalidades do EKS, não há compromissos antecipados nem taxas mínimas. A cobrança é feita por recurso da funcionalidade e se baseia em cada hora de atividade do recurso no cluster do Amazon EKS. Os recursos específicos do Kubernetes, gerenciados pelas funcionalidades do EKS, também são faturados a uma taxa horária.

Para obter informações atualizadas sobre preços, consulte a [página de preços do Amazon EKS](https://aws.amazon.com/eks/pricing/).

**dica**  
É possível empregar o Explorador de Custos da AWS e os Relatórios de Custos e Uso para monitorar os custos das funcionalidades de forma isolada de outros custos do EKS. Você pode marcar as funcionalidades com o nome do cluster, tipo de funcionalidade e outros detalhes para fins de alocação de custos.

## Funcionamento das funcionalidades do EKS
<a name="_how_eks_capabilities_work"></a>

Cada funcionalidade constitui um recurso da AWS criado no cluster do EKS. Após a criação, a funcionalidade é executada no EKS e é totalmente gerenciada pela AWS.

**nota**  
É possível criar apenas um recurso da funcionalidade de cada tipo, nomeadamente, Argo CD, ACK e kro, por cluster. Não é possível criar mais de um recurso da funcionalidade do mesmo tipo em um único cluster.

A interação com as funcionalidades do cluster é feita por meio de APIs e ferramentas nativas do Kubernetes:
+ Use o `kubectl` para aplicar recursos personalizados do Kubernetes
+ Use os repositórios do Git como a fonte da verdade para fluxos de trabalho de GitOps

Algumas funcionalidades oferecem suporte a ferramentas adicionais. Por exemplo:
+ Use a CLI do Argo CD para configurar e gerenciar repositórios e clusters na funcionalidade do Argo CD
+ Use a interface do usuário do Argo CD para visualizar e gerenciar aplicações controladas pela funcionalidade do Argo CD

Embora concebidas para operar de forma integrada, as funcionalidades são independentes, e você escolhe quais deseja ativar. Você pode habilitar uma, duas ou todas as três funcionalidades, de acordo com a sua demanda, ajustando a configuração à medida que suas necessidades mudarem.

Todos os tipos de computação do EKS são compatíveis com o uso das funcionalidades do EKS. Para obter mais informações, consulte [Gerenciar recursos computacionais usando nós](eks-compute.md).

Para obter configurações de segurança e detalhes sobre os perfis do IAM, consulte [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md). Para obter padrões de arquitetura de vários clusters, consulte [Considerações sobre as funcionalidades do EKS](capabilities-considerations.md).

## Casos de uso comuns
<a name="_common_use_cases"></a>

 **GitOps aplicado a aplicações e infraestrutura** 

Use o Argo CD na implantação de aplicações e de componentes operacionais, e o ACK para o gerenciamento de configurações de cluster e para o provisionamento de infraestrutura, empregando repositórios do Git como fonte para ambos. Toda a sua pilha, que é composta por aplicações, bancos de dados, armazenamento e rede, é definida como código e implantada automaticamente.

Exemplo: uma equipe de desenvolvimento envia alterações para o Git. O Argo CD realiza a implantação da aplicação atualizada, enquanto o ACK provisiona um novo banco de dados do RDS com a configuração adequada. Todas as alterações são passíveis de auditoria e de reversão, e mantêm a consistência em diferentes ambientes.

 **Engenharia de plataforma com autoatendimento** 

Use o kro para criar APIs personalizadas que compõem recursos do ACK e do Kubernetes. As equipes responsáveis pela plataforma definem padrões aprovados com barreiras de proteção. As equipes responsáveis pela aplicação usam APIs simplificadas de alto nível para realizar o provisionamento de pilhas inteiras.

Exemplo: uma equipe responsável pela plataforma cria uma API de “WebApplication” para provisionar automaticamente os recursos Deployment, Service e Ingress, e um bucket do S3. Os desenvolvedores usam essa API sem a necessidade de compreender a complexidade subjacente ou as permissões da AWS.

 **Gerenciamento de aplicações em vários clusters** 

Use o Argo CD para implantar aplicações em vários clusters do EKS distribuídos em diferentes regiões ou contas. Gerencie todas as implantações com uma única instância do Argo CD, empregando políticas e fluxos de trabalho consistentes.

Exemplo: implante a mesma aplicação em clusters de desenvolvimento, preparação e produção distribuídos por diversas regiões. O Argo CD assegura a sincronização de cada ambiente com a ramificação correspondente no Git.

 **Gerenciamento de vários clusters** 

Use o ACK para definir e provisionar clusters do EKS, o kro para personalizar as configurações dos clusters de acordo com os padrões organizacionais, e o Argo CD para gerenciar o ciclo de vida e a configuração do cluster. Essa abordagem garante o gerenciamento integral do cluster, abrangendo desde o provisionamento inicial até a operação cotidiana.

Exemplo: defina clusters do EKS usando o ACK e o kro para provisionar e gerenciar a infraestrutura de clusters, definindo padrões organizacionais para rede, políticas de segurança, complementos e outras configurações. Empregue o Argo CD para a criação e para o gerenciamento contínuo de clusters, configurações e atualizações de versões do Kubernetes em toda a frota, fazendo uso de padrões consistentes e do gerenciamento de ciclo de vida automatizado.

 **Migrações e modernização** 

Simplifique a migração para o EKS com o provisionamento de recursos de nuvem nativos e fluxos de trabalho de GitOps. Use o ACK para adotar recursos existentes da AWS sem a necessidade de recriá-los, e o Argo CD para operacionalizar as implantações de workloads a partir do Git.

Exemplo: uma equipe em processo de migração do EC2 para o EKS integra bancos de dados do RDS e buckets do S3 utilizando o ACK, e usa o Argo CD para realizar a implantação de aplicações conteinerizadas do Git. O caminho de migração é bem definido e os processos operacionais são padronizados desde o início.

 **Inicialização de contas e de regiões** 

Automatize a implementação da infraestrutura entre contas e regiões usando o Argo CD e o ACK de forma integrada. Defina a infraestrutura como código no Git e permita que as funcionalidades gerenciem a implantação e o gerenciamento.

Exemplo: uma equipe responsável pela plataforma mantém repositórios do Git que definem configurações padrão de conta, incluindo VPCs, perfis do IAM, instâncias do RDS e pilhas de monitoramento. O Argo CD implanta essas configurações em novas contas e regiões automaticamente, garantindo a consistência e reduzindo o tempo de configuração manual de dias para minutos.

# Como trabalhar com recursos de funcionalidade
<a name="working-with-capabilities"></a>

Este tópico descreve operações comuns para o gerenciamento de recursos de funcionalidade em todos os tipos de funcionalidades.

## Recursos de funcionalidade do EKS
<a name="_eks_capability_resources"></a>

As funcionalidades do EKS são recursos da AWS que permitem funcionalidades gerenciadas no cluster do Amazon EKS. As funcionalidades são executadas no EKS, eliminando a necessidade de instalar e manter controladores e outros componentes operacionais em seus nós de processamento. As funcionalidades são criadas para um cluster específico do EKS e permanecem vinculadas a esse cluster durante todo o ciclo de vida.

Cada recurso de funcionalidade conta com:
+ Um nome exclusivo em seu cluster
+ Um tipo de funcionalidade (ACK, ARGOCD ou KRO)
+ Um nome do recurso da Amazon (ARN), especificando o nome e o tipo
+ Um perfil do IAM da funcionalidade
+ Um status que indica seu estado atual
+ Configuração, tanto genérica quanto específica ao tipo de funcionalidade

## Noções básicas sobre o status da funcionalidade
<a name="_understanding_capability_status"></a>

Os recursos de funcionalidade contam com um status que indica o estado atual. É possível visualizar o status e a integridade da funcionalidade no console do EKS ou usando a AWS CLI.

 **Console do**:

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do seu cluster.

1. Escolha a guia **Funcionalidades** para visualizar o status de todas as funcionalidades.

1. Para obter informações detalhadas sobre a integridade, escolha a guia **Observabilidade**, depois **Monitorar cluster** e, em seguida, a guia **Funcionalidades**.

 ** AWS CLI**:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-capability-name
```

### Status da funcionalidade
<a name="_capability_statuses"></a>

 **CREATING**: a funcionalidade está sendo configurada. É possível sair do console e a funcionalidade continuará sendo criada em segundo plano.

 **ACTIVE**: a funcionalidade está em execução e pronta para uso. Se os recursos não estiverem funcionando conforme esperado, verifique o status do recurso e as permissões de IAM. Para obter orientações, consulte [Solução de problemas das funcionalidades do EKS](capabilities-troubleshooting.md).

 **UPDATING**: as alterações de configuração estão sendo aplicadas. Aguarde até que o status retorne para `ACTIVE`.

 **DELETING**: a funcionalidade está sendo removida do cluster.

 **CREATE\$1FAILED**: a configuração encontrou um erro. As causas comuns incluem:
+ Política de confiança do perfil do IAM incorreta ou ausente
+ O perfil do IAM não existe ou não está acessível
+ Problemas de acesso ao cluster
+ Parâmetros de configuração inválidos

Verifique a seção de integridade da funcionalidade para obter detalhes específicos do erro.

 **UPDATE\$1FAILED**: a atualização da configuração falhou. Verifique a seção de integridade da funcionalidade para obter detalhes e valide as permissões do IAM.

**dica**  
Para obter orientações detalhadas sobre solução de problemas, consulte:  
 [Solução de problemas das funcionalidades do EKS](capabilities-troubleshooting.md): soluções de problemas gerais para problemas de funcionalidades
 [Solução de problemas em funcionalidades do ACK](ack-troubleshooting.md): problemas específicos do ACK
 [Solução de problemas em funcionalidades do Argo CD](argocd-troubleshooting.md): problemas específicos do Argo CD
 [Solução de problemas em funcionalidades do kro](kro-troubleshooting.md): problemas específicos do kro

## Criação de funcionalidades
<a name="_create_capabilities"></a>

Para criar uma funcionalidade em seu cluster, consulte os seguintes tópicos:
+  [Criação de uma funcionalidade do ACK](create-ack-capability.md): crie uma funcionalidade do ACK para gerenciar recursos da AWS usando APIs do Kubernetes
+  [Criar um recurso Argo CD](create-argocd-capability.md): crie uma funcionalidade do Argo CD para entrega contínua de GitOps
+  [Criação de uma funcionalidade do kro](create-kro-capability.md): crie uma funcionalidade do kro para composição e orquestração de recursos

## Listagem de funcionalidades
<a name="_list_capabilities"></a>

É possível listar todos os recursos da funcionalidade de um cluster.

### Console
<a name="_console"></a>

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do cluster para abrir a página de detalhes do cluster.

1. Escolha a guia **Funcionalidades**.

1. Visualize os recursos de funcionalidade em **Funcionalidades gerenciadas**.

### AWS CLI
<a name="shared_aws_cli"></a>

Use o comando `list-capabilities` para visualizar todas as funcionalidades em seu cluster. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

```
aws eks list-capabilities \
  --region region-code \
  --cluster-name my-cluster
```

```
{
    "capabilities": [
        {
            "capabilityName": "my-ack",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack/abc123",
            "type": "ACK",
            "status": "ACTIVE",
            "createdAt": "2025-11-02T10:30:00.000000-07:00",
            "modifiedAt": "2025-11-02T10:32:15.000000-07:00",
        },
        {
            "capabilityName": "my-kro",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/kro/my-kro/abc123",
            "type": "KRO",
            "status": "ACTIVE",
            "version": "v0.6.3",
            "createdAt": "2025-11-02T10:30:00.000000-07:00",
            "modifiedAt": "2025-11-02T10:32:15.000000-07:00",
        },
        {
            "capabilityName": "my-argocd",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/argocd/my-argocd/abc123",
            "type": "ARGOCD",
            "status": "ACTIVE",
            "version": "3.1.8-eks-1",
            "createdAt": "2025-11-21T08:22:28.486000-05:00",
            "modifiedAt": "2025-11-21T08:22:28.486000-05:00"
        }
    ]
}
```

## Descrição de uma funcionalidade
<a name="_describe_a_capability"></a>

Obtenha informações detalhadas sobre uma funcionalidade específica, incluindo a configuração e o status.

### Console
<a name="_console_2"></a>

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do cluster para abrir a página de detalhes do cluster.

1. Escolha a guia **Funcionalidades**.

1. Em **Funcionalidades gerenciadas**, escolha a funcionalidade que deseja visualizar.

1. Visualize os detalhes da funcionalidade, incluindo o status, a configuração e o horário de criação.

### AWS CLI
<a name="shared_aws_cli"></a>

Use o comando `describe-capability` para visualizar informações detalhadas. Substitua *region-code* pela região da AWS em que o seu cluster está, substitua *my-cluster* pelo nome do seu cluster e substitua *capability-name* pelo nome da funcionalidade (ack, argocd ou kro).

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name
```

 **Resultado do exemplo:** 

```
{
  "capability": {
    "capabilityName": "my-ack",
    "capabilityArn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack/abc123",
    "clusterName": "my-cluster",
    "type": "ACK",
    "roleArn": "arn:aws:iam::111122223333:role/AmazonEKSCapabilityACKRole",
    "status": "ACTIVE",
    "configuration": {},
    "tags": {},
    "health": {
      "issues": []
    },
    "createdAt": "2025-11-19T17:11:30.242000-05:00",
    "modifiedAt": "2025-11-19T17:11:30.242000-05:00",
    "deletePropagationPolicy": "RETAIN"
  }
}
```

## Atualização da configuração de uma funcionalidade
<a name="_update_the_configuration_of_a_capability"></a>

É possível atualizar alguns aspectos da configuração de uma funcionalidade após ela ter sido criada. As opções de configuração específicas variam conforme o tipo de funcionalidade.

**nota**  
Os recursos da funcionalidade do EKS são totalmente gerenciados, incluindo a aplicação de patches e as atualizações de versão. A atualização de uma funcionalidade atualizará a configuração do recurso e não resultará em atualizações de versão dos componentes da funcionalidade gerenciada.

### AWS CLI
<a name="shared_aws_cli"></a>

Use o comando `update-capability` para modificar uma funcionalidade:

```
aws eks update-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/NewCapabilityRole
```

**nota**  
Algumas propriedades de uma funcionalidade não permitem atualização após a sua criação. Consulte a documentação específica da funcionalidade para obter detalhes sobre o que pode ser modificado.

## Exclusão de uma funcionalidade
<a name="_delete_a_capability"></a>

Se uma funcionalidade não for mais necessária no seu cluster, é possível realizar a exclusão do recurso da funcionalidade.

**Importante**  
 **Exclua os recursos do cluster antes de excluir a funcionalidade.**   
A exclusão de um recurso da funcionalidade não exclui automaticamente os recursos criados por meio dessa funcionalidade:  
Todas as definições de recursos personalizados (CRDs, na sigla em inglês) do Kubernetes permanecem instaladas em seu cluster.
Os recursos do ACK permanecem em seu cluster, e os recursos correspondentes da AWS permanecem em sua conta.
As Applications do Argo CD e seus recursos do Kubernetes permanecem em seu cluster.
As ResourceGraphDefinitions e instâncias do kro permanecem em seu cluster.
É necessário excluir esses recursos antes de excluir a funcionalidade para evitar recursos órfãos.  
Opcionalmente, você pode optar por reter os recursos da AWS associados aos recursos do Kubernetes e do ACK. Consulte [Considerações sobre o ACK](ack-considerations.md). 

### Console
<a name="_console_3"></a>

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do cluster para abrir a página de detalhes do cluster.

1. Escolha a guia **Funcionalidades**.

1. Selecione a funcionalidade que deseja excluir na lista de **Funcionalidades gerenciadas**.

1. Escolha **Excluir funcionalidade**.

1. No diálogo de confirmação, digite o nome da funcionalidade para confirmar a exclusão.

1. Escolha **Excluir**.

### AWS CLI
<a name="shared_aws_cli"></a>

Use o comando `delete-capability` para excluir um recurso de funcionalidade:

Substitua *region-code* pela região da AWS em que o seu cluster está, substitua *my-cluster* pelo nome do seu cluster e substitua *capability-name* pelo nome da funcionalidade que deseja excluir.

```
aws eks delete-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name
```

## Próximas etapas
<a name="_next_steps"></a>
+  [Recursos da funcionalidade do Kubernetes](capability-kubernetes-resources.md): saiba mais sobre os recursos do Kubernetes fornecidos por cada tipo de funcionalidade
+  [Conceitos do ACK](ack-concepts.md): compreenda os conceitos do ACK e o ciclo de vida dos recursos
+  [Como trabalhar com o Argo CD](working-with-argocd.md): saiba como trabalhar com funcionalidades do Argo CD para fluxos de trabalho de GitOps
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos

# Recursos da funcionalidade do Kubernetes
<a name="capability-kubernetes-resources"></a>

Após habilitar uma funcionalidade no cluster, você passará a interagir com ela principalmente por meio da criação e do gerenciamento de recursos personalizados do Kubernetes no cluster. Cada funcionalidade fornece seu próprio conjunto de definições de recursos personalizados (CRDs, na sigla em inglês) que ampliam a API do Kubernetes com funcionalidades específicas.

## Recursos do Argo CD
<a name="_argo_cd_resources"></a>

Quando você habilita a funcionalidade do Argo CD, torna-se possível criar e gerenciar os seguintes recursos do Kubernetes:

 **Aplicação**   
Define a implantação de um repositório do Git para um cluster de destino. Os recursos do tipo `Application` especificam o repositório de origem, o namespace de destino e a política de sincronização. É possível criar até mil recursos do tipo `Application` para cada instância da funcionalidade do Argo CD.

 **ApplicationSet**   
Gera diversos recursos do tipo `Application` baseados em modelos, permitindo implantações em vários clusters e diversos ambientes. Os recursos do tipo `ApplicationSet` utilizam geradores para criar recursos do tipo `Application` dinamicamente com base em listas de clusters, diretórios do Git ou outras fontes.

 **AppProject**   
Fornece agrupamento lógico e controle de acesso para recursos do tipo `Application`. Os recursos do tipo `AppProject` definem quais repositórios, clusters e namespaces os recursos do tipo `Application` podem usar, permitindo multilocação e limites de segurança.

Exemplo de recurso do tipo `Application`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/repo
    targetRevision: main
    path: manifests
  destination:
    server: https://kubernetes.default.svc
    namespace: production
```

Para obter mais informações sobre recursos e conceitos do Argo CD, consulte [Conceitos do Argo CD](argocd-concepts.md).

## Recursos do kro
<a name="_kro_resources"></a>

Quando você habilita a funcionalidade do kro, torna-se possível criar e gerenciar os seguintes recursos do Kubernetes:

 **ResourceGraphDefinition (RGD)**   
Define uma API personalizada que compõe diversos recursos do Kubernetes e da AWS em uma abstração de nível superior. As equipes responsáveis pela plataforma criam recursos do tipo `ResourceGraphDefinition` para disponibilizar padrões reutilizáveis com barreiras de proteção.

 **Instâncias de recursos personalizados**   
Após criar um recurso do tipo `ResourceGraphDefinition`, você pode criar instâncias da API personalizada definida por `ResourceGraphDefinition`. O kro cria e gerencia automaticamente os recursos especificados na `ResourceGraphDefinition`.

Exemplo de recurso do tipo `ResourceGraphDefinition`:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        # ... deployment spec
    - id: service
      template:
        apiVersion: v1
        kind: Service
        # ... service spec
```

Exemplo de instância do tipo `WebApplication`:

```
apiVersion: v1alpha1
kind: WebApplication
metadata:
  name: my-web-app
  namespace: default
spec:
  name: my-web-app
  replicas: 3
```

Ao aplicar esta instância, o kro cria automaticamente os recursos `Deployment` e `Service` definidos na `ResourceGraphDefinition`.

Para obter mais informações sobre recursos e conceitos do kro, consulte [Conceitos do kro](kro-concepts.md).

## Recursos do ACK
<a name="_ack_resources"></a>

Quando você habilita a funcionalidade do ACK, torna-se possível criar e gerenciar recursos da AWS por meio de recursos personalizados do Kubernetes. O ACK fornece mais de 200 CRDs para mais de 50 serviços da AWS, permitindo definir recursos da AWS em conjunto com workloads do Kubernetes e gerenciar recursos dedicados de infraestrutura da AWS com o Kubernetes.

Exemplos de recursos do ACK:

 **Bucket do S3**   
 Os recursos do tipo `Bucket` realizam a criação e o gerenciamento de buckets do Amazon S3 com políticas de ciclo de vida, criptografia e versionamento.

 **DBInstance do RDS**   
 Os recursos do tipo `DBInstance` realizam o provisionamento e o gerenciamento de instâncias de bancos de dados do Amazon RDS com janelas de manutenção e backups automáticos.

 **Tabela do DynamoDB**   
 Os recursos do tipo `Table` realizam a criação e o gerenciamento de tabelas do DynamoDB com capacidade sob demanda ou provisionada.

 **Perfil do IAM**   
 Os recursos do tipo `Role` definem os perfis do IAM com as políticas de confiança e de permissão para acesso aos serviços da AWS.

 **Função do Lambda**   
 Os recursos do tipo `Function` realizam a criação e o gerenciamento de funções do Lambda, incluindo a configuração de código, runtime e perfil de execução.

Exemplo de especificação para um recurso do tipo `Bucket`:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-app-bucket
spec:
  name: my-unique-bucket-name-12345
  versioning:
    status: Enabled
  encryption:
    rules:
      - applyServerSideEncryptionByDefault:
          sseAlgorithm: AES256
```

Para obter mais informações sobre recursos e conceitos do ACK, consulte [Conceitos do ACK](ack-concepts.md).

## Limites de recurso
<a name="_resource_limits"></a>

As funcionalidades EKS têm os seguintes limites de recursos:

 **Limites de uso do Argo CD**:
+ Máximo de mil recursos do tipo `Application` por instância da funcionalidade do Argo CD
+ Máximo de cem clusters remotos configurados por instância da funcionalidade do Argo CD

 **Limites de configuração de recursos**:
+ Máximo de 150 recursos do Kubernetes por recurso do tipo `Application` no Argo CD
+ Máximo de 64 recursos do Kubernetes por `ResourceGraphDefinition` no kro

**nota**  
Estes limites são válidos para a quantidade de recursos gerenciados por cada instância de funcionalidade. Caso necessite de limites superiores, é possível fazer a implantação das funcionalidades em diversos clusters.

## Próximas etapas
<a name="_next_steps"></a>

Para realizar tarefas específicas de cada funcionalidade e acessar configurações avançadas, consulte os seguintes tópicos:
+  [Conceitos do ACK](ack-concepts.md): compreenda os conceitos do ACK e o ciclo de vida dos recursos
+  [Como trabalhar com o Argo CD](working-with-argocd.md): saiba como trabalhar com funcionalidades do Argo CD para fluxos de trabalho de GitOps
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos

# Considerações sobre as funcionalidades do EKS
<a name="capabilities-considerations"></a>

Este tópico aborda considerações importantes para o uso das funcionalidades do EKS, incluindo o planejamento do controle de acesso, a escolha entre as funcionalidades do EKS e as soluções autogerenciadas, os padrões de arquitetura para implantações em vários clusters e as práticas recomendadas de operação.

## Perfis do IAM para a funcionalidade e controle de acesso RBAC do Kubernetes
<a name="_capability_iam_roles_and_kubernetes_rbac"></a>

Cada recurso de funcionalidade do EKS tem um perfil do IAM para a funcionalidade configurado. O perfil da funcionalidade é usado para conceder permissões de serviços da AWS às funcionalidades do EKS para agirem em seu nome. Por exemplo, para usar a funcionalidade do EKS para o ACK gerenciar buckets do Amazon S3, você concederá permissões administrativas de buckets do S3 à funcionalidade, permitindo que ela crie e gerencie buckets.

Após a configuração da funcionalidade, é possível criar e gerenciar recursos do S3 na AWS usando recursos personalizados do Kubernetes no cluster. O RBAC do Kubernetes atua como um mecanismo de controle de acesso no cluster, definindo quais usuários e grupos têm permissão para criar e gerenciar esses recursos personalizados. Por exemplo, conceda a usuários e grupos específicos do RBAC do Kubernetes permissões para criar e gerenciar recursos de `Bucket` nos namespaces que você escolher.

Assim, o IAM e o RBAC do Kubernetes atuam como duas metades de um sistema de controle de acesso completo, que gerencia as permissões vinculadas às funcionalidades do EKS e aos seus recursos. É fundamental definir a combinação adequada de permissões do IAM e de políticas de acesso do RBAC para atender ao seu caso de uso.

Para obter informações adicionais sobre perfis do IAM de funcionalidades e permissões do Kubernetes, consulte [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Padrões de arquitetura de vários clusters
<a name="_multi_cluster_architecture_patterns"></a>

Ao implantar funcionalidades em vários clusters, considere estes padrões arquiteturais comuns:

 **Modelo hub-and-spoke com gerenciamento centralizado** 

Execute todas as três funcionalidades em um cluster com gerenciamento centralizado para orquestrar workloads e gerenciar a infraestrutura de nuvem em vários clusters de workload.
+ O Argo CD, no cluster de gerenciamento, implanta aplicações nos clusters de workload em diferentes regiões ou contas.
+ O ACK, no cluster de gerenciamento, provisiona recursos da AWS (como RDS, S3 e IAM) para todos os clusters.
+ O kro, no cluster de gerenciamento, cria abstrações de plataforma portáveis que funcionam em todos os clusters.

Esse padrão centraliza o gerenciamento de workloads e da infraestrutura de nuvem, podendo simplificar as operações para organizações que gerenciam muitos clusters.

 **GitOps descentralizadas** 

As workloads e a infraestrutura de nuvem são gerenciadas pelas funcionalidades no mesmo cluster em que as workloads estão sendo executadas.
+ O Argo CD gerencia os recursos de aplicações no cluster local
+ Os recursos do ACK são usados para atender às necessidades do cluster e das workloads.
+ As abstrações de plataforma do kro são instaladas e orquestram recursos locais.

Esse padrão descentraliza as operações, com equipes responsáveis pelo gerenciamento dos próprios serviços de plataforma dedicados a um ou mais clusters.

 **Modelo hub-and-spoke com implantação híbrida do ACK** 

Combine modelos centralizados e descentralizados, com implantações de aplicações centralizadas e gerenciamento de recursos baseado em escopo e em propriedade.
+ Cluster de hub:
  + Argo CD gerencia implantações de GitOps no cluster local e em todos os clusters de workload remotos.
  + O ACK é usado no cluster de gerenciamento para recursos de escopo administrativo (como bancos de dados de produção, perfis do IAM e VPCs).
  + O kro é usado no cluster de gerenciamento para abstrações de plataforma reutilizáveis.
+ Clusters de spoke:
  + As workloads são gerenciadas por meio do Argo CD no cluster centralizado do hub.
  + O ACK é usado localmente para recursos de escopo da workload (como buckets do S3, instâncias do ElastiCache e filas do SQS).
  + O kro é usado localmente para composições de recursos e padrões de blocos de criação.

Esse padrão separa responsabilidades: equipes responsáveis pela plataforma gerenciam a infraestrutura crítica de forma centralizada nos clusters de gerenciamento (opcionalmente incluindo clusters de workload), enquanto equipes responsáveis pela aplicação definem e administram recursos de nuvem juntamente com as workloads.

 **Escolha de um padrão** 

Considere estes fatores ao selecionar uma arquitetura:
+  **Estrutura organizacional**: equipes responsáveis pela plataforma centralizadas geralmente optam por padrões de hub, enquanto equipes descentralizadas podem preferir funcionalidades por cluster
+  **Escopo dos recursos**: recursos de escopo administrativo, como bancos de dados e perfis do IAM, costumam se beneficiar de um gerenciamento centralizado; recursos de workload, por sua vez, como buckets e filas, podem ser administrados localmente
+  **Autoatendimento**: equipes responsáveis pela plataforma centralizadas podem desenvolver e distribuir recursos personalizados prescritivos, possibilitando o autoatendimento seguro de recursos de nuvem para demandas comuns de workloads
+  **Gerenciamento da frota de clusters**: clusters de gerenciamento centralizados fornecem um ambiente de gerenciamento de propriedade do cliente para o gerenciamento da frota de clusters do EKS, juntamente com outros recursos de escopo administrativo
+  **Requisitos de conformidade**: algumas organizações requerem controle centralizado para fins de auditoria e governança
+  **Complexidade operacional**: menos instâncias de funcionalidades simplificam as operações, mas podem gerar gargalos

**nota**  
É possível começar a usar um padrão e migrar para outro à medida que a plataforma se desenvolve. As funcionalidades são independentes, permitindo que você as implante de formas diferentes em clusters distintos, de acordo com suas necessidades.

## Comparação entre funcionalidades do EKS e soluções autogerenciadas
<a name="_comparing_eks_capabilities_to_self_managed_solutions"></a>

As funcionalidades do EKS oferecem experiências totalmente gerenciadas para ferramentas e controladores populares do Kubernetes que são executadas no EKS. Isso difere das soluções autogerenciadas, que precisam ser instaladas e gerenciadas diretamente no cluster.

### Principais diferenças
<a name="_key_differences"></a>

 **Implantação e gerenciamento** 

 As funcionalidades do EKS são totalmente gerenciadas pela AWS, sem necessidade de instalação, configuração ou manutenção do software dos componentes. A AWS instala e gerencia automaticamente todas as definições de recursos personalizados (CRDs, na sigla em inglês) do Kubernetes necessárias no cluster.

Com soluções autogerenciadas, você instala e configura o software do cluster usando charts do Helm, kubectl ou outros operadores. Nas soluções autogerenciadas, você mantém controle total sobre o ciclo de vida do software e a configuração do runtime, possibilitando personalizações em todas as camadas da solução.

 **Operações e manutenção** 

 A AWS gerencia a aplicação de patches e outras operações do ciclo de vida do software para as funcionalidades do EKS, com atualizações automáticas e patches de segurança. As funcionalidades do EKS são integradas aos recursos da AWS para configurações simplificadas, oferecem alta disponibilidade e tolerância a falhas incorporadas e eliminam a necessidade de solução de problemas de workloads de controladores dentro do cluster.

As soluções autogerenciadas requerem que você monitore a integridade dos componentes e dos logs, aplique patches de segurança e atualizações de versão, configure alta disponibilidade com várias réplicas e budgets de interrupção de pods, realize a solução e a correção de problemas em workloads de controladores, e gerencie lançamentos e versões. Você tem controle total sobre as implantações, mas isso geralmente exige soluções sob medida para acesso a clusters privados e outras integrações, que devem estar alinhadas aos padrões organizacionais e aos requisitos de conformidade da segurança.

 **Consumo de recursos** 

As funcionalidades do EKS são executadas no EKS e de forma externa aos clusters, liberando tanto recursos de nós quanto recursos de cluster. As funcionalidades não usam recursos de workloads do cluster, não consomem CPU ou memória nos nós de processamento, escalam automaticamente e têm impacto mínimo no planejamento de capacidade do cluster.

As soluções autogerenciadas executam controladores e outros componentes nos nós de processamento, consumindo diretamente recursos desses nós, IPs do cluster e outros recursos do cluster. O gerenciamento de serviços do cluster exige planejamento de capacidade para as workloads, além de planejamento e configuração de solicitações e limites de recursos para atender aos requisitos de escalabilidade e de alta disponibilidade.

 **Suporte a recursos** 

Por serem recursos de serviço totalmente gerenciados, as funcionalidades do EKS são naturalmente opinativas quando comparadas às soluções autogerenciadas. Apesar de as funcionalidades oferecerem suporte à maior parte dos recursos e casos de uso, a abrangência será diferente quando comparadas às soluções autogerenciadas.

Com as soluções autogerenciadas, você tem controle total sobre a configuração, os recursos opcionais e outros aspectos da funcionalidade do software. É possível executar imagens personalizadas próprias, ajustar todos os aspectos da configuração e manter controle completo sobre a funcionalidade da solução autogerenciada.

 **Considerações sobre custos** 

Cada recurso da funcionalidade do EKS tem um custo horário relacionado, que varia conforme o tipo de funcionalidade. Os recursos do cluster gerenciados por essa funcionalidade também têm custo horário próprio, com precificação separada. Para obter mais informações, consulte [Preços do Amazon EKS](https://aws.amazon.com/eks/pricing/).

As soluções autogerenciadas não têm custos diretos relacionados a cobranças da AWS, mas é necessário pagar pelos recursos de computação do cluster consumidos por controladores e workloads relacionados. Além do consumo de recursos de nós e de cluster, o custo total de propriedade das soluções autogerenciadas inclui despesas operacionais e com manutenção, solução de problemas e suporte.

### Como escolher entre funcionalidades do EKS e soluções autogerenciadas
<a name="_choosing_between_eks_capabilities_and_self_managed_solutions"></a>

 **Funcionalidades do EKS** Considere esta opção quando desejar reduzir a sobrecarga operacional e se concentrar em valor diferenciado no software e nos sistemas, em vez de nas operações de plataforma do cluster para requisitos fundamentais. Use as funcionalidades do EKS quando desejar minimizar a carga operacional de patches de segurança e o gerenciamento do ciclo de vida do software, liberar recursos de nós e do cluster para workloads de aplicação, simplificar a configuração e o gerenciamento de segurança, e se beneficiar da abrangência de suporte da AWS. As funcionalidades do EKS são adequadas para a maioria dos casos de uso em ambientes de produção e constituem a abordagem recomendada para novas implantações.

 **Soluções autogerenciadas** Considere esta opção quando precisar de versões específicas da API de recursos do Kubernetes, desenvolvimentos personalizados de controladores, tiver automação e ferramentas existentes voltadas a implantações autogerenciadas, ou necessitar de um nível avançado de personalização das configurações de runtime dos controladores. Nas soluções autogerenciadas, é possível obter flexibilidade para casos de uso específicos, mantendo controle total sobre a implantação e a configuração de runtime.

**nota**  
As funcionalidades do EKS podem coexistir com soluções autogerenciadas em seu cluster, permitindo que migrações sejam feitas de forma gradual.

### Comparações específicas por funcionalidade
<a name="_capability_specific_comparisons"></a>

Para comparações detalhadas, incluindo funcionalidades específicas de cada funcionalidade, diferenças na versão original e caminhos de migração, consulte:
+  [Comparação da funcionalidade do EKS para o ACK em relação ao ACK autogerenciado](ack-comparison.md) 
+  [Comparação da funcionalidade do EKS para o Argo CD em relação ao Argo CD autogerenciado](argocd-comparison.md) 
+  [Comparação da funcionalidade do EKS para o kro em relação ao kro autogerenciado](kro-comparison.md) 

# Implantação de recursos da AWS usando o Kubernetes com o AWS Controllers for Kubernetes (ACK)
<a name="ack"></a>

 O AWS Controllers for Kubernetes (ACK) permite definir e gerenciar recursos de serviços da AWS diretamente do Kubernetes. Com o AWS Controllers for Kubernetes (ACK), é possível gerenciar recursos de workloads e de infraestrutura de nuvem por meio de recursos personalizados do Kubernetes, juntamente com as workloads das aplicações, usando APIs e ferramentas conhecidas do Kubernetes.

Com as funcionalidades do EKS, o ACK é totalmente gerenciado pela AWS, o que remove a necessidade de instalar, fazer a manutenção e escalar os controladores do ACK em seus clusters.

## Funcionamento do ACK
<a name="_how_ack_works"></a>

O ACK converte especificações de recursos personalizados do Kubernetes em chamadas de API da AWS. Quando você cria, atualiza ou exclui um recurso personalizado do Kubernetes que representa um recurso de serviço da AWS, o ACK realiza as chamadas de API da AWS necessárias para criar, atualizar ou excluir o recurso da AWS.

Cada recurso da AWS compatível com o ACK conta com sua própria definição de recurso personalizado (CRD, na sigla em inglês), que define o esquema da API do Kubernetes para especificar a configuração. Por exemplo, o ACK fornece CRDs para o S3, incluindo buckets, políticas de bucket e outros recursos do S3.

O ACK realiza a reconciliação contínua entre o estado atual dos seus recursos da AWS e o estado desejado especificado nos recursos personalizados do Kubernetes Se um recurso se desviar do estado desejado, o ACK detecta essa divergência e executa ações corretivas para restabelecer o alinhamento. As alterações nos recursos do Kubernetes são refletidas imediatamente no estado dos recursos da AWS, enquanto a detecção passiva de desvios e a correção de alterações diretamente nos recursos da AWS podem demorar até dez horas (o período de ressincronização), embora normalmente ocorram muito antes.

 **Exemplo de manifesto de recurso do bucket do S3** 

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-ack-bucket
spec:
  name: my-unique-bucket-name
```

Ao aplicar esse recurso personalizado ao cluster, o ACK cria um bucket do Amazon S3 na sua conta, se ele ainda não existir. As alterações posteriores nesse recurso, por exemplo, a definição de uma camada de armazenamento diferente da camada padrão ou a adição de uma política, serão aplicadas ao recurso do S3 na AWS. Quando esse recurso é excluído do cluster, o bucket do S3 na AWS é excluído por padrão.

## Benefícios do ACK
<a name="_benefits_of_ack"></a>

O ACK disponibiliza o gerenciamento de recursos da AWS de forma nativa no Kubernetes, permitindo que você gerencie recursos da AWS com as mesmas APIs e ferramentas do Kubernetes usadas pelas suas aplicações. Essa abordagem unificada simplifica o fluxo de trabalho de gerenciamento da infraestrutura, eliminando a necessidade de alternar entre diferentes ferramentas ou de aprender sistemas distintos de infraestrutura como código. Seus recursos da AWS são definidos declarativamente em manifestos do Kubernetes, permitindo fluxos de trabalho de GitOps e práticas de infraestrutura como código que se integram perfeitamente aos processos de desenvolvimento existentes.

O ACK realiza a reconciliação contínua entre o estado desejado e o estado atual dos recursos da AWS, corrigindo desvios e garantindo a consistência em toda a infraestrutura. Essa reconciliação contínua garante que alterações imperativas realizadas de forma externa aos recursos da AWS sejam revertidas automaticamente para o estado definido em sua configuração, preservando a integridade da infraestrutura como código. É possível configurar o ACK para gerenciar recursos em diversas contas e regiões da AWS, possibilitando arquiteturas complexas em várias contas sem a necessidade de ferramentas adicionais.

Para organizações que estão no processo de migração de outras ferramentas de gerenciamento de infraestrutura, o ACK oferece suporte à adoção de recursos, permitindo que você traga recursos da AWS existentes para o gerenciamento do ACK sem precisar recriá-los. O ACK ainda disponibiliza recursos somente para leitura, permitindo a observação de recursos da AWS sem permissão para modificá-los, além de anotações para, opcionalmente, reter recursos da AWS mesmo quando o recurso do Kubernetes é excluído do cluster.

Para saber mais informações e começar a usar a funcionalidade do EKS para o ACK, consulte [Conceitos do ACK](ack-concepts.md) e [Considerações sobre o ACK para o EKS](ack-considerations.md).

## Serviços da AWS compatíveis
<a name="supported_shared_aws_services"></a>

O ACK oferece suporte a uma ampla variedade de serviços da AWS, incluindo, mas não se limitando a:
+ Amazon EC2
+ Amazon S3
+ Amazon RDS
+ Amazon DynamoDB
+ Amazon ElastiCache
+ Amazon EKS
+ Amazon SQS
+ Amazon SNS
+  AWS Lambda
+  IAM da AWS

Todos os serviços da AWS listados como disponíveis para o público geral na origem são compatíveis com a funcionalidade do EKS para o ACK. Consulte a [lista completa de serviços da AWS compatíveis](https://aws-controllers-k8s.github.io/community/docs/community/services/) para obter mais detalhes.

## Integração com outras funcionalidades gerenciadas do EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

O ACK pode ser integrado a outras funcionalidades gerenciadas do EKS.
+  **Argo CD**: use o Argo CD para gerenciar a implantação de recursos do ACK em diversos clusters, possibilitando fluxos de trabalho de GitOps para a infraestrutura da AWS.
  + Embora o ACK aproveite os benefícios de GitOps quando combinado com o Argo CD, ele não depende de integração com o Git.
+  **kro (Kube Resource Orchestrator)**: use o kro para combinar recursos complexos a partir de recursos do ACK, criando abstrações de nível superior que simplificam o gerenciamento de recursos.
  + Com o kro, é possível criar recursos personalizados compostos que definem tanto recursos do Kubernetes quanto recursos da AWS. Esses recursos personalizados podem ser usados pelos membros da equipe para implantar aplicações complexas de forma rápida.

## Conceitos básicos do ACK
<a name="_getting_started_with_ack"></a>

Para começar a usar a funcionalidade do EKS para o ACK:

1. Crie e configure um perfil do IAM da funcionalidade com as permissões necessárias para que o ACK gerencie recursos da AWS em seu nome.

1.  [Crie um recurso da funcionalidade do ACK](create-ack-capability.md) em seu cluster do EKS por meio do Console da AWS, da AWS CLI ou da ferramenta de infraestrutura como código de sua preferência.

1. Aplique os recursos personalizados do Kubernetes no cluster para começar a gerenciar os recursos da AWS diretamente no Kubernetes.

# Criação de uma funcionalidade do ACK
<a name="create-ack-capability"></a>

Este capítulo explica como criar uma funcionalidade do ACK no cluster do Amazon EKS.

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

Antes de criar uma funcionalidade do ACK, certifique-se de ter:
+ Um cluster do Amazon EKS
+ Um perfil do IAM para a funcionalidade com permissões para o ACK gerenciar recursos da AWS
+ Permissões do IAM suficientes para criar recursos de funcionalidades em clusters de EKS
+ A ferramenta de CLI apropriada instalada e configurada, ou o acesso ao console do EKS

Para obter instruções sobre como criar o perfil do IAM para a funcionalidade, consulte [Perfil do IAM para a funcionalidade do Amazon EKS](capability-role.md).

**Importante**  
O ACK é uma funcionalidade de gerenciamento de infraestrutura que concede a capacidade de criar, modificar e excluir recursos da AWS. Trata-se de uma funcionalidade de escopo de administrador que deve ser controlada cuidadosamente. Qualquer pessoa com permissão para criar recursos do Kubernetes no cluster pode, efetivamente, criar recursos da AWS por meio do ACK, sujeito às permissões do perfil do IAM para a funcionalidade. O perfil do IAM para a funcionalidade que você fornece determina quais recursos da AWS o ACK pode criar e gerenciar. Para obter orientações sobre como criar um perfil apropriado com permissões de privilégio mínimo, consulte [Perfil do IAM para a funcionalidade do Amazon EKS](capability-role.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Escolha da ferramenta
<a name="_choose_your_tool"></a>

É possível criar uma funcionalidade do ACK por meio do Console de gerenciamento da AWS, da AWS CLI ou do eksctl:
+  [Criação de uma funcionalidade do ACK por meio do Console](ack-create-console.md): use o Console para obter uma experiência guiada
+  [Criação de uma funcionalidade do ACK por meio da AWS CLI](ack-create-cli.md): use a AWS CLI para obter scripts e automação
+  [Criação de uma funcionalidade do ACK por meio do eksctl](ack-create-eksctl.md): use o eksctl para obter uma experiência nativa do Kubernetes

## O que ocorre durante a criação de uma funcionalidade do ACK
<a name="_what_happens_when_you_create_an_ack_capability"></a>

Ao criar uma funcionalidade do ACK:

1. O EKS cria o serviço da funcionalidade do ACK e o configura para monitorar e gerenciar recursos no cluster

1. As definições de recursos personalizados (CRDs, na sigla em inglês) são instaladas no cluster

1. Uma entrada de acesso é criada automaticamente para seu perfil de funcionalidade do IAM com políticas de entrada de acesso específicas de recursos que concedem permissões básicas do Kubernetes (consulte [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md))

1. A funcionalidade assume o perfil do IAM para a funcionalidade, que foi fornecido por você

1. O ACK começa a monitorar os recursos personalizados no cluster

1. O status da funcionalidade é alterado de `CREATING` para `ACTIVE` 

Assim que estiver ativa, será possível criar recursos personalizados do ACK no cluster para gerenciar recursos da AWS

**nota**  
A entrada de acesso criada automaticamente inclui a `AmazonEKSACKPolicy` que concede permissões ACK para gerenciar recursos da AWS. Alguns recursos do ACK que fazem referência a segredos do Kubernetes (como bancos de dados do RDS com senhas) exigem políticas adicionais de entrada de acesso. Para saber mais sobre entradas de acesso e como configurar permissões adicionais, consulte [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Próximas etapas
<a name="_next_steps"></a>

Após criar a funcionalidade do ACK:
+  [Conceitos do ACK](ack-concepts.md): entenda os conceitos do ACK e comece a usar o serviço com os recursos da AWS
+  [Conceitos do ACK](ack-concepts.md): saiba mais sobre reconciliação, exportações de campos e padrões de adoção de recursos
+  [Configuração das permissões do ACK](ack-permissions.md): configure permissões do IAM e padrões para várias contas

# Criação de uma funcionalidade do ACK por meio do Console
<a name="ack-create-console"></a>

Este tópico descreve como criar uma funcionalidade do AWS Controllers for Kubernetes (ACK) usando o Console de gerenciamento da AWS.

## Criação da funcionalidade do ACK
<a name="_create_the_ack_capability"></a>

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do cluster para abrir a página de detalhes do cluster.

1. Escolha a guia **Funcionalidades**.

1. No painel de navegação à esquerda, escolha **AWS Controllers for Kubernetes (ACK)**.

1. Escolha **Criar uma funcionalidade do AWS Controllers for Kubernetes**.

1. No **perfil da funcionalidade do IAM**:
   + Se você já tiver um perfil da funcionalidade do IAM, selecione-o no menu suspenso
   + Se a criação de um perfil for necessária, escolha **Criar perfil de administrador** 

     Isso abre o console do IAM em uma nova guia com a política de confiança preenchida previamente e a política gerenciada `AdministratorAccess`. É possível desmarcar esta política e adicionar outras permissões, se preferir.

     Após criar o perfil, retorne ao console do EKS e o perfil será selecionado automaticamente.
**Importante**  
A política `AdministratorAccess` sugerida concede permissões abrangentes e destina-se a simplificar as etapas iniciais do uso do serviço. Para ambientes de produção, substitua essa política por uma personalizada que forneça somente as permissões exigidas pelos serviços específicos da AWS que você pretende gerenciar usando o ACK. Para obter orientações sobre como criar políticas de privilégio mínimo, consulte [Configuração das permissões do ACK](ack-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

1. Escolha **Criar**.

O processo de criação da funcionalidade é iniciado.

## Verificação da ativação da funcionalidade
<a name="_verify_the_capability_is_active"></a>

1. Na guia **Funcionalidades**, visualize o status da funcionalidade do ACK.

1. Aguarde até que o status mude de `CREATING` para `ACTIVE`.

1. Assim que estiver com o status ativo, a funcionalidade estará pronta para uso.

Para obter informações sobre os status das funcionalidades e sobre a solução de problemas, consulte [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md).

## Verificação da disponibilidade de recursos personalizados
<a name="_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do ACK estão disponíveis no cluster.

 **Utilizar o console** 

1. Navegue até o cluster no console do Amazon EKS

1. Escolha a guia **Recursos**

1. Escolha **Extensões** 

1. Escolha **CustomResourceDefinitions** 

Você deverá visualizar várias CRDs listadas para os recursos da AWS.

 **Uso do kubectl** 

```
kubectl api-resources | grep services.k8s.aws
```

Você deverá visualizar várias APIs listadas para os recursos da AWS.

**nota**  
A funcionalidade do AWS Controllers for Kubernetes instalará diversas CRDs para vários tipos de recursos da AWS.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do ACK](ack-concepts.md): entenda os conceitos do ACK e comece a usar o serviço
+  [Configuração das permissões do ACK](ack-permissions.md): configure as permissões do IAM para outros serviços da AWS
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do ACK

# Criação de uma funcionalidade do ACK por meio da AWS CLI
<a name="ack-create-cli"></a>

Este tópico descreve como criar uma funcionalidade do AWS Controllers for Kubernetes (ACK) usando a AWS CLI.

## Pré-requisitos
<a name="_prerequisites"></a>
+  **AWS CLI**: versão `2.12.3` ou em versões posteriores. Para verificar a versão, execute `aws --version`. Para obter mais informações, consulte [Instalação](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) no Guia do Usuário da Interface de Linha de Comando AWS.
+  ** `kubectl` ** – uma ferramenta de linha de comando para trabalhar com clusters do Kubernetes. Para obter mais informações, consulte [Configurar o `kubectl` e o `eksctl`](install-kubectl.md).

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confiança:

```
cat > ack-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crie o perfil do IAM:

```
aws iam create-role \
  --role-name ACKCapabilityRole \
  --assume-role-policy-document file://ack-trust-policy.json
```

Anexe a política gerenciada `AdministratorAccess` ao perfil:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**Importante**  
A política `AdministratorAccess` sugerida concede permissões abrangentes e destina-se a simplificar as etapas iniciais do uso do serviço. Para ambientes de produção, substitua essa política por uma personalizada que forneça somente as permissões exigidas pelos serviços específicos da AWS que você pretende gerenciar usando o ACK. Para obter orientações sobre como criar políticas de privilégio mínimo, consulte [Configuração das permissões do ACK](ack-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Etapa 2: criação da funcionalidade do ACK
<a name="_step_2_create_the_ack_capability"></a>

Crie o recurso da funcionalidade do ACK no cluster. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack \
  --type ACK \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ACKCapabilityRole \
  --delete-propagation-policy RETAIN
```

O comando é concluído de imediato, mas a funcionalidade demora algum tempo para se tornar ativa, conforme o EKS cria a infraestrutura e os componentes necessários para a funcionalidade. O EKS instalará as definições de recursos personalizados do Kubernetes relacionadas a essa funcionalidade no cluster durante o processo de criação.

**nota**  
Caso ocorra um erro indicando a inexistência do cluster ou falta de permissões, verifique o seguinte:  
Se o nome do cluster está correto
Se a AWS CLI está configurada para a região correta
Se você tem as permissões do IAM obrigatórias

## Etapa 3: verificação da ativação da funcionalidade
<a name="_step_3_verify_the_capability_is_active"></a>

Aguarde até que a funcionalidade se torne ativa. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack \
  --query 'capability.status' \
  --output text
```

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`. Não prossiga para a próxima etapa até que o status seja `ACTIVE`.

Também é possível visualizar os detalhes completos da funcionalidade:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack
```

## Etapa 4: verificação da disponibilidade de recursos personalizados
<a name="_step_4_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do ACK estão disponíveis no cluster:

```
kubectl api-resources | grep services.k8s.aws
```

Você deverá visualizar várias APIs listadas para os recursos da AWS.

**nota**  
A funcionalidade do AWS Controllers for Kubernetes instalará diversas CRDs para vários tipos de recursos da AWS.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do ACK](ack-concepts.md): entenda os conceitos do ACK e comece a usar o serviço
+  [Configuração das permissões do ACK](ack-permissions.md): configure as permissões do IAM para outros serviços da AWS
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do ACK

# Criação de uma funcionalidade do ACK por meio do eksctl
<a name="ack-create-eksctl"></a>

Este tópico descreve como criar uma funcionalidade do AWS Controllers for Kubernetes (ACK) usando o eksctl.

**nota**  
Para realizar as etapas seguintes, você deve estar utilizando o eksctl na versão `0.220.0` ou em versões posteriores. Para verificar a versão, execute `eksctl version`.

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confiança:

```
cat > ack-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crie o perfil do IAM:

```
aws iam create-role \
  --role-name ACKCapabilityRole \
  --assume-role-policy-document file://ack-trust-policy.json
```

Anexe a política gerenciada `AdministratorAccess` ao perfil:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**Importante**  
A política `AdministratorAccess` sugerida concede permissões abrangentes e destina-se a simplificar as etapas iniciais do uso do serviço. Para ambientes de produção, substitua essa política por uma personalizada que forneça somente as permissões exigidas pelos serviços específicos da AWS que você pretende gerenciar usando o ACK. Para obter orientações sobre como criar políticas de privilégio mínimo, consulte [Configuração das permissões do ACK](ack-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

**Importante**  
Esta política concede permissões para o gerenciamento de buckets do S3 com `"Resource": "*"`, o que permite operações em todos os buckets do S3.  
Para uso em ambientes de produção: \$1 Restrinja o campo `Resource` a ARNs de buckets específicos ou padrões de nomes \$1 Use chaves de condição do IAM para limitar o acesso por etiquetas de recurso \$1 Conceda apenas as permissões mínimas necessárias para o seu caso de uso  
Para uso com outros serviços da AWS, consulte [Configuração das permissões do ACK](ack-permissions.md).

Anexe a política à função:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):policy/ACKS3Policy
```

## Etapa 2: criação da funcionalidade do ACK
<a name="_step_2_create_the_ack_capability"></a>

Crie a funcionalidade do ACK por meio do eksctl. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

```
eksctl create capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack \
  --type ACK \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ACKCapabilityRole \
  --ack-service-controllers s3
```

**nota**  
O sinalizador `--ack-service-controllers` é opcional. Se omitido, o ACK habilita todos os controladores disponíveis. Para otimizar a performance e a segurança, recomendamos habilitar somente os controladores necessários. É possível definir vários controladores ao mesmo tempo: `--ack-service-controllers s3,rds,dynamodb` 

O comando é executado de forma imediata, mas a funcionalidade demora algum tempo para se tornar ativa.

## Etapa 3: verificação da ativação da funcionalidade
<a name="_step_3_verify_the_capability_is_active"></a>

Verifique o status da funcionalidade:

```
eksctl get capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack
```

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`.

## Etapa 4: verificação da disponibilidade de recursos personalizados
<a name="_step_4_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do ACK estão disponíveis no cluster:

```
kubectl api-resources | grep services.k8s.aws
```

Você deverá visualizar várias APIs listadas para os recursos da AWS.

**nota**  
A funcionalidade do AWS Controllers for Kubernetes instalará diversas CRDs para vários tipos de recursos da AWS.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do ACK](ack-concepts.md): entenda os conceitos do ACK e comece a usar o serviço
+  [Configuração das permissões do ACK](ack-permissions.md): configure as permissões do IAM para outros serviços da AWS
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do ACK

# Conceitos do ACK
<a name="ack-concepts"></a>

O ACK gerencia recursos da AWS usando APIs do Kubernetes, por meio da reconciliação contínua entre o estado desejado definido em seus manifestos e o estado atual na AWS. Ao criar ou atualizar um recurso personalizado do Kubernetes, o ACK faz as chamadas de API da AWS necessárias para criar ou modificar o recurso correspondente na AWS, monitorando-o em seguida para detectar desvios e atualizando o status no Kubernetes para refletir o estado atual. Esta abordagem possibilita o gerenciamento da infraestrutura por meio de ferramentas e fluxos de trabalho conhecidos do Kubernetes, ao mesmo tempo em que garante a conformidade entre o cluster e a AWS.

Este tópico explica os conceitos fundamentais sobre como o ACK realiza a gestão de recursos da AWS por meio de APIs do Kubernetes.

## Conceitos básicos do ACK
<a name="_getting_started_with_ack"></a>

Após criar a funcionalidade do ACK (consulte [Criação de uma funcionalidade do ACK](create-ack-capability.md)), você pode começar a gerenciar recursos da AWS no seu cluster usando manifestos do Kubernetes.

Como exemplo, crie este manifesto de bucket do S3 em `bucket.yaml`, definindo um nome exclusivo para o seu bucket.

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-test-bucket
  namespace: default
spec:
  name: my-unique-bucket-name-12345
```

Aplique o manifesto:

```
kubectl apply -f bucket.yaml
```

Verifique o status:

```
kubectl get bucket my-test-bucket
kubectl describe bucket my-test-bucket
```

Verifique se o bucket foi criado na AWS:

```
aws s3 ls | grep my-unique-bucket-name-12345
```

Exclua o recurso do Kubernetes:

```
kubectl delete bucket my-test-bucket
```

Verifique se o bucket foi excluído da AWS:

```
aws s3 ls | grep my-unique-bucket-name-12345
```

O bucket não deve mais aparecer na lista, demonstrando que o ACK gerencia todo o ciclo de vida dos recursos da AWS.

Para obter mais informações sobre os conceitos básicos do ACK, consulte [Getting Started with ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/getting-started/).

## Ciclo de vida e reconciliação de recursos
<a name="_resource_lifecycle_and_reconciliation"></a>

O ACK usa um ciclo contínuo de reconciliação para assegurar que os recursos da AWS estejam em conformidade com o estado desejado estabelecido nos manifestos do Kubernetes.

 **Funcionamento da reconciliação**:

1. Você cria ou atualiza um recurso personalizado do Kubernetes (por exemplo, um bucket do S3)

1. O ACK detecta a alteração e compara o estado desejado com o estado real na AWS 

1. Se houver divergência, o ACK faz chamadas de API da AWS para reconciliar a diferença

1. O status do recurso no Kubernetes é atualizado pelo ACK para refletir o estado atual

1. Esse ciclo se repete de forma contínua, geralmente em intervalos de algumas horas

O processo de reconciliação ocorre ao criar um novo recurso no Kubernetes, ao atualizar o campo `spec` de um recurso já existente ou caso o ACK detecte divergências na AWS causadas por alterações manuais realizadas fora do controle do ACK. Além disso, o ACK executa a reconciliação periódica com um intervalo de sincronização de dez horas. As alterações nos recursos do Kubernetes acionam a reconciliação imediata, enquanto a detecção passiva de desvios em alterações de recursos da AWS em suas versões originais ocorre durante a sincronização periódica.

Ao seguir o exemplo de introdução acima, o ACK executa estas etapas:

1. Verifica se o bucket existe na AWS 

1. Se não existir, faz a chamada `s3:CreateBucket` 

1. Atualiza o status no Kubernetes com o ARN e o estado do bucket

1. Continua o monitoramento para detectar desvios

Para saber mais sobre como o ACK funciona, consulte [ACK Reconciliation](https://aws-controllers-k8s.github.io/community/docs/user-docs/reconciliation/).

## Condições de status
<a name="_status_conditions"></a>

Os recursos do ACK usam condições de status para informar seus estados. Compreender essas condições ajuda você a solucionar problemas e entender a integridade do recurso.
+  **Ready**: indica que o recurso está pronto para uso (condição padrão do Kubernetes).
+  **ACK.ResourceSynced**: indica que a especificação do recurso corresponde ao estado do recurso na AWS.
+  **ACK.Terminal**: indica a ocorrência de um erro irrecuperável.
+  **ACK.Adopted**: indica que o recurso foi importado de um recurso da AWS já existente, não sendo uma nova criação.
+  **ACK.Recoverable**: indica um erro passível de recuperação que pode ser solucionado sem alterar a especificação.
+  **ACK.Advisory**: fornece informações consultivas sobre o recurso.
+  **ACK.LateInitialized**: indica se a inicialização tardia dos campos foi concluída.
+  **ACK.ReferencesResolved**: Indica se todos os campos de `AWSResourceReference` foram resolvidos.
+  **ACK.IAMRoleSelected**: Indica se um IAMRoleSelector foi selecionado para gerenciar este recurso.

Verifique o status do recurso:

```
# Check if resource is ready
kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'

# Check for terminal errors
kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="ACK.Terminal")]}'
```

Status de exemplo:

```
status:
  conditions:
  - type: Ready
    status: "True"
    lastTransitionTime: "2024-01-15T10:30:00Z"
  - type: ACK.ResourceSynced
    status: "True"
    lastTransitionTime: "2024-01-15T10:30:00Z"
  - type: ACK.Terminal
    status: "True"
  ackResourceMetadata:
    arn: arn:aws:s3:::my-unique-bucket-name
    ownerAccountID: "111122223333"
    region: us-west-2
```

Para saber mais sobre o status e as condições do ACK, consulte [ACK Conditions](https://aws-controllers-k8s.github.io/community/docs/user-docs/conditions/).

## Políticas de exclusão
<a name="_deletion_policies"></a>

A política de exclusão do ACK controla o que acontece com os recursos da AWS quando você exclui o recurso do Kubernetes.

 **Exclusão (padrão)** 

O recurso da AWS é excluído quando você exclui o recurso do Kubernetes. Este é o comportamento padrão.

```
# No annotation needed - this is the default
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: temp-bucket
spec:
  name: temporary-bucket
```

A exclusão deste recurso exclui o bucket do S3 na AWS.

 **Manter** 

O recurso da AWS é mantido quando você exclui o recurso do Kubernetes:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: important-bucket
  annotations:
    services.k8s.aws/deletion-policy: "retain"
spec:
  name: production-data-bucket
```

A exclusão deste recurso o remove do Kubernetes, mas mantém o bucket do S3 na AWS.

A política `retain` é útil para bancos de dados de produção que devem existir além do ciclo de vida do recurso do Kubernetes, recursos compartilhados que são usados por diversas aplicações, recursos com dados importantes que não devem ser excluídos acidentalmente ou casos de uso em que o ACK é usado apenas para configurar o recurso e, depois, o libera de volta para o gerenciamento manual.

Para saber mais sobre a política de exclusão do ACK, consulte [ACK Deletion Policy](https://aws-controllers-k8s.github.io/community/docs/user-docs/deletion-policy/).

## Adoção de recursos
<a name="_resource_adoption"></a>

A adoção permite que você traga recursos existentes da AWS para o gerenciamento do ACK, sem a necessidade de recriá-los.

Situações para o uso da adoção:
+ Ao migrar a infraestrutura atual para ser gerenciada pelo ACK
+ Ao recuperar recursos da AWS que ficaram “órfãos” em caso de exclusão acidental do recurso no Kubernetes
+ Ao importar recursos que foram gerados por outras ferramentas, como Terraform ou CloudFormation

Funcionamento da adoção:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Ao criar este recurso:

1. O ACK verifica se um bucket com esse nome existe na AWS 

1. Se encontrado, o ACK o adota (sem realizar chamadas de API para criação)

1. O ACK importa as configurações atuais da AWS 

1. O ACK atualiza o status no Kubernetes para refletir o estado real

1. A partir daí, novas alterações seguem o fluxo de reconciliação comum

Após a adoção, o gerenciamento de recursos funciona como em qualquer outro recurso do ACK. Isso significa que remover o recurso do Kubernetes apagará o recurso na AWS, exceto se a política de deleção estiver configurada como `retain`.

Ao adotar recursos, o recurso da AWS já deve existir e o ACK precisa de permissões de leitura para localizá-lo. A política `adopt-or-create` faz a adoção se o recurso for localizado ou a criação automática se ele não existir. Isso é útil quando você deseja um fluxo de trabalho declarativo que funcione independentemente da existência prévia do recurso.

Para saber mais sobre a adoção de recursos no ACK, consulte [ACK Resource Adoption](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/).

## Recursos entre contas e entre regiões
<a name="_cross_account_and_cross_region_resources"></a>

O ACK pode gerenciar recursos em diferentes contas e regiões da AWS usando um único cluster.

 **Anotações para recursos entre regiões** 

É possível especificar a região de um recurso da AWS utilizando uma anotação:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: eu-bucket
  annotations:
    services.k8s.aws/region: eu-west-1
spec:
  name: my-eu-bucket
```

Você também pode especificar a região de todos os recursos da AWS criados em um determinado namespace:

 **Anotações para namespace** 

Define uma região padrão para todos os recursos dentro de um namespace:

```
apiVersion: v1
kind: Namespace
metadata:
  name: production
  annotations:
    services.k8s.aws/default-region: us-west-2
```

Os recursos criados sob este namespace seguirão essa região, exceto se houver uma anotação específica no próprio recurso que a sobreponha.

 **Entre contas** 

Use os seletores de perfil do IAM para vincular perfis específicos do IAM a determinados namespaces:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: target-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

Os recursos criados no namespace mapeado usam automaticamente o perfil especificado.

Para saber mais sobre os seletores de perfil do IAM, consulte [ACK Cross-Account Resource Management](https://aws-controllers-k8s.github.io/docs/guides/cross-account). Para obter detalhes sobre a configuração entre contas, consulte [Configuração das permissões do ACK](ack-permissions.md).

## Tratamento de erros e comportamento de novas tentativas
<a name="_error_handling_and_retry_behavior"></a>

O ACK trata automaticamente os erros transitórios, repetindo operações com falhas.

Estratégia de novas tentativas:
+ Erros transitórios (por exemplo, limite de taxa, problemas temporários no serviço e permissões insuficientes) acionam automaticamente novas tentativas
+ O recuo exponencial é usado para não sobrecarregar as APIs da AWS
+ O número máximo de tentativas varia de acordo com o tipo de erro
+ Erros permanentes (por exemplo parâmetros inválidos e conflitos de nome de recurso) não geram novas tentativas

Verifique os detalhes do erro no status do recurso utilizando `kubectl describe`:

```
kubectl describe bucket my-bucket
```

Verifique as condições de status em busca de mensagens de erro, eventos que apresentam tentativas de reconciliação recentes e o campo `message`, que detalha o motivo das falhas nas condições de status. Erros comuns incluem permissões do IAM insuficientes, conflitos de nomes de recursos na AWS, valores de configuração inválidos na `spec` e cotas de serviço da AWS excedidas.

Para solucionar erros comuns, consulte [Solução de problemas em funcionalidades do ACK](ack-troubleshooting.md).

## Composição de recursos com o kro
<a name="_resource_composition_with_kro"></a>

Para compor e conectar diversos recursos do ACK entre si, empregue a funcionalidade do EKS para o kro (Kube Resource Orchestrator). Com o kro, você define grupos de recursos de forma declarativa, permitindo a troca de configurações entre os recursos para simplificar o gerenciamento de arquiteturas complexas.

Para obter exemplos detalhados de como criar composições personalizadas de recursos com recursos do ACK, consulte [Conceitos do kro](kro-concepts.md). 

## Próximas etapas
<a name="_next_steps"></a>
+  [Considerações sobre o ACK para o EKS](ack-considerations.md): acesse padrões específicos do EKS e estratégias de integração

# Configuração das permissões do ACK
<a name="ack-permissions"></a>

O ACK precisa de permissões do IAM para realizar a criação e o gerenciamento de recursos da AWS em seu nome. Este tópico explica como o IAM funciona com o ACK e fornece orientações sobre como configurar permissões para diferentes casos de uso.

## Funcionamento do IAM com o ACK
<a name="_how_iam_works_with_ack"></a>

O ACK usa perfis do IAM para se autenticar na AWS e executar ações em seus recursos. Existem duas maneiras de fornecer permissões ao ACK:

 **Perfil da funcionalidade**: consiste no perfil do IAM que você fornece ao criar a funcionalidade do ACK. Este perfil é usado por padrão para todas as operações do ACK.

 **Seletores de perfil do IAM**: consistem em perfis adicionais do IAM que podem ser mapeados para namespaces ou recursos específicos. Esses perfis substituem o perfil da funcionalidade para recursos dentro de seu escopo.

Quando o ACK precisa criar ou gerenciar um recurso, ele determina qual perfil do IAM deve usar:

1. Verifica se um “IAMRoleSelector” corresponde ao namespace do recurso

1. Se uma correspondência for encontrada, assume esse perfil do IAM

1. Caso contrário, usa o perfil da funcionalidade

Esta abordagem possibilita um gerenciamento de permissões flexível, desde configurações simples de perfil único até configurações complexas de diversas contas e várias equipes.

## Conceitos básicos: configuração simples de permissões
<a name="_getting_started_simple_permission_setup"></a>

Para ambientes de desenvolvimento, testes ou casos de uso simples, você pode adicionar todas as permissões de serviço necessárias diretamente ao perfil da funcionalidade.

Essa abordagem é ideal quando:
+ Você está começando a usar o ACK
+ Todos os recursos estão na mesma conta da AWS
+ Uma única equipe gerencia todos os recursos do ACK
+ Você confia que todos os usuários do ACK tenham as mesmas permissões

## Prática recomendada para ambientes de produção: seletores de perfil do IAM
<a name="_production_best_practice_iam_role_selectors"></a>

Para ambientes de produção, use os seletores de perfil do IAM para implementar o acesso de privilégio mínimo e o isolamento em nível de namespace.

Ao usar seletores de perfil do IAM, o perfil da funcionalidade precisa apenas das permissões `sts:AssumeRole` e `sts:TagSession` para assumir os perfis específicos de cada serviço. Não é necessário adicionar nenhuma permissão de serviço da AWS (como S3 ou RDS) ao perfil da funcionalidade em si, pois essas permissões são concedidas aos perfis individuais do IAM que o perfil da funcionalidade assume.

 **Escolha do modelo de permissões**:

Use **permissões diretas**, com a adição de permissões de serviço ao perfil da funcionalidade, quando:
+ Você está começando a usar o serviço e deseja a configuração mais simples
+ Todos os recursos estão na mesma conta que o cluster
+ Você tem requisitos de permissão administrativos para todo o cluster
+ Todas as equipes podem compartilhar as mesmas permissões

Use **seletores de perfil do IAM** quando:
+ Gerenciar recursos em várias contas da AWS
+ Diferentes equipes ou namespaces precisarem de permissões distintas
+ Você precisar de controle de acesso granular por namespace
+ Você desejar seguir as práticas de segurança de privilégio mínimo

É possível começar com permissões diretas e migrar para os seletores de perfil do IAM posteriormente, conforme suas necessidades evoluem.

 **Vantagens de usar seletores de perfil do IAM em ambientes produção:** 
+  **Privilégio mínimo**: cada namespace recebe apenas as permissões de que necessita
+  **Isolamento de equipes**: a Equipe A não pode usar as permissões da Equipe B por engano
+  **Auditoria facilitada**: mapeamento claro de qual namespace usa cada perfil
+  **Suporte entre contas**: necessário para gerenciar recursos em várias contas
+  **Separação de responsabilidades**: diferentes serviços ou ambientes usam perfis distintos

### Configuração básica do seletor de perfil do IAM
<a name="_basic_iam_role_selector_setup"></a>

 **Etapa 1: criação de um perfil do IAM específico para o serviço** 

Crie um perfil do IAM com permissões para serviços específicos da AWS:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": "*"
    }
  ]
}
```

Configure a política de confiança para permitir que o perfil da funcionalidade o assuma:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

 **Etapa 2: concessão da permissão AssumeRole ao perfil da funcionalidade** 

Adicione permissão ao perfil da funcionalidade para assumir o perfil específico do serviço:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::111122223333:role/ACK-S3-Role"
    }
  ]
}
```

 **Etapa 3: criação do IAMRoleSelector** 

Mapeie o perfil do IAM para um namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: s3-namespace-config
spec:
  arn: arn:aws:iam::111122223333:role/ACK-S3-Role
  namespaceSelector:
    names:
      - s3-resources
```

 **Etapa 4: criação de recursos no namespace mapeado** 

Os recursos no namespace `s3-resources` usam automaticamente o perfil especificado:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: s3-resources
spec:
  name: my-production-bucket
```

## Gerenciamento de várias contas
<a name="_multi_account_management"></a>

Use seletores de perfil do IAM para gerenciar recursos em várias contas da AWS.

 **Etapa 1: criação do perfil do IAM entre contas** 

Na conta de destino (444455556666), crie um perfil que confie no perfil da funcionalidade da conta de origem:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

Anexe permissões específicas de serviço a este perfil.

 **Etapa 2: concessão da permissão AssumeRole** 

Na conta de origem (111122223333), permita que o perfil da funcionalidade assuma o perfil da conta de destino:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::444455556666:role/ACKTargetAccountRole"
    }
  ]
}
```

 **Etapa 3: criação do IAMRoleSelector** 

Mapeie o perfil entre contas para um namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: production-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

 **Etapa 4: criação de recursos** 

Os recursos no namespace `production` são criados na conta de destino:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: production
spec:
  name: my-cross-account-bucket
```

## Tags de sessão
<a name="_session_tags"></a>

A funcionalidade ACK do EKS define automaticamente as tags de sessão em todas as solicitações de API da AWS. Essas tags permitem ter controle de acesso e auditoria, identificando a origem de cada solicitação.

### Tags de sessão disponíveis
<a name="_available_session_tags"></a>

As tags de sessão a seguir estão incluídas em todas as chamadas de API da AWS feitas pelo ACK:


| Chave de tag | Descrição | 
| --- | --- | 
|   `eks:eks-capability-arn`   |  O ARN da funcionalidade EKS que faz a solicitação  | 
|   `eks:kubernetes-namespace`   |  O namespace do Kubernetes do recurso gerenciado  | 
|   `eks:kubernetes-api-group`   |  O grupo do recurso de API do Kubernetes (por exemplo, `s3.services.k8s.aws`)  | 

### Uso de tags de sessão para controle de acesso
<a name="_using_session_tags_for_access_control"></a>

É possível usar essas tags de sessão nas condições da política do IAM para restringir quais recursos o ACK pode gerenciar. Isso fornecerá uma camada adicional de segurança além dos seletores de perfil do IAM baseados em namespace.

 **Exemplo: restringir por namespace** 

Permitir que o ACK crie buckets do S3 somente quando a solicitação for originada do namespace `production`:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:kubernetes-namespace": "production"
        }
      }
    }
  ]
}
```

 **Exemplo: restringir por funcionalidade** 

Permitir ações somente a partir de um recurso do ACK específico:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:eks-capability-arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack"
        }
      }
    }
  ]
}
```

**nota**  
As tags de sessão são uma diferença do ACK autogerenciado, que não define essas tags por padrão. Isso permite um controle de acesso mais granular com o recurso gerenciado.

## Padrões avançados de seletores de perfil do IAM
<a name="_advanced_iam_role_selector_patterns"></a>

Para obter configurações avançadas, incluindo selecionadores de rótulos, mapeamento de perfis específicos para recursos e exemplos adicionais, consulte a [documentação relacionada ao IRSA para o ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/irsa/).

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do ACK](ack-concepts.md): compreenda os conceitos do ACK e o ciclo de vida dos recursos
+  [Conceitos do ACK](ack-concepts.md): saiba mais sobre as políticas de adoção e exclusão de recursos
+  [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md): compreenda as práticas recomendadas de segurança para as funcionalidades

# Considerações sobre o ACK para o EKS
<a name="ack-considerations"></a>

Este tópico aborda considerações importantes para o uso da funcionalidade do EKS para o ACK, incluindo a configuração do IAM, os padrões para várias contas e a integração com outras funcionalidades do EKS.

## Padrões de configuração do IAM
<a name="_iam_configuration_patterns"></a>

A funcionalidade do ACK usa um perfil de funcionalidade do IAM para se autenticar na AWS. Escolha o padrão do IAM mais adequado às suas necessidades.

### Simples: um único perfil de funcionalidade
<a name="_simple_single_capability_role"></a>

Para ambientes de desenvolvimento, testes ou casos de uso simples, atribua todas as permissões necessárias diretamente ao perfil de funcionalidade.

 **Quando utilizar**:
+ Conceitos básicos do ACK
+ Implantações em uma única conta
+ Todos os recursos são gerenciados por uma única equipe
+ Ambientes de desenvolvimento e de teste

 **Exemplo**: adicione permissões do S3 e do RDS ao seu perfil de funcionalidade com condições de marcação de recursos:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": ["us-west-2", "us-east-1"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": ["rds:*"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": ["us-west-2", "us-east-1"]
        },
      }
    }
  ]
}
```

Este exemplo restringe as operações do S3 e do RDS a regiões específicas e requer que os recursos do RDS tenham uma etiqueta `ManagedBy: ACK`.

### Produção: seletores de perfil do IAM
<a name="_production_iam_role_selectors"></a>

Para ambientes de produção, use os seletores de perfil do IAM para implementar o acesso de privilégio mínimo e o isolamento em nível de namespace.

 **Quando utilizar**:
+ Ambientes de produção
+ Clusters gerenciados por várias equipes
+ Gerenciamento de recursos em várias contas
+ Requisitos de segurança de privilégio mínimo
+ Diferentes serviços que necessitam de permissões distintas

 **Benefícios**:
+ Cada namespace recebe apenas as permissões de que necessita
+ Isolamento de equipes, portanto, a Equipe A não pode usar as permissões da Equipe B
+ Auditoria e conformidade facilitadas
+ Obrigatório para o gerenciamento de recursos entre contas

Para obter a configuração detalhada do seletor de perfil do IAM, consulte [Configuração das permissões do ACK](ack-permissions.md).

## Integração com outras funcionalidades do EKS
<a name="_integration_with_other_eks_capabilities"></a>

### GitOps com Argo CD
<a name="_gitops_with_argo_cd"></a>

Empregue a funcionalidade do EKS para o Argo CD a fim de implantar recursos do ACK de repositórios do Git, permitindo fluxos de trabalho do GitOps para o gerenciamento de infraestrutura.

 **Considerações**:
+ Armazene os recursos do ACK junto aos manifestos da aplicação para um GitOps de ponta a ponta
+ Organize por ambiente, serviço ou tipo de recurso com base na estrutura da sua equipe
+ Use a sincronização automática do Argo CD para reconciliação contínua
+ Habilite a supressão para remover automaticamente recursos excluídos
+ Considere o uso de padrões hub-and-spoke para o gerenciamento da infraestrutura de vários clusters

O GitOps oferece trilhas de auditoria, funcionalidades de reversão e gerenciamento declarativo da infraestrutura. Para saber mais sobre o Argo CD, consulte [Como trabalhar com o Argo CD](working-with-argocd.md).

### Composição de recursos com o kro
<a name="_resource_composition_with_kro"></a>

Use a funcionalidade do EKS para o kro (Kube Resource Orchestrator) para compor vários recursos do ACK em abstrações de nível superior e APIs personalizadas.

 **Situações para o uso do kro com o ACK**:
+ Criação de padrões reutilizáveis para pilhas de infraestrutura comuns (banco de dados \$1 backup \$1 monitoramento)
+ Desenvolvimento de plataformas de autoatendimento com APIs simplificadas para as equipes destinadas ao trabalho com APIs aplicação
+ Gerenciamento de dependências de recursos e transferência de valores entre recursos (como o ARN de um bucket do S3 para uma função do Lambda)
+ Padronização das configurações de infraestrutura entre as equipes
+ Redução da complexidade ao ocultar detalhes de implementação atrás de recursos personalizados

 **Padrões de exemplo**:
+ Pilha da aplicação: bucket do S3 \$1 fila do SQS \$1 configuração de notificação
+ Configuração do banco de dados: instância do RDS \$1 grupo de parâmetros \$1 grupo de segurança \$1 segredos
+ Rede: VPC \$1 sub-redes \$1 tabelas de rotas \$1 grupos de segurança

O kro gerencia a ordenação de dependências, a propagação de status e o gerenciamento do ciclo de vida dos recursos compostos. Para saber mais sobre o kro, consulte [Conceitos do kro](kro-concepts.md).

## Organização dos recursos
<a name="_organizing_your_resources"></a>

Organize os recursos do ACK usando namespaces do Kubernetes e etiquetas de recursos da AWS para obter melhor gerenciamento, controle de acesso e rastreamento de custos.

### Organização de namespaces
<a name="_namespace_organization"></a>

Use namespaces do Kubernetes para a separação lógica de recursos do ACK por ambiente (por exemplo, produção, preparação e desenvolvimento), equipe (como plataforma, dados e ML) ou aplicação.

 **Benefícios**:
+ RBAC com escopo de namespace para controle de acesso
+ Definição de regiões padrão por namespace usando anotações
+ Gerenciamento e limpeza de recursos facilitados
+ Separação lógica alinhada à estrutura organizacional

### Marcação de recursos
<a name="_resource_tagging"></a>

A funcionalidade ACK do EKS aplica automaticamente as tags padrão a todos os recursos da AWS que ele cria. Essas tags diferem do ACK autogerenciado e fornecem rastreabilidade aprimorada.

 **Tags padrão aplicadas pela funcionalidade**:


| Chave de tag | Descrição | 
| --- | --- | 
|   `eks:controller-version`   |  A versão do controlador ACK  | 
|   `eks:kubernetes-namespace`   |  O namespace do Kubernetes do recurso ACK  | 
|   `eks:kubernetes-resource-name`   |  O nome do recurso do Kubernetes  | 
|   `eks:kubernetes-api-group`   |  O grupo de API do Kubernetes (por exemplo, `s3.services.k8s.aws`)  | 
|   `eks:eks-capability-arn`   |  O ARN da funcionalidade ACK do EKS  | 

**nota**  
O ACK autogerenciado usa tags padrão diferentes: `services.k8s.aws/controller-version` e `services.k8s.aws/namespace`. As tags da funcionalidade usam o prefixo `eks:` para manter a consistência com outros recursos do EKS.

 **Tags adicionais recomendadas**:

Adicione tags personalizadas para alocação de custos, rastreamento de propriedade e fins organizacionais.
+ Ambiente (por exemplo, produção, preparação e desenvolvimento)
+ Propriedade da equipe ou do departamento
+ Centro de custo para alocação de faturamento
+ Nome da aplicação ou do serviço

## Migração de outras ferramentas de infraestrutura como código
<a name="_migration_from_other_infrastructure_as_code_tools"></a>

Muitas organizações estão encontrando valor na padronização do Kubernetes além da orquestração de suas workloads. Migrar a infraestrutura e o gerenciamento de recursos da AWS para o ACK permite que você padronize o gerenciamento da infraestrutura utilizando as APIs do Kubernetes em conjunto com as workloads da aplicação.

 **Benefícios da padronização no Kubernetes para infraestrutura**:
+  **Fonte única de verdade**: gerencie tanto aplicações quanto infraestrutura no Kubernetes, permitindo uma prática de GitOps de ponta a ponta
+  **Ferramentas unificadas**: as equipes usam recursos e ferramentas do Kubernetes em vez de aprender diversas ferramentas e frameworks
+  **Reconciliação consistente**: o ACK reconcilia continuamente os recursos da AWS assim como o Kubernetes faz com as workloads, detectando e corrigindo desvios em comparação com ferramentas imperativas
+  **Composições nativas**: com o kro e o ACK juntos, referencie recursos da AWS diretamente nos manifestos da aplicação e de recursos, transferindo strings de conexão e ARNs entre os recursos
+  **Operações simplificadas**: um único ambiente de gerenciamento para implantações, reversões e observabilidade em todo o sistema

O ACK permite a adoção de recursos da AWS já existentes sem recriá-los, possibilitando migrações sem tempo de inatividade provenientes do CloudFormation, do Terraform ou de recursos externos ao cluster.

 **Adote um recurso existente**:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Após a adoção, o recurso passa a ser gerenciado pelo ACK e pode ser atualizado por meio de manifestos do Kubernetes. É possível realizar a migração de forma incremental, adotando recursos conforme necessário, enquanto mantém as ferramentas de IaC existentes para outros recursos.

O ACK também oferece suporte a recursos somente de leitura. Para recursos gerenciados por outras equipes ou ferramentas que você deseja referenciar, mas não modificar, combine a adoção com a política de exclusão `retain` e conceda permissões somente de leitura no IAM. Isso permite que as aplicações localizem infraestruturas compartilhadas (por exemplo, VPCs, perfis de funcionalidade do IAM e chaves do KMS) por meio das APIs do Kubernetes, sem o risco de modificações acidentais.

Para obter mais informações sobre a adoção de recursos, consulte [Conceitos do ACK](ack-concepts.md).

## Políticas de exclusão
<a name="_deletion_policies"></a>

As políticas de exclusão controlam o que acontece com os recursos da AWS quando você exclui o recurso correspondente no Kubernetes. Escolha a política adequada com base no ciclo de vida do recurso e em seus requisitos operacionais.

### Exclusão (padrão)
<a name="_delete_default"></a>

O recurso da AWS é excluído quando você exclui o recurso correspondente no Kubernetes. Isso mantém a consistência entre o cluster e a AWS, garantindo que não ocorra o acúmulo de recursos.

 **Situações para o uso da exclusão**:
+ Ambientes de desenvolvimento e de teste nos quais a limpeza é importante
+ Recursos efêmeros vinculados ao ciclo de vida da aplicação (por exemplo, bancos de dados de teste e buckets temporários)
+ Recursos que não devem existir sem a aplicação (por exemplo filas do SQS e clusters do ElastiCache)
+ Otimização de custos com a limpeza automática de recursos não utilizados
+ Ambientes gerenciados com GitOps, nos quais a remoção do recurso no Git deve excluir a infraestrutura

A política de exclusão padrão alinha-se ao modelo declarativo do Kubernetes, ou seja, o que está no cluster corresponde ao que existe na AWS.

### Reter
<a name="_retain"></a>

O recurso da AWS é mantido quando você exclui o recurso correspondente no Kubernetes. Esta opção protege dados críticos e permite que os recursos permaneçam ativos mesmo após a remoção da representação no Kubernetes.

 **Situações para o uso da retenção**:
+ Bancos de dados de produção com dados críticos que devem ser mantidos apesar de mudanças no cluster
+ Buckets de armazenamento de longo prazo com requisitos de conformidade ou auditoria
+ Recursos compartilhados usados por diversas aplicações ou equipes
+ Recursos em processo de migração para diferentes ferramentas de gerenciamento
+ Cenários de recuperação de desastres em que você deseja preservar a infraestrutura
+ Recursos com dependências complexas que exigem uma desativação cuidadosa

```
apiVersion: rds.services.k8s.aws/v1alpha1
kind: DBInstance
metadata:
  name: production-db
  annotations:
    services.k8s.aws/deletion-policy: "retain"
spec:
  dbInstanceIdentifier: prod-db
  # ... configuration
```

**Importante**  
Recursos retidos continuam a gerar custos na AWS e devem ser excluídos manualmente da AWS quando não forem mais necessários. Use a marcação de recursos para rastrear recursos retidos para limpeza posterior.

Para saber mais sobre as políticas de exclusão, consulte [Conceitos do ACK](ack-concepts.md).

## Documentação original
<a name="_upstream_documentation"></a>

Para obter informações detalhadas sobre o uso do ACK:
+  [Guia de uso do ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/usage/): criação e gerenciamento de recursos
+  [Referência da API do ACK](https://aws-controllers-k8s.github.io/community/reference/): documentação completa da API para todos os serviços
+  [Documentação do ACK](https://aws-controllers-k8s.github.io/community/docs/): documentação abrangente para o usuário

## Próximas etapas
<a name="_next_steps"></a>
+  [Configuração das permissões do ACK](ack-permissions.md): configure permissões do IAM e padrões para várias contas
+  [Conceitos do ACK](ack-concepts.md): compreenda os conceitos do ACK e o ciclo de vida dos recursos
+  [Solução de problemas em funcionalidades do ACK](ack-troubleshooting.md): solucione problemas do ACK
+  [Como trabalhar com o Argo CD](working-with-argocd.md): implante recursos do ACK com GitOps
+  [Conceitos do kro](kro-concepts.md): componha recursos do ACK em abstrações de nível superior

# Solução de problemas em funcionalidades do ACK
<a name="ack-troubleshooting"></a>

Este tópico fornece orientações para a solução de problemas à funcionalidade do EKS para o ACK, incluindo verificações de integridade da funcionalidade, verificação do status dos recursos e problemas relacionados à permissão do IAM.

**nota**  
As funcionalidades do EKS são totalmente gerenciadas e executadas de forma externa ao cluster. Você não tem acesso aos logs do controlador nem aos namespaces do controlador. A solução de problemas se concentra na integridade da funcionalidade, no status dos recursos e na configuração do IAM.

## Funcionalidade está no status ACTIVE, mas os recursos não estão sendo criados
<a name="_capability_is_active_but_resources_arent_being_created"></a>

Se a sua funcionalidade do ACK apresentar o status `ACTIVE`, mas os recursos não estiverem sendo criados na AWS, verifique a integridade da funcionalidade, o status dos recursos e as permissões do IAM.

 **Verifique a integridade da funcionalidade**:

É possível visualizar problemas de integridade e de status da funcionalidade no console do EKS ou usando a AWS CLI.

 **Console do**:

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do seu cluster.

1. Escolha a guia **Observabilidade**.

1. Escolha **Monitorar cluster**.

1. Escolha a guia **Funcionalidades** para visualizar a integridade e o status de todas as funcionalidades.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack

# Look for issues in the health section
```

 **Causas comuns**:
+  **Ausência de permissões do IAM**: o perfil da funcionalidade não conta com permissões para o serviço da AWS
+  **Namespace incorreto**: recursos criados em um namespace sem o IAMRoleSelector adequado
+  **Especificação de recurso inválida**: é necessário verificar as condições de status do recurso para encontrar erros de validação
+  **Controle de utilização da API**: os limites de taxa da API da AWS foram atingidos
+  **Webhooks de admissão**: os webhooks de admissão estão impedindo o controlador de atualizar o status do recurso

 **Verifique o status do recurso**:

```
# Describe the resource to see conditions and events
kubectl describe bucket my-bucket -n default

# Look for status conditions
kubectl get bucket my-bucket -n default -o jsonpath='{.status.conditions}'

# View resource events
kubectl get events --field-selector involvedObject.name=my-bucket -n default
```

 **Verifique as permissões do IAM**:

```
# View the Capability Role's policies
aws iam list-attached-role-policies --role-name my-ack-capability-role
aws iam list-role-policies --role-name my-ack-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-ack-capability-role --policy-name policy-name
```

## Recursos são criados na AWS, mas que não aparecem no Kubernetes
<a name="resources_created_in_shared_aws_but_not_showing_in_kubernetes"></a>

O ACK rastreia apenas os recursos criados por meio de manifestos do Kubernetes. Para gerenciar recursos existentes da AWS com o ACK, empregue o recurso de adoção.

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Para obter mais informações sobre a adoção de recursos, consulte [Conceitos do ACK](ack-concepts.md).

## Recursos entre contas não estão sendo criados
<a name="_cross_account_resources_not_being_created"></a>

Se os recursos não estiverem sendo criados em uma conta de destino da AWS ao usar os seletores de perfil do IAM, verifique a relação de confiança e a configuração do IAMRoleSelector.

 **Verifique a relação de confiança**:

```
# Check the trust policy in the target account role
aws iam get-role --role-name cross-account-ack-role --query 'Role.AssumeRolePolicyDocument'
```

A política de confiança deve permitir que o perfil da funcionalidade da conta de origem a assuma.

 **Confirme a configuração do IAMRoleSelector**:

```
# List IAMRoleSelectors (cluster-scoped)
kubectl get iamroleselector

# Describe specific selector
kubectl describe iamroleselector my-selector
```

 **Verifique o alinhamento do namespace**:

Os IAMRoleSelectors são recursos de escopo do cluster, mas operam em namespaces específicos. Certifique-se de que os recursos do ACK estejam em um namespace que corresponda ao selecionador de namespace do IAMRoleSelector:

```
# Check resource namespace
kubectl get bucket my-cross-account-bucket -n production

# List all IAMRoleSelectors (cluster-scoped)
kubectl get iamroleselector

# Check which namespace the selector targets
kubectl get iamroleselector my-selector -o jsonpath='{.spec.namespaceSelector}'
```

 **Verifique a condição IAMRoleSelected**:

Verifique se o IAMRoleSelector foi correspondido com sucesso ao seu recurso, consultando a condição `ACK.IAMRoleSelected`:

```
# Check if IAMRoleSelector was matched
kubectl get bucket my-cross-account-bucket -n production -o jsonpath='{.status.conditions[?(@.type=="ACK.IAMRoleSelected")]}'
```

Se a condição for `False` ou estiver ausente, o selecionador de namespace do IAMRoleSelector não corresponde ao namespace do recurso. Verifique se o `namespaceSelector` do seletor corresponde aos rótulos de namespace do seu recurso.

 **Verifique as permissões do perfil da funcionalidade**:

O perfil de funcionalidade precisa das permissões `sts:AssumeRole` e `sts:TagSession` para o perfil da conta de destino:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::[.replaceable]`444455556666`:role/[.replaceable]`cross-account-ack-role`"
    }
  ]
}
```

Para obter informações detalhadas sobre a configuração entre contas, consulte [Configuração das permissões do ACK](ack-permissions.md).

## Próximas etapas
<a name="_next_steps"></a>
+  [Considerações sobre o ACK para o EKS](ack-considerations.md): acesse considerações e práticas recomendadas do ACK
+  [Configuração das permissões do ACK](ack-permissions.md): configure permissões do IAM e padrões para várias contas
+  [Conceitos do ACK](ack-concepts.md): compreenda os conceitos do ACK e o ciclo de vida dos recursos
+  [Solução de problemas das funcionalidades do EKS](capabilities-troubleshooting.md): acesse orientações gerais para solução de problemas de funcionalidades

# Comparação da funcionalidade do EKS para o ACK em relação ao ACK autogerenciado
<a name="ack-comparison"></a>

A funcionalidade do EKS para o ACK é equivalente à dos controladores do ACK autogerenciados, porém apresenta vantagens operacionais significativas. Para obter uma comparação geral das funcionalidades do EKS em relação às soluções autogerenciadas, consulte [Considerações sobre as funcionalidades do EKS](capabilities-considerations.md). Este tópico se concentra nas diferenças específicas do ACK.

## Diferenças em relação à versão original do ACK
<a name="_differences_from_upstream_ack"></a>

A funcionalidade do EKS para o ACK se baseia na versão original dos controladores do ACK, porém apresenta diferenças na integração com o IAM.

 **Perfil da funcionalidade do IAM**: a funcionalidade usa um perfil do IAM dedicado com uma política de confiança que permite o serviço `capabilities.eks.amazonaws.com` da entidade principal, e não o IRSA (perfis do IAM para contas de serviços). É possível anexar políticas do IAM diretamente ao perfil da funcionalidade, sem a necessidade de criar ou anotar contas de serviços do Kubernetes ou configurar provedores OIDC. Uma prática recomendada para casos de uso em ambientes de produção é configurar permissões de serviços usando o `IAMRoleSelector`. Consulte [Configuração das permissões do ACK](ack-permissions.md) para obter mais detalhes.

 **Tags de sessão**: o recurso gerenciado define automaticamente as tags de sessão em todas as solicitações da AWS API, permitindo controle de acesso e auditoria refinados. As tags incluem `eks:eks-capability-arn`, `eks:kubernetes-namespace` e `eks:kubernetes-api-group`. Isso difere do ACK autogerenciado, que não define essas tags por padrão. Consulte [Configuração das permissões do ACK](ack-permissions.md) para obter detalhes sobre o uso de tags de sessão nas políticas do IAM.

 **Tags de recursos**: a funcionalidade aplica tags padrão diferentes aos recursos da AWS do ACK autogerenciado. O recurso usa tags prefixadas `eks:` (como`eks:kubernetes-namespace`, `eks:eks-capability-arn`) em vez das tags `services.k8s.aws/` usadas pelo ACK autogerenciado. Consulte [Considerações sobre o ACK para o EKS](ack-considerations.md) para obter a lista completa das tags de recursos padrão.

 **Compatibilidade de recursos**: os recursos personalizados do ACK funcionam de forma idêntica à versão original do ACK, sem a necessidade de alterações nos arquivos YAML de recursos do ACK. A funcionalidade usa as mesmas APIs do Kubernetes e CRDs, portanto, ferramentas como o `kubectl` funcionam de maneira semelhante. Todos os controladores e recursos em disponibilidade geral (GA, na sigla em inglês) da versão original do ACK são compatíveis.

Para obter a documentação completa do ACK e os guias específicos dos serviços, consulte a [documentação do ACK](https://aws-controllers-k8s.github.io/community/).

## Caminho de migração
<a name="_migration_path"></a>

É possível migrar de um ACK autogerenciado para a funcionalidade gerenciada sem tempo de inatividade:

1. Atualize o controlador do ACK autogerenciado para usar `kube-system` para concessões de eleição de líder, por exemplo:

   ```
   helm upgrade --install ack-s3-controller \
     oci://public.ecr.aws/aws-controllers-k8s/s3-chart \
     --namespace ack-system \
     --set leaderElection.namespace=kube-system
   ```

   Isso transfere a concessão do controlador para o `kube-system`, permitindo que a funcionalidade gerenciada se coordene com ele.

1. Crie a funcionalidade do ACK no cluster (consulte [Criação de uma funcionalidade do ACK](create-ack-capability.md))

1. A funcionalidade gerenciada reconhece os recursos da AWS gerenciados pelo ACK existentes e assume a reconciliação

1. Reduza gradualmente a escala verticalmente ou remova as implantações dos controladores autogerenciados:

   ```
   helm uninstall ack-s3-controller --namespace ack-system
   ```

Com essa abordagem, ambos os controladores podem coexistir com segurança durante a migração. A funcionalidade gerenciada assume automaticamente os recursos que antes eram gerenciados pelos controladores autogerenciados, assegurando reconciliação contínua sem gerar conflitos.

## Próximas etapas
<a name="_next_steps"></a>
+  [Criação de uma funcionalidade do ACK](create-ack-capability.md): crie um recurso de funcionalidade do ACK
+  [Conceitos do ACK](ack-concepts.md): compreenda os conceitos do ACK e o ciclo de vida dos recursos
+  [Configuração das permissões do ACK](ack-permissions.md): configure o IAM e as permissões

# Implantação contínua com o Argo CD
<a name="argocd"></a>

O Argo CD é uma ferramenta de entrega contínua declarativa e baseada em GitOps para Kubernetes. Com o Argo CD, você pode automatizar a implantação e o gerenciamento do ciclo de vida de suas aplicações em vários clusters e ambientes. O Argo CD oferece suporte a vários tipos de origem, incluindo repositórios do Git, registros do Helm (HTTP e OCI) e imagens OCI, proporcionando flexibilidade para organizações com requisitos de segurança e conformidade distintos.

Com as funcionalidades do EKS, o Argo CD é totalmente gerenciado pela AWS, o que elimina a necessidade de instalação, manutenção e escalabilidade dos controladores do Argo CD e de suas dependências nos clusters.

## Funcionamento do Argo CD
<a name="_how_argo_cd_works"></a>

O Argo CD segue o padrão de GitOps, no qual a origem da sua aplicação (por exemplo, repositório do Git, registro do Helm ou imagem OCI) é a fonte da verdade para definir o estado desejado da aplicação. Ao criar um recurso `Application` do Argo CD, você especifica a origem que contém os manifestos da aplicação e o cluster e o namespace do Kubernetes de destino. O Argo CD monitora continuamente tanto a origem quanto o estado em execução no cluster, sincronizando automaticamente quaisquer alterações para garantir que o estado do cluster corresponda ao estado desejado.

**nota**  
Com a funcionalidade do EKS para o Argo CD, o software do Argo CD é executado no ambiente de gerenciamento da AWS, e não em seus nós de processamento. Isso significa que os nós de processamento não precisam de acesso direto a repositórios do Git ou a registros do Helm, pois a funcionalidade gerencia o acesso à origem a partir da conta da AWS.

O Argo CD fornece três tipos de recursos primários:
+  **Application**: define uma implantação proveniente de um repositório do Git para um cluster de destino
+  **ApplicationSet**: gera diversas Applications usando modelos para implantações em vários clusters
+  **AppProject**: fornece agrupamento lógico e controle de acesso para as Applications

 **Exemplo: criação de uma Application do Argo CD** 

O exemplo a seguir mostra como criar um recurso `Application` do Argo CD:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

**nota**  
Use `destination.name` com o nome do cluster utilizado ao registrar o cluster (como `in-cluster` para o cluster local). O campo `destination.server` também funciona com ARNs de cluster de EKS, mas o uso de nomes de cluster é recomendado para melhor legibilidade.

## Benefícios do Argo CD
<a name="_benefits_of_argo_cd"></a>

O Argo CD implementa um fluxo de trabalho de GitOps no qual você define as configurações da aplicação em repositórios do Git e o Argo CD sincroniza automaticamente as aplicações para corresponderem ao estado desejado. Essa abordagem centrada no Git fornece uma trilha de auditoria completa de todas as alterações, permite reversões fáceis e integra-se naturalmente aos seus processos existentes de revisão e aprovação de código. O Argo CD detecta e reconcilia automaticamente o desvio entre o estado desejado no Git e o estado real nos clusters, garantindo que as implantações permaneçam consistentes com a configuração declarada.

Com o Argo CD, é possível implantar e gerenciar aplicações em vários clusters usando uma única instância do Argo CD, simplificando as operações em ambientes com vários clusters e diversas regiões. A interface do usuário do Argo CD fornece funcionalidades de visualização e monitoramento, permitindo que você visualize o status da implantação, a integridade e o histórico das aplicações. A interface do usuário se integra ao Centro de Identidade da AWS (anteriormente AWS SSO) para autenticação e autorização simplificadas, permitindo que você controle o acesso com a infraestrutura de gerenciamento de identidades existente.

Como parte das funcionalidades gerenciadas do EKS, o Argo CD é totalmente gerenciado pela AWS, eliminando a necessidade de instalar, configurar e manter a infraestrutura do Argo CD. A AWS cuida da escalabilidade, da aplicação de patches e do gerenciamento operacional, permitindo que as equipes se concentrem na entrega de aplicações em vez da manutenção de ferramentas.

## Integração com o Centro de Identidade da AWS
<a name="integration_with_shared_aws_identity_center"></a>

As funcionalidades gerenciadas do EKS fornecem integração direta entre o Argo CD e o Centro de Identidade da AWS, permitindo autenticação e autorização simplificadas para os usuários. Ao habilitar a funcionalidade do Argo CD, é possível configurar a integração com o Centro de Identidade da AWS para mapear grupos e usuários do Centro de Identidade para perfis de RBAC do Argo CD, permitindo controlar quem pode acessar e gerenciar aplicações no Argo CD.

## Integração com outras funcionalidades gerenciadas do EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

O Argo CD pode ser integrado a outras funcionalidades gerenciadas do EKS.
+  **AWS Controllers for Kubernetes (ACK)**: use o Argo CD para gerenciar a implantação de recursos do ACK em diversos clusters, possibilitando fluxos de trabalho de GitOps para a infraestrutura da AWS.
+  **kro (Kube Resource Orchestrator)**: use o Argo CD para implantar composições do kro em vários clusters, possibilitando uma composição de recursos consistente em todo o seu ambiente do Kubernetes.

## Conceitos básicos do Argo CD
<a name="_getting_started_with_argo_cd"></a>

Para começar a usar a funcionalidade do EKS para o Argo CD:

1. Crie e configure um perfil da funcionalidade do IAM com as permissões necessárias para que o Argo CD acesse suas fontes e gerencie aplicações

1.  [Crie um recurso da funcionalidade do Argo CD](create-argocd-capability.md) em seu cluster de EKS por meio do Console da AWS, da AWS CLI ou da ferramenta de infraestrutura como código de sua preferência.

1. Configure o acesso ao repositório e registre os clusters para a implantação de aplicações.

1. Crie recursos de Application para implantar suas aplicações usando fontes declarativas.

# Criar um recurso Argo CD
<a name="create-argocd-capability"></a>

Este tópico explica como criar uma funcionalidade do Argo CD no cluster do Amazon EKS.

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

Antes de criar uma funcionalidade do Argo CD, certifique-se de ter:
+ Um cluster do Amazon EKS existente executando uma versão compatível do Kubernetes (há suporte para todas as versões nos períodos de suporte padrão e estendido)
+  **Centro de Identidade da AWS configurado**: necessário para a autenticação do Argo CD (não há suporte para usuários locais)
+ Um perfil do IAM da funcionalidade com permissões para o Argo CD
+ Permissões do IAM suficientes para criar recursos de funcionalidades em clusters de EKS
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster
+ (Opcional) A CLI do Argo CD instalada para facilitar o gerenciamento de clusters e repositórios
+ (Para a CLI ou o eksctl) A ferramenta de CLI apropriada instalada e configurada

Para obter instruções sobre como criar o perfil do IAM para a funcionalidade, consulte [Perfil do IAM para a funcionalidade do Amazon EKS](capability-role.md). Para obter a configuração do Centro de Identidade, consulte [Conceitos básicos do Centro de Identidade da AWS](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html).

**Importante**  
O perfil do IAM para a funcionalidade que você fornece determina quais recursos da AWS o Argo CD pode acessar. Isso inclui o acesso a repositórios do Git por meio do CodeConnections e a segredos no Secrets Manager. Para obter orientações sobre como criar um perfil apropriado com permissões de privilégio mínimo, consulte [Perfil do IAM para a funcionalidade do Amazon EKS](capability-role.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Escolha da ferramenta
<a name="_choose_your_tool"></a>

É possível criar uma funcionalidade do Argo CD por meio do Console de gerenciamento da AWS, da AWS CLI ou do eksctl:
+  [Criação de uma funcionalidade do Argo CD por meio do Console](argocd-create-console.md): use o Console para obter uma experiência guiada
+  [Criação de uma funcionalidade do Argo CD por meio da AWS CLI](argocd-create-cli.md): use a AWS CLI para obter scripts e automação
+  [Criação de uma funcionalidade do Argo CD por meio do eksctl](argocd-create-eksctl.md): use o eksctl para obter uma experiência nativa do Kubernetes

## O que ocorre durante a criação de uma funcionalidade do Argo CD
<a name="_what_happens_when_you_create_an_argo_cd_capability"></a>

Ao criar uma funcionalidade do Argo CD:

1. O EKS cria o serviço da funcionalidade do Argo CD no ambiente de gerenciamento da AWS

1. As definições de recursos personalizados (CRDs, na sigla em inglês) são instaladas no cluster

1. Uma entrada de acesso é criada automaticamente para seu perfil de funcionalidade do IAM com políticas de entrada de acesso específicas de recursos que concedem permissões básicas do Kubernetes (consulte [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md))

1. O Argo CD começa a monitorar os recursos personalizados (ApplicationSets, AppProjects)

1. O status da funcionalidade é alterado de `CREATING` para `ACTIVE` 

1. A interface de usuário do Argo CD torna-se acessível por meio de seu URL

Uma vez ativa, será possível criar Applications do Argo CD no seu cluster para realizar implantações a partir das suas fontes declarativas.

**nota**  
A entrada de acesso criada automaticamente não concede permissões para implantar aplicações em clusters. Para implantar aplicações, é necessário configurar permissões de RBAC adicionais do Kubernetes para cada cluster de destino. Consulte [Registro de clusters de destino](argocd-register-clusters.md) para obter detalhes sobre como registrar clusters e configurar o acesso.

## Próximas etapas
<a name="_next_steps"></a>

Após criar a funcionalidade do Argo CD:
+  [Conceitos do Argo CD](argocd-concepts.md): aprenda sobre os princípios de GitOps, as políticas de sincronização e os padrões para vários clusters
+  [Como trabalhar com o Argo CD](working-with-argocd.md): configure o acesso ao repositório, registre os clusters de destino e crie Applications
+  [Considerações sobre o Argo CD](argocd-considerations.md): conheça os padrões de arquitetura de vários clusters e a configuração avançada

# Criação de uma funcionalidade do Argo CD por meio do Console
<a name="argocd-create-console"></a>

Este tópico descreve como criar uma funcionalidade do Argo CD usando o Console de gerenciamento da AWS.

## Pré-requisitos
<a name="_prerequisites"></a>
+  **Centro de Identidade da AWS configurado**: o Argo CD requer o Centro de Identidade da AWS para autenticação. Não há suporte para usuários locais. Se você não tiver o Centro de Identidade da AWS configurado, consulte [Conceitos básicos do Centro de Identidade da AWS](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) para criar uma instância do Centro de Identidade, e [Adicionar usuários](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) e [Adicionar grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) para criar usuários e grupos para acesso ao Argo CD.

## Criação da funcionalidade do Argo CD
<a name="_create_the_argo_cd_capability"></a>

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do cluster para abrir a página de detalhes do cluster.

1. Escolha a guia **Funcionalidades**.

1. Na barra de navegação à esquerda, selecione **Argo CD**.

1. Escolha **Criar funcionalidade do Argo CD**.

1. No **perfil da funcionalidade do IAM**:
   + Se você já tiver um perfil da funcionalidade do IAM, selecione-o no menu suspenso
   + Se a criação de um perfil for necessária, escolha **Criar perfil do Argo CD** 

     Isso abre o console do IAM em uma nova guia com a política de confiança preenchida previamente e fornece acesso total de leitura ao Secrets Manager. Nenhuma outra permissão é adicionada por padrão, mas você pode adicioná-las se necessário. Se você planeja usar repositórios do CodeCommit ou outros serviços da AWS, adicione as permissões adequadas antes de criar o perfil.

     Após criar o perfil, retorne ao console do EKS e o perfil será selecionado automaticamente.
**nota**  
Se você planeja usar as integrações opcionais com o AWS Secrets Manager ou o AWS CodeConnections, precisará adicionar permissões ao perfil. Para obter exemplos da política do IAM e de orientações de configuração, consulte [Gerenciamento de segredos de aplicações com o AWS Secrets Manager](integration-secrets-manager.md) e [Estabelecimento de conexão com repositórios do Git usando o AWS CodeConnections](integration-codeconnections.md).

1. Configure a integração com o Centro de Identidade da AWS:

   1. Selecione **Habilitar integração com o Centro de Identidade da AWS**.

   1. Escolha sua instância do Centro de Identidade no menu suspenso.

   1. Configure os mapeamentos de perfil para RBAC atribuindo usuários ou grupos aos perfis do Argo CD (ADMIN, EDITOR ou VIEWER).

1. Escolha **Criar**.

O processo de criação da funcionalidade é iniciado.

## Verificação da ativação da funcionalidade
<a name="_verify_the_capability_is_active"></a>

1. Na guia **Funcionalidades**, visualize o status da funcionalidade do Argo CD.

1. Aguarde até que o status mude de `CREATING` para `ACTIVE`.

1. Assim que estiver com o status ativo, a funcionalidade estará pronta para uso.

Para obter informações sobre os status das funcionalidades e sobre a solução de problemas, consulte [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md).

## Acesso à interface do usuário do Argo CD
<a name="_access_the_argo_cd_ui"></a>

Depois que a funcionalidade estiver ativa, você poderá acessar a interface do usuário do Argo CD:

1. Na página da funcionalidade do Argo CD, escolha **Abrir interface do usuário do Argo CD**.

1. A interface do usuário do Argo CD será aberta em uma nova guia do navegador.

1. Em seguida, você pode criar Applications e gerenciar implantações por meio da interface do usuário.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): configure repositórios, registre clusters e crie Applications
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse a arquitetura de vários clusters e a configuração avançada
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do Argo CD

# Criação de uma funcionalidade do Argo CD por meio da AWS CLI
<a name="argocd-create-cli"></a>

Este tópico descreve como criar uma funcionalidade do Argo CD usando a AWS CLI.

## Pré-requisitos
<a name="_prerequisites"></a>
+  **AWS CLI**: versão `2.12.3` ou em versões posteriores. Para verificar a versão, execute `aws --version`. Para obter mais informações, consulte [Instalação](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) no Guia do Usuário da Interface de Linha de Comando AWS.
+  ** `kubectl` ** – uma ferramenta de linha de comando para trabalhar com clusters do Kubernetes. Para obter mais informações, consulte [Configurar o `kubectl` e o `eksctl`](install-kubectl.md).
+  **Centro de Identidade da AWS configurado**: o Argo CD requer o Centro de Identidade da AWS para autenticação. Não há suporte para usuários locais. Se você não tiver o Centro de Identidade da AWS configurado, consulte [Conceitos básicos do Centro de Identidade da AWS](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) para criar uma instância do Centro de Identidade, e [Adicionar usuários](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) e [Adicionar grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) para criar usuários e grupos para acesso ao Argo CD.

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confiança:

```
cat > argocd-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crie o perfil do IAM:

```
aws iam create-role \
  --role-name ArgoCDCapabilityRole \
  --assume-role-policy-document file://argocd-trust-policy.json
```

**nota**  
Se você planeja usar as integrações opcionais com o AWS Secrets Manager ou o AWS CodeConnections, precisará adicionar permissões ao perfil. Para obter exemplos da política do IAM e de orientações de configuração, consulte [Gerenciamento de segredos de aplicações com o AWS Secrets Manager](integration-secrets-manager.md) e [Estabelecimento de conexão com repositórios do Git usando o AWS CodeConnections](integration-codeconnections.md).

## Etapa 2: criação da funcionalidade do Argo CD
<a name="_step_2_create_the_argo_cd_capability"></a>

Crie o recurso da funcionalidade do Argo CD no cluster.

Primeiro, defina as variáveis de ambiente para a sua configuração do Centro de Identidade:

```
# Get your Identity Center instance ARN (replace region if your IDC instance is in a different region)
export IDC_INSTANCE_ARN=$(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].InstanceArn' --output text)

# Get a user ID for RBAC mapping (replace with your username and region if needed)
export IDC_USER_ID=$(aws identitystore list-users \
  --region [.replaceable]`region` \
  --identity-store-id $(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text)

echo "IDC_INSTANCE_ARN=$IDC_INSTANCE_ARN"
echo "IDC_USER_ID=$IDC_USER_ID"
```

Crie a funcionalidade com integração ao Centro de Identidade. Substitua *region-code* pela região da AWS em que seu cluster está localizado e *my-cluster* pelo nome do seu cluster e *idc-region-code* pelo código da região em que seu Centro de Identidade do IAM foi configurado:

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
  --delete-propagation-policy RETAIN \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "'$IDC_INSTANCE_ARN'",
        "idcRegion": "'[.replaceable]`idc-region-code`'"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "'$IDC_USER_ID'",
          "type": "SSO_USER"
        }]
      }]
    }
  }'
```

O comando é concluído de imediato, mas a funcionalidade demora algum tempo para se tornar ativa, conforme o EKS cria a infraestrutura e os componentes necessários para a funcionalidade. O EKS instalará as definições de recursos personalizados do Kubernetes relacionadas a essa funcionalidade no cluster durante o processo de criação.

**nota**  
Caso ocorra um erro indicando a inexistência do cluster ou falta de permissões, verifique o seguinte:  
Se o nome do cluster está correto
Se a AWS CLI está configurada para a região correta
Se você tem as permissões do IAM obrigatórias

## Etapa 3: verificação da ativação da funcionalidade
<a name="_step_3_verify_the_capability_is_active"></a>

Aguarde até que a funcionalidade se torne ativa. Substitua *region-cod*e pela região da AWS em que seu cluster está localizado e *my-cluster* pelo nome do seu cluster.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --query 'capability.status' \
  --output text
```

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`. Não prossiga para a próxima etapa até que o status seja `ACTIVE`.

Também é possível visualizar os detalhes completos da funcionalidade:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd
```

## Etapa 4: verificação da disponibilidade de recursos personalizados
<a name="_step_4_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do Argo CD estão disponíveis no cluster:

```
kubectl api-resources | grep argoproj.io
```

Os tipos de recursos `Application` e `ApplicationSet` devem aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): configure repositórios, registre clusters e crie Applications
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse a arquitetura de vários clusters e a configuração avançada
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do Argo CD

# Criação de uma funcionalidade do Argo CD por meio do eksctl
<a name="argocd-create-eksctl"></a>

Este tópico descreve como criar uma funcionalidade do Argo CD usando o eksctl.

**nota**  
Para realizar as etapas seguintes, é necessário estar utilizando o eksctl na versão `0.220.0` ou em versões posteriores. Para verificar a versão, execute `eksctl version`.

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confiança:

```
cat > argocd-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crie o perfil do IAM:

```
aws iam create-role \
  --role-name ArgoCDCapabilityRole \
  --assume-role-policy-document file://argocd-trust-policy.json
```

**nota**  
Para esta configuração básica, não são necessárias políticas do IAM adicionais. Se você planeja usar o Secrets Manager para credenciais de repositório ou para o CodeConnections, precisará adicionar permissões ao perfil. Para obter exemplos da política do IAM e de orientações de configuração, consulte [Gerenciamento de segredos de aplicações com o AWS Secrets Manager](integration-secrets-manager.md) e [Estabelecimento de conexão com repositórios do Git usando o AWS CodeConnections](integration-codeconnections.md).

## Etapa 2: obtenção da configuração do Centro de Identidade da AWS
<a name="step_2_get_your_shared_aws_identity_center_configuration"></a>

Obtenha o ARN da instância do Centro de Identidade e o ID do usuário para a configuração de RBAC:

```
# Get your Identity Center instance ARN
aws sso-admin list-instances --query 'Instances[0].InstanceArn' --output text

# Get a user ID for admin access (replace 'your-username' with your Identity Center username)
aws identitystore list-users \
  --identity-store-id $(aws sso-admin list-instances --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text
```

Anote esses valores. Você precisará deles na próxima etapa.

## Etapa 3: criação de um arquivo de configuração do eksctl
<a name="_step_3_create_an_eksctl_configuration_file"></a>

Crie um arquivo chamado `argocd-capability.yaml` com o conteúdo a seguir. Substitua os valores com espaços reservados pelo nome do seu cluster, região, ARN do perfil do IAM, ARN da instância do Centro de Identidade, região do Centro de Identidade e ID do usuário:

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-cluster
  region: cluster-region-code

capabilities:
  - name: my-argocd
    type: ARGOCD
    roleArn: arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole
    deletePropagationPolicy: RETAIN
    configuration:
      argocd:
        awsIdc:
          idcInstanceArn: arn:aws:sso:::instance/ssoins-123abc
          idcRegion: idc-region-code
        rbacRoleMappings:
          - role: ADMIN
            identities:
              - id: 38414300-1041-708a-01af-5422d6091e34
                type: SSO_USER
```

**nota**  
É possível adicionar vários usuários ou grupos aos mapeamentos de RBAC. Para grupos, use `type: SSO_GROUP` e forneça o ID do grupo. Os perfis disponíveis são `ADMIN`, `EDITOR` e `VIEWER`.

## Etapa 4: criação da funcionalidade do Argo CD
<a name="_step_4_create_the_argo_cd_capability"></a>

Aplique o arquivo de configuração:

```
eksctl create capability -f argocd-capability.yaml
```

O comando é executado de forma imediata, mas a funcionalidade demora algum tempo para se tornar ativa.

## Etapa 5: verificação da ativação da funcionalidade
<a name="_step_5_verify_the_capability_is_active"></a>

Verifique o status da funcionalidade. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-argocd
```

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`.

## Etapa 6: verificação da disponibilidade de recursos personalizados
<a name="_step_6_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do Argo CD estão disponíveis no cluster:

```
kubectl api-resources | grep argoproj.io
```

Os tipos de recursos `Application` e `ApplicationSet` devem aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): aprenda a criar e gerenciar Applications do Argo CD
+  [Considerações sobre o Argo CD](argocd-considerations.md): configure o SSO e o acesso a vários clusters
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do Argo CD

# Conceitos do Argo CD
<a name="argocd-concepts"></a>

O Argo CD implementa o GitOps ao tratar o Git como a única fonte de verdade para as implantações da aplicação. Este tópico apresenta um exemplo prático e, em seguida, explica os conceitos fundamentais que você precisa entender ao trabalhar com a funcionalidade do EKS para o Argo CD.

## Conceitos básicos do Argo CD
<a name="_getting_started_with_argo_cd"></a>

Após criar a funcionalidade do Argo CD (consulte [Criar um recurso Argo CD](create-argocd-capability.md)), é possível começar a implantar as aplicações. Este exemplo demonstra o registro de um cluster e a criação de uma Application.

### Etapa 1: Configurar
<a name="_step_1_set_up"></a>

 **Registrar o cluster** (obrigatório)

Registre o cluster no local em que você deseja implantar aplicações. Para este exemplo, registraremos o mesmo cluster em que o Argo CD está sendo executado (você pode usar o nome `in-cluster` para obter compatibilidade com a maioria dos exemplos do Argo CD):

```
# Get your cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster using Argo CD CLI
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

**nota**  
Para obter informações sobre a configuração da CLI do Argo CD para trabalho com a funcionalidade do Argo CD no EKS, consulte [Uso da CLI do Argo CD com a funcionalidade gerenciada](argocd-comparison.md#argocd-cli-configuration).

Como alternativa, registre o cluster usando um Kubernetes Secret (consulte [Registro de clusters de destino](argocd-register-clusters.md) para obter mais detalhes).

 **Configurar o acesso ao repositório** (opcional)

Este exemplo utiliza um repositório público do GitHub, portanto, nenhuma configuração de repositório é necessária. Para repositórios privados, configure o acesso usando o AWS Secrets Manager, o CodeConnections ou o Kubernetes Secrets (consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md) para obter mais detalhes).

No caso de serviços da AWS (como ECR para charts do Helm, CodeConnections e CodeCommit), é possível referenciá-los diretamente nos recursos da Application sem precisar criar um Repository. O perfil da funcionalidade deve ter as permissões do IAM necessárias. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

### Etapa 2: criar um aplicativo
<a name="_step_2_create_an_application"></a>

Crie este manifesto da Application em `my-app.yaml`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

Aplique a Application:

```
kubectl apply -f my-app.yaml
```

Após aplicar esta Application, o Argo CD: 1. Sincroniza a aplicação do Git com o cluster (implantação inicial) 2. Monitora o repositório do Git em busca de alterações 3. Sincroniza automaticamente as alterações posteriores com o seu cluster 4. Detecta e corrige qualquer desvio em relação ao estado desejado 5. Fornece o status da integridade e o histórico de sincronização na interface do usuário

Visualize o status da aplicação:

```
kubectl get application guestbook -n argocd
```

Também é possível visualizar a aplicação usando a CLI do Argo CD ou a interface do usuário do Argo CD (que é acessível a partir do console do EKS, na guia Funcionalidades do seu cluster).

**nota**  
Ao usar a CLI do Argo CD com o recurso gerenciado, especifique as aplicações com o prefixo do namespace: `argocd app get argocd/guestbook`.

**nota**  
Use o nome do cluster em `destination.name` (o nome que você utilizou ao registrar o cluster). A funcionalidade gerenciada não oferece suporte ao padrão local “in-cluster” (`kubernetes.default.svc`).

## Conceitos principais
<a name="_core_concepts"></a>

### Princípios de GitOps e tipos de origem
<a name="_gitops_principles_and_source_types"></a>

O Argo CD implementa o GitOps, no qual a origem da sua aplicação é a única fonte de verdade para as implantações:
+  **Declarativo**: o estado desejado é declarado usando manifestos no formato YAML, charts do Helm ou sobreposições do Kustomize
+  **Versionado**: cada alteração é rastreada com uma trilha de auditoria completa
+  **Automatizado** o Argo CD monitora continuamente as origens e sincroniza as alterações automaticamente
+  **Autorreparação**: detecta e corrige desvios entre o estado desejado e o estado atual do cluster

 **Tipos de origem com suporte**:
+  **Repositórios do Git**: GitHub, GitLab, Bitbucket, CodeCommit (HTTPS, SSH ou CodeConnections)
+  **Registros do Helm**: registros HTTP (como `https://aws.github.io/eks-charts`) e registros OCI (como `public.ecr.aws`)
+  **Imagens OCI**: imagens de contêiner contendo manifestos ou charts do Helm (como `oci://registry-1.docker.io/user/my-app`)

Essa flexibilidade permite que as organizações escolham origens que atendam aos seus requisitos de segurança e conformidade. Por exemplo, organizações que restringem o acesso ao Git proveniente de clusters podem usar o ECR para charts do Helm ou imagens OCI.

Para obter mais informações, consulte [Application Sources](https://argo-cd.readthedocs.io/en/stable/user-guide/application-sources/) na documentação do Argo CD.

### Sincronização e reconciliação
<a name="_sync_and_reconciliation"></a>

O Argo CD monitora continuamente as origens e os clusters para detectar e corrigir diferenças:

1. Realiza a verificação de alterações nas origens (padrão: a cada seis minutos)

1. Compara o estado desejado com o estado do cluster

1. Marca as aplicações como `Synced` ou `OutOfSync` 

1. Sincroniza as alterações automaticamente (se configurado) ou aguarda aprovação manual

1. Monitora a integridade do recurso após a sincronização

 Os **ciclos de sincronização** controlam a ordem de criação de recursos usando anotações:

```
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"  # Default if not specified
```

Os recursos são aplicados na ordem do ciclo (com números menores primeiro, incluindo números negativos como `-1`). O ciclo `0` é o padrão, caso não seja especificado. Isso permite a criação de dependências, como namespaces (ciclo `-1`) antes das implantações (ciclo `0`) antes dos serviços (ciclo `1`).

 A **autorreparação** reverte automaticamente as alterações manuais:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

**nota**  
A funcionalidade gerenciada usa o rastreamento de recursos baseado em anotações (em vez de empregar o rastreamento baseado em rótulos) para obter melhor compatibilidade com as convenções do Kubernetes e com as outras ferramentas.

Para obter informações detalhadas sobre as fases de sincronização, os hooks e os padrões avançados, consulte a [documentação de sincronização do Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/).

### Integridade da aplicação
<a name="_application_health"></a>

O Argo CD monitora a integridade de todos os recursos da aplicação:

 **Status de integridade**: \$1 **Íntegro**: todos os recursos estão sendo executados conforme o esperado \$1 **Em progresso**: os recursos estão sendo criados ou atualizados \$1 **Degradado**: alguns recursos não estão íntegros (por exemplo, pods falhando e trabalhos com erros) \$1 **Suspenso**: a aplicação está pausada intencionalmente \$1 **Ausente**: os recursos definidos no Git não estão presentes no cluster

O Argo CD conta com verificações de integridade integradas para recursos comuns do Kubernetes (por exemplo, Deployments, StatefulSets, Jobs e outros) e oferece suporte a verificações de integridade personalizadas para CRDs.

A saúde da aplicação é determinada por todos os seus recursos. Dessa forma, se qualquer recurso estiver no estado `Degraded`, a aplicação será considerada `Degraded`.

Para obter mais informações, consulte [Resource Health](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/) na documentação do Argo CD.

### Padrões de diversos clusters
<a name="_multi_cluster_patterns"></a>

O Argo CD é compatível com dois padrões principais de implantação:

 **Hub-and-spoke**: execute o Argo CD em um cluster de gerenciamento dedicado que realiza a implantação para diversos clusters de workloads: \$1 Controle e visibilidade centralizados \$1 Políticas consistentes em todos os clusters \$1 Apenas uma instância do Argo CD para gerenciamento \$1 Separação clara entre o ambiente de gerenciamento e as workloads

 **Por cluster**: execute o Argo CD em cada cluster, gerenciando apenas as aplicações daquele cluster específico: \$1 Isolamento de clusters (portanto, uma falha não afeta os demais) \$1 Rede simplificada (sem necessidade de comunicação entre clusters) \$1 Configuração inicial simplificada (sem necessidade de registro de clusters)

Escolha o modelo hub-and-spoke para equipes de plataformas que gerenciam muitos clusters ou o modelo por cluster para equipes independentes ou quando os clusters precisarem de isolamento total.

Para obter configurações detalhadas de diversos clusters, consulte [Considerações sobre o Argo CD](argocd-considerations.md).

### Projetos
<a name="_projects"></a>

Os Projects fornecem agrupamento lógico e controle de acesso para as Applications:
+  **Restrições de origem**: limitam quais repositórios do Git podem ser utilizados
+  **Restrições de destino**: limitam quais clusters e namespaces podem ser destinos de implantação
+  **Restrições de recursos**: limitam quais tipos de recursos do Kubernetes podem ser implantados
+  **Integração com o RBAC**: mapeia projetos para IDs de usuários e de grupos do Centro de Identidade da AWS

As Applications pertencem a um único projeto. Se não for especificado, elas utilizarão o projeto `default`, que não conta com restrições por padrão. Para uso em produção, edite o projeto `default` para restringir o acesso e criar novos projetos com as restrições apropriadas.

Para obter as configurações de projetos e os padrões de RBAC, consulte [Configuração das permissões do Argo CD](argocd-permissions.md).

### Opções de sincronização
<a name="_sync_options"></a>

Realize um ajuste fino do comportamento de sincronização com estas opções conhecidas:
+  `CreateNamespace=true`: cria automaticamente o namespace de destino
+  `ServerSideApply=true`: usa o Server-Side Apply para obter uma melhor resolução de conflitos
+  `SkipDryRunOnMissingResource=true`: ignora a simulação quando as CRDs ainda não existem (sendo útil para instâncias do kro)

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
    - ServerSideApply=true
    - SkipDryRunOnMissingResource=true
```

Para obter uma lista completa de opções de sincronização, consulte a [documentação de opções de sincronização do Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/).

## Próximas etapas
<a name="_next_steps"></a>
+  [Configuração do acesso ao repositório](argocd-configure-repositories.md): configure o acesso ao repositório do Git
+  [Registro de clusters de destino](argocd-register-clusters.md): registre os clusters de destino para a implantação
+  [Criação de Applications](argocd-create-application.md): crie sua primeira Application
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse os padrões específicos para EKS, a integração com o Centro de Identidade e a configuração de diversos clusters
+  [Documentação do Argo CD](https://argo-cd.readthedocs.io/en/stable/): acesse a documentação abrangente do Argo CD, incluindo hooks de sincronização, verificações de integridade e padrões avançados

# Configuração das permissões do Argo CD
<a name="argocd-permissions"></a>

A funcionalidade gerenciada do Argo CD se integra ao Centro de Identidade da AWS para autenticação e usa perfis de RBAC integrados para autorização. Este tópico explica como configurar permissões para usuários e equipes.

## Funcionamento de permissões com o Argo CD
<a name="_how_permissions_work_with_argo_cd"></a>

A funcionalidade do Argo CD usa o Centro de Identidade da AWS para autenticação e fornece três perfis de RBAC integrados para autorização.

Quando um usuário acessa o Argo CD:

1. A autenticação é realizada por meio do Centro de Identidade da AWS (que pode ser federado ao seu provedor de identidades corporativo)

1.  O Centro de Identidade da AWS fornece informações de usuários e grupos ao Argo CD

1. O Argo CD mapeia usuários e grupos para perfis de RBAC com base na sua configuração

1. Os usuários visualizam somente as aplicações e os recursos aos quais têm permissão de acessar

## Perfis de RBAC integrados
<a name="_built_in_rbac_roles"></a>

A funcionalidade do Argo CD fornece três perfis integrados que você mapeia para usuários e grupos do Centro de Identidade da AWS. Esses são **perfis com escopo global** que controlam o acesso aos recursos do Argo CD, como projetos, clusters e repositórios.

**Importante**  
Os perfis globais controlam o acesso ao próprio Argo CD, não aos recursos do escopo do projeto, como Applications. Os usuários EDITOR e VIEWER não podem ver nem gerenciar Applications por padrão, eles precisam de perfis no projeto para acessar os recursos do escopo do projeto. Consulte [Perfis do projeto e acesso ao escopo do projeto](#project-roles) para obter detalhes sobre como conceder acesso a Applications e outros recursos do escopo do projeto.

 **ADMIN** 

Acesso total a todos os recursos e configurações do Argo CD:
+ Criação, atualização e exclusão de Applications e ApplicationSets
+ Gerenciamento da configuração do Argo CD
+ Registro e gerenciamento de clusters de destino para implantação
+ Configuração do acesso ao repositório
+ Crie e gerencie projetos.
+ Visualização do status e do histórico de todas as aplicações
+ Liste e acesse todos os clusters e repositórios

 **EDITOR** 

Pode atualizar projetos e configurar perfis do projeto, mas não pode alterar as configurações globais do Argo CD:
+ Atualize projetos existentes (não é possível criar ou excluir projetos)
+ Configure perfis e permissões de projetos.
+ Visualize chaves e certificados GPG
+ Não é possível alterar a configuração do Argo CD
+ Não é possível gerenciar clusters ou repositórios diretamente
+ Não é possível ver ou gerenciar Applications sem perfis do projeto

 **VIEWER** 

Acesso somente de leitura a recursos do Argo CD:
+ Exiba a configuração do projeto
+ Liste todos os projetos (incluindo projetos aos quais o usuário não está atribuído)
+ Visualize chaves e certificados GPG
+ Sem permissão para o registro de clusters ou de repositórios
+ Sem permissão para a realização de quaisquer alterações
+ Não é possível ver ou gerenciar Applications sem perfis do projeto

**nota**  
Para conceder aos usuários EDITOR ou VIEWER acesso a Applications, um ADMINISTRADOR ou EDITOR deve criar perfis do projeto que mapeiem os grupos do Centro de Identidade para permissões específicas em um projeto.

## Perfis do projeto e acesso ao escopo do projeto
<a name="project-roles"></a>

Perfis globais (ADMIN, EDITOR e VIEWER) controlam o acesso ao Argo CD em si. Os perfis do projeto controlam o acesso a recursos e funcionalidades em um projeto específico, incluindo:
+  **Recursos**: Applications, ApplicationSets, credenciais do repositório, credenciais do cluster
+  **Funcionalidades**: acesso a registros, acesso executivo aos pods de aplicações

 **Noções básicas sobre o modelo de permissão de dois níveis**:
+  **Escopo global**: perfis integrados determinam o que os usuários podem fazer com projetos, clusters, repositórios e configurações de CD do Argo
+  **Escopo do projeto**: os perfis do projeto determinam o que os usuários podem fazer com recursos e funcionalidades em um projeto específico

Isso significa que:
+ Os usuários ADMIN podem acessar todos os recursos e funcionalidades do projeto sem configuração adicional
+ Os usuários EDITOR e VIEWER devem receber perfis de projeto para acessar os recursos e funcionalidades do projeto
+ Os usuários EDITOR podem criar perfis do projeto para conceder a si mesmos e a outras pessoas acesso aos projetos que possam ser atualizados

 **Exemplo de fluxo de trabalho**

1. Um ADMIN mapeia um grupo do Centro de Identidade para o perfil EDITOR globalmente

1. Um ADMINISTRADOR cria um projeto para uma equipe

1. O EDITOR configura os perfis do projeto dentro desse projeto para conceder aos membros da equipe acesso aos recursos do escopo do projeto

1. Os membros da equipe (que podem ter o perfil global VIEWER) agora podem ver e gerenciar aplicações nesse projeto com base nas permissões de perfil do projeto

Para obter detalhes sobre como configurar os perfis do projeto, consulte [Controle de acesso baseado em projetos](#_project_based_access_control).

## Configuração de mapeamentos de perfil
<a name="_configure_role_mappings"></a>

Mapeie usuários e grupos do Centro de Identidade da AWS para os perfis do Argo CD durante a criação ou a atualização da funcionalidade.

 **Exemplo de mapeamento de perfil**:

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["AdminGroup", "alice@example.com"],
    "EDITOR": ["DeveloperGroup", "DevOpsTeam"],
    "VIEWER": ["ReadOnlyGroup", "bob@example.com"]
  }
}
```

**nota**  
Os nomes dos perfis diferenciam maiúsculas de minúsculas e devem estar em letras maiúsculas (ADMIN, EDITOR e VIEWER).

**Importante**  
A integração das funcionalidades do EKS com o Centro de Identidade da AWS fornece suporte para até mil identidades por funcionalidade do Argo CD. Uma identidade pode ser um usuário ou um grupo.

 **Atualize os mapeamentos de perfil**:

```
aws eks update-capability \
  --region us-east-1 \
  --cluster-name cluster \
  --capability-name capname \
  --endpoint "https://eks.ap-northeast-2.amazonaws.com" \
  --role-arn "arn:aws:iam::[.replaceable]111122223333:role/[.replaceable]`EKSCapabilityRole`" \
  --configuration '{
    "argoCd": {
      "rbacRoleMappings": {
        "addOrUpdateRoleMappings": [
          {
            "role": "ADMIN",
            "identities": [
              { "id": "686103e0-f051-7068-b225-e6392b959d9e", "type": "SSO_USER" }
            ]
          }
        ]
      }
    }
  }'
```

## Uso da conta de administrador
<a name="_admin_account_usage"></a>

A conta de administrador é destinada à configuração inicial e às tarefas administrativas, como o registro de clusters e a configuração de repositórios.

 **Situações apropriadas para o uso da conta de administrador**:
+ Configuração inicial da funcionalidade
+ Desenvolvimento individual ou demonstrações rápidas
+ Tarefas administrativas (como registro de cluster, configuração de repositórios e criação de projetos)

 **Práticas recomendadas para a conta de administrador**:
+ Sem permissão para a confirmação de tokens da conta para o controle de versão
+ Rotação imediata de tokens em caso de exposição
+ Limitação do uso de tokens da conta para tarefas de configuração e de administração
+ Definição de prazos curtos de expiração (máximo de 12 horas)
+ Limite de criação de apenas cinco tokens simultâneos na conta

 **Situações para uso do acesso baseado em projetos**:
+ Ambientes de desenvolvimento compartilhados com vários usuários
+ Qualquer ambiente com características do ambiente de produção
+ Quando há necessidade de trilhas de auditoria para identificação de ações por parte dos usuários
+ Quando há necessidade da aplicação de restrições de recursos ou limites de acesso

Para ambientes de produção e cenários com vários usuários, use o controle de acesso baseado em projetos com perfis de RBAC dedicados e mapeados para grupos do Centro de Identidade da AWS.

## Controle de acesso baseado em projetos
<a name="_project_based_access_control"></a>

Use o Argo CD Projects (AppProject) para a disponibilização de controle de acesso detalhado e isolamento de recursos para as equipes.

**Importante**  
Antes de atribuir usuários ou grupos aos perfis específicos do projeto, é necessário primeiro mapeá-los para um perfil global do Argo CD (ADMIN, EDITOR ou VIEWER) na configuração do recurso. Os usuários não podem acessar o Argo CD sem um mapeamento global de perfis, mesmo que estejam atribuídos aos perfis do projeto.  
Considere mapear usuários para o perfil VIEWER globalmente e, em seguida, conceder permissões adicionais por meio de perfis específicos do projeto. Isso fornece acesso básico e, ao mesmo tempo, permite um controle refinado no nível do projeto.

Os projetos fornecem:
+  **Restrições de origem**: limitam quais repositórios do Git podem ser utilizados
+  **Restrições de destino**: limitam quais clusters e namespaces podem ser destinos de implantação
+  **Restrições de recursos**: limitam quais tipos de recursos do Kubernetes podem ser implantados
+  **Integração de RBAC**: mapeamento de projetos para grupos do Centro de Identidade da AWS ou perfis do Argo CD

 **Exemplo de projeto para isolamento de equipes**:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Team A applications

  # Required: Specify which namespaces this project watches for Applications
  sourceNamespaces:
  - argocd

  # Source restrictions
  sourceRepos:
  - https://github.com/myorg/team-a-apps

  # Destination restrictions
  destinations:
  - namespace: team-a-*
    server: arn:aws:eks:us-west-2:111122223333:cluster/production

  # Resource restrictions
  clusterResourceWhitelist:
  - group: ''
    kind: Namespace
  namespaceResourceWhitelist:
  - group: 'apps'
    kind: Deployment
  - group: ''
    kind: Service
  - group: ''
    kind: ConfigMap
```

### Namespaces da origem
<a name="_source_namespaces"></a>

Ao usar a funcionalidade EKS do Argo CD, o campo `spec.sourceNamespaces` é obrigatório nas definições de AppProject. Esse campo especifica qual namespace pode conter Applications or ApplicationSets que façam referência a esse projeto.

**Importante**  
A funcionalidade EKS do Argo CD oferece suporte a apenas um único namespace para Applications and ApplicationSets, o namespace que você especificou ao criar a funcionalidade (normalmente `argocd`). Isso difere do Argo CD de código aberto, que oferece suporte a vários namespaces.

 **Configuração do AppProject** 

Todos os AppProjects devem incluir o namespace configurado da funcionalidade em `sourceNamespaces`:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a-project
  namespace: argocd
spec:
  description: Applications for Team A

  # Required: Specify the capability's configured namespace (configuration.argoCd.namespace)
  sourceNamespaces:
    - argocd  # Must match your capability's namespace configuration

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'

  # Destination restrictions
  destinations:
    - namespace: 'team-a-*'
      server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
```

**nota**  
Se você omitir o namespace da funcionalidade de `sourceNamespaces`, Applications ou ApplicationSets nesse namespace não poderão referenciar esse projeto, resultando em falhas de implantação.

 **Atribua usuários a projetos**:

Os perfis do projeto concedem aos usuários EDITOR e VIEWER acesso aos recursos do projeto (Applications, ApplicationSets, credenciais de repositório e cluster) e funcionalidades (logs, exec). Sem os perfis do projeto, esses usuários não podem acessar esses recursos, mesmo que tenham acesso global ao perfil.

Usuários com perfil de ADMIN têm acesso a todas as Applications sem precisar de perfis do projeto.

 **Exemplo: concessão de acesso a Applications aos membros da equipe** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  # ... project configuration ...

  sourceNamespaces:
  - argocd

  # Project roles grant Application-level access
  roles:
  - name: developer
    description: Team A developers - can manage Applications
    policies:
    - p, proj:team-a:developer, applications, *, team-a/*, allow
    - p, proj:team-a:developer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 686103e0-f051-7068-b225-e6392b959d9e  # Identity Center group ID

  - name: viewer
    description: Team A viewers - read-only Application access
    policies:
    - p, proj:team-a:viewer, applications, get, team-a/*, allow
    - p, proj:team-a:viewer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 786203e0-f051-7068-b225-e6392b959d9f  # Identity Center group ID
```

**nota**  
Inclua `clusters, get, *, allow` nos perfis do projeto para permitir que os usuários vejam os nomes dos clusters na interface do usuário. Sem essa permissão, o cluster de destino será exibido como “desconhecido”.

 **Noções básicas das políticas de perfis do projeto**:

O formato da política é: `p, proj:<project>:<role>, <resource>, <action>, <object>, <allow/deny>` 

 **Políticas de recursos**:
+  `applications, , team-a/, allow`: acesso total a todas as Applications no projeto team-a
+  `applications, get, team-a/*, allow`: acesso somente leitura às Applications
+  `applications, sync, team-a/*, allow`: pode sincronizar Applications, mas não criar/excluir
+  `applications, delete, team-a/*, allow`: pode excluir Applications (use com cuidado)
+  `applicationsets, , team-a/, allow`: acesso total aos ApplicationSets
+  `repositories, *, *, allow`: acesso às credenciais do repositório
+  `clusters, *, *, allow`: acesso às credenciais do cluster

 **Políticas de funcionalidade**:
+  `logs, , team-a/, allow`: acesso aos logs da aplicação
+  `exec, , team-a/, allow`: acesso executivo aos pods de aplicações

**nota**  
Os usuários EDITOR podem criar perfis de projeto para conceder a si mesmos e a outros permissões nos projetos que podem atualizar Isso permite que os líderes de equipe controlem o acesso aos recursos do escopo do projeto para sua equipe sem exigir a intervenção do ADMIN.

**nota**  
Use IDs de grupo do Centro de Identidade (não nomes de grupos) no campo `groups`. Você também pode usar os IDs de usuário do Centro de Identidade para acesso de usuários individuais. Encontre esses IDs no console do Centro de Identidade da AWS ou usando a CLI da AWS.

## Padrões de permissão comuns
<a name="_common_permission_patterns"></a>

 **Padrão 1: equipe administrativa com acesso total** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam", "SRETeam"]
  }
}
```

Os usuários ADMIN podem visualizar e gerenciar todos os recursos do escopo do projeto sem configuração adicional.

 **Padrão 2: os líderes de equipes gerenciam projetos, os desenvolvedores os acessam por meio de perfis do projeto** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

1. Um ADMIN cria projetos para cada equipe

1. Os líderes da equipe (EDITOR) configuram os perfis do projeto para conceder aos desenvolvedores acesso aos recursos do projeto (Applications, ApplicationSets, credenciais) e funcionalidades (logs, execução)

1. Os desenvolvedores (VIEWER) só podem acessar recursos e funcionalidades permitidos por seus perfis no projeto

 **Padrão 3: acesso baseado em equipe com perfis do projeto** 

1. O ADMIN cria projetos e mapeia líderes de equipe para o perfil EDITOR globalmente

1. Os líderes da equipe (EDITOR) atribuem aos membros da equipe os perfis do projeto em seus projetos

1. Os membros da equipe só precisam do perfil VIEWER. Os perfis do projeto fornecem acesso aos recursos e funcionalidades do projeto

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

## Práticas recomendadas
<a name="_best_practices"></a>

 **Use grupos em vez de usuários individuais**: mapeie grupos do Centro de Identidade da AWS para perfis do Argo CD, em vez de usuários individuais, para facilitar o gerenciamento.

 **Comece a aplicar permissões com o privilégio mínimo**: inicie com acesso com o perfil de VIEWER e conceda acesso de EDITOR ou de ADMIN, conforme necessário.

 **Use projetos para o isolamento de equipes**: crie AppProjects separados para diferentes equipes ou ambientes a fim de aplicar limites.

 **Aproveite a federação do Centro de Identidade**: configure o Centro de Identidade da AWS para federar com seu provedor de identidades corporativo para gerenciamento centralizado de usuários

 **Análises de acesso regulares**: revise periodicamente os mapeamentos de perfis e as atribuições de projetos para garantir níveis de acesso adequados.

 **Limite o acesso ao cluster**: lembre-se de que o RBAC do Argo CD controla o acesso a recursos e operações do Argo CD, mas não corresponde ao RBAC do Kubernetes. Usuários com acesso ao Argo CD podem implantar aplicações em clusters aos quais o Argo CD tem acesso. Limite quais clusters o Argo CD pode acessar e use restrições de destino de projeto para controlar os locais em que as aplicações podem ser implantadas.

## AWSPermissões de serviço do
<a name="shared_aws_service_permissions"></a>

Para usar serviços da AWS diretamente nos recursos da Application (sem a necessidade de criar recursos de Repository), vincule as permissões do IAM obrigatórias ao perfil da funcionalidade.

 **ECR para charts do Helm**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "*"
    }
  ]
}
```

 **Repositórios do CodeCommit**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

 **CodeConnections (GitHub, GitLab e Bitbucket)**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeconnections:UseConnection"
      ],
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

Consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md) para obter detalhes sobre como usar essas integrações.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): saiba como criar aplicações e gerenciar implantações
+  [Conceitos do Argo CD](argocd-concepts.md): compreenda os conceitos do Argo CD, incluindo o Projects
+  [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md): analise as práticas recomendadas de segurança para as funcionalidades

# Como trabalhar com o Argo CD
<a name="working-with-argocd"></a>

Ao usar o Argo CD, você define as aplicações em repositórios do Git e a funcionalidade se encarrega de sincronizá-las automaticamente nos clusters do Kubernetes. Isso permite a implantação de aplicações de forma declarativa e com controle de versão, contando com a detecção automática de desvios.

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

Antes de começar a trabalhar o Argo CD, é necessário ter:
+ Um cluster do EKS com a funcionalidade para o Argo CD criada (consulte [Criar um recurso Argo CD](create-argocd-capability.md))
+ Um repositório do Git que contém manifestos do Kubernetes
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster

## Tarefas comuns
<a name="_common_tasks"></a>

Os seguintes tópicos orientam você na realização de tarefas comuns do Argo CD:

 **[Configuração do acesso ao repositório](argocd-configure-repositories.md)**: configure o Argo CD para acessar seus repositórios do Git usando o AWS Secrets Manager, o AWS CodeConnections ou Kubernetes Secrets.

 **[Registro de clusters de destino](argocd-register-clusters.md)**: registre os clusters de destino nos quais o Argo CD implantará aplicações.

 **[Trabalho com o Argo CD Projects](argocd-projects.md)**: organize aplicações e aplique limites de segurança usando Projects para ambientes multilocatários.

 **[Criação de Applications](argocd-create-application.md)**: crie Applications que realizam a implantação de repositórios do Git com políticas de sincronização automática ou manual.

 **[Uso de ApplicationSets](argocd-applicationsets.md)**: use ApplicationSets para implantar aplicações em múltiplos ambientes ou clusters usando modelos e geradores.

## Acesso à interface do usuário do Argo CD
<a name="_access_the_argo_cd_ui"></a>

Acesse a interface do usuário do Argo CD por meio do console do EKS:

1. Abra o console do Amazon EKS

1. Selecione o cluster

1. Escolha a guia **Funcionalidades**

1. Escolha **Argo CD** 

1. Escolha **Abrir interface do usuário do Argo CD** 

A interface de usuário fornece a topologia visual da aplicação, o status e o histórico de sincronização, a integridade dos recursos e os eventos, os controles de sincronização manual e o gerenciamento de aplicações.

## Documentação original
<a name="_upstream_documentation"></a>

Para obter informações detalhadas sobre as funcionalidades do Argo CD:
+  [Documentação do Argo CD](https://argo-cd.readthedocs.io/): acesse o guia do usuário completo
+  [Application Spec](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/): acesse a referência de API completa para a Application
+  [ApplicationSet Guide](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): acesse padrões e exemplos de ApplicationSet
+  [Argo CD GitHub](https://github.com/argoproj/argo-cd): acesse o código-fonte e exemplos

# Configuração do acesso ao repositório
<a name="argocd-configure-repositories"></a>

Antes de implantar aplicações, configure o Argo CD para acessar os repositórios do Git e os registros do chart do Helm. O Argo CD oferece suporte a diversos métodos de autenticação para GitHub, GitLab, Bitbucket, AWS CodeCommit e AWS ECR.

**nota**  
No caso de integrações diretas com serviços da AWS (como charts do Helm do ECR, repositórios do CodeCommit e CodeConnections), é possível referenciá-los diretamente nos recursos da Application sem a necessidade de criar configurações de Repository. O perfil da funcionalidade deve ter as permissões do IAM necessárias. Para mais detalhes, consulte [Configuração das permissões do Argo CD](argocd-permissions.md).

## Pré-requisitos
<a name="_prerequisites"></a>
+ Um cluster de EKS com a funcionalidade para o Argo CD criada
+ Repositórios do Git que contêm manifestos do Kubernetes
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster

**nota**  
 OAWS CodeConnections pode se conectar a servidores Git localizados na nuvem AWS ou on-premises. Para obter mais informações, consulte [AWS CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/userguide/welcome.html).

## Métodos de autenticação
<a name="_authentication_methods"></a>


| Método | Caso de uso | Permissões do IAM necessárias | 
| --- | --- | --- | 
|   **Integração direta com serviços da AWS**   | 
|  CodeCommit  |  Integração direta com repositórios do Git do AWS CodeCommit. Nenhuma configuração de Repository é necessária.  |   `codecommit:GitPull`   | 
|  CodeConnections  |  Estabeleça conexão com o GitHub, o GitLab ou o Bitbucket usando autenticação gerenciada. Requer configuração da conexão.  |   `codeconnections:UseConnection`   | 
|  Artefatos da OCI do ECR  |  Integração direta com o AWS ECR para charts do Helm baseados em OCI e imagens de manifestos. Nenhuma configuração de Repository é necessária.  |   `arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly`   | 
|   **Configuração do repositório com credenciais**   | 
|   AWS Secrets Manager (nome do usuário/token)  |  Armazene tokens de acesso pessoal ou senhas Permite a alternância de credenciais sem acesso ao Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (chave SSH)  |  Use a autenticação por chave SSH. Permite a alternância de credenciais sem acesso ao Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (aplicativo do GitHub)  |  Autenticação pela aplicação do GitHub com chave privada Permite a alternância de credenciais sem acesso ao Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|  Kubernetes Secret  |  Método padrão do Argo CD usando segredos “in-cluster”  |  Nenhuma (permissões gerenciadas pelo EKS Access Entry com Kubernetes RBAC)  | 

## Acesso direto aos serviços da AWS
<a name="direct_access_to_shared_aws_services"></a>

No caso de serviços da AWS, é possível referenciá-los diretamente nos recursos da Application sem precisar criar configurações de Repository. O perfil da funcionalidade deve ter as permissões do IAM necessárias.

### Repositórios do CodeCommit
<a name="_codecommit_repositories"></a>

Referencie repositórios do CodeCommit diretamente nas Applications:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Permissões obrigatórias do perfil da funcionalidade:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codecommit:GitPull",
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

### CodeConnections
<a name="_codeconnections"></a>

Referencie repositórios do GitHub, do GitLab ou do Bitbucket por meio do CodeConnections. O formato do URL do repositório é derivado do ARN da conexão do CodeConnections.

O formato do URL do repositório é:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

Permissões obrigatórias do perfil da funcionalidade:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codeconnections:UseConnection",
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

### Charts do Helm do ECR
<a name="_ecr_helm_charts"></a>

O ECR armazena charts do Helm como artefatos OCI. O Argo CD oferece duas maneiras de referenciá-los:

 **Formato Helm** (recomendado para charts do Helm):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-helm
  namespace: argocd
spec:
  source:
    repoURL: account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
    helm:
      valueFiles:
        - values.yaml
```

Observação: não inclua o prefixo `oci://` ao usar o formato Helm. Use o campo `chart` para especificar o nome do chart.

 **Formato OCI** (para artefatos OCI que contêm manifestos do Kubernetes):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-oci
  namespace: argocd
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: artifact-version
    path: path-to-manifests
```

Observação: inclua o prefixo `oci://` ao usar o formato OCI. Utilize o campo `path` em vez de `chart`.

Permissões de perfil de funcionalidade necessárias - anexe a política gerenciada:

```
arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
```

Essa política inclui as permissões ECR necessárias: `ecr:GetAuthorizationToken`, `ecr:BatchGetImage` e `ecr:GetDownloadUrlForLayer`.

## Uso do AWS Secrets Manager
<a name="using_shared_aws_secrets_manager"></a>

Armazene credenciais de repositório no Secrets Manager e faça referência a elas nas configurações de Repository do Argo CD. O uso do Secrets Manager permite a alternância automática de credenciais sem exigir acesso ao Kubernetes RBAC. As credenciais podem ser alternadas usando as permissões do IAM para o Secrets Manager, e o Argo CD lê automaticamente os valores atualizados.

**nota**  
Para reutilização de credenciais em vários repositórios (por exemplo, todos os repositórios em uma organização do GitHub), use modelos de credenciais de repositório com `argocd.argoproj.io/secret-type: repo-creds`. Isso fornece uma melhor experiência de usuário do que criar segredos de repositórios individuais. Para obter mais informações, consulte [Credenciais de repositórios](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) na documentação do Argo CD.

### Autenticação por nome de usuário e token
<a name="_username_and_token_authentication"></a>

Para repositórios HTTPS com tokens de acesso pessoal ou senhas:

 **Criar o segredo no Secrets Manager**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo \
  --description "GitHub credentials for Argo CD" \
  --secret-string '{"username":"your-username","token":"your-personal-access-token"}'
```

 **Campos opcionais para certificado TLS de cliente** (para servidores do Git privados):

```
aws secretsmanager create-secret \
  --name argocd/my-private-repo \
  --secret-string '{
    "username":"your-username",
    "token":"your-token",
    "tlsClientCertData":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t",
    "tlsClientCertKey":"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCi4uLgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t"
  }'
```

**nota**  
Os valores `tlsClientCertData` e `tlsClientCertKey` devem estar codificados em base64.

 **Criar um segredo de repositório referenciando o Secrets Manager**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-AbCdEf
  project: default
```

### Autenticação por chave SSH
<a name="_ssh_key_authentication"></a>

Para obter acesso ao Git baseado em SSH, armazene a chave privada em texto não formatado (não em JSON):

 **Criar o segredo com a chave privada SSH**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo-ssh \
  --description "SSH key for Argo CD" \
  --secret-string "-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
...
-----END OPENSSH PRIVATE KEY-----"
```

 **Criar um segredo de repositório para SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-ssh-AbCdEf
  project: default
```

### Autenticação por aplicativo do GitHub
<a name="_github_app_authentication"></a>

Para a autenticação pelo aplicativo do GitHub com uma chave privada:

 **Criar o segredo com as credenciais do aplicativo do GitHub**:

```
aws secretsmanager create-secret \
  --name argocd/github-app \
  --description "GitHub App credentials for Argo CD" \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678"
  }'
```

**nota**  
O valor `githubAppPrivateKeySecret` deve estar codificado em base64.

 **Campo opcional para o GitHub Enterprise**:

```
aws secretsmanager create-secret \
  --name argocd/github-enterprise-app \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678",
    "githubAppEnterpriseBaseUrl":"https://github.example.com/api/v3"
  }'
```

 **Criar um segredo de repositório para o aplicativo do GitHub**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-github-app
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-app-AbCdEf
  project: default
```

### Modelos de credencial de repositório
<a name="_repository_credential_templates"></a>

Para reutilização de credenciais em vários repositórios (por exemplo, todos os repositórios em uma organização ou usuário do GitHub), use modelos de credenciais de repositório com `argocd.argoproj.io/secret-type: repo-creds`. Isso fornece uma melhor experiência de usuário do que criar segredos de repositórios individuais para cada respositório.

 **Crie um modelo de credencial de repositório**:

```
apiVersion: v1
kind: Secret
metadata:
  name: github-org-creds
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  type: git
  url: https://github.com/your-org
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-org-AbCdEf
```

Esse modelo de credencial se aplica a todos os repositórios que correspondam ao prefixo `https://github.com/your-org` da URL. Em seguida, é possível referenciar qualquer repositório dessa organização em Applications sem criar segredos adicionais.

Para obter mais informações, consulte [Credenciais de repositórios](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) na documentação do Argo CD.

**Importante**  
Certifique-se de que seu perfil de funcionalidade do IAM tenha a política gerenciada `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess` anexada ou permissões equivalentes, incluindo `secretsmanager:GetSecretValue` e permissões de descriptografia do KMS. Consulte [Considerações sobre o Argo CD](argocd-considerations.md) para obter a configuração da política do IAM.

## Uso do AWS CodeConnections
<a name="using_shared_aws_codeconnections"></a>

Para a integração com o CodeConnections, consulte [Estabelecimento de conexão com repositórios do Git usando o AWS CodeConnections](integration-codeconnections.md).

O CodeConnections fornece autenticação gerenciada para GitHub, GitLab e Bitbucket sem armazenar credenciais.

## Uso do Kubernetes Secrets
<a name="_using_kubernetes_secrets"></a>

Armazene credenciais diretamente no Kubernetes usando o método padrão do Argo CD.

 **Para HTTPS com token de acesso pessoal**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  username: your-username
  password: your-personal-access-token
```

 **Para o SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  sshPrivateKey: |
    -----BEGIN OPENSSH PRIVATE KEY-----
    ... your private key ...
    -----END OPENSSH PRIVATE KEY-----
```

## Repositórios do CodeCommit
<a name="_codecommit_repositories_2"></a>

Para o AWS CodeCommit, conceda ao perfil da funcionalidade do IAM permissões do CodeCommit (`codecommit:GitPull`).

Configurar o repositório:

```
apiVersion: v1
kind: Secret
metadata:
  name: codecommit-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://git-codecommit.us-west-2.amazonaws.com/v1/repos/my-repo
  project: default
```

Para obter a configuração detalhada da política do IAM, consulte [Considerações sobre o Argo CD](argocd-considerations.md).

## Verificação da conexão do repositório
<a name="_verify_repository_connection"></a>

Verifique o status da conexão pela interface do usuário do Argo CD em “Settings → Repositories”. A interface do usuário apresenta o status da conexão e quaisquer erros de autenticação.

Os segredos do repositório não incluem informações de status.

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Registro de clusters de destino](argocd-register-clusters.md): registre os clusters de destino para implantações
+  [Criação de Applications](argocd-create-application.md): crie sua primeira Application
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse as permissões do IAM e as configuração de segurança
+  [Private Repositories](https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/): acesse a referência de configuração de repositórios da versão original

# Registro de clusters de destino
<a name="argocd-register-clusters"></a>

Registre clusters para permitir que o Argo CD implante aplicações neles. É possível registrar o mesmo cluster em que o Argo CD está em execução (cluster local) ou clusters remotos em diferentes contas ou regiões. Depois que um cluster for registrado, ele permanecerá em um estado de conexão desconhecido até que você crie uma aplicação dentro desse cluster. Para criar uma aplicação do Argo CD após o registro do cluster, consulte [Criação de Applications](argocd-create-application.md).

## Pré-requisitos
<a name="_prerequisites"></a>
+ Um cluster de EKS com a funcionalidade para o Argo CD criada
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster
+ Para clusters remotos: permissões do IAM e entradas de acesso adequadas

## Registro do cluster local
<a name="_register_the_local_cluster"></a>

Para implantar aplicações no mesmo cluster em que o Argo CD está em execução, registre-o como um destino de implantação.

**Importante**  
A funcionalidade do Argo CD não realiza o registro automático do cluster local. É necessário registrá-lo explicitamente para fazer a implantação de aplicações no mesmo cluster. É possível usar o nome `in-cluster` do cluster para compatibilidade com a maioria dos exemplos do Argo CD online.

**nota**  
Uma entrada de acesso EKS é criada automaticamente para o cluster local com o perfil de funcionalidade do Argo CD, mas nenhuma permissão RBAC do Kubernetes é concedida por padrão. Isso segue o princípio do privilégio mínimo, sendo necessário configurar explicitamente as permissões que o Argo CD precisa com base no seu caso de uso. Por exemplo, se você usar esse cluster apenas como um hub do Argo CD para gerenciar clusters remotos, ele não precisará de nenhuma permissão de implantação local. Consulte a seção Requisitos de entrada de acesso do RBAC abaixo para ver as opções de configuração.

 **Com a CLI do Argo CD**:

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \
  --name local-cluster
```

 **Com um Kubernetes Secret**:

```
apiVersion: v1
kind: Secret
metadata:
  name: local-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: local-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
  project: default
```

Aplique a configuração:

```
kubectl apply -f local-cluster.yaml
```

**nota**  
Use o ARN do cluster de EKS no campo `server`, e não o URL do servidor da API do Kubernetes. A funcionalidade gerenciada requer ARNs para identificar os clusters. O valor padrão `kubernetes.default.svc` não é compatível.

## Registro de clusters remotos
<a name="_register_remote_clusters"></a>

Para implantar em clusters remotos:

 **Etapa 1: criação da entrada de acesso no cluster remoto** 

Substitua *region-code* pela região da AWS em que seu cluster remoto está, substitua *remote-cluster* pelo nome do cluster remoto e substitua o ARN pelo ARN do perfil da funcionalidade para o Argo CD.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD
```

 **Etapa 2: associar uma política de acesso às permissões de RBAC do Kubernetes** 

A entrada de acesso requer permissões do Kubernetes RBAC para o Argo CD implantar aplicações. Para começar a usar rapidamente, é possível utilizar a `AmazonEKSClusterAdminPolicy`.

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**Importante**  
A `AmazonEKSClusterAdminPolicy` fornece acesso total ao administrador do cluster (equivalente a `system:masters`). Isso é conveniente para começar, mas não deve ser usado em produção. Para ambientes de produção, use permissões mais restritivas associando a entrada de acesso a grupos personalizados do Kubernetes e criando associações apropriadas de Role ou ClusterRole. Consulte a seção de configuração de produção abaixo para ver a configuração de privilégios mínimos.

 **Etapa 3: registro do cluster no Argo CD** 

 **Com a CLI do Argo CD**:

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \
  --name remote-cluster
```

 **Com um Kubernetes Secret**:

```
apiVersion: v1
kind: Secret
metadata:
  name: remote-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: remote-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster
  project: default
```

Aplique a configuração:

```
kubectl apply -f remote-cluster.yaml
```

## Clusters entre contas
<a name="_cross_account_clusters"></a>

Para realizar a implantação em clusters localizados em contas da AWS distintas:

1. Na conta de destino, crie uma entrada de acesso no cluster de destino do EKS usando o ARN do perfil da funcionalidade do IAM do Argo CD da conta de origem como a entidade principal

1. Associe uma política de acesso com as permissões RBAC apropriadas do Kubernetes

1. Registre o cluster no Argo CD usando o ARN do cluster de EKS

Não é necessária a criação de perfis do IAM adicionais nem a configuração de política de confiança. As entradas de acesso do EKS gerenciam o acesso entre contas.

O formato do ARN do cluster inclui a região; portanto, implantações entre regiões seguem o mesmo processo das implantações na mesma região.

## Verificação do registro do cluster
<a name="_verify_cluster_registration"></a>

Consulte os clusters que estão registrados:

```
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster
```

Como opção, verifique o status do cluster na interface do Argo CD em Configurações → Clusters.

## Clusters privados
<a name="_private_clusters"></a>

A funcionalidade do Argo CD fornece acesso transparente a clusters de EKS totalmente privados, sem exigir emparelhamento da VPC ou configurações de rede especializadas.

 A AWS gerencia automaticamente a conectividade entre a funcionalidade do Argo CD e os clusters remotos privados.

Basta registrar o cluster privado usando seu ARN. Nenhuma configuração de rede adicional é necessária.

## Requisitos do RBAC de entrada de acesso
<a name="_access_entry_rbac_requirements"></a>

Quando você cria uma funcionalidade do Argo CD, uma entrada de acesso do EKS é criada automaticamente para o perfil de funcionalidade, mas nenhuma permissão de RBAC do Kubernetes é concedida por padrão. Esse design intencional segue o princípio de privilégio mínimo, em que diferentes casos de uso exigem permissões diferentes.

Por exemplo: \$1 Se você usar o cluster somente como um hub do Argo CD para gerenciar clusters remotos, ele não precisará de permissões de implantação locais \$1 Se você implantar aplicações localmente, ele precisará de acesso de leitura em todo o cluster e acesso de gravação a namespaces específicos \$1 Se for preciso criar CRDs, serão necessárias permissões adicionais de administrador de cluster

É necessário configurar explicitamente as permissões que o Argo CD precisa com base em seus requisitos.

### Permissões mínimas para o Argo CD
<a name="_minimum_permissions_for_argo_cd"></a>

O Argo CD precisa de dois tipos de permissões para funcionar sem erros:

 **Permissões de leitura (em todo o cluster)**: o Argo CD deve ser capaz de ler todos os tipos de recursos e definições de recursos personalizadas (CRDs) em todo o cluster para:
+ Descoberta de recursos e verificações de integridade
+ Detecção do desvio entre o estado desejado e o real
+ Validação de recursos antes da implantação

 **Permissões de gravação (específicas do namespace)**: o Argo CD precisa criar, atualizar e excluir permissões para recursos definidos em Applications:
+ Implantar workloads de aplicações (implantações, serviços, ConfigMaps etc.)
+ Aplicar recursos personalizados (CRDs específicos para suas aplicações)
+ Gerenciamento do ciclo de vida do aplicação

### Configuração rápida
<a name="_quick_setup"></a>

Para começar rapidamente, testar ou desenvolver ambientes, use a `AmazonEKSClusterAdminPolicy`:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**Importante**  
A `AmazonEKSClusterAdminPolicy` fornece acesso total ao administrador do cluster (equivalente a `system:masters`), incluindo a capacidade de criar CRDs, modificar recursos em todo o cluster e implantar em qualquer namespace. Isso é conveniente para desenvolvimento e POCs, mas não deve ser usado em ambientes de produção. Para produção, use a configuração de privilégios mínimos abaixo.

### Configuração de produção com privilégio mínimo
<a name="_production_setup_with_least_privilege"></a>

Para ambientes de produção, crie um RBAC personalizado do Kubernetes que conceda:
+ Acesso de leitura em todo o cluster a todos os recursos (para descobertas e verificações de integridade)
+ Acesso de gravação específico ao namespace (para implantações)

 **Etapa 1: associar a entrada de acesso a um grupo de Kubernetes personalizado** 

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \
  --access-scope type=namespace,namespaces=app-namespace
```

 **Etapa 2: criar um ClusterRole para acesso de leitura** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: argocd-read-all
rules:
# Read access to all resources for discovery and health checks
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

 **Etapa 3: criar um perfil para acesso de gravação aos namespaces da aplicação** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: argocd-deploy
  namespace: app-namespace
rules:
# Full access to deploy application resources
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
```

 **Etapa 4: vincular perfis ao grupo de Kubernetes** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: argocd-read-all
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: argocd-read-all
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: argocd-deploy
  namespace: app-namespace
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: argocd-deploy
  apiGroup: rbac.authorization.k8s.io
```

**nota**  
O formato do nome do grupo para entradas de acesso é `eks-access-entry:` seguido pelo ARN principal. Repita o RoleBinding para cada namespace em que o Argo CD deva implantar aplicações.

**Importante**  
O Argo CD deve ser capaz de ler todos os tipos de recursos em todo o cluster para verificações de integridade e descoberta, mesmo que seja implantado apenas em namespaces específicos. Sem acesso de leitura em todo o cluster, o Argo CD mostrará erros ao verificar a integridade da aplicação.

## Restrição do acesso ao cluster com o Projects
<a name="_restrict_cluster_access_with_projects"></a>

Use Projects para controlar em quais clusters e namespaces as Applications podem ser implantadas configurando os clusters e namespaces de destino permitidos em `spec.destinations`:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  destinations:
  - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster
    namespace: '*'
  - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster
    namespace: '*'
  sourceRepos:
  - 'https://github.com/example/production-apps'
```

Para obter detalhes, consulte [Trabalho com o Argo CD Projects](argocd-projects.md).

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Trabalho com o Argo CD Projects](argocd-projects.md): organize as Applications e aplique limites de segurança
+  [Criação de Applications](argocd-create-application.md): implante sua primeira aplicação
+  [Uso de ApplicationSets](argocd-applicationsets.md): realize implantações em vários clusters com ApplicationSets
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse padrões com vários clusters e a configuração entre contas
+  [Declarative Cluster Setup](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#clusters): acesse a referência de configuração da versão original do cluster

# Trabalho com o Argo CD Projects
<a name="argocd-projects"></a>

O Argo CD Projects (AppProject) oferece agrupamento lógico e controle de acesso para Applications. Os projetos definem quais repositórios do Git, clusters de destino e namespaces podem ser usados pelas Applications, viabilizando multilocação e limites de segurança em instâncias compartilhadas do Argo CD.

## Situações para o uso do Argo CD Projects
<a name="_when_to_use_projects"></a>

Use o Projects para:
+ Separar aplicações por equipe, ambiente ou unidade de negócio
+ Restringir de quais repositórios as equipes podem realizar a implantação
+ Limitar para quais clusters e namespaces as equipes podem realizar a implantação
+ Aplicar cotas de recursos e tipos de recursos permitidos
+ Fornecer implantação de aplicações de autoatendimento com barreiras de proteção

## Projeto padrão
<a name="_default_project"></a>

Cada funcionalidade do Argo CD inclui um projeto `default` que permite acesso a todos os repositórios, clusters e namespaces. Apesar de ser útil para testes iniciais, crie Argo CD Projects dedicados com restrições específicas para o uso em produção.

Para obter detalhes sobre a configuração do projeto padrão e como restringi-lo, consulte [The Default Project](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#the-default-project) na documentação do Argo CD.

## Criar um projeto
<a name="_create_a_project"></a>

Crie um Argo CD Project por meio da aplicação de um recurso `AppProject` em seu cluster.

 **Exemplo: projeto específico por equipe** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Applications for Team A

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'
    - 'https://github.com/my-org/shared-libs'

  # Destination clusters and namespaces
  destinations:
    - name: dev-cluster
      namespace: team-a-dev
    - name: prod-cluster
      namespace: team-a-prod

  # Allowed resource types
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace

  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
```

Aplique o Project:

```
kubectl apply -f team-a-project.yaml
```

## Configuração de projetos
<a name="_project_configuration"></a>

### Repositórios de origem
<a name="_source_repositories"></a>

Controle quais repositórios do Git podem ser usados por Applications neste projeto:

```
spec:
  sourceRepos:
    - 'https://github.com/my-org/app-*'  # Wildcard pattern
    - 'https://github.com/my-org/infra'  # Specific repo
```

É possível empregar caracteres curinga e padrões de negação (prefixo `!`) para permitir ou bloquear repositórios específicos. Para obter detalhes, consulte [Managing Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) na documentação do Argo CD.

### Restrições de destinos
<a name="_destination_restrictions"></a>

Limite o local em que as Applications podem ser implantadas:

```
spec:
  destinations:
    - name: prod-cluster  # Specific cluster by name
      namespace: production
    - name: '*'  # Any cluster
      namespace: team-a-*  # Namespace pattern
```

**Importante**  
Use nomes de clusters específicos e padrões de namespace em vez de caracteres curingas para Projects destinados a ambientes de produção. Isso impede a implantação acidental em clusters ou namespaces não autorizados.

É possível usar caracteres curinga e padrões de negação para controlar os destinos. Para obter detalhes, consulte [Managing Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) na documentação do Argo CD.

### Restrições de recursos
<a name="_resource_restrictions"></a>

Controle quais tipos de recursos do Kubernetes podem ser implantados:

 **Recursos com escopo de cluster**:

```
spec:
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace
    - group: 'rbac.authorization.k8s.io'
      kind: Role
```

 **Recursos com escopo de namespace**:

```
spec:
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
    - group: 's3.services.k8s.aws'
      kind: Bucket
```

Use listas de restrições para negar recursos específicos:

```
spec:
  namespaceResourceBlacklist:
    - group: ''
      kind: Secret  # Prevent direct Secret creation
```

## Atribuição de Applications a Projects
<a name="_assign_applications_to_projects"></a>

Ao criar uma Application, especifique o projeto no campo `spec.project`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: team-a  # Assign to team-a project
  source:
    repoURL: https://github.com/my-org/my-app
    path: manifests
  destination:
    name: prod-cluster
    namespace: team-a-prod
```

As Applications sem um projeto especificado usam o projeto `default`.

## Perfis de projeto e RBAC
<a name="_project_roles_and_rbac"></a>

Os Projects podem definir perfis personalizados para um controle de acesso mais preciso. Mapeie os perfis do projeto para usuários e grupos do Centro de Identidade da AWS na configuração de funcionalidades para controlar as pessoas com permissões para sincronizar, atualizar ou excluir aplicações.

 **Exemplo: Project com perfis de desenvolvedor e de administrador** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  sourceRepos:
    - '*'
  destinations:
    - name: '*'
      namespace: 'team-a-*'

  roles:
    - name: developer
      description: Developers can sync applications
      policies:
        - p, proj:team-a:developer, applications, sync, team-a/*, allow
        - p, proj:team-a:developer, applications, get, team-a/*, allow
      groups:
        - team-a-developers

    - name: admin
      description: Admins have full access
      policies:
        - p, proj:team-a:admin, applications, *, team-a/*, allow
      groups:
        - team-a-admins
```

Para obter detalhes sobre os perfis de projeto, tokens JWT para pipelines de CI/CD e configuração de RBAC, consulte [Project Roles](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#project-roles) na documentação do Argo CD.

## Padrões comuns
<a name="_common_patterns"></a>

### Projects com base no ambiente
<a name="_environment_based_projects"></a>

Crie projetos separados para cada ambiente:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/*'
  destinations:
    - name: prod-cluster
      namespace: '*'
  # Strict resource controls for production
  clusterResourceWhitelist: []
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
```

### Projects com base em equipe
<a name="_team_based_projects"></a>

Isole as equipes com projetos dedicados:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: platform-team
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/platform-*'
  destinations:
    - name: '*'
      namespace: 'platform-*'
  # Platform team can manage cluster resources
  clusterResourceWhitelist:
    - group: '*'
      kind: '*'
```

### Projects com vários clusters
<a name="_multi_cluster_projects"></a>

Faça a implantação em vários clusters utilizando políticas consistentes:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: global-app
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/global-app'
  destinations:
    - name: us-west-cluster
      namespace: app
    - name: eu-west-cluster
      namespace: app
    - name: ap-south-cluster
      namespace: app
```

## Práticas recomendadas
<a name="_best_practices"></a>

 **Comece com Projects restritivos**: comece com permissões limitadas e expanda conforme necessário, em vez de começar com acesso amplo.

 **Use padrões de namespace**: use curingas nas restrições de namespace (como `team-a-*`) para permitir flexibilidade e, ao mesmo tempo, manter os limites.

 **Projetos separados para ambientes de produção**: use projetos dedicados para produção com controles mais rigorosos e políticas de sincronização manual.

 **Documente os objetivos do Project**: use o campo `description` para explicar a finalidade de cada projeto e quem deve usá-lo.

 **Analise as permissões do Project regularmente**: audite os Projects periodicamente para garantir que as restrições ainda estejam alinhadas com as necessidades da equipe e os requisitos de segurança.

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Configuração das permissões do Argo CD](argocd-permissions.md): configure o RBAC e a integração com o Centro de Identidade
+  [Criação de Applications](argocd-create-application.md): crie Applications em Projects
+  [Uso de ApplicationSets](argocd-applicationsets.md): use ApplicationSets com os Projects para realizar implantações em vários clusters
+  [Documentação do Argo CD Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/): acesse a referência oficial completa

# Criação de Applications
<a name="argocd-create-application"></a>

As Applications correspondem a implantações nos clusters de destino. Cada Application define uma origem (repositório do Git) e um destino (cluster e namespace). Quando aplicado, o Argo CD criará os recursos especificados pelos manifestos no repositório do Git para o namespace no cluster. As Applications frequentemente especificam implantações de workloads, mas podem gerenciar quaisquer recursos do Kubernetes disponíveis no cluster de destino.

## Pré-requisitos
<a name="_prerequisites"></a>
+ Um cluster de EKS com a funcionalidade para o Argo CD criada
+ Acesso ao repositório configurado (consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md))
+ Cluster de destino registrado (consulte [Registro de clusters de destino](argocd-register-clusters.md))
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster

## Criação de uma Application básica
<a name="_create_a_basic_application"></a>

Defina uma Application que realize implantações usando um repositório do Git:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: default
```

**nota**  
Use `destination.name` com o nome do cluster utilizado ao registrar o cluster (como `in-cluster` para o cluster local). O campo `destination.server` também funciona com ARNs de cluster de EKS, mas o uso de nomes de cluster é recomendado para melhor legibilidade.

Aplique a Application:

```
kubectl apply -f application.yaml
```

Visualize o status da Application:

```
kubectl get application guestbook -n argocd
```

## Configuração da origem
<a name="_source_configuration"></a>

 **Repositório do Git**:

```
spec:
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: kubernetes/manifests
```

 **Etiqueta ou confirmação específica do Git**:

```
spec:
  source:
    targetRevision: v1.2.0  # or commit SHA
```

 **Chart do Helm**:

```
spec:
  source:
    repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - values.yaml
      parameters:
      - name: image.tag
        value: v1.2.0
```

 **Chart do Helm com valores do repositório Git externo** (padrão de várias fontes):

```
spec:
  sources:
  - repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - $values/environments/production/values.yaml
  - repoURL: https://github.com/example/config-repo
    targetRevision: main
    ref: values
```

Para obter mais informações, consulte [Arquivos de valor do Helm do repositório Git externo](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository) na documentação do Argo CD.

 **Chart do Helm do ECR**:

```
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
```

Se o perfil da funcionalidade tiver as permissões necessárias do ECR, o repositório será usado diretamente, sem necessidade da configuração de Repository adicional. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

 **Repositório do Git do CodeCommit**:

```
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Se o perfil da funcionalidade tiver as permissões necessárias do CodeCommit, o repositório será usado diretamente, sem necessidade da configuração de Repository adicional. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

 **Repositório do Git do CodeConnections**:

```
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

O formato do URL do repositório é derivado do ARN da conexão do CodeConnections. Se o perfil da funcionalidade tiver as permissões necessárias do CodeConnections e uma conexão estiver configurada, o repositório será usado diretamente, sem necessidade da configuração de Repository adicional. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

 **Kustomize**:

```
spec:
  source:
    repoURL: https://github.com/example/kustomize-app
    targetRevision: main
    path: overlays/production
    kustomize:
      namePrefix: prod-
```

## Políticas de sincronização
<a name="_sync_policies"></a>

Defina como o Argo CD deve sincronizar as aplicações.

 **Sincronização manual (padrão)**:

As aplicações exigem aprovação manual para sincronizar alterações:

```
spec:
  syncPolicy: {}  # No automated sync
```

Acionamento manual da sincronização:

```
kubectl patch application guestbook -n argocd \
  --type merge \
  --patch '{"operation": {"initiatedBy": {"username": "admin"}, "sync": {}}}'
```

 **Sincronização automática**:

As aplicações são sincronizadas automaticamente quando alterações no Git são detectadas:

```
spec:
  syncPolicy:
    automated: {}
```

 **Autorreparação**:

Reverte automaticamente alterações manuais no cluster:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

Quando esta opção está habilitada, o Argo CD reverte quaisquer alterações realizadas diretamente no cluster, garantindo que o Git permaneça como fonte da verdade.

 **Supressão**:

Exclui automaticamente recursos removidos do Git:

```
spec:
  syncPolicy:
    automated:
      prune: true
```

**Atenção**  
A supressão excluirá recursos do seu cluster. Use com cautela em ambientes de produção.

 **Sincronização automática combinada**:

```
spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

 **Configuração de novas tentativas**

Configure o comportamento de novas tentativas para sincronizações com falha:

```
spec:
  syncPolicy:
    retry:
      limit: 5  # Number of failed sync attempts; unlimited if less than 0
      backoff:
        duration: 5s  # Amount to back off (default unit: seconds, also supports "2m", "1h")
        factor: 2  # Factor to multiply the base duration after each failed retry
        maxDuration: 3m  # Maximum amount of time allowed for the backoff strategy
```

Isso é particularmente útil para recursos que dependam da criação de CRDs primeiro ou quando se trabalha com instâncias kro em que o CRD pode não estar imediatamente disponível.

## Opções de sincronização
<a name="_sync_options"></a>

Configuração de sincronização adicional:

 **Crie um namespace, se ele não existir**:

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
```

 **Ignore a simulação em caso de falta de recursos**:

Útil ao aplicar recursos que dependam de CRDs que ainda não existam (como instâncias kro):

```
spec:
  syncPolicy:
    syncOptions:
    - SkipDryRunOnMissingResource=true
```

Isso também pode ser aplicado a recursos específicos usando um rótulo no próprio recurso.

 **Valide os recursos antes de realizar a aplicação**:

```
spec:
  syncPolicy:
    syncOptions:
    - Validate=true
```

 **Realize a aplicação somente quando não estiver em sincronização**:

```
spec:
  syncPolicy:
    syncOptions:
    - ApplyOutOfSyncOnly=true
```

## Recursos avançados de sincronização
<a name="_advanced_sync_features"></a>

O Argo CD oferece recursos avançados de sincronização para implantações complexas:
+  **Ciclos de sincronização**: controlam a ordem de criação de recursos usando anotações `argocd.argoproj.io/sync-wave`
+  **Hooks de sincronização**: executam trabalhos antes ou depois da sincronização usando as anotações `argocd.argoproj.io/hook` (nomeadamente, PreSync, PostSync e SyncFail)
+  **Avaliação da integridade dos recursos**: verificações de integridade personalizadas são realizadas para recursos específicos da aplicação

Para obter detalhes, consulte [Sync Waves](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/) e [Resource Hooks](https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/) na documentação do CD Argo.

## Desconsideração de diferenças
<a name="_ignore_differences"></a>

Evite que o Argo CD sincronize campos específicos gerenciados por outros controladores (como a HPA gerenciando réplicas):

```
spec:
  ignoreDifferences:
  - group: apps
    kind: Deployment
    jsonPointers:
    - /spec/replicas
```

Para obter detalhes sobre como desconsiderar padrões e realizar exclusões de campos, consulte [Diffing Customization](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/) na documentação do Argo CD.

## Implantação em vários ambientes
<a name="_multi_environment_deployment"></a>

Implante a mesma aplicação em vários ambientes:

 **Desenvolvimento do**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: develop
    path: overlays/development
  destination:
    name: dev-cluster
    namespace: my-app
```

 **Produção**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-prod
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: overlays/production
  destination:
    name: prod-cluster
    namespace: my-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

## Monitoramento e gerenciamento de Applications
<a name="_monitor_and_manage_applications"></a>

 **Visualize o status da Application**:

```
kubectl get application my-app -n argocd
```

 **Acesse a interface do usuário do Argo CD**:

Abra a interface do usuário do Argo CD pelo console do EKS para visualizar a topologia da aplicação, o status de sincronização, a integridade dos recursos e o histórico de implantações. Consulte [Como trabalhar com o Argo CD](working-with-argocd.md) para obter instruções de acesso à interface do usuário.

 **Reversão de Applications**:

Reverta para uma revisão anterior por meio da interface do usuário do Argo CD, da CLI do Argo CD ou atualizando o `targetRevision` na especificação da aplicação para uma confirmação ou etiqueta anterior no Git.

Com a CLI do Argo CD:

```
argocd app rollback argocd/my-app <revision-id>
```

**nota**  
Ao usar a CLI do Argo CD com o recurso gerenciado, especifique as aplicações com o prefixo do namespace: `namespace/appname`.

Para obter mais informações, consulte [reversão de aplicações do argocd](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_app_rollback/) na documentação do Argo CD.

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Trabalho com o Argo CD Projects](argocd-projects.md): organize aplicações com Projects para ambientes multilocatários
+  [Uso de ApplicationSets](argocd-applicationsets.md): realize implantações em vários clusters com modelos
+  [Application Specification](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/): acesse a referência de API completa para a Application
+  [Sync Options](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/): acesse a configuração de sincronização avançada

# Uso de ApplicationSets
<a name="argocd-applicationsets"></a>

Os ApplicationSets geram diversas Applications a partir de modelos, possibilitando a implantação da mesma aplicação em diversos clusters, ambientes ou namespaces com uma única definição de recurso.

## Pré-requisitos
<a name="_prerequisites"></a>
+ Um cluster de EKS com a funcionalidade para o Argo CD criada
+ Acesso ao repositório configurado (consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md))
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster

**nota**  
Não são necessários vários clusters de destino para ApplicationSets. É possível usar geradores diferentes do gerador de cluster (como geradores de lista, git ou matriz) para implantar aplicações sem clusters remotos.

## Funcionamento dos ApplicationSets
<a name="_how_applicationsets_work"></a>

Os ApplicationSets usam geradores para criar parâmetros e, em seguida, aplicá-los a um modelo de Application. Cada conjunto de parâmetros gerados cria uma Application.

Geradores mais usados em implantações do EKS:
+  **Gerador de listas**: define explicitamente clusters e parâmetros para cada ambiente
+  **Gerador de cluster**: realiza a implantação automática em todos os clusters registrados
+  **Gerador do Git**: gera Applications com base na estrutura do repositório
+  **Gerador de matriz**: combina geradores para implantações multidimensionais
+  **Mesclar gerador**: mescla parâmetros de vários geradores

Para obter uma referência completa dos geradores, consulte a [Documentação do ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/).

## Gerador de listas
<a name="_list_generator"></a>

Realize uma implantação em vários clusters usando configuração explícita:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook-all-clusters
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - environment: dev
        replicas: "2"
      - environment: staging
        replicas: "3"
      - environment: prod
        replicas: "5"
  template:
    metadata:
      name: 'guestbook-{{environment}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/guestbook
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{environment}}-cluster'
        namespace: guestbook
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

**nota**  
Use `destination.name` com nomes de cluster para melhor legibilidade. O campo `destination.server` também funciona com ARNs de cluster de EKS, se necessário.

Essa ação realiza a criação de três Applications: `guestbook-dev`, `guestbook-staging` e `guestbook-prod`.

## Gerador de cluster
<a name="_cluster_generator"></a>

Realize a implantação automática de todos os clusters registrados:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: cluster-addons
  namespace: argocd
spec:
  generators:
  - clusters: {}
  template:
    metadata:
      name: '{{name}}-addons'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/cluster-addons
        targetRevision: HEAD
        path: addons
      destination:
        server: '{{server}}'
        namespace: kube-system
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

Essa ação cria automaticamente uma Application para cada cluster registrado.

 **Clusters de filtros**:

Use `matchLabels` para incluir clusters específicos ou `matchExpressions` para excluir clusters:

```
spec:
  generators:
  - clusters:
      selector:
        matchLabels:
          environment: production
        matchExpressions:
        - key: skip-appset
          operator: DoesNotExist
```

## Geradores do Git
<a name="_git_generators"></a>

Os geradores do Git criam Applications com base na estrutura do repositório:
+  **Gerador de diretório**: implanta cada diretório como uma Application separada (útil para microsserviços)
+  **Gerador de arquivo** gera Applications com base em arquivos de parâmetros (útil para implantações multilocatárias)

 **Exemplo: implantação de microsserviços** 

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: microservices
  namespace: argocd
spec:
  generators:
  - git:
      repoURL: https://github.com/example/microservices
      revision: HEAD
      directories:
      - path: services/*
  template:
    metadata:
      name: '{{path.basename}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/microservices
        targetRevision: HEAD
        path: '{{path}}'
      destination:
        name: my-cluster
        namespace: '{{path.basename}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
        - CreateNamespace=true
```

Para obter mais detalhes sobre os geradores do Git e a configuração baseada em arquivos, consulte [Git Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Git/) na documentação do Argo CD.

## Gerador de matriz
<a name="_matrix_generator"></a>

Use a combinação de vários geradores para realizar implantações em diversas dimensões (ambientes × clusters):

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: multi-env-multi-cluster
  namespace: argocd
spec:
  generators:
  - matrix:
      generators:
      - list:
          elements:
          - environment: dev
          - environment: staging
          - environment: prod
      - clusters:
          selector:
            matchLabels:
              region: us-west-2
  template:
    metadata:
      name: 'app-{{environment}}-{{name}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{name}}'
        namespace: 'app-{{environment}}'
```

Para obter mais detalhes sobre como combinar geradores, consulte [Matrix Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Matrix/) na documentação do Argo CD.

## Implantação multirregião
<a name="_multi_region_deployment"></a>

Realize a implantação em clusters distribuídos por várias regiões:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: global-app
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - clusterName: prod-us-west
        region: us-west-2
      - clusterName: prod-us-east
        region: us-east-1
      - clusterName: prod-eu-west
        region: eu-west-1
  template:
    metadata:
      name: 'app-{{region}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: kubernetes
        helm:
          parameters:
          - name: region
            value: '{{region}}'
      destination:
        name: '{{clusterName}}'
        namespace: app
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

## Gerenciamento de ApplicationSets
<a name="_manage_applicationsets"></a>

 **Visualize os ApplicationSets e as Applications geradas**:

```
kubectl get applicationsets -n argocd
kubectl get applications -n argocd -l argocd.argoproj.io/application-set-name=<applicationset-name>
```

 **Atualize um ApplicationSet**:

Modifique a especificação do ApplicationSet e a aplique novamente. O Argo CD atualiza automaticamente todas as Applications geradas:

```
kubectl apply -f applicationset.yaml
```

 **Exclua um ApplicationSet**:

```
kubectl delete applicationset <name> -n argocd
```

**Atenção**  
Ao excluir um ApplicationSet, todas as Applications geradas são apagadas. Se essas Applications tiverem `prune: true`, os recursos correspondentes também serão removidos dos clusters de destino.  
Para preservar os recursos implantados ao excluir um ApplicationSet, defina `.syncPolicy.preserveResourcesOnDeletion` como `true` na especificação do ApplicationSet. Para obter mais informações, consulte [Corte de aplicações e exclusão de recursos](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Application-Deletion/) na documentação do Argo CD.

**Importante**  
O recurso ApplicationSets do Argo CD tem considerações de segurança que devem ser conhecidas antes de usar o ApplicationSets. Para obter mais informações, consulte [Segurança do ApplicationSet](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Security/) na documentação do Argo CD.

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Trabalho com o Argo CD Projects](argocd-projects.md): organize os ApplicationSets com Projects
+  [Criação de Applications](argocd-create-application.md): compreenda a configuração das Applications
+  [Documentação do ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): referência completa de geradores e seus padrões
+  [Referência de geradores](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/): especificações detalhadas dos geradores

# Considerações sobre o Argo CD
<a name="argocd-considerations"></a>

Neste tópico, são apresentadas as principais considerações para usar a funcionalidade do EKS para o Argo CD, incluindo planejamento, permissões, autenticação e padrões de implantação em vários clusters.

## Planejamento
<a name="_planning"></a>

Antes de implantar o Argo CD, considere o seguinte:

 **Estratégia de repositório**: determine o local em que os manifestos das suas aplicações serão armazenados (por exemplo, CodeCommit, GitHub, GitLab ou Bitbucket). Planeje a estrutura do repositório e a estratégia de ramificação para diferentes ambientes.

 **Estratégia de RBAC**: defina quais equipes ou usuários terão acesso como administrador, editor ou visualizador. Relacione essas permissões aos grupos do Centro de Identidade da AWS ou aos perfis do Argo CD.

 **Arquitetura de vários clusters**: determine se você gerenciará vários clusters usando uma única instância do Argo CD. Avalie a possibilidade de empregar um cluster de gerenciamento dedicado para o Argo CD.

 **Organização das aplicações**: planeje como você estruturará Applications e ApplicationSets. Avalie a utilização de projetos para estruturar as aplicações de acordo com a equipe ou o ambiente.

 **Políticas de sincronização**: defina se as aplicações serão sincronizadas automaticamente ou se precisarão de aprovação manual. A sincronização automática é comum em ambientes de desenvolvimento, e a manual em ambientes de produção.

## Permissões
<a name="_permissions"></a>

Para obter informações detalhadas sobre os perfis de funcionalidades do IAM, as políticas de confiança e as práticas recomendadas de segurança, consulte [Perfil do IAM para a funcionalidade do Amazon EKS](capability-role.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

### Visão geral do perfil da funcionalidade do IAM
<a name="_iam_capability_role_overview"></a>

Ao criar um recurso de funcionalidade do Argo CD, você fornece um perfil da funcionalidade do IAM. Diferentemente do ACK, o Argo CD gerencia principalmente recursos do Kubernetes e não recursos da AWS diretamente. No entanto, o perfil de funcionalidade do IAM é necessário para:
+ Acessar repositórios do Git privados no CodeCommit
+ Integrar-se ao Centro de Identidade da AWS para autenticação
+ Acessar segredos no AWS Secrets Manager (se configurado)
+ Realizar implantações entre clusters para outros clusters de EKS

### Integração com o CodeCommit
<a name="_codecommit_integration"></a>

Se você estiver usando repositórios do CodeCommit, anexe uma política com permissões de leitura:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "*"
    }
  ]
}
```

**Importante**  
Para uso em ambientes de produção, restrinja o campo `Resource` a ARNs específicos de repositórios, em vez de usar `"*"`.  
Exemplo:  

```
"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"
```
Isso limita o acesso à funcionalidade do Argo CD somente aos repositórios necessários para gerenciamento.

### Integração do Secrets Manager
<a name="_secrets_manager_integration"></a>

Se você estiver armazenando credenciais de repositório no Secrets Manager, anexe a política gerenciada para acesso de leitura:

```
arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess
```

Essa política inclui as permissões necessárias: `secretsmanager:GetSecretValue`, `secretsmanager:DescribeSecret` e perissões de descriptografia do KMS.

### Configuração básica
<a name="_basic_setup"></a>

Para a funcionalidade básica do CD Argo com repositórios do Git públicos, nenhuma política do IAM adicional é necessária além da política de confiança.

## Autenticação
<a name="_authentication"></a>

### Integração com o Centro de Identidade da AWS
<a name="shared_aws_identity_center_integration"></a>

A funcionalidade gerenciada do Argo CD integra-se diretamente ao Centro de Identidade da AWS (anteriormente AWS SSO), possibilitando o uso do provedor de identidade atual para autenticação.

Ao configurar a integração com o Centro de Identidade da AWS:

1. Os usuários acessam a interface do usuário do Argo CD por meio do console do EKS

1. A autenticação é realizada por meio do Centro de Identidade da AWS (que pode ser federado ao seu provedor de identidades corporativo)

1.  O Centro de Identidade da AWS fornece informações de usuários e grupos ao Argo CD

1. O Argo CD mapeia usuários e grupos para perfis de RBAC com base na sua configuração

1. Os usuários visualizam somente as aplicações e os recursos aos quais têm permissão de acessar

### Simplificação do acesso com conjuntos de permissões do Centro de Identidade
<a name="_simplifying_access_with_identity_center_permission_sets"></a>

 O Centro de Identidade da AWS fornece dois caminhos distintos de autenticação ao trabalhar com o Argo CD:

 **Autenticação da API do Argo CD**: o Centro de Identidade fornece autenticação de SSO para a interface do usuário do Argo CD e para a API. Essa configuração é realizada por meio dos mapeamentos de perfis de RBAC da funcionalidade do Argo CD.

 **Acesso ao cluster de EKS**: a funcionalidade do Argo CD usa o perfil do IAM fornecido pelo cliente para se autenticar com clusters de EKS por meio de entradas de acesso. Essas entradas de acesso podem ser configuradas manualmente para conceder ou revogar permissões.

É possível usar [conjuntos de permissões do Centro de Identidade](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html) para simplificar o gerenciamento de identidades, ao permitir que uma única identidade tenha acesso ao Argo CD e aos clusters de EKS. Isso reduz o esforço operacional, pois você precisa gerenciar apenas uma identidade nos dois sistemas, em vez de manter credenciais distintas para o acesso ao Argo CD e ao cluster.

### Mapeamentos de perfis de RBAC
<a name="_rbac_role_mappings"></a>

O Argo CD tem perfis integrados que você pode mapear para usuários e grupos do Centro de Identidade da AWS:

 **ADMIN**: acesso total a todas as aplicações e configurações. Pode criar, atualizar e excluir aplicações. Pode gerenciar a configuração do Argo CD.

 **EDITOR**: pode criar e modificar aplicações. Não pode alterar as configurações do Argo CD nem excluir aplicações.

 **VIEWER**: acesso somente leitura às aplicações. Pode visualizar o status e o histórico das aplicações. Não pode fazer alterações.

**nota**  
Os nomes dos perfis diferenciam maiúsculas de minúsculas e devem estar em letras maiúsculas (ADMIN, EDITOR e VIEWER).

**Importante**  
A integração das funcionalidades do EKS com o Centro de Identidade da AWS fornece suporte para até mil identidades por funcionalidade do Argo CD. Uma identidade pode ser um usuário ou um grupo.

## Implantações em vários clusters
<a name="_multi_cluster_deployments"></a>

A funcionalidade gerenciada do Argo CD fornece suporte a implantações em vários clusters, possibilitando o gerenciamento de aplicações em clusters de desenvolvimento, preparação e produção usando uma única instância do Argo CD.

### Funcionamento da estratégia de vários clusters
<a name="_how_multi_cluster_works"></a>

Ao registrar clusters adicionais com o Argo CD:

1. Você cria segredos de cluster que fazem referência aos clusters de destino do EKS pelo ARN

1. Você cria Applications ou ApplicationSets direcionados a diferentes clusters

1. O Argo CD estabelece conexão com cada cluster para implantar e monitorar os recursos

1. Você visualiza e gerencia todos os clusters usando uma única interface do usuário do Argo CD

### Pré-requisitos para a estratégia de vários clusters
<a name="_prerequisites_for_multi_cluster"></a>

Antes de registrar clusters adicionais:
+ Crie uma entrada de acesso no cluster de destino para o perfil da funcionalidade para o Argo CD
+ Garanta a conectividade de rede entre a funcionalidade do Argo CD e os clusters de destino
+ Verifique as permissões do IAM para acessar os clusters de destino

### Registro de um cluster
<a name="_register_a_cluster"></a>

Registre clusters usando o Kubernetes Secrets no namespace `argocd`.

Obtenha o ARN do cluster de destino. Substitua *region-code* pela região da AWS em que seu cluster de destino está e substitua *target-cluster* pelo nome do cluster de destino.

```
aws eks describe-cluster \
  --region region-code \
  --name target-cluster \
  --query 'cluster.arn' \
  --output text
```

Crie um segredo de cluster usando o ARN do cluster:

```
apiVersion: v1
kind: Secret
metadata:
  name: target-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
  name: target-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/target-cluster
  project: default
```

**Importante**  
Use o ARN do cluster de EKS no campo `server`, e não o URL do servidor da API do Kubernetes. A funcionalidade gerenciada requer ARNs para identificar os clusters de destino.

Execute a aplicação do segredo:

```
kubectl apply -f cluster-secret.yaml
```

### Configuração de uma entrada de acesso no cluster de destino
<a name="_configure_access_entry_on_target_cluster"></a>

O cluster de destino deve ter uma entrada de acesso que conceda ao perfil da funcionalidade para o Argo CD permissão para implantar aplicações. Substitua *region-code* pela região da AWS em que seu cluster de destino está, substitua *target-cluster* pelo nome do cluster de destino e substitua o ARN pelo ARN do perfil da funcionalidade para o Argo CD.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD \
  --kubernetes-groups system:masters
```

**nota**  
Para uso em ambientes de produção, considere usar grupos do Kubernetes mais restritivos em vez de `system:masters`.

### Acesso a clusters privados
<a name="_private_cluster_access"></a>

A funcionalidade gerenciada do Argo CD pode ser implantada em clusters de EKS totalmente privados, sem exigir emparelhamento da VPC ou configurações de rede especializadas. A AWS gerencia automaticamente a conectividade entre a funcionalidade do Argo CD e os clusters remotos privados. Certifique-se de que seus controles de acesso ao repositório e as políticas RBAC do Argo CD estejam configurados corretamente.

### Implantação entre contas
<a name="_cross_account_deployments"></a>

Para implantações entre contas, adicione o perfil da funcionalidade do IAM para o Argo CD proveniente da conta de origem à entrada de acesso do cluster de EKS da conta de destino:

1. Na conta de destino, crie uma entrada de acesso no cluster de destino do EKS

1. Use o ARN do perfil da funcionalidade do IAM para o Argo CD da conta de origem como a entidade principal

1. Configure as permissões apropriadas de RBAC do Kubernetes para a entrada de acesso

1. Registre o cluster de destino no Argo CD usando o ARN do cluster de EKS

Não é necessária a criação de perfis do IAM adicionais nem a configuração de política de confiança. As entradas de acesso do EKS gerenciam o acesso entre contas.

## Práticas recomendadas
<a name="_best_practices"></a>

 **Use fontes declarativas como a fonte da verdade**: armazene todos os manifestos das suas aplicações em fontes declarativas (repositórios do Git, registros do Helm ou imagens OCI), permitindo controle de versão, trilhas de auditoria e colaboração.

 **Implemente o RBAC adequado**: use a integração com o Centro de Identidade da AWS para definir quem tem permissão para acessar e gerenciar aplicações no Argo CD. O Argo CD oferece controle de acesso detalhado para recursos dentro das Applications (Deployments, Pods, ConfigMaps e Secrets).

 **Use ApplicationSets para realizar implantações em diversos ambientes**: use ApplicationSets para implantar aplicações em vários clusters ou namespaces com configurações diferentes.

## Gerenciamento de ciclo de vida
<a name="_lifecycle_management"></a>

### Políticas de sincronização de aplicações
<a name="_application_sync_policies"></a>

Defina como o Argo CD deve sincronizar as aplicações:

 **Sincronização manual**: as aplicações exigem aprovação manual para sincronizar alterações. Recomendado para ambientes de **produção**.

 **Sincronização automática**: as aplicações são sincronizadas automaticamente quando alterações no Git são detectadas. Comum em ambientes de desenvolvimento e de preparação.

 **Autorreparação**: reverte automaticamente alterações manuais feitas no cluster. Garante que o estado do cluster corresponda ao do Git.

 **Supressão**: exclui automaticamente recursos removidos do Git. Use com cautela, pois isso pode excluir recursos.

### Integridade da aplicação
<a name="_application_health"></a>

O Argo CD monitora continuamente a integridade das aplicações:
+  **Íntegro**: todos os recursos estão funcionando conforme esperado
+  **Em progresso**: os recursos estão sendo criados ou atualizados
+  **Degradado**: alguns recursos não são íntegros
+  **Suspenso**: a aplicação está pausada
+  **Ausente**: os recursos estão ausentes no cluster

### Janelas de sincronização
<a name="_sync_windows"></a>

Configure as janelas de sincronização para gerenciar os períodos em que as aplicações podem ser sincronizadas:
+ Permitir sincronizações apenas durante janelas de manutenção
+ Bloquear sincronizações durante o horário comercial
+ Agendar sincronizações automáticas para horários específicos
+ Use janelas de sincronização em situações em que você precise fazer alterações e interromper qualquer sincronização (cenários de quebra de vidro)

## Configuração de webhooks para sincronizações mais ágeis
<a name="_webhook_configuration_for_faster_sync"></a>

Por padrão, o Argo CD consulta os repositórios do Git a cada seis minutos para detectar alterações. Para tornar as implantações mais responsivas, configure webhooks do Git que acionam sincronizações imediatamente quando houver alterações.

Os webhooks oferecem vários benefícios, como:
+ Resposta imediata de sincronização quando o código é enviado (segundos em vez de minutos)
+ Redução da sobrecarga da sondagem e melhor performance do sistema
+ Uso mais eficiente dos limites de taxa da API
+ Melhoria na experiência do usuário com feedback mais rápido

### Endpoint do webhook
<a name="_webhook_endpoint"></a>

O URL do webhook segue o padrão `${serverUrl}/api/webhook`, onde `serverUrl` é o URL do seu servidor de Argo CD.

Por exemplo, se o URL do seu servidor de Argo CD é `https://abc123.eks-capabilities.us-west-2.amazonaws.com`, o URL de webhook será:

```
https://abc123.eks-capabilities.us-west-2.amazonaws.com/api/webhook
```

### Configuração de webhooks por provedor do Git
<a name="_configure_webhooks_by_git_provider"></a>

 **GitHub**: nas configurações do repositório, adicione um webhook com o URL do webhook do Argo CD. Defina o tipo de conteúdo como `application/json` e selecione “Just the push event”.

 **GitLab**: nas configurações do projeto, adicione um webhook com o URL do webhook do Argo CD. Ative “Push events” e, opcionalmente, “Tag push events”.

 **Bitbucket**: nas configurações do repositório, adicione um webhook com o URL do webhook do Argo CD. Selecione “Repository push” como o acionador.

 **CodeCommit**: crie uma regra do Amazon EventBridge que seja acionada por alterações no estado do repositório do CodeCommit e envie notificações para o endpoint do webhook do Argo CD.

Para obter instruções detalhadas de configuração do webhook, consulte [Argo CD Webhook Configuration](https://argo-cd.readthedocs.io/en/stable/operator-manual/webhook/).

**nota**  
Webhooks funcionam como complemento para a sondagem, mas não a substituem. O Argo CD continua a consultar os repositórios como mecanismo de fallback, caso as notificações do webhook não sejam recebidas.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): aprenda a criar e gerenciar Applications do Argo CD
+  [Solução de problemas em funcionalidades do Argo CD](argocd-troubleshooting.md): realize a solução de problemas relacionados ao Argo CD
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do Argo CD

# Solução de problemas em funcionalidades do Argo CD
<a name="argocd-troubleshooting"></a>

Este tópico fornece orientações de solução de problemas para a funcionalidade do EKS destinada ao Argo CD, incluindo verificações de integridade da funcionalidade, problemas de sincronização de aplicações, autenticação de repositórios e implantações em vários clusters.

**nota**  
As funcionalidades do EKS são totalmente gerenciadas e executadas de forma externa ao cluster. Você não tem acesso aos logs do servidor do Argo CD nem ao namespace `argocd`. A solução de problemas se concentra na integridade da funcionalidade, no status das aplicações e na configuração.

## Funcionalidade está com o status ACTIVE, mas as aplicações não estão sincronizando
<a name="_capability_is_active_but_applications_arent_syncing"></a>

Se a funcionalidade do Argo CD apresentar o status `ACTIVE`, mas as aplicações não estiverem sincronizando, verifique a integridade da funcionalidade e o status das aplicações.

 **Verifique a integridade da funcionalidade**:

Você pode visualizar problemas de integridade e de status da funcionalidade no console do EKS ou usando a AWS CLI.

 **Console do**:

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do seu cluster.

1. Escolha a guia **Observabilidade**.

1. Escolha **Monitorar cluster**.

1. Escolha a guia **Funcionalidades** para visualizar a integridade e o status de todas as funcionalidades.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd

# Look for issues in the health section
```

 **Causas comuns**:
+  **Repositório não configurado**: o repositório do Git não foi adicionado ao Argo CD
+  **Falha na autenticação**: a chave SSH, o token ou as credenciais do CodeCommit estão inválidos
+  **Aplicação não criada**: não existem recursos de Application no cluster
+  **Política de sincronização**: a sincronização manual é necessária (sincronização automática não habilitada)
+  **Permissões do IAM**: as permissões estão ausentes para o CodeCommit ou o Secrets Manager

 **Verifique o status da aplicação**:

```
# List applications
kubectl get application -n argocd

# View sync status
kubectl get application my-app -n argocd -o jsonpath='{.status.sync.status}'

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

 **Verifique as condições da aplicação**:

```
# Describe application to see detailed status
kubectl describe application my-app -n argocd

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

## Aplicações travadas no estado “Progressing”
<a name="_applications_stuck_in_progressing_state"></a>

Se uma aplicação estiver em `Progressing` mas nunca atingir `Healthy`, verifique o status dos recursos da aplicação e os eventos.

 **Verifique a integridade do recurso**:

```
# View application resources
kubectl get application my-app -n argocd -o jsonpath='{.status.resources}'

# Check for unhealthy resources
kubectl describe application my-app -n argocd | grep -A 10 "Health Status"
```

 **Causas comuns**:
+  **Implantação não está pronta**: os pods não conseguem iniciar ou as sondagens de prontidão apresentam falhas
+  **Dependências entre recursos**: existem recursos esperando que outros recursos fiquem prontos
+  **Erros ao obter imagens**: as imagens de contêiner não estão acessíveis
+  **Recursos insuficientes**: o cluster não tem CPU ou memória suficiente para os pods

 **Verifique a configuração do cluster de destino** (para configurações com vários clusters):

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# View cluster secret details
kubectl get secret cluster-secret-name -n argocd -o yaml
```

## Falhas na autenticação do repositório
<a name="_repository_authentication_failures"></a>

Se o Argo CD não conseguir acessar seus repositórios do Git, verifique a configuração de autenticação.

 **Para repositórios do CodeCommit**:

Verifique se o perfil da funcionalidade do IAM tem as permissões necessárias para o CodeCommit:

```
# View IAM policies
aws iam list-attached-role-policies --role-name my-argocd-capability-role
aws iam list-role-policies --role-name my-argocd-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-argocd-capability-role --policy-name policy-name
```

É necessário que o perfil conte com a permissão `codecommit:GitPull` para os repositórios.

 **Para repositórios do Git privados**:

Verifique se as credenciais do repositório estão configuradas corretamente:

```
# Check repository secret exists
kubectl get secret -n argocd repo-secret-name -o yaml
```

Certifique-se de que o segredo contenha as credenciais de autenticação adequadas (por exemplo, chave SSH, token ou usuário/senha).

 **Para repositórios que usam o Secrets Manager**:

```
# Verify IAM Capability Role has Secrets Manager permissions
aws iam list-attached-role-policies --role-name my-argocd-capability-role

# Test secret retrieval
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:region-code:111122223333:secret:my-secret
```

## Problemas relacionados à implantação em vários clusters
<a name="_multi_cluster_deployment_issues"></a>

Se as aplicações não estiverem sendo implantadas em clusters remotos, verifique o registro do cluster e a configuração de acesso.

 **Verifique o registro do cluster**:

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# Verify cluster secret format
kubectl get secret CLUSTER_SECRET_NAME -n argocd -o yaml
```

Certifique-se de que o campo `server` contenha o ARN do cluster EKS, e não o URL da API do Kubernetes.

 **Verifique a entrada de acesso do cluster de destino**:

No cluster de destino, confirme que o perfil da funcionalidade do IAM destinado ao Argo CD conta com uma entrada de acesso:

```
# List access entries (run on target cluster or use AWS CLI)
aws eks list-access-entries --cluster-name target-cluster

# Describe specific access entry
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/my-argocd-capability-role
```

 **Verifique as permissões do IAM para várias contas**:

Para implantações entre contas, confirme que o perfil da funcionalidade do IAM destinado ao Argo CD conta com uma entrada de acesso no cluster de destino. A funcionalidade gerenciada emprega entradas de acesso do EKS para o acesso entre contas, e não a suposição do perfil do IAM.

Para obter mais informações sobre configuração de vários clusters, consulte [Registro de clusters de destino](argocd-register-clusters.md).

## Próximas etapas
<a name="_next_steps"></a>
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse considerações e práticas recomendadas do Argo CD
+  [Como trabalhar com o Argo CD](working-with-argocd.md): crie e gerencie Applications do Argo CD
+  [Registro de clusters de destino](argocd-register-clusters.md): configure implantações em vários clusters
+  [Solução de problemas das funcionalidades do EKS](capabilities-troubleshooting.md): acesse orientações gerais para solução de problemas de funcionalidades

# Comparação da funcionalidade do EKS para o Argo CD em relação ao Argo CD autogerenciado
<a name="argocd-comparison"></a>

A funcionalidade do EKS para o Argo CD fornece uma experiência do Argo CD totalmente gerenciada e executada no EKS. Para obter uma comparação geral das funcionalidades do EKS em relação às soluções autogerenciadas, consulte [Considerações sobre as funcionalidades do EKS](capabilities-considerations.md). Este tópico aborda as diferenças específicas do Argo CD, incluindo autenticação, gerenciamento de diversos clusters e suporte aos recursos da versão original.

## Diferenças em relação à versão original do Argo CD
<a name="_differences_from_upstream_argo_cd"></a>

A funcionalidade do EKS para o Argo CD se baseia na versão original do Argo CD, porém apresenta diferenças na maneira de acesso, configuração e integração com os serviços da AWS.

 **RBAC e autenticação**: a funcionalidade inclui três funções de RBAC (administrador, editor e visualizador) e usa o Centro de Identidade da AWS para autenticação, em vez do sistema de autenticação interno do Argo CD. Configure os mapeamentos de perfis por meio do parâmetro `rbacRoleMapping` da funcionalidade a fim de mapear os grupos do Centro de Identidade para os perfis do Argo CD, e não por meio do ConfigMap `argocd-rbac-cm` do Argo CD. A interface do usuário do Argo CD é hospedada usando um URL direto próprio (que pode ser localizado no console do EKS, na guia Funcionalidades do seu cluster), e o acesso à API usa autenticação e autorização da AWS por meio do IAM.

 **Configuração do cluster**: a funcionalidade não configura automaticamente clusters locais nem topologias do tipo “hub-and-spoke”. É necessário configurar os clusters de destino da sua implantação e as entradas de acesso ao EKS. A funcionalidade é compatível somente com clusters do Amazon EKS como destinos de implantação, usando ARNs de cluster de EKS (não URLs do servidor da API do Kubernetes). A funcionalidade não adiciona automaticamente o cluster local (`kubernetes.default.svc`) como destino de implantação. Para realizar a implantação no mesmo cluster em que a funcionalidade foi criada, registre explicitamente esse cluster usando seu ARN.

 **Acesso simplificado a clusters remotos:**: a funcionalidade simplifica implantações em vários clusters ao usar entradas de acesso do EKS para conceder ao Argo CD o acesso a clusters remotos, eliminando a necessidade de configurar perfis do IAM para contas de serviço (IRSA, na sigla em inglês) ou estabelecer suposições de perfis do IAM entre contas. A funcionalidade também fornece acesso transparente a clusters de EKS totalmente privados, sem exigir emparelhamento da VPC ou configurações de rede especializadas. A AWS gerencia automaticamente a conectividade entre a funcionalidade do Argo CD e os clusters remotos privados.

 **Integração direta com serviços da AWS**: a funcionalidade oferece integração direta com serviços da AWS por meio das permissões do IAM do perfil da funcionalidade. É possível referenciar repositórios do CodeCommit, charts do Helm do ECR e CodeConnections diretamente nos recursos da Application, sem a necessidade de criar configurações de Repository. Isso simplifica a autenticação e elimina a necessidade de gerenciar credenciais separadas para os serviços da AWS. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

 **Suporte para namespace**: o recurso exige que você especifique um único namespace no qual os recursos personalizados do Argo CD Application, ApplicationSet e AppProject devem ser criados.

**nota**  
Essa restrição de namespace só se aplica aos recursos personalizados do Argo CD (Application, ApplicationSet, AppProject). As workloads da sua aplicação podem ser implantadas em qualquer namespace em qualquer cluster de destino. Por exemplo, se você criar a funcionalidade com o namespace `argocd`, todos os CRs da Application deverão ser criados no namespace `argocd`, mas essas Applications podem implantar workloads em `default`, `production`, `staging` ou em qualquer outro namespace.

**nota**  
O recurso gerenciado tem requisitos específicos para o uso da CLI e configuração do AppProject:  
Ao usar a CLI do Argo CD, especifique as aplicações com o prefixo do namespace: `argocd app sync namespace/appname` 
Os recursos do AppProject devem especificar `.spec.sourceNamespaces` para definir quais namespaces o projeto pode observar para Applications (normalmente definidos como o namespace que você especificou ao criar o recurso)
As anotações de rastreamento de recursos usam o formato: `namespace_appname:group/kind:namespace/name` 

 **Recursos não suportados**: os seguintes recursos não estão disponíveis na funcionalidade gerenciada:
+ Plug-ins de gerenciamento de configuração (CMPs, na sigla em inglês) para geração de manifestos personalizados
+ Scripts Lua personalizados para avaliação da integridade de recursos (as verificações de integridade nativas para recursos padrão são suportadas)
+ O controlador de notificações
+ Provedores de SSO personalizados (somente o Centro de Identidade da AWS é compatível, abrangendo também identidades federadas de terceiros por meio do Centro de Identidade da AWS)
+ Extensões da interface do usuário e banners personalizados
+ Acesso direto aos ConfigMaps de configuração `argocd-cm`, `argocd-params` e outros
+ Modificação do tempo limite de sincronização (fixado em 120 segundos)

 **Compatibilidade**: as Applications e os ApplicationSets funcionam de forma idêntica à versão original do Argo CD, sem alterações nos seus manifestos. A funcionalidade usa as mesmas APIs do Kubernetes e CRDs, portanto, ferramentas como o `kubectl` funcionam de maneira semelhante. A funcionalidade oferece suporte completo às Applications e aos ApplicationSets, bem como a fluxos de trabalho de GitOps com sincronização automática, implantações em vários clusters, políticas de sincronização (automatizada, de supressão e de autorreparação), ciclos de sincronização e hooks, avaliação da integridade de recursos padrão do Kubernetes, funcionalidades de reversão, fontes de repositórios do Git (HTTPS e SSH), Helm, Kustomize e manifestos em YAML sem formatação, credenciais de aplicativo do GitHub, projetos para multilocação, além de exclusões e inclusões de recursos.

## Uso da CLI do Argo CD com a funcionalidade gerenciada
<a name="argocd-cli-configuration"></a>

Para a maioria das operações, a CLI do Argo CD se comporta de maneira idêntica à versão original do Argo CD, mas há diferenças na autenticação e no registro de clusters.

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

Instale a CLI do Argo CD conforme as [instruções de instalação da versão original](https://argo-cd.readthedocs.io/en/stable/cli_installation/).

### Configuração
<a name="_configuration"></a>

Configure a CLI usando variáveis de ambiente:

1. Obtenha o URL do servidor do Argo CD no console do EKS (na guia **Funcionalidades** do seu cluster) ou por meio da AWS CLI. O prefixo `https://` deve ser removido:

   ```
   export ARGOCD_SERVER=$(aws eks describe-capability \
     --cluster-name my-cluster \
     --capability-name my-argocd \
     --query 'capability.configuration.argoCd.serverUrl' \
     --output text \
     --region region-code | sed 's|^https://||')
   ```

1. Gere um token de conta na interface do usuário do Argo CD (**Settings** → **Accounts** → **admin** → **Generate New Token**) e, em seguida, defina-o como uma variável de ambiente:

   ```
   export ARGOCD_AUTH_TOKEN="your-token-here"
   ```

**Importante**  
Essa configuração usa o token da conta de administrador para a configuração inicial e os fluxos de trabalho de desenvolvimento. Para casos de uso em ambientes de produção, empregue perfis e tokens com escopo de projeto, seguindo o princípio de privilégio mínimo. Para obter mais informações sobre a configuração de perfis de projeto e RBAC, consulte [Configuração das permissões do Argo CD](argocd-permissions.md).

1. Defina a opção gRPC obrigatória:

   ```
   export ARGOCD_OPTS="--grpc-web"
   ```

Com essas variáveis de ambiente configuradas, é possível utilizar a CLI do Argo CD sem a necessidade de executar o comando `argocd login`.

### Principais diferenças
<a name="_key_differences"></a>

A funcionalidade gerenciada apresenta as seguintes limitações da CLI:
+  Os comandos `argocd admin` não são suportados (pois exigem acesso direto ao pod)
+  O comando `argocd login` não é suportado (utilize tokens de conta ou de projeto)
+  O comando `argocd cluster add` requer o sinalizador `--aws-cluster-name` com o ARN do cluster de EKS

### Exemplo: registro de um cluster
<a name="_example_register_a_cluster"></a>

Registre um cluster de EKS para a implantação de aplicações:

```
# Get the cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

Para obter a documentação completa da CLI do Argo CD, consulte a [referência da CLI do Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd/).

## Caminho de migração
<a name="_migration_path"></a>

É possível migrar de um Argo CD autogerenciado para a funcionalidade gerenciada:

1. Analise a configuração atual do Argo CD quanto a recursos sem suporte (por exemplo, controle de notificações, CMPs, verificações de integridade personalizadas, extensões de IU)

1. Reduza a escala dos controladores do Argo CD autogerenciados para zero réplicas para evitar conflitos

1. Crie um recurso de funcionalidade do Argo CD no cluster

1. Exporte Applications, ApplicationSets e AppProjects existentes

1. Migre as credenciais de repositório, os segredos do cluster e os modelos de credenciais do repositório (repocreds)

1. Se estiver usando chaves GPG, certificados TLS ou hosts conhecidos de SSH, migre também essas configurações

1. Atualize os campos `destination.server` para usar nomes de cluster ou ARNs de clusters de EKS

1. Aplique essas configurações na instância gerenciada do Argo CD

1. Verifique se as aplicações estão sendo sincronizadas corretamente

1. Desative sua instalação autogerenciada do Argo CD

A funcionalidade gerenciada usa as mesmas APIs e definições de recursos do Argo CD, portanto, seus manifestos existentes funcionam com modificações mínimas.

## Próximas etapas
<a name="_next_steps"></a>
+  [Criar um recurso Argo CD](create-argocd-capability.md): crie um recurso de funcionalidade do Argo CD
+  [Como trabalhar com o Argo CD](working-with-argocd.md): implante sua primeira aplicação
+  [Considerações sobre o Argo CD](argocd-considerations.md): configure a integração com o Centro de Identidade da AWS

# Composição de recursos com o kro (Kube Resource Orchestrator)
<a name="kro"></a>

 O **kro (Kube Resource Orchestrator**) é um projeto de código aberto nativo do Kubernetes que permite definir APIs personalizadas do Kubernetes usando uma configuração simples e direta. Com o kro, é fácil configurar novas APIs personalizadas para criar grupos de objetos do Kubernetes e definir operações lógicas entre esses recursos.

Com as funcionalidades do EKS, o kro torna-se uma funcionalidade totalmente gerenciada pela AWS, dispensando a instalação, a manutenção e a escalabilidade de controladores do kro nos clusters.

## Funcionamento do kro
<a name="_how_kro_works"></a>

O kro introduz uma definição de recurso personalizado (CRD, na sigla em inglês), chamada `ResourceGraphDefinition` (RGD), que viabiliza a criação simples e otimizada de APIs personalizadas do Kubernetes. Ao criar uma `ResourceGraphDefinition`, o kro usa extensões nativas do Kubernetes para a criação e o gerenciamento de novas APIs no cluster. A partir desta especificação exclusiva de recurso, o kro criará e registrará uma nova CRD para você com base na sua especificação e se adaptará para gerenciar os recursos personalizados definidos recentemente.

As RGDs podem conter vários recursos, cabendo ao kro determinar as interdependências e a sequência de criação de recursos, para que você não precise fazer isso. É possível usar uma sintaxe simples para injetar configurações de um recurso em outro, simplificando significativamente as composições e eliminando a necessidade de operadores de integração no cluster. Com o kro, os recursos personalizados podem incluir tanto recursos nativos do Kubernetes quanto quaisquer definições de recursos personalizados (CRDs) instaladas no cluster.

O kro oferece suporte a um tipo principal de recurso:
+  **ResourceGraphDefinition (RGD)**: define um recurso personalizado do Kubernetes, encapsulando um ou mais recursos nativos ou personalizados subjacentes

Além deste recurso, o kro criará e gerenciará o ciclo de vida dos recursos personalizados criados com ele, bem como de todos os recursos constituintes.

O kro se integra perfeitamente ao AWS Controllers for Kubernetes (ACK), permitindo que você componha recursos de workloads com recursos da AWS para criar abstrações de alto nível. Isso possibilita a criação de seus próprios blocos de criação na nuvem, simplificando o gerenciamento de recursos e permitindo padrões reutilizáveis com configurações padrão e imutáveis, baseadas nos padrões da organização.

## Benefícios do kro
<a name="_benefits_of_kro"></a>

Com o kro, as equipes responsáveis pela plataforma podem criar APIs personalizadas do Kubernetes que agrupam vários recursos em abstrações de alto nível. Isso simplifica o gerenciamento de recursos ao permitir que desenvolvedores implantem aplicações complexas por meio de recursos personalizados que são simples, padronizados e versionados. Você define padrões reutilizáveis para combinações comuns de recursos, permitindo a criação consistente de recursos em toda a organização.

O kro faz uso da [Common Expression Language (CEL) no Kubernetes](https://kubernetes.io/docs/reference/using-api/cel/) para a transferência de valores entre recursos e inclusão de lógica condicional, conferindo maior flexibilidade à composição de recursos. É possível compor tanto recursos do Kubernetes quanto recursos da AWS gerenciados pelo ACK em APIs personalizadas unificadas, permitindo definições completas de aplicação e de infraestrutura.

O kro oferece suporte à configuração declarativa por meio de manifestos do Kubernetes, permitindo fluxos de trabalho de GitOps e práticas de infraestrutura como código que se integram perfeitamente aos processos de desenvolvimento existentes. Como parte das funcionalidades do EKS, o kro é totalmente gerenciado pela AWS, dispensando a instalação, a configuração e a manutenção de controladores do kro nos clusters.

 **Exemplo: criação de uma ResourceGraphDefinition** 

O seguinte exemplo apresenta uma `ResourceGraphDefinition` simples para a criação de uma aplicação web contendo um Deployment e um Service:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer | default=3
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: ${schema.spec.name}
        spec:
          replicas: ${schema.spec.replicas}
    - id: service
      template:
        apiVersion: v1
        kind: Service
        metadata:
          name: ${schema.spec.name}
```

Quando os usuários criam instâncias do recurso personalizado `WebApplication`, o kro cria automaticamente os recursos correspondentes de Deployment e Service, gerenciando o ciclo de vida junto com o do recurso personalizado.

## Integração com outras funcionalidades gerenciadas do EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

O kro pode ser integrado a outras funcionalidades gerenciadas do EKS.
+  **AWS Controllers for Kubernetes (ACK)**: use o kro para compor recursos do ACK em abstrações de alto nível, simplificando o gerenciamento de recursos da AWS.
+  **Argo CD**: use o Argo CD para gerenciar a implantação de recursos personalizados do kro em diversos clusters, possibilitando fluxos de trabalho GitOps para os blocos de criação de plataforma e de pilhas de aplicações.

## Conceitos básicos do kro
<a name="_getting_started_with_kro"></a>

Para começar a usar a funcionalidade do EKS para o kro:

1.  [Crie um recurso da funcionalidade do kro](create-kro-capability.md) em seu cluster do EKS por meio do Console da AWS, da AWS CLI ou da ferramenta de infraestrutura como código de sua preferência.

1. Crie ResourceGraphDefinitions (RGDs) que definam APIs personalizadas e composições de recursos.

1. Aplique instâncias dos recursos personalizados para realizar o provisionamento e o gerenciamento dos recursos subjacentes do Kubernetes e da AWS.

# Criação de uma funcionalidade do kro
<a name="create-kro-capability"></a>

Este tópico explica como criar uma funcionalidade do kro no cluster do Amazon EKS.

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

Antes de criar uma funcionalidade do kro, certifique-se de ter:
+ Um cluster do Amazon EKS existente executando uma versão compatível do Kubernetes (há suporte para todas as versões nos períodos de suporte padrão e estendido)
+ Permissões do IAM suficientes para criar recursos de funcionalidades em clusters de EKS
+ (Para a CLI ou o eksctl) A ferramenta de CLI apropriada instalada e configurada

**nota**  
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM adicionais além da política de confiança. O kro opera inteiramente no cluster e não faz chamadas de API da AWS. Contudo, ainda é necessário fornecer um perfil do IAM para a funcionalidade com a política de confiança apropriada. Para obter informações sobre como configurar as permissões de RBAC do Kubernetes para o kro, consulte [Configuração de permissões do kro](kro-permissions.md).

## Escolha da ferramenta
<a name="_choose_your_tool"></a>

É possível criar uma funcionalidade do kro por meio do Console de gerenciamento da AWS, da AWS CLI ou do eksctl:
+  [Criação de uma funcionalidade do kro por meio do Console](kro-create-console.md): use o Console para obter uma experiência guiada
+  [Criação de uma funcionalidade do kro por meio da AWS CLI](kro-create-cli.md): use a AWS CLI para obter scripts e automação
+  [Criação de uma funcionalidade do kro por meio do eksctl](kro-create-eksctl.md): use o eksctl para obter uma experiência nativa do Kubernetes

## O que ocorre durante a criação de uma funcionalidade do kro
<a name="_what_happens_when_you_create_a_kro_capability"></a>

Ao criar uma funcionalidade do kro:

1. O EKS cria o serviço da funcionalidade do kro e o configura para monitorar e gerenciar recursos no cluster

1. As definições de recursos personalizados (CRDs, na sigla em inglês) são instaladas no cluster

1. Uma entrada de acesso é criada automaticamente para seu perfil de funcionalidade do IAM com a `AmazonEKSKROPolicy`, que concede permissões para gerenciar ResourceGraphDefinitions e suas instâncias (consulte [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md))

1. A funcionalidade assume o perfil do IAM para a funcionalidade, que foi fornecido por você (e é usado somente para a relação de confiança)

1. O kro começa a monitorar recursos da `ResourceGraphDefinition` e as respectivas instâncias

1. O status da funcionalidade é alterado de `CREATING` para `ACTIVE` 

Uma vez ativa, é possível criar ResourceGraphDefinitions para definir APIs personalizadas e criar instâncias dessas APIs.

**nota**  
A entrada de acesso criada automaticamente inclui a `AmazonEKSKROPolicy`, que concede permissões do kro para gerenciar ResourceGraphDefinitions e suas instâncias. Para permitir que o kro crie os recursos subjacentes do Kubernetes definidos em suas ResourceGraphDefinitions (como Deployments, Services ou recursos do ACK), é necessário configurar políticas de entrada de acesso adicionais. Para saber mais sobre entradas de acesso e como configurar permissões adicionais, consulte [Configuração de permissões do kro](kro-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Próximas etapas
<a name="_next_steps"></a>

Após criar a funcionalidade do kro:
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): saiba mais sobre o SimpleSchema, expressões CEL e padrões de composição de recursos

# Criação de uma funcionalidade do kro por meio do Console
<a name="kro-create-console"></a>

Este tópico descreve como criar uma funcionalidade do kro (Kube Resource Orchestrator) usando o Console de gerenciamento da AWS.

## Criação da funcionalidade do kro
<a name="_create_the_kro_capability"></a>

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do cluster para abrir a página de detalhes do cluster.

1. Escolha a guia **Funcionalidades**.

1. No painel de navegação à esquerda, escolha **kro (Kube Resource Orchestrator)**.

1. Selecione **Criar funcionalidade do kro**.

1. No **perfil da funcionalidade do IAM**:
   + Se você já tiver um perfil da funcionalidade do IAM, selecione-o no menu suspenso
   + Se a criação de um perfil for necessária, escolha **Criar perfil do kro** 

     Isso abre o console do IAM em uma nova guia com a política de confiança preenchida previamente. O perfil não requer permissões do IAM adicionais, uma vez que o kro opera inteiramente no cluster.

     Após criar o perfil, retorne ao console do EKS e o perfil será selecionado automaticamente.
**nota**  
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM adicionais além da política de confiança. O kro opera inteiramente no cluster e não faz chamadas de API da AWS.

1. Escolha **Criar**.

O processo de criação da funcionalidade é iniciado.

## Verificação da ativação da funcionalidade
<a name="_verify_the_capability_is_active"></a>

1. Na guia **Funcionalidades**, visualize o status da funcionalidade do kro.

1. Aguarde até que o status mude de `CREATING` para `ACTIVE`.

1. Assim que estiver com o status ativo, a funcionalidade estará pronta para uso.

Para obter informações sobre os status das funcionalidades e sobre a solução de problemas, consulte [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md).

## Concessão de permissões para o gerenciamento de recursos do Kubernetes
<a name="_grant_permissions_to_manage_kubernetes_resources"></a>

Quando você cria um recurso kro, uma entrada de acesso do EKS é criada automaticamente com a `AmazonEKSKROPolicy`, o que permite que o kro gerencie ResourceGraphDefinitions e suas instâncias. Contudo, nenhuma permissão é concedida por padrão para criar os recursos subjacentes do Kubernetes (como implantações, serviços, ConfigMaps etc.) definidos em suas ResourceGraphDefinitions.

Esse design intencional segue o princípio de privilégio mínimo, em que definições de gráficos de recursos diferentes exigem permissões diferentes. É necessário configurar explicitamente as permissões de que o kro precisa com base nos recursos que suas ResourceGraphDefinitions gerenciarão.

Para começar rapidamente, testar ou desenvolver ambientes, use a `AmazonEKSClusterAdminPolicy`:

1. No console do EKS, acesse a guia **Acesso** do cluster.

1. Em **Entradas de acesso**, localize a entrada referente ao perfil da funcionalidade para o kro (ela terá o ARN do perfil que você criou anteriormente).

1. Selecione a entrada de acesso para visualizar os detalhes.

1. Na seção **Políticas de acesso**, escolha **Associar política de acesso**.

1. Selecione `AmazonEKSClusterAdminPolicy` na lista de políticas.

1. Em **Escopo de acesso**, selecione **Cluster**.

1. Selecione **Associar**.

**Importante**  
A `AmazonEKSClusterAdminPolicy` concede permissões abrangentes para criar e gerenciar todos os recursos do Kubernetes, incluindo a capacidade de criar qualquer tipo de recurso em todos os namespaces. Isso é conveniente para desenvolvimento e POCs, mas não deve ser usado em ambientes de produção. Para ambientes de produção, crie políticas de RBAC personalizadas que concedam somente as permissões necessárias para os recursos específicos que as ResourceGraphDefinitions gerenciarão. Para obter orientações sobre como configurar permissões de privilégio mínimo, consulte [Configuração de permissões do kro](kro-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Verificação da disponibilidade de recursos personalizados
<a name="_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do kro estão disponíveis no cluster.

 **Utilizar o console** 

1. Navegue até o cluster no console do Amazon EKS

1. Escolha a guia **Recursos**

1. Escolha **Extensões** 

1. Escolha **CustomResourceDefinitions** 

O tipo de recurso `ResourceGraphDefinition` deve aparecer na lista apresentada.

 **Uso do kubectl** 

```
kubectl api-resources | grep kro.run
```

O tipo de recurso `ResourceGraphDefinition` deve aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): saiba mais sobre o SimpleSchema, expressões CEL e padrões de composição
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do kro

# Criação de uma funcionalidade do kro por meio da AWS CLI
<a name="kro-create-cli"></a>

Este tópico descreve como criar uma funcionalidade do kro (Kube Resource Orchestrator) usando a AWS CLI.

## Pré-requisitos
<a name="_prerequisites"></a>
+  **AWS CLI**: versão `2.12.3` ou em versões posteriores. Para verificar a versão, execute `aws --version`. Para obter mais informações, consulte [Instalação](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) no Guia do Usuário da Interface de Linha de Comando AWS.
+  ** `kubectl` ** – uma ferramenta de linha de comando para trabalhar com clusters do Kubernetes. Para obter mais informações, consulte [Configurar o `kubectl` e o `eksctl`](install-kubectl.md).

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confiança:

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crie o perfil do IAM:

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**nota**  
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM adicionais. O kro opera inteiramente no cluster e não faz chamadas de API da AWS. O perfil é exigido exclusivamente para configurar a relação de confiança com o serviço de funcionalidades do EKS.

## Etapa 2: criação da funcionalidade do kro
<a name="_step_2_create_the_kro_capability"></a>

Crie o recurso da funcionalidade do kro no cluster. Substitua *region-cod*e pela região da AWS em que seu cluster está localizado (por exemplo, `us-west-2`) e *my-cluster* pelo nome do seu cluster.

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/KROCapabilityRole \
  --delete-propagation-policy RETAIN
```

O comando é concluído de imediato, mas a funcionalidade demora algum tempo para se tornar ativa, conforme o EKS cria a infraestrutura e os componentes necessários para a funcionalidade. O EKS instalará as definições de recursos personalizados do Kubernetes relacionadas a essa funcionalidade no cluster durante o processo de criação.

**nota**  
Caso ocorra um erro indicando a inexistência do cluster ou falta de permissões, verifique o seguinte:  
Se o nome do cluster está correto
Se a AWS CLI está configurada para a região correta
Se você tem as permissões do IAM obrigatórias

## Etapa 3: verificação da ativação da funcionalidade
<a name="_step_3_verify_the_capability_is_active"></a>

Aguarde até que a funcionalidade se torne ativa. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.status' \
  --output text
```

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`.

Também é possível visualizar os detalhes completos da funcionalidade:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro
```

## Etapa 4: concessão de permissões para o gerenciamento de recursos do Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Quando você cria um recurso kro, uma entrada de acesso do EKS é criada automaticamente com a `AmazonEKSKROPolicy`, o que permite que o kro gerencie ResourceGraphDefinitions e suas instâncias. Contudo, nenhuma permissão é concedida por padrão para criar os recursos subjacentes do Kubernetes (como implantações, serviços, ConfigMaps etc.) definidos em suas ResourceGraphDefinitions.

Esse design intencional segue o princípio de privilégio mínimo, em que definições de gráficos de recursos diferentes exigem permissões diferentes. Por exemplo: \$1 Uma ResourceGraphDefinition que crie somente ConfigMaps e Segredos precisa de permissões diferentes daquela que cria Implantações e Serviços \$1 Uma ResourceGraphDefinition que cria recursos de ACK precisa de permissões para esses recursos personalizados específicos \$1 Algumas ResourceGraphDefinitions só podem ler recursos existentes sem criar novos

É necessário configurar explicitamente as permissões de que o kro precisa com base nos recursos que suas ResourceGraphDefinitions gerenciarão.

### Configuração rápida
<a name="_quick_setup"></a>

Para começar rapidamente, testar ou desenvolver ambientes, use a `AmazonEKSClusterAdminPolicy`:

Obtenha o ARN do perfil da funcionalidade:

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

Associe a política de administrador do cluster:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**Importante**  
A `AmazonEKSClusterAdminPolicy` concede permissões abrangentes para criar e gerenciar todos os recursos do Kubernetes, incluindo a capacidade de criar qualquer tipo de recurso em todos os namespaces. Isso é conveniente para desenvolvimento e POCs, mas não deve ser usado em ambientes de produção. Para ambientes de produção, crie políticas de RBAC personalizadas que concedam somente as permissões necessárias para os recursos específicos que as ResourceGraphDefinitions gerenciarão. Para obter orientações sobre como configurar permissões de privilégio mínimo, consulte [Configuração de permissões do kro](kro-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Etapa 5: verificação da disponibilidade de recursos personalizados
<a name="_step_5_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do kro estão disponíveis no cluster:

```
kubectl api-resources | grep kro.run
```

O tipo de recurso `ResourceGraphDefinition` deve aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): saiba mais sobre o SimpleSchema, expressões CEL e padrões de composição
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do kro

# Criação de uma funcionalidade do kro por meio do eksctl
<a name="kro-create-eksctl"></a>

Este tópico descreve como criar uma funcionalidade do kro (Kube Resource Orchestrator) usando o eksctl.

**nota**  
Para realizar as etapas seguintes, você deve estar utilizando o eksctl na versão `0.220.0` ou em versões posteriores. Para verificar a versão, execute `eksctl version`.

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confiança:

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crie o perfil do IAM:

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**nota**  
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM adicionais além da política de confiança. O kro opera inteiramente no cluster e não faz chamadas de API da AWS.

## Etapa 2: criação da funcionalidade do kro
<a name="_step_2_create_the_kro_capability"></a>

Crie a funcionalidade do kro por meio do eksctl. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

```
eksctl create capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/KROCapabilityRole
```

O comando é executado de forma imediata, mas a funcionalidade demora algum tempo para se tornar ativa.

## Etapa 3: verificação da ativação da funcionalidade
<a name="_step_3_verify_the_capability_is_active"></a>

Verifique o status da funcionalidade. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro
```

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`.

## Etapa 4: concessão de permissões para o gerenciamento de recursos do Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Por padrão, o kro pode apenas criar e gerenciar ResourceGraphDefinitions e suas respectivas instâncias. Para permitir que o kro crie e gerencie os recursos subjacentes do Kubernetes definidos em suas ResourceGraphDefinitions, associe a política de acesso `AmazonEKSClusterAdminPolicy` à entrada de acesso da funcionalidade.

Obtenha o ARN do perfil da funcionalidade:

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

Associe a política de administrador do cluster:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**Importante**  
A política `AmazonEKSClusterAdminPolicy` concede permissões abrangentes para criar e gerenciar todos os recursos do Kubernetes e tem como objetivo agilizar os primeiros passos. Para uso em ambientes de produção, crie políticas de RBAC mais restritivas que concedam somente as permissões necessárias para os recursos específicos que as ResourceGraphDefinitions gerenciarão. Para obter orientações sobre como configurar permissões de privilégio mínimo, consulte [Configuração de permissões do kro](kro-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Etapa 5: verificação da disponibilidade de recursos personalizados
<a name="_step_5_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do kro estão disponíveis no cluster:

```
kubectl api-resources | grep kro.run
```

O tipo de recurso `ResourceGraphDefinition` deve aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): saiba mais sobre o SimpleSchema, expressões CEL e padrões de composição
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do kro

# Conceitos do kro
<a name="kro-concepts"></a>

Com o kro, as equipes responsáveis pela plataforma podem criar APIs personalizadas do Kubernetes que agrupam vários recursos em abstrações de alto nível. Este tópico apresenta um exemplo prático e, em seguida, explica os conceitos fundamentais que você precisa entender ao trabalhar com a funcionalidade do EKS para o kro.

## Conceitos básicos do kro
<a name="_getting_started_with_kro"></a>

Após criar a funcionalidade kro (consulte [Criação de uma funcionalidade do kro](create-kro-capability.md)), você poderá iniciar a criação de APIs personalizadas usando ResourceGraphDefinitions no cluster.

A seguir, apresentamos um exemplo completo que cria uma abstração simples de uma aplicação web:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: webapplication
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    group: kro.run
    spec:
      name: string | required=true
      image: string | default="nginx:latest"
      replicas: integer | default=3
  resources:
  - id: deployment
    template:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ${schema.spec.name}
      spec:
        replicas: ${schema.spec.replicas}
        selector:
          matchLabels:
            app: ${schema.spec.name}
        template:
          metadata:
            labels:
              app: ${schema.spec.name}
          spec:
            containers:
            - name: app
              image: ${schema.spec.image}
              ports:
              - containerPort: 80
  - id: service
    template:
      apiVersion: v1
      kind: Service
      metadata:
        name: ${schema.spec.name}
      spec:
        selector:
          app: ${schema.spec.name}
        ports:
        - protocol: TCP
          port: 80
          targetPort: 80
```

Após aplicar esta ResourceGraphDefinition, as equipes responsáveis pela aplicação poderão criar aplicações web empregando a API simplificada:

```
apiVersion: kro.run/v1alpha1
kind: WebApplication
metadata:
  name: my-app
spec:
  name: my-app
  replicas: 5
```

O kro cria automaticamente “Deployment” e “Service” com a configuração apropriada. Como `image` não foi especificado, o valor padrão `nginx:latest`, definido no esquema, é usado.

## Conceitos principais
<a name="_core_concepts"></a>

**Importante**  
O kro valida as ResourceGraphDefinitions no momento da criação, e não no runtime. Quando você cria uma RGD, o kro valida a sintaxe CEL, realiza a checagem de tipos das expressões em relação aos esquemas reais do Kubernetes, verifica a existência dos campos e detecta dependências circulares. Isso significa que os erros são capturados imediatamente ao criar a RGD, antes mesmo que qualquer instância seja implantada.

### ResourceGraphDefinition
<a name="_resourcegraphdefinition"></a>

Uma ResourceGraphDefinition (RGD) define uma API personalizada do Kubernetes ao especificar:
+  **Esquema**: a estrutura da API usando o formato SimpleSchema (que engloba nomes de campo, tipos, valores padrão e validação)
+  **Recursos**: modelos para os recursos subjacentes do Kubernetes ou da AWS que serão criados
+  **Dependências**: maneira como os recursos se relacionam entre si (detectadas automaticamente com base nas referências de campos)

Quando você aplica uma RGD, o kro registra uma nova definição de recurso personalizado (CRD, na sigla em inglês) no cluster. Em seguida, as equipes responsáveis pela aplicação podem criar instâncias da API personalizada, e o kro assume a criação e o gerenciamento de todos os recursos subjacentes.

Para obter mais informações, consulte [ResourceGraphDefinition Overview](https://kro.run/docs/concepts/rgd/overview/) na documentação do kro.

### Formato SimpleSchema
<a name="_simpleschema_format"></a>

O SimpleSchema oferece uma maneira simplificada de definir esquemas de API sem a necessidade da OpenAPI completa:

```
schema:
  apiVersion: v1alpha1
  kind: Database
  spec:
    name: string | required=true description="Database name"
    size: string | default="small" enum=small,medium,large
    replicas: integer | default=1 minimum=1 maximum=5
```

O SimpleSchema fornece suporte para os tipos `string`, `integer`, `boolean` e `number`, com restrições como `required`, `default`, `minimum`/`maximum`, `enum` e `pattern`.

Para obter mais informações, consulte a seção [SimpleSchema](https://kro.run/docs/concepts/rgd/schema/) na documentação do kro.

### Expressões CEL
<a name="_cel_expressions"></a>

O kro utiliza a Common Expression Language (CEL) para referenciar valores dinamicamente e adicionar lógica condicional. As expressões CEL são envolvidas por `${` e `}`, e podem ser usadas de duas formas:

 **Expressões autônomas**: o valor total do campo é composto por uma única expressão:

```
spec:
  replicas: ${schema.spec.replicaCount}  # Expression returns integer
  labels: ${schema.spec.labelMap}        # Expression returns object
```

O resultado da expressão substitui o valor total do campo e deve corresponder ao tipo esperado para o campo.

 **Modelos de string**: uma ou mais expressões incorporadas em uma string:

```
metadata:
  name: "${schema.spec.prefix}-${schema.spec.name}"  # Multiple expressions
  annotation: "Created by ${schema.spec.owner}"      # Single expression in string
```

Todas as expressões nos modelos de string devem retornar strings. Use `string()` para converter outros tipos: `"replicas-${string(schema.spec.count)}"`.

 **Referências de campos**: acesse os valores de especificação da instância usando `schema.spec`:

```
template:
  metadata:
    name: ${schema.spec.name}-deployment
    namespace: ${schema.metadata.namespace}  # Can also reference metadata
  spec:
    replicas: ${schema.spec.replicas}
```

 **Acesso opcional ao campo**: use o operador `?` para campos que podem não existir:

```
# For ConfigMaps or Secrets with unknown structure
value: ${configmap.data.?DATABASE_URL}

# For optional status fields
ready: ${deployment.status.?readyReplicas > 0}
```

Se o campo não existir, a expressão retornará `null` em vez de gerar uma falha.

 **Recursos condicionais**: inclua recursos somente quando condições específicas forem atendidas:

```
resources:
- id: ingress
  includeWhen:
    - ${schema.spec.enableIngress == true}
  template:
    # ... ingress configuration
```

O `includeWhen` campo aceita uma lista de expressões booleanas. Todas as condições devem ser verdadeiras para que o recurso seja criado. No momento, `includeWhen` permite referenciar apenas os campos contidos na `schema.spec`.

 **Transformações**: altere valores usando funções e operadores ternários:

```
template:
  spec:
    resources:
      requests:
        memory: ${schema.spec.size == "small" ? "512Mi" : "2Gi"}

    # String concatenation
    image: ${schema.spec.registry + "/" + schema.spec.imageName}

    # Type conversion
    port: ${string(schema.spec.portNumber)}
```

 **Referências entre recursos**: referencie valores provenientes de outros recursos:

```
resources:
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-data

- id: configmap
  template:
    apiVersion: v1
    kind: ConfigMap
    data:
      BUCKET_NAME: ${bucket.spec.name}
      BUCKET_ARN: ${bucket.status.ackResourceMetadata.arn}
```

Quando você referencia outro recurso em uma expressão CEL, isso cria automaticamente uma dependência. O kro assegura que o recurso de referência seja estabelecido antes dos demais recursos.

Para obter mais informações, consulte [CEL Expressions](https://kro.run/docs/concepts/rgd/cel-expressions/) na documentação do kro.

### Dependências entre recursos
<a name="_resource_dependencies"></a>

O kro infere automaticamente as dependências a partir das expressões CEL. Em vez de ditar a ordem, você apenas descreve como os recursos se relacionam. Se um recurso faz referência a outro usando uma expressão CEL, o kro cria uma dependência e determina a ordem de criação correta.

```
resources:
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-data

- id: notification
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: BucketNotification
    spec:
      bucket: ${bucket.spec.name}  # Creates dependency: notification depends on bucket
```

A expressão `${bucket.spec.name}` cria uma dependência. O kro desenvolve um grafo acíclico direcionado (DAG, na sigla em inglês) e as dependências e, em seguida, calcula uma ordem topológica para a criação.

 **Ordem de criação**: os recursos são criados em ordem topológica (ou seja, primeiro há a criação das dependências).

 **Criação paralela**: recursos sem dependências são criados simultaneamente.

 **Ordem de exclusão**: os recursos são excluídos em ordem topológica inversa (ou seja, primeiro os recursos dependentes).

 **Dependências circulares**: não são permitidas. O kro rejeita as ResourceGraphDefinitions com dependências circulares durante a validação.

Para conferir a ordem de criação definida pelo sistema, use:

```
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'
```

Para obter mais informações, consulte [Graph inference](https://kro.run/docs/concepts/rgd/dependencies-ordering/) na documentação do kro.

## Composição com o ACK
<a name="_composing_with_ack"></a>

O kro funciona perfeitamente com a funcionalidade do EKS para o ACK para compor recursos da AWS com recursos do Kubernetes:

```
resources:
# Create {aws} S3 bucket with ACK
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-files

# Inject bucket details into Kubernetes ConfigMap
- id: config
  template:
    apiVersion: v1
    kind: ConfigMap
    data:
      BUCKET_NAME: ${bucket.spec.name}
      BUCKET_ARN: ${bucket.status.ackResourceMetadata.arn}

# Use ConfigMap in application deployment
- id: deployment
  template:
    apiVersion: apps/v1
    kind: Deployment
    spec:
      template:
        spec:
          containers:
          - name: app
            envFrom:
            - configMapRef:
                name: ${config.metadata.name}
```

Com esse padrão, você consegue criar recursos na AWS, obter detalhes importantes (como ARNs, URLs e endpoints) e inseri-los diretamente na configuração da aplicação, tratando tudo como um único conjunto.

Para obter mais padrões de composição e exemplos avançados, consulte [Considerações sobre o kro para o EKS](kro-considerations.md).

## Próximas etapas
<a name="_next_steps"></a>
+  [Considerações sobre o kro para o EKS](kro-considerations.md): aprenda sobre padrões específicos do EKS, do RBAC e da integração com o ACK e com o Argo CD
+  [Documentação do kro](https://kro.run/docs/overview): acesse a documentação abrangente do kro, incluindo expressões CEL avançadas, padrões de validação e solução de problemas

# Configuração de permissões do kro
<a name="kro-permissions"></a>

Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM. O kro opera inteiramente no cluster do Kubernetes e não faz chamadas de API da AWS. Controle o acesso aos recursos do kro usando o RBAC padrão do Kubernetes.

## Funcionamento de permissões com o kro
<a name="_how_permissions_work_with_kro"></a>

O kro usa dois tipos de recursos do Kubernetes com escopos diferentes:

 **ResourceGraphDefinitions**: recursos com escopo de cluster para a definição de APIs personalizadas. Geralmente, esses recursos são gerenciados por equipes responsáveis pela plataforma que projetam e mantêm os padrões organizacionais.

 **Instâncias**: recursos personalizados com escopo de namespace criados com base em ResourceGraphDefinitions. Podem ser criados por equipes responsáveis pela aplicação com as permissões de RBAC apropriadas.

Por padrão, a funcionalidade do kro tem permissões para gerenciar ResourceGraphDefinitions e as respectivas instâncias por meio da política de entrada de acesso `AmazonEKSKROPolicy`. No entanto, o kro requer permissões adicionais para criar e gerenciar os recursos subjacentes do Kubernetes definidos em suas ResourceGraphDefinitions (como Deployments, Services ou recursos do ACK). Você deve conceder essas permissões por meio de políticas de entrada de acesso ou de RBAC do Kubernetes. Para detalhes sobre a concessão dessas permissões, consulte a seção [Permissões de recursos arbitrários do kro](capabilities-security.md#kro-resource-permissions).

## Permissões da equipe responsável pela plataforma
<a name="_platform_team_permissions"></a>

As equipes responsáveis pela plataforma precisam de permissões para criar e gerenciar ResourceGraphDefinitions.

 **Exemplo de ClusterRole para as equipes responsáveis pela plataforma**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-platform-admin
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["*"]
```

 **Vincule aos membros da equipe responsável pela plataforma**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: platform-team-kro-admin
subjects:
- kind: Group
  name: platform-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-platform-admin
  apiGroup: rbac.authorization.k8s.io
```

## Permissões da equipe responsável pela aplicação
<a name="_application_team_permissions"></a>

As equipes responsáveis pela aplicação precisam de permissões para criar instâncias de recursos personalizados em seus namespaces.

 **Exemplo de perfil para as equipes responsáveis pela aplicação**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kro-app-developer
  namespace: my-app
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps", "databases"]
  verbs: ["create", "get", "list", "update", "delete", "patch"]
```

 **Vincule aos membros da equipe responsável pela aplicação**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-kro-developer
  namespace: my-app
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: kro-app-developer
  apiGroup: rbac.authorization.k8s.io
```

**nota**  
O grupo de API no perfil (`kro.run` neste exemplo) deve corresponder à `apiVersion` definida no esquema da ResourceGraphDefinition.

## Acesso somente leitura.
<a name="_read_only_access"></a>

Conceda acesso somente de leitura para a visualização de ResourceGraphDefinitions e de instâncias, sem permissões de modificação.

 **ClusterRole somente de leitura**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-viewer
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["get", "list", "watch"]
```

 **Perfil somente de leitura para as instâncias**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kro-instance-viewer
  namespace: my-app
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps", "databases"]
  verbs: ["get", "list", "watch"]
```

## Acesso a vários namespaces
<a name="_multi_namespace_access"></a>

Conceda às equipes responsáveis pela aplicação acesso a vários namespaces usando ClusterRoles com RoleBindings.

 **ClusterRole para acesso a vários namespaces**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-multi-namespace-developer
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps"]
  verbs: ["create", "get", "list", "update", "delete"]
```

 **Vincule a namespaces específicos**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-dev-access
  namespace: development
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-multi-namespace-developer
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-staging-access
  namespace: staging
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-multi-namespace-developer
  apiGroup: rbac.authorization.k8s.io
```

## Práticas recomendadas
<a name="_best_practices"></a>

 **Princípio do privilégio mínimo**: conceda somente as permissões mínimas necessárias para que cada equipe execute suas responsabilidades.

 **Use grupos em vez de usuários individuais**: vincule perfis a grupos, em vez de usuários individuais, para facilitar o gerenciamento.

 **Separação de responsabilidades entre equipes de plataforma e aplicação**: equipes responsáveis pela plataforma gerenciam ResourceGraphDefinitions, enquanto equipes responsáveis pela aplicação gerenciam instâncias.

 **Isolamento de namespace**: use namespaces para isolar diferentes equipes ou ambientes, com o RBAC controlando o acesso a cada namespace.

 **Acesso somente de leitura para auditoria**: forneça acesso somente de leitura para equipes responsáveis pela segurança e pela conformidade para fins de auditoria.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): compreenda sobre o SimpleSchema, expressões CEL e padrões de composição
+  [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md): analise as práticas recomendadas de segurança para as funcionalidades

# Considerações sobre o kro para o EKS
<a name="kro-considerations"></a>

Este tópico aborda considerações importantes para o uso da funcionalidade do EKS para o kro, incluindo quando utilizar a composição de recursos, os padrões de RBAC e a integração com outras funcionalidades do EKS.

## Situações para o uso do kro
<a name="_when_to_use_kro"></a>

O kro foi projetado para criar padrões de infraestrutura reutilizáveis e APIs personalizadas que simplificam o gerenciamento de recursos complexos.

 **Use o kro quando for necessário**:
+ Criar plataformas de autoatendimento com APIs simplificadas para as equipes destinadas ao trabalho com APIs aplicação
+ Padronizar padrões de infraestrutura entre diferentes equipes (banco de dados \$1 backup \$1 monitoramento)
+ Gerenciar dependências de recursos e realizar a transferência de valores entre recursos
+ Desenvolver abstrações personalizadas que ocultam a complexidade da implementação
+ Compor diversos recursos do ACK em blocos de criação de nível superior
+ Habilitar fluxos de trabalho de GitOps para pilhas de infraestrutura complexas

 **Não use kro ao**:
+ Gerenciar recursos simples e isolados (empregue recursos do Kubernetes ou do ACK diretamente)
+ Necessitar de lógica dinâmica de runtime (visto que o kro é declarativo, e não imperativo)
+ Lidar com recursos que não têm dependências nem configurações compartilhadas

O kro se destaca na criação de “caminhos pavimentados”, que são padrões opinativos e reutilizáveis que facilitam a implantação correta de infraestruturas complexas pelas equipes.

## Padrões de RBAC
<a name="_rbac_patterns"></a>

O kro permite a separação de responsabilidades entre as equipes responsáveis pela plataforma, que criam as ResourceGraphDefinitions, e as equipes responsáveis pela aplicação, que criam as instâncias.

### Responsabilidades da equipe responsável pela plataforma
<a name="_platform_team_responsibilities"></a>

As equipes responsáveis pela plataforma criam e mantêm as ResourceGraphDefinitions (RGDs) que definem as APIs personalizadas.

 **Permissões necessárias**:
+ Criar, atualizar e excluir ResourceGraphDefinitions
+ Gerenciar tipos de recursos subjacentes (como Deployments, Services e recursos do ACK)
+ Acessar a todos os namespaces nos quais as RGDs serão aplicadas

 **Exemplo de ClusterRole para a equipe responsável pela plataforma**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: platform-kro-admin
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["*"]
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

Para obter a configuração detalhada de RBAC, consulte [Configuração de permissões do kro](kro-permissions.md).

### Responsabilidades da equipe responsável pela aplicação
<a name="_application_team_responsibilities"></a>

As equipes responsáveis pela aplicação criam instâncias de recursos personalizados definidos por RGDs, sem a necessidade de compreender a complexidade subjacente.

 **Permissões necessárias**:
+ Criar, atualizar e excluir instâncias de recursos personalizados
+ Ter um acesso de leitura ao próprio namespace
+ Não conseguir acessar os recursos subjacentes ou as RGDs

 **Benefícios**:
+ As equipes usam APIs simplificadas de alto nível
+ As equipes responsáveis pela plataforma detêm o controle dos detalhes de implementação
+ Risco reduzido de erros de configuração
+ Integração mais rápida para os novos membros da equipe

## Integração com outras funcionalidades do EKS
<a name="_integration_with_other_eks_capabilities"></a>

### Composição de recursos do ACK
<a name="_composing_ack_resources"></a>

O kro torna-se especialmente eficiente ao ser integrado ao ACK para o desenvolvimento de padrões de infraestrutura.

 **Padrões comuns**:
+  **Aplicação com armazenamento**: bucket do S3 \$1 fila do SQS \$1 configuração de notificação
+  **Pilha de banco de dados**: instância do RDS \$1 grupo de parâmetros \$1 grupo de segurança \$1 segredo do Secrets Manager
+  **Rede**: VPC \$1 sub-redes \$1 tabelas de rotas \$1 grupos de segurança \$1 gateways NAT
+  **Computação com armazenamento**: instância do EC2 \$1 volumes do EBS \$1 perfil de instância do IAM

O kro gerencia a ordenação de dependências, transfere valores entre recursos (como ARNs e strings de conexão) e gerencia o ciclo de vida completo como uma unidade única.

Para obter exemplos da composição de recursos do ACK, consulte [Conceitos do ACK](ack-concepts.md).

### GitOps com Argo CD
<a name="_gitops_with_argo_cd"></a>

Use a funcionalidade do EKS para o Argo CD com a finalidade de implantar tanto RGDs quanto instâncias usando repositórios do Git.

 **Organização de repositórios**:
+  **Repositório de plataforma**: contém as ResourceGraphDefinitions gerenciadas pela equipe responsável pela plataforma
+  **Repositórios de aplicação**: contêm instâncias de recursos personalizados gerenciadas pelas equipes responsáveis pela aplicação
+  **Repositório compartilhado**: contém tanto RGDs quanto instâncias para organizações de menor porte

 **Considerações**:
+ Implante as RGDs antes das instâncias (os ciclos de sincronização do Argo CD podem ser úteis)
+ Use Projects distintos do CD Argo para as equipes responsáveis pela plataforma e pela aplicação
+ A equipe responsável pela plataforma controla o acesso ao repositório de RGDs
+ As equipes responsáveis pela aplicação têm acesso somente de leitura às definições de RGDs

Para saber mais sobre o Argo CD, consulte [Como trabalhar com o Argo CD](working-with-argocd.md).

## Organização de ResourceGraphDefinitions
<a name="_organizing_resourcegraphdefinitions"></a>

Organize as RGDs por finalidade, complexidade e propriedade.

 **Por finalidade**:
+  **Infraestrutura**: pilhas de banco de dados, rede e armazenamento
+  **Aplicação**: aplicativos web, APIs e trabalhos em lote
+  **Plataforma**: serviços compartilhados, monitoramento e registro em log

 **Por complexidade**:
+  **Simples**: dois a três recursos com o mínimo de dependências
+  **Intermediária**: cinco a dez recursos com algumas dependências
+  **Complexa**: mais de dez recursos com dependências complexas

 **Convenções de nomenclatura**:
+ Use nomes descritivos: `webapp-with-database` e `s3-notification-queue` 
+ Inclua a versão no nome para alterações incompatíveis: `webapp-v2` 
+ Use prefixos consistentes para RGDs relacionadas: `platform- ` e `app-` 

 **Estratégia de namespace**:
+ As RGDs têm escopo de cluster (não pertencem a um namespace)
+ As instâncias pertencem a um namespace
+ Use seletores de namespace nas RGDs para controlar em qual local as instâncias podem ser criadas

## Versionamento e atualizações
<a name="_versioning_and_updates"></a>

Planeje a evolução das RGDs e a migração de instâncias.

 **Atualizações de RGD**:
+  **Alterações compatíveis**: atualize a RGD diretamente (adicione campos opcionais e novos recursos com includeWhen)
+  **Alterações incompatíveis**: crie uma nova RGD com um nome diferente (como webapp-v2)
+  **Descontinuação**: sinalize as RGDs antigas com anotações e comunique o cronograma de migração

 **Migração de instâncias**:
+ Crie novas instâncias com a RGD atualizada
+ Valide se as novas instâncias funcionam corretamente
+ Exclua as instâncias antigas
+ O kro gerencia as atualizações dos recursos subjacentes automaticamente

 **Práticas recomendadas**:
+ Teste as alterações de RGD primeiro em ambientes que não são de produção
+ Use o versionamento semântico nos nomes das RGDs para alterações significativas
+ Documente as alterações incompatíveis e os caminhos de migração
+ Forneça exemplos de migração para as equipes responsáveis pela aplicação

## Validação e testes
<a name="_validation_and_testing"></a>

Valide as RGDs antes de implantá-las em ambientes de produção.

 **Estratégias de validação**:
+  **Validação de esquema**: o kro valida a estrutura da RGD automaticamente
+  **Instâncias de simulação**: crie instâncias de teste em namespaces de desenvolvimento
+  **Testes de integração**: verifique se os recursos compostos funcionam em conjunto
+  **Aplicação de políticas**: use controladores de admissão para aplicar padrões organizacionais

 **Problemas comuns em testes**:
+ Dependências e ordenação de recursos
+ Transferência de valores entre recursos (expressões CEL)
+ Inclusão condicional de recursos (includeWhen)
+ Propagação de status provenientes de recursos subjacentes
+ Permissões de RBAC para criação de instâncias

## Documentação original
<a name="_upstream_documentation"></a>

Para obter informações detalhadas sobre o uso do kro:
+  [Getting Started with kro](https://kro.run/docs/guides/getting-started): criação de ResourceGraphDefinitions
+  [CEL Expressions](https://kro.run/docs/concepts/cel): gravação de expressões CEL
+  [kro Guides](https://kro.run/docs/guides/): padrões avançados de composição
+  [Troubleshooting](https://kro.run/docs/troubleshooting): solução de problemas e depuração

## Próximas etapas
<a name="_next_steps"></a>
+  [Configuração de permissões do kro](kro-permissions.md): configure o RBAC para as equipes responsáveis pela plataforma e pela aplicação
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e o ciclo de vida dos recursos
+  [Solução de problemas em funcionalidades do kro](kro-troubleshooting.md): solucione problemas do kro
+  [Conceitos do ACK](ack-concepts.md): saiba mais sobre os recursos do ACK para a composição
+  [Como trabalhar com o Argo CD](working-with-argocd.md): implante RGDs e instâncias utilizando GitOps

# Solução de problemas em funcionalidades do kro
<a name="kro-troubleshooting"></a>

Este tópico fornece orientações para a solução de problemas à funcionalidade do EKS para o kro, incluindo verificações de integridade da funcionalidade, permissões de RBAC, erros relacionados à expressão CEL e problemas de composição de recursos.

**nota**  
As funcionalidades do EKS são totalmente gerenciadas e executadas de forma externa ao cluster. Você não tem acesso aos logs do controlador nem ao namespace `kro-system`. A solução de problemas se concentra na integridade da funcionalidade, na configuração de RBAC e no status dos recursos.

## A funcionalidade está com o status ACTIVE, mas as ResourceGraphDefinitions não estão funcionando
<a name="_capability_is_active_but_resourcegraphdefinitions_arent_working"></a>

Se a funcionalidade do kro apresentar o status `ACTIVE`, mas as ResourceGraphDefinitions não estiverem criando recursos subjacentes, verifique a integridade da funcionalidade, as permissões de RBAC e o status do recurso.

 **Verifique a integridade da funcionalidade**:

Você pode visualizar problemas de integridade e de status da funcionalidade no console do EKS ou usando a AWS CLI.

 **Console do**:

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do seu cluster.

1. Escolha a guia **Observabilidade**.

1. Escolha **Monitorar cluster**.

1. Escolha a guia **Funcionalidades** para visualizar a integridade e o status de todas as funcionalidades.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro

# Look for issues in the health section
```

 **Causas comuns**:
+  **Permissões de RBAC ausentes**: o kro não tem permissões para criar recursos subjacentes do Kubernetes
+  **Expressões CEL inválidas**: erros de sintaxe na ResourceGraphDefinition
+  **Dependências de recursos**: recursos dependentes não estão prontos
+  **Validação do esquema**: a instância não corresponde ao esquema da RGD

 **Verifique as permissões do RBAC**:

```
# Check if capability has cluster admin policy
kubectl get accessentry -A | grep kro
```

Se a funcionalidade não tiver as permissões necessárias, associe a política `AmazonEKSClusterAdminPolicy` à entrada de acesso da funcionalidade do kro ou crie políticas de RBAC mais restritivas para uso em ambientes de produção. Para mais detalhes, consulte [Configuração de permissões do kro](kro-permissions.md).

 **Verifique o status da ResourceGraphDefinition**:

```
# List all RGDs
kubectl get resourcegraphdefinition

# Describe specific RGD
kubectl describe resourcegraphdefinition my-rgd

# Check for validation errors
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions}'
```

As ResourceGraphDefinitions contam com três condições de status fundamentais:
+  `ResourceGraphAccepted`: se a RGD foi aprovada na validação (por exemplo, por sintaxe CEL, verificação de tipos e existência de campos)
+  `KindReady`: se a CRD para a API personalizada foi gerado e registrado
+  `ControllerReady`: se o kro está monitorando ativamente as instâncias da API personalizada

Se `ResourceGraphAccepted` for `False`, verifique a mensagem da condição para erros de validação, como campos desconhecidos, incompatibilidades de tipo ou dependências circulares.

## As instâncias foram criadas, porém os recursos subjacentes não estão sendo exibidos
<a name="_instances_created_but_underlying_resources_not_appearing"></a>

Se existirem instâncias de recursos personalizados, mas os recursos subjacentes do Kubernetes (como Deployments, Services e ConfigMaps) não estiverem sendo criados, valide as permissões do kro e verifique se há erros na composição.

 **Verifique o status da instância**:

```
# Describe the instance (replace with your custom resource kind and name)
kubectl describe custom-kind
         my-instance

# View instance events
kubectl get events --field-selector involvedObject.name=my-instance

# Check instance status conditions
kubectl get custom-kind
         my-instance -o jsonpath='{.status.conditions}'

# Check instance state
kubectl get custom-kind
         my-instance -o jsonpath='{.status.state}'
```

As instâncias têm um campo `state` que indica o status geral:
+  `ACTIVE`: a instância está sendo executada com êxito
+  `IN_PROGRESS`: a instância está sendo processada ou reconciliada
+  `FAILED`: a instância apresentou falha na reconciliação
+  `DELETING`: a instância está sendo excluída
+  `ERROR`: ocorreu um erro durante o processamento

Além disso, as instâncias contam com quatro condições de status:
+  `InstanceManaged`: finalizadores e rótulos estão configurados corretamente
+  `GraphResolved`: gráfico de runtime criado e recursos resolvidos
+  `ResourcesReady`: todos os recursos foram criados e estão prontos
+  `Ready`: integridade geral da instância (torna-se `True` apenas quando todas as subcondições são `True`)

Monitore a condição `Ready` para determinar a integridade da instância. Se `Ready` for `False`, verifique as subcondições para identificar em qual fase ocorreu a falha.

 **Verifique as permissões do RBAC**:

A funcionalidade do kro precisa de permissões para criar os recursos subjacentes do Kubernetes, definidos nas ResourceGraphDefinitions.

```
# Check if the capability has the AmazonEKSClusterAdminPolicy
kubectl get accessentry -A | grep kro
```

Se as permissões estiverem ausentes, associe a política `AmazonEKSClusterAdminPolicy` à entrada de acesso da funcionalidade do kro ou crie políticas de RBAC mais restritivas para uso em ambientes de produção. Para mais detalhes, consulte [Configuração de permissões do kro](kro-permissions.md).

## Erros em expressões CEL
<a name="_cel_expression_errors"></a>

Os erros em expressões CEL são detectados no momento da criação da ResourceGraphDefinition, e não quando as instâncias são criadas. O kro valida toda a sintaxe do CEL, verifica os tipos das expressões em relação aos esquemas do Kubernetes e verifica a existência de campos ao criar a RGD.

 **Erros comuns de validação em expressões CEL**:
+  **Referência de campo indefinida**: referência a um campo que não existe no esquema ou no recurso
+  **Incompatibilidade de tipo**: a expressão retorna o tipo incorreto (por exemplo, string em que o número inteiro é esperado)
+  **Sintaxe inválida**: ausência de colchetes, aspas ou operadores na expressão CEL
+  **Tipo de recurso desconhecido**: referência a uma CRD que não está presente no cluster

 **Verifique o status de validação da RGD**:

```
# Check if RGD was accepted
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions[?(@.type=="ResourceGraphAccepted")]}'

# View detailed validation errors
kubectl describe resourcegraphdefinition my-rgd
```

Se `ResourceGraphAccepted` for `False`, a mensagem da condição conterá o erro de validação.

 **Exemplos de expressões CEL válidas**:

```
# Reference schema field
${schema.spec.appName}

# Conditional expression
${schema.spec.replicas > 1}

# String template (expressions must return strings)
name: "${schema.spec.appName}-service"

# Standalone expression (can be any type)
replicas: ${schema.spec.replicaCount}

# Resource reference
${deployment.status.availableReplicas}

# Optional field access (returns null if field doesn't exist)
${configmap.data.?DATABASE_URL}
```

## As dependências de recursos não estão sendo resolvidas
<a name="_resource_dependencies_not_resolving"></a>

O kro identifica dependências automaticamente por meio das expressões CEL, garantindo a criação dos recursos na sequência correta. Se os recursos não estiverem sendo criados conforme o esperado, verifique a ordem de dependência e a prontidão dos recursos.

 **Confira a ordem de criação definida pelo sistema**:

```
# See the order kro will create resources
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'
```

Isso mostra a ordem definida pelo sistema com base nas referências de expressões CEL entre os recursos.

 **Verifique a prontidão dos recursos**:

```
# View instance status to see which resources are ready
kubectl get custom-kind
         my-instance -o jsonpath='{.status}'

# Check specific resource status
kubectl get deployment my-deployment -o jsonpath='{.status.conditions}'
```

 **Verifique as condições readyWhen (se houver)**:

O campo `readyWhen` é opcional. Se não for especificado, os recursos serão considerados prontos imediatamente após a criação. Se você definiu condições `readyWhen`, confirme se elas estão verificando o estado de prontidão do recurso de forma correta:

```
resources:
  - id: deployment
    readyWhen:
      - ${deployment.status.availableReplicas == deployment.spec.replicas}
```

 **Verifique os eventos do recurso**:

```
# View events for the underlying resources
kubectl get events -n namespace --sort-by='.lastTimestamp'
```

## Ocorrem falhas de validação do esquema
<a name="_schema_validation_failures"></a>

Se a criação de instâncias falhar devido a erros de validação do esquema, verifique se a instância corresponde aos requisitos de esquema da RGD.

 **Verifique os erros de validação**:

```
# Attempt to create instance and view error
kubectl apply -f instance.yaml

# View existing instance validation status
kubectl describe custom-kind
         my-instance | grep -A 5 "Validation"
```

 **Problemas comuns de validação**:
+  **Campos obrigatórios ausentes**: a instância não fornece todos os campos obrigatórios do esquema
+  **Incompatibilidade de tipo**: fornecimento de string em um local em que um número inteiro é esperado
+  **Valor de enumeração inválido**: uso de um valor não constante na lista permitida
+  **Incompatibilidade de padrões**: a string não corresponde ao padrão regex

 **Analise o esquema da RGD**:

```
# View the schema definition
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.spec.schema}'
```

Certifique-se de que sua instância contenha todos os campos requeridos com os respectivos tipos configurados corretamente.

## Próximas etapas
<a name="_next_steps"></a>
+  [Considerações sobre o kro para o EKS](kro-considerations.md): obtenha considerações e práticas recomendadas para o kro
+  [Configuração de permissões do kro](kro-permissions.md): configure o RBAC para as equipes responsáveis pela plataforma e pela aplicação
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e o ciclo de vida dos recursos
+  [Solução de problemas das funcionalidades do EKS](capabilities-troubleshooting.md): acesse orientações gerais para solução de problemas de funcionalidades

# Comparação da funcionalidade do EKS para o kro em relação ao kro autogerenciado
<a name="kro-comparison"></a>

A funcionalidade do EKS para o kro é equivalente à do kro autogerenciado, porém apresenta vantagens operacionais significativas. Para obter uma comparação geral das funcionalidades do EKS em relação às soluções autogerenciadas, consulte [Considerações sobre as funcionalidades do EKS](capabilities-considerations.md).

A funcionalidade do EKS para o kro usa os mesmos controladores da versão original do kro e é totalmente compatível com a versão original do projeto. As ResourceGraphDefinitions, as expressões CEL e a composição de recursos funcionam de maneira idêntica. Para obter a documentação completa do kro e exemplos, consulte a [documentação oficial do kro](https://kro.run/docs/overview).

## Caminho de migração
<a name="_migration_path"></a>

Você pode migrar de um kro autogerenciado para a funcionalidade gerenciada sem tempo de inatividade.

**Importante**  
Antes de realizar a migração, certifique-se de que o controlador kro autogerenciado esteja executando a mesma versão da funcionalidade do EKS para o kro. Verifique a versão da funcionalidade no console do EKS ou usando o comando `aws eks describe-capability` e, em seguida, atualize a instalação do recurso autogerenciado para que seja compatível. Isso evita problemas de compatibilidade durante a migração.

1. Atualize o controlador do kro autogerenciado para usar `kube-system` para concessões de eleição de líder:

   ```
   helm upgrade --install kro \
     oci://ghcr.io/awslabs/kro/kro-chart \
     --namespace kro \
     --set leaderElection.namespace=kube-system
   ```

   Isso transfere a concessão do controlador para o `kube-system`, permitindo que a funcionalidade gerenciada se coordene com ele.

1. Crie a funcionalidade do kro no cluster (consulte [Criação de uma funcionalidade do kro](create-kro-capability.md)).

1. A funcionalidade gerenciada reconhece as ResourceGraphDefinitions e as instâncias existentes, assumindo o processo de reconciliação.

1. Reduza gradualmente a escala verticalmente ou remova as implantações do kro autogerenciado:

   ```
   helm uninstall kro --namespace kro
   ```

Com essa abordagem, ambos os controladores podem coexistir com segurança durante a migração. A funcionalidade gerenciada assume automaticamente as ResourceGraphDefinitions e as instâncias que antes eram gerenciadas pelo kro autogerenciado, assegurando reconciliação contínua sem gerar conflitos.

## Próximas etapas
<a name="_next_steps"></a>
+  [Criação de uma funcionalidade do kro](create-kro-capability.md): crie um recurso de funcionalidade do kro
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos

# Solução de problemas das funcionalidades do EKS
<a name="capabilities-troubleshooting"></a>

Este tópico fornece orientações gerais para a solução de problemas das funcionalidades do EKS, incluindo verificações de integridade das funcionalidades, problemas comuns e links para o acesso à solução de problemas específica de cada funcionalidade.

**nota**  
As funcionalidades do EKS são totalmente gerenciadas e executadas de forma externa ao cluster. Você não tem acesso aos logs do controlador nem aos namespaces do controlador. A solução de problemas se concentra na integridade da funcionalidade, no status dos recursos e na configuração.

## Abordagem geral para a solução de problemas
<a name="_general_troubleshooting_approach"></a>

Ao solucionar problemas das funcionalidades do EKS, siga esta abordagem geral:

1.  **Verifique a integridade da funcionalidade**: use `aws eks describe-capability` para visualizar o status da funcionalidade e possíveis problemas de integridade

1.  **Verifique o status dos recursos**: confira os recursos do Kubernetes (CRDs) que você criou, observando condições de status e eventos

1.  **Analise as permissões do IAM**: garanta que o perfil da funcionalidade conte com as permissões necessárias

1.  **Verifique a configuração**: confirme se a configuração específica da funcionalidade está correta

## Verificação da integridade da funcionalidade
<a name="_check_capability_health"></a>

Todas as funcionalidades do EKS fornecem informações de integridade por meio do console do EKS e da API `describe-capability`.

 **Console do**:

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do seu cluster.

1. Escolha a guia **Observabilidade**.

1. Escolha **Monitorar cluster**.

1. Escolha a guia **Funcionalidades** para visualizar a integridade e o status de todas as funcionalidades.

A guia Funcionalidades apresenta:
+ Nome e tipo da funcionalidade
+ Status atual
+ Problemas de integridade, acompanhados de descrição

 ** AWS CLI**:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-capability-name
```

A resposta inclui:
+  **status**: estado atual da funcionalidade (`CREATING`, `ACTIVE`, `UPDATING`, `DELETING`, `CREATE_FAILED` ou `UPDATE_FAILED`)
+  **integridade**: informações de integridade, incluindo quaisquer problemas detectados pela funcionalidade

## Status comuns das funcionalidades
<a name="_common_capability_statuses"></a>

 **CREATING**: a funcionalidade está sendo configurada.

 **ACTIVE**: a funcionalidade está em execução e pronta para uso. Se os recursos não estiverem funcionando conforme esperado, verifique o status do recurso e as permissões de IAM.

 **UPDATING**: as alterações de configuração estão sendo aplicadas. Aguarde até que o status retorne para `ACTIVE`.

 **CREATE\$1FAILED** ou **UPDATE\$1FAILED**: o processo de criação ou de atualização apresentou um erro. Confira a seção destinada à integridade para obter mais detalhes. Causas comuns:
+ Política de confiança do perfil do IAM incorreta ou ausente
+ O perfil do IAM não existe ou não está acessível
+ Problemas de acesso ao cluster
+ Parâmetros de configuração inválidos

## Verificação do status dos recursos do Kubernetes
<a name="_verify_kubernetes_resource_status"></a>

As funcionalidades do EKS criam e gerenciam definições de recursos personalizados (CRDs, na sigla em inglês) do Kubernetes em seu cluster. Ao solucionar problemas, verifique o status dos recursos que você criou:

```
# List resources of a specific type
kubectl get resource-kind -A

# Describe a specific resource to see conditions and events
kubectl describe resource-kind
         resource-name -n namespace

# View resource status conditions
kubectl get resource-kind
         resource-name -n namespace -o jsonpath='{.status.conditions}'

# View events related to the resource
kubectl get events --field-selector involvedObject.name=resource-name -n namespace
```

As condições de status do recurso fornecem informações sobre:
+ A prontidão do recurso
+ Quaisquer erros encontrados
+ O estado atual de reconciliação

## Análise das permissões do IAM e do acesso ao cluster
<a name="_review_iam_permissions_and_cluster_access"></a>

Diversos problemas relacionados às funcionalidades são causados por permissões inadequadas no IAM ou pela falta de configuração de acesso ao cluster. Verifique tanto as permissões do perfil da funcionalidade quanto as entradas de acesso ao cluster.

### Verificação das permissões do perfil do IAM
<a name="_check_iam_role_permissions"></a>

Confirme se o perfil da funcionalidade detém todas as permissões necessárias:

```
# List attached managed policies
aws iam list-attached-role-policies --role-name my-capability-role

# List inline policies
aws iam list-role-policies --role-name my-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-capability-role --policy-name policy-name

# View the role's trust policy
aws iam get-role --role-name my-capability-role --query 'Role.AssumeRolePolicyDocument'
```

É necessário que a política de confiança autorize a entidade principal do serviço `capabilities.eks.amazonaws.com`:

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

### Verificação das entradas de acesso e das políticas de acesso do EKS
<a name="_check_eks_access_entries_and_access_policies"></a>

Todas as funcionalidades necessitam de entradas de acesso e de políticas de acesso apropriadas no cluster em que são executadas.

 **Verifique se a entrada de acesso existe**:

```
aws eks list-access-entries \
  --cluster-name my-cluster \
  --region region-code
```

Procure o ARN do perfil da funcionalidade na lista. Se estiver ausente, a funcionalidade não poderá acessar o cluster.

 **Verifique as políticas de acesso anexadas à entrada**:

```
aws eks list-associated-access-policies \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::111122223333:role/my-capability-role \
  --region region-code
```

Todas as funcionalidades requerem políticas de acesso apropriadas:
+  **ACK**: necessita de permissões para criar e gerenciar recursos do Kubernetes
+  **kro**: necessita de permissões para criar e gerenciar recursos do Kubernetes
+  **Argo CD**: necessita de permissões para criar e gerenciar Applications e requer entradas de acesso nos clusters remotos para implantações em vários clusters

 **Para implantações de vários clusters do Argo CD**:

Ao realizar implantações em clusters remotos, assegure-se de que o perfil da funcionalidade disponha de uma entrada de acesso em cada cluster de destino:

```
# Check Access Entry on target cluster
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::111122223333:role/argocd-capability-role \
  --region region-code
```

Se a entrada de acesso estiver ausente em algum cluster de destino, o Argo CD não conseguirá implantar aplicações nele. Consulte [Registro de clusters de destino](argocd-register-clusters.md) para obter detalhes sobre a configuração.

## Solução de problemas específicas por funcionalidade
<a name="_capability_specific_troubleshooting"></a>

Para obter orientações detalhadas de solução de problemas específicas relacionadas a cada tipo de funcionalidade:
+  [Solução de problemas em funcionalidades do ACK](ack-troubleshooting.md): solução de problemas na criação de recursos do ACK, permissões do IAM e acesso entre contas
+  [Solução de problemas em funcionalidades do Argo CD](argocd-troubleshooting.md): solução de problemas na sincronização de aplicações, autenticação de repositórios e implantações em vários clusters
+  [Solução de problemas em funcionalidades do kro](kro-troubleshooting.md): solução de problemas em ResourceGraphDefinitions, expressões CEL e permissões RBAC

## Problemas comuns em todas as funcionalidades
<a name="_common_issues_across_all_capabilities"></a>

### Funcionalidade travada no estado CREATING
<a name="_capability_stuck_in_creating_state"></a>

Se uma funcionalidade permanecer no estado `CREATING` por mais tempo do que o esperado:

1. Verifique a integridade da funcionalidade em busca de problemas específicos no console (**Observabilidade** > **Monitorar cluster** > guia **Funcionalidades**) ou usando a CLI da AWS:

   ```
   aws eks describe-capability \
     --region region-code \
     --cluster-name my-cluster \
     --capability-name my-capability-name \
     --query 'capability.health'
   ```

1. Verifique se o perfil do IAM existe e conta com a política de confiança correta

1. Certifique-se de que o cluster esteja acessível e íntegro

1. Verifique se há algum problema no nível do cluster que possa impedir a configuração de recursos

### Recursos não estão sendo criados ou atualizados
<a name="_resources_not_being_created_or_updated"></a>

Se a funcionalidade estiver `ACTIVE`, mas os recursos não estiverem sendo criados ou atualizados:

1. Verifique o status do recurso em busca de erros

1. Verifique as permissões do IAM para os serviços da AWS específicos (ACK) ou para os repositórios (Argo CD)

1. Verifique as permissões RBAC para a criação dos recursos subjacentes (kro)

1. Analise as especificações do recurso em busca de erros de validação

### Problemas de integridade da funcionalidade
<a name="_capability_health_shows_issues"></a>

Se o comando `describe-capability` apresentar problemas de integridade:

1. Leia atentamente as descrições dos problemas, pois elas geralmente indicam a causa específica

1. Corrija a causa raiz (por exemplo, permissões do IAM, erros de configuração e entre outros)

1. A funcionalidade será recuperada automaticamente assim que o problema for resolvido

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerenciamento de recursos da funcionalidade
+  [Solução de problemas em funcionalidades do ACK](ack-troubleshooting.md): solução de problemas específica do ACK
+  [Solução de problemas em funcionalidades do Argo CD](argocd-troubleshooting.md): solução de problemas específica do Argo CD
+  [Solução de problemas em funcionalidades do kro](kro-troubleshooting.md): solução de problemas específica do kro
+  [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md): práticas recomendadas de segurança para as funcionalidades