

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

# Acesse um banco de dados Amazon Neptune a partir de um contêiner Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

## Resumo
<a name="access-amazon-neptune-database-from-amazon-eks-container-summary"></a>

Esse padrão estabelece uma conexão entre o Amazon Neptune, que é um banco de dados gráfico totalmente gerenciado, e o Amazon Elastic Kubernetes Service (Amazon EKS), um serviço de orquestração de contêineres, para acessar um banco de dados Neptune. Os clusters de banco de dados Neptune estão confinados em uma nuvem privada virtual (VPC) ativada. AWS Por esse motivo, acessar o Neptune exige uma configuração cuidadosa da VPC para permitir a conectividade.

Ao contrário do Amazon Relational Database Service (Amazon RDS) para PostgreSQL, o Neptune não depende de credenciais típicas de acesso ao banco de dados. Em vez disso, ele usa funções AWS Identity and Access Management (IAM) para autenticação. Portanto, conectar-se ao Neptune a partir do Amazon EKS envolve a configuração de uma função do IAM com as permissões necessárias para acessar o Neptune.

Além disso, os endpoints do Neptune são acessíveis somente na VPC em que o cluster reside. Isso significa que você precisa definir as configurações de rede para facilitar a comunicação entre o Amazon EKS e o Neptune. Dependendo de seus requisitos específicos e preferências de rede, existem [várias abordagens para configurar a VPC para permitir uma conectividade perfeita entre o](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) Neptune e o Amazon EKS. Cada método oferece vantagens e considerações distintas, que fornecem flexibilidade na criação da arquitetura do banco de dados para atender às necessidades do seu aplicativo.

## Pré-requisitos e limitações
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Pré-requisitos **
+ Instale a versão mais recente do **kubectl** (veja [as instruções](https://kubernetes.io/docs/tasks/tools/#kubectl)). Para verificar sua versão, execute: 

  ```
  kubectl version --short
  ```
+ Instale a versão mais recente do **eksctl** (veja [as instruções](https://eksctl.io/installation/)). Para verificar sua versão, execute: 

  ```
  eksctl info
  ```
+ Instale a versão mais recente da AWS Command Line Interface (AWS CLI) versão 2 (consulte [as instruções](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Para verificar sua versão, execute: 

  ```
  aws --version
  ```
+ [Crie um cluster de banco de dados Neptune (consulte as instruções).](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html) Certifique-se de estabelecer comunicações entre a VPC do cluster e o Amazon EKS por meio de [emparelhamento de VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) ou outro método. [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html) Verifique também se o status do cluster está “disponível” e se ele tem uma regra de entrada na porta 8182 para o grupo de segurança.
+ [Configure um provedor IAM OpenID Connect (OIDC) em um cluster Amazon EKS existente (consulte as instruções).](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)

**Versões do produto**
+ [Amazon EKS 1.27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Motor Amazon Neptune versão 1.3.0.0 (2023-11-15)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

## Arquitetura
<a name="access-amazon-neptune-database-from-amazon-eks-container-architecture"></a>

O diagrama a seguir mostra a conexão entre os pods do Kubernetes em um cluster do Amazon EKS e o Neptune para fornecer acesso a um banco de dados do Neptune.

![Conectando pods em um nó do Kubernetes com o Amazon Neptune.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Automação e escala**

Você pode usar o Amazon EKS [Horizontal Pod Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) para escalar essa solução.

## Ferramentas
<a name="access-amazon-neptune-database-from-amazon-eks-container-tools"></a>

**Serviços**
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ [O Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) é um serviço de banco de dados gráfico que ajuda você a criar e executar aplicativos que funcionam com conjuntos de dados altamente conectados.

## Práticas recomendadas
<a name="access-amazon-neptune-database-from-amazon-eks-container-best-practices"></a>

Para obter as melhores práticas, consulte [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) nos *guias de melhores práticas do Amazon EKS*.

## Épicos
<a name="access-amazon-neptune-database-from-amazon-eks-container-epics"></a>

### Definição de variáveis de ambiente
<a name="set-environment-variables"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique o contexto do cluster. | Antes de interagir com seu cluster Amazon EKS usando o Helm ou outras ferramentas de linha de comando, você deve definir variáveis de ambiente que encapsulem os detalhes do seu cluster. Essas variáveis são usadas em comandos subsequentes para garantir que elas tenham como alvo o cluster e os recursos corretos.<br />Primeiro, confirme se você está operando no contexto correto do cluster. Isso garante que todos os comandos subsequentes sejam enviados para o cluster Kubernetes pretendido. Para verificar o contexto atual, execute o comando a seguir.<pre>kubectl config current-context</pre> | Administrador da AWS, administrador de nuvem | 
| Defina a `CLUSTER_NAME` variável. | Defina a variável de `CLUSTER_NAME` ambiente para seu cluster Amazon EKS. No comando a seguir, substitua o valor `us-west-2` da amostra pelo correto Região da AWS para seu cluster. Substitua o valor `eks-workshop` da amostra pelo nome do cluster existente.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Administrador da AWS, administrador de nuvem | 
| Valide a saída. | Para validar se as variáveis foram definidas corretamente, execute o comando a seguir.<pre>echo $CLUSTER_NAME</pre><br />Verifique se a saída desse comando corresponde à entrada especificada na etapa anterior. | Administrador da AWS, administrador de nuvem | 

### Crie uma função do IAM e associe-a ao Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar uma conta de serviço do . | Você usa [funções do IAM para contas de serviço para mapear suas contas](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) de serviço do Kubernetes para funções do IAM, a fim de permitir o gerenciamento refinado de permissões para seus aplicativos que são executados no Amazon EKS. Você pode usar [eksctl](https://eksctl.io/) para criar e associar uma função do IAM a uma conta de serviço específica do Kubernetes em seu cluster Amazon EKS. A política AWS gerenciada `NeptuneFullAccess` permite acesso de gravação e leitura ao cluster Neptune especificado.Você deve ter um [endpoint OIDC](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) associado ao seu cluster antes de executar esses comandos.<br />Crie uma conta de serviço que você deseja associar a uma política AWS gerenciada chamada`NeptuneFullAccess`.<pre>eksctl create iamserviceaccount --name eks-neptune-sa --namespace default --cluster $CLUSTER_NAME --attach-policy-arn arn:aws:iam::aws:policy/NeptuneFullAccess --approve --override-existing-serviceaccounts</pre><br />onde `eks-neptune-sa ` está o nome da conta de serviço que você deseja criar.<br />Após a conclusão, esse comando exibe a seguinte resposta:<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Administrador da AWS, administrador de nuvem | 
| Verifique se a conta está configurada corretamente. | Certifique-se de que a conta `eks-neptune-sa` de serviço esteja configurada corretamente no namespace padrão do seu cluster.<pre>kubectl get sa eks-neptune-sa -o yaml</pre><br />O resultado deve ser semelhante ao seguinte:<pre>apiVersion: v1<br />kind: ServiceAccount<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/eksctl-eks-workshop-addon-iamserviceaccount-d-Role1-Q35yKgdQOlmM<br />  creationTimestamp: "2024-02-07T01:12:39Z"<br />  labels:<br />    app.kubernetes.io/managed-by: eksctl<br />  name: eks-neptune-sa<br />  namespace: default<br />  resourceVersion: "5174750"<br />  uid: cd6ba2f7-a0f5-40e1-a6f4-4081e0042316</pre> | Administrador da AWS, administrador de nuvem | 
| Verifique a conectividade. | Implante um pod de amostra chamado `pod-util` e verifique a conectividade com o Neptune.<pre>apiVersion: v1<br />kind: Pod<br />metadata:<br />  name: pod-util<br />  namespace: default<br />spec:<br />  serviceAccountName: eks-neptune-sa<br />  containers:<br />  - name: pod-util<br />    image: public.ecr.aws/patrickc/troubleshoot-util<br />    command:<br />      - sleep<br />      - "3600"<br />    imagePullPolicy: IfNotPresent</pre><pre>kubectl apply -f pod-util.yaml</pre><pre>kubectl exec --stdin --tty pod-util -- /bin/bash<br />bash-5.1# curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/gremlin<br />{"requestId":"a4964f2d-12b1-4ed3-8a14-eff511431a0e","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[]},"meta":{"@type":"g:Map","@value":[]}}}<br />bash-5.1# exit<br />exit</pre> | Administrador da AWS, administrador de nuvem | 

### Validar a atividade de conexão
<a name="validate-connection-activity"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Habilite a autenticação do banco de dados do IAM. | Por padrão, a autenticação de banco de dados do IAM está desabilitada quando você cria um cluster de banco de dados do Neptune. Você pode ativar ou desativar a autenticação do banco de dados do IAM usando Console de gerenciamento da AWS o.<br />Siga as etapas na AWS documentação para [habilitar a autenticação do banco de dados do IAM no Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Administrador da AWS, administrador de nuvem | 
| Verifique as conexões. | Nesta etapa, você interage com o `pod-util` contêiner, que já está em execução, para instalar o **awscurl** e verificar a conexão.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Administrador da AWS, administrador de nuvem | 

## Solução de problemas
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Não consigo acessar o banco de dados Neptune. | Analise a política do IAM que está anexada à conta de serviço. Certifique-se de que ele permita as ações necessárias (por exemplo,`neptune:Connec,neptune:DescribeDBInstances`) para as operações que você deseja executar. | 

## Recursos relacionados
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Conceda às cargas de trabalho do Kubernetes acesso ao AWS uso de contas de serviço do Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (documentação do Amazon EKS)
+ [Funções do IAM para contas de serviço](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (documentação do Amazon EKS)
+ [Criação de um novo cluster de banco de dados Neptune (documentação](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html) do Amazon Neptune)