

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Acceso a una base de datos de Amazon Neptune desde un contenedor de Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

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

Este patrón establece una conexión entre Amazon Neptune, que es una base de datos de gráficos totalmente gestionada, y Amazon Elastic Kubernetes Service (Amazon EKS), un servicio de orquestación de contenedores, para acceder a una base de datos de Neptune. Los clústeres de la base de datos de Neptune están confinados dentro de una nube privada virtual (VPC) en AWS. Por este motivo, el acceso a Neptune requiere una configuración cuidadosa de la VPC para permitir la conectividad.

A diferencia de Amazon Relational Database Service (Amazon RDS) para PostgreSQL, Neptune no depende de las credenciales de acceso a bases de datos típicas. En su lugar, utiliza funciones AWS Identity and Access Management (IAM) para la autenticación. Por lo tanto, conectarse a Neptune desde Amazon EKS implica configurar un rol de IAM con los permisos necesarios para acceder a Neptune.

Además, solo se puede acceder a los puntos de conexión de Neptune dentro de la VPC en la que se encuentra el clúster. Esto significa que debe configurar los ajustes de red para facilitar la comunicación entre Amazon EKS y Neptune. Según sus requisitos específicos y sus preferencias de red, existen [varios enfoques para configurar la VPC](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) a fin de permitir una conectividad fluida entre Neptune y Amazon EKS. Cada método ofrece ventajas y opciones distintas, que proporcionan flexibilidad a la hora de diseñar la arquitectura de la base de datos para adaptarla a las necesidades de la aplicación.

## Requisitos previos y limitaciones
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Requisitos previos**
+ Instale la última versión de **kubectl** (consulte las [instrucciones](https://kubernetes.io/docs/tasks/tools/#kubectl)). Para comprobar la versión, ejecute: 

  ```
  kubectl version --short
  ```
+ Instale la última versión de **eksctl** (consulte las [instrucciones](https://eksctl.io/installation/)). Para comprobar la versión, ejecute: 

  ```
  eksctl info
  ```
+ Instale la última versión de la AWS Command Line Interface (AWS CLI) versión 2 (consulte [las instrucciones](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Para comprobar la versión, ejecute: 

  ```
  aws --version
  ```
+ Cree un clúster de base de datos de Neptune (consulte las [instrucciones](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html)). Asegúrese de establecer las comunicaciones entre la VPC del clúster y Amazon EKS mediante el [emparejamiento de VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html), [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html), u otro método. Asegúrese también de que el estado del clúster esté como Disponible y de que tenga una regla de entrada en el puerto 8182 para el grupo de seguridad.
+ Configure un proveedor de IAM OpenID Connect (OIDC) en un clúster de Amazon EKS existente (consulte las [instrucciones](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)).

**Versiones de producto**
+ [Amazon EKS 1.27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Versión 1.3.0.0 del motor de Amazon Neptune (2023-11-15)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

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

En el siguiente diagrama se muestra la conexión entre los pods de Kubernetes de un clúster de Amazon EKS y Neptuno para proporcionar acceso a una base de datos de Neptune.

![Conexión de pods en un nodo de Kubernetes con Amazon Neptune.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Automatización y escala**

Puede usar el [escalador automático de pods horizontales](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) para escalar esta solución.

## Tools (Herramientas)
<a name="access-amazon-neptune-database-from-amazon-eks-container-tools"></a>

**Servicios**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) es un servicio de base de datos de gráficos que le permite crear y ejecutar aplicaciones que funcionen con conjuntos de datos altamente conectados.

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

Para obtener información sobre las prácticas recomendadas, consulte [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) en las *guías de prácticas recomendadas de Amazon EKS*.

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

### Configuración de las variables de entorno
<a name="set-environment-variables"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique el contexto del clúster. | Antes de interactuar con su clúster de Amazon EKS mediante Helm u otras herramientas de línea de comandos, debe definir las variables de entorno que encapsulen los detalles del clúster. Estas variables se utilizan en los comandos posteriores para garantizar que se dirijan al clúster y los recursos correctos.<br />En primer lugar, confirme que está trabajando en el contexto de clúster correcto. Esto garantiza que cualquier comando posterior se envíe al clúster de Kubernetes deseado. Para comprobar el contexto actual, ejecute el siguiente comando.<pre>kubectl config current-context</pre> | Administrador de la nube, administrador de AWS | 
| Defina la variable `CLUSTER_NAME`. | Establezca la variable de entorno `CLUSTER_NAME` para el clúster de Amazon EKS. En el siguiente comando, sustituya el valor `us-west-2` de muestra por el correcto Región de AWS para su clúster. Reemplace el valor de muestra `eks-workshop` por el nombre de su clúster existente.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Administrador de la nube, administrador de AWS | 
| Valide la salida. | Para comprobar que las variables se hayan configurado correctamente, ejecute el siguiente comando.<pre>echo $CLUSTER_NAME</pre><br />Compruebe que el resultado de este comando coincida con la entrada que especificó en el paso anterior. | Administrador de la nube, administrador de AWS | 

### Cree un rol de IAM y asócielo con Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una cuenta de servicio de . | Utilice [roles de IAM para cuentas de servicio](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) y así poder asignar sus cuentas de servicio de Kubernetes a roles de IAM para habilitar una administración de permisos detallada en las aplicaciones que se ejecutan en Amazon EKS. Puede usar [eksctl](https://eksctl.io/) para crear y asociar un rol de IAM a una cuenta de servicio de Kubernetes específica dentro de su clúster de Amazon EKS. La política AWS administrada `NeptuneFullAccess` permite el acceso de escritura y lectura al clúster de Neptune especificado.Debe tener un [punto de conexión 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) asociado a su clúster antes de ejecutar estos comandos.<br />Cree una cuenta de servicio que desee asociar a una política AWS administrada denominada`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 />`eks-neptune-sa ` será el nombre de la cuenta de servicio que quiera crear.<br />Al finalizar, el comando muestra la siguiente respuesta:<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Administrador de la nube, administrador de AWS | 
| Compruebe que la cuenta esté configurada correctamente. | Asegúrese de que la cuenta de servicio de `eks-neptune-sa` esté configurada correctamente en el espacio de nombres predeterminado del clúster.<pre>kubectl get sa eks-neptune-sa -o yaml</pre><br />La salida debe tener el siguiente aspecto:<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 de la nube, administrador de AWS | 
| Compruebe la conectividad. | Implemente un pod de muestra llamado `pod-util` y compruebe la conectividad con 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 de la nube, administrador de AWS | 

### Comprobar la actividad de la conexión
<a name="validate-connection-activity"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Habilite la autenticación de bases de datos de IAM | De forma predeterminada, la autenticación de bases de datos de IAM está deshabilitada al crear un clúster de Neptune DB. Puede habilitar o deshabilitar la autenticación de la base de datos IAM mediante Consola de administración de AWS.<br />Siga los pasos de la AWS documentación para [habilitar la autenticación de bases de datos de IAM en Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Administrador de la nube, administrador de AWS | 
| Compruebe las conexiones. | En este paso, interactuará con el contenedor de `pod-util`, que ya está en ejecución, para instalar **awscurl** y comprobar la conexión.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Administrador de la nube, administrador de AWS | 

## Resolución de problemas
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se puede acceder a la base de datos de Neptune. | Revise la política de IAM adjunta a la cuenta de servicio. Asegúrese de que permite realizar las acciones necesarias (por ejemplo, `neptune:Connec,neptune:DescribeDBInstances`) para las operaciones que desee ejecutar. | 

## Recursos relacionados
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Otorgue a las cargas de trabajo de Kubernetes acceso al AWS uso de cuentas de servicio de Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (documentación de Amazon EKS)
+ [Roles de IAM para cuentas de servicio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (documentación de Amazon EKS)
+ [Creación de un nuevo clúster de base de datos de Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html) (documentación de Amazon Neptune)