

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Accédez à une base de données Amazon Neptune depuis un conteneur Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

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

Ce modèle établit une connexion entre Amazon Neptune, qui est une base de données de graphes entièrement gérée, et Amazon Elastic Kubernetes Service (Amazon EKS), un service d'orchestration de conteneurs, pour accéder à une base de données Neptune. Les clusters de base de données Neptune sont confinés dans un cloud privé virtuel (VPC) sur. AWS Pour cette raison, l'accès à Neptune nécessite une configuration minutieuse du VPC pour permettre la connectivité.

Contrairement à Amazon Relational Database Service (Amazon RDS) pour PostgreSQL, Neptune ne s'appuie pas sur les informations d'identification d'accès classiques à la base de données. Il utilise plutôt des rôles Gestion des identités et des accès AWS (IAM) pour l'authentification. Par conséquent, la connexion à Neptune depuis Amazon EKS implique de configurer un rôle IAM doté des autorisations nécessaires pour accéder à Neptune.

De plus, les points de terminaison Neptune ne sont accessibles que dans le VPC où réside le cluster. Cela signifie que vous devez configurer les paramètres réseau pour faciliter la communication entre Amazon EKS et Neptune. En fonction de vos besoins spécifiques et de vos préférences réseau, il existe [différentes approches pour configurer le VPC](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) afin de permettre une connectivité fluide entre Neptune et Amazon EKS. Chaque méthode présente des avantages et des considérations distincts, qui offrent une certaine flexibilité dans la conception de l'architecture de votre base de données en fonction des besoins de votre application.

## Conditions préalables et limitations
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Prérequis**
+ Installez la dernière version de **kubectl** (voir [les instructions](https://kubernetes.io/docs/tasks/tools/#kubectl)). Pour vérifier votre version, exécutez : 

  ```
  kubectl version --short
  ```
+ Installez la dernière version d'**eksctl** (voir [les instructions](https://eksctl.io/installation/)). Pour vérifier votre version, exécutez : 

  ```
  eksctl info
  ```
+ Installez la dernière version de AWS Command Line Interface (AWS CLI) version 2 (voir [les instructions](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Pour vérifier votre version, exécutez : 

  ```
  aws --version
  ```
+ Créez un cluster de base de données Neptune (voir [les instructions](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html)). Assurez-vous d'établir des communications entre le VPC du cluster et Amazon EKS via le [peering VPC ou](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) une autre méthode. [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html) Assurez-vous également que l'état du cluster est « disponible » et qu'il dispose d'une règle entrante sur le port 8182 pour le groupe de sécurité.
+ Configurez un fournisseur IAM OpenID Connect (OIDC) sur un cluster Amazon EKS existant [(](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)voir les instructions).

**Versions du produit**
+ [Amazon EKS 1.27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Version 1.3.0.0 du moteur Amazon Neptune (15/11/2023)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

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

Le schéma suivant montre la connexion entre les pods Kubernetes d'un cluster Amazon EKS et Neptune pour permettre l'accès à une base de données Neptune.

![\[Connecter les pods d'un nœud Kubernetes à Amazon Neptune.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Automatisation et mise à l'échelle**

Vous pouvez utiliser l'[autoscaler horizontal Amazon](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) EKS pour adapter cette solution.

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

**Services**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) est un service de base de données graphique qui vous permet de créer et d'exécuter des applications qui fonctionnent avec des ensembles de données hautement connectés.

## Bonnes pratiques
<a name="access-amazon-neptune-database-from-amazon-eks-container-best-practices"></a>

Pour connaître les meilleures pratiques, consultez [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) dans les *guides des meilleures pratiques Amazon EKS*.

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

### Définir les variables d'environnement
<a name="set-environment-variables"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez le contexte du cluster. | Avant d'interagir avec votre cluster Amazon EKS à l'aide de Helm ou d'autres outils de ligne de commande, vous devez définir des variables d'environnement qui encapsulent les détails de votre cluster. Ces variables sont utilisées dans les commandes suivantes pour garantir qu'elles ciblent le bon cluster et les bonnes ressources.Tout d'abord, vérifiez que vous opérez dans le bon contexte de cluster. Cela garantit que toutes les commandes suivantes sont envoyées au cluster Kubernetes prévu. Pour vérifier le contexte actuel, exécutez la commande suivante.<pre>kubectl config current-context</pre> | Administrateur AWS, administrateur du cloud | 
| Définissez la `CLUSTER_NAME` variable. | Définissez la variable d'`CLUSTER_NAME`environnement pour votre cluster Amazon EKS. Dans la commande suivante, remplacez la valeur d'échantillon `us-west-2` par la valeur correcte Région AWS pour votre cluster. Remplacez la valeur d'échantillon `eks-workshop` par le nom de votre cluster existant.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Administrateur AWS, administrateur du cloud | 
| Validez la sortie. | Pour vérifier que les variables ont été correctement définies, exécutez la commande suivante.<pre>echo $CLUSTER_NAME</pre>Vérifiez que le résultat de cette commande correspond à l'entrée que vous avez spécifiée à l'étape précédente. | Administrateur AWS, administrateur du cloud | 

### Créez un rôle IAM et associez-le à Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Création d'un compte de service . | Vous utilisez [les rôles IAM pour les comptes de service](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) afin de mapper vos comptes de service Kubernetes aux rôles IAM, afin de permettre une gestion précise des autorisations pour vos applications qui s'exécutent sur Amazon EKS. Vous pouvez utiliser [eksctl](https://eksctl.io/) pour créer et associer un rôle IAM à un compte de service Kubernetes spécifique au sein de votre cluster Amazon EKS. La politique AWS gérée `NeptuneFullAccess` permet d'accéder en écriture et en lecture au cluster Neptune que vous avez spécifié.Un point de [terminaison 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) doit être associé à votre cluster avant d'exécuter ces commandes.Créez un compte de service que vous souhaitez associer à une politique AWS gérée nommée`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>où `eks-neptune-sa ` est le nom du compte de service que vous souhaitez créer.Une fois terminée, cette commande affiche la réponse suivante :<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Administrateur AWS, administrateur du cloud | 
| Vérifiez que le compte est correctement configuré. | Assurez-vous que le compte de `eks-neptune-sa` service est correctement configuré dans l'espace de noms par défaut de votre cluster.<pre>kubectl get sa eks-neptune-sa -o yaml</pre>La sortie doit se présenter comme suit :<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> | Administrateur AWS, administrateur du cloud | 
| Vérifiez la connectivité. | Déployez un module d'échantillonnage appelé `pod-util` et vérifiez la connectivité avec 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> | Administrateur AWS, administrateur du cloud | 

### Valider l'activité de connexion
<a name="validate-connection-activity"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez l'authentification de base de données IAM. | Par défaut, l'authentification de base de données IAM est désactivée lorsque vous créez un cluster de base de données Neptune. Vous pouvez activer ou désactiver l'authentification de base de données IAM à l'aide du AWS Management Console.Suivez les étapes décrites dans la AWS documentation pour [activer l'authentification de base de données IAM dans Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Administrateur AWS, administrateur du cloud | 
| Vérifiez les connexions. | Au cours de cette étape, vous interagissez avec le `pod-util` conteneur, qui est déjà en cours d'exécution, pour installer **awscurl** et vérifier la connexion.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Administrateur AWS, administrateur du cloud | 

## Résolution des problèmes
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Impossible d'accéder à la base de données Neptune. | Consultez la politique IAM associée au compte de service. Assurez-vous qu'il autorise les actions nécessaires (par exemple,`neptune:Connec,neptune:DescribeDBInstances`) pour les opérations que vous souhaitez exécuter. | 

## Ressources connexes
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Autoriser les charges de travail Kubernetes à AWS utiliser les comptes de service Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (documentation Amazon EKS)
+ [Rôles IAM pour les comptes de service](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (documentation Amazon EKS)
+ [Création d'un nouveau cluster de base de données Neptune (documentation](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html) Amazon Neptune)