

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Accedi a un database Amazon Neptune da un container Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

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

Questo modello stabilisce una connessione tra Amazon Neptune, che è un database grafico completamente gestito, e Amazon Elastic Kubernetes Service (Amazon EKS), un servizio di orchestrazione di container, per accedere a un database Neptune. I cluster Neptune DB sono confinati all'interno di un cloud privato virtuale (VPC) attivo. AWS Per questo motivo, l'accesso a Neptune richiede un'attenta configurazione del VPC per abilitare la connettività.

A differenza di Amazon Relational Database Service (Amazon RDS) per PostgreSQL, Neptune non si basa sulle tipiche credenziali di accesso al database. Utilizza invece ruoli (IAM) per l'autenticazione. AWS Identity and Access Management Pertanto, la connessione a Neptune da Amazon EKS implica la configurazione di un ruolo IAM con le autorizzazioni necessarie per accedere a Neptune.

Inoltre, gli endpoint Neptune sono accessibili solo all'interno del VPC in cui risiede il cluster. Ciò significa che devi configurare le impostazioni di rete per facilitare la comunicazione tra Amazon EKS e Neptune. A seconda dei requisiti specifici e delle preferenze di rete, esistono [diversi approcci alla configurazione del VPC](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) per consentire una connettività perfetta tra Neptune e Amazon EKS. Ogni metodo offre vantaggi e considerazioni distinti, che offrono flessibilità nella progettazione dell'architettura del database per soddisfare le esigenze dell'applicazione.

## Prerequisiti e limitazioni
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Prerequisiti**
+ [Installa l'ultima versione di **kubectl** (vedi istruzioni).](https://kubernetes.io/docs/tasks/tools/#kubectl) Per verificare la tua versione, esegui: 

  ```
  kubectl version --short
  ```
+ Installa l'ultima versione di **eksctl** (vedi [istruzioni](https://eksctl.io/installation/)). Per verificare la tua versione, esegui: 

  ```
  eksctl info
  ```
+ Installa l'ultima versione di AWS Command Line Interface (AWS CLI) versione 2 (vedi [istruzioni](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Per verificare la tua versione, esegui: 

  ```
  aws --version
  ```
+ [Crea un cluster Neptune DB (vedi istruzioni).](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html) Assicurati di stabilire comunicazioni tra il VPC del cluster e Amazon EKS tramite [peering VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) o un altro metodo. [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html) Assicurati inoltre che lo stato del cluster sia «disponibile» e che abbia una regola in entrata sulla porta 8182 per il gruppo di sicurezza.
+ [Configura un provider IAM OpenID Connect (OIDC) su un cluster Amazon EKS esistente (vedi istruzioni).](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)

**Versioni del prodotto**
+ [Amazon EKS 1,27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Motore Amazon Neptune versione 1.3.0.0 (2023-11-15)](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>

Il diagramma seguente mostra la connessione tra i pod Kubernetes in un cluster Amazon EKS e Neptune per fornire l'accesso a un database Neptune.

![Connessione di pod in un nodo Kubernetes con Amazon Neptune.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Automazione e scalabilità**

Puoi usare Amazon EKS [Horizontal Pod Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) per scalare questa soluzione.

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

**Servizi**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) ti aiuta a eseguire AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) è un servizio di database a grafi che ti aiuta a creare ed eseguire applicazioni che funzionano con set di dati altamente connessi.

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

Per le best practice, consulta [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) nelle *guide alle best practice di Amazon EKS*.

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

### Impostazione delle variabili di ambiente
<a name="set-environment-variables"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica il contesto del cluster. | Prima di interagire con il cluster Amazon EKS utilizzando Helm o altri strumenti da riga di comando, devi definire variabili di ambiente che incapsulino i dettagli del cluster. Queste variabili vengono utilizzate nei comandi successivi per garantire che siano indirizzate al cluster e alle risorse corretti.<br />Innanzitutto, verifica che stai operando nel contesto del cluster corretto. Ciò garantisce che tutti i comandi successivi vengano inviati al cluster Kubernetes previsto. Per verificare il contesto corrente, esegui il comando seguente.<pre>kubectl config current-context</pre> | Amministratore AWS, amministratore cloud | 
| Definisci la `CLUSTER_NAME` variabile. | Definisci la variabile di `CLUSTER_NAME` ambiente per il tuo cluster Amazon EKS. Nel comando seguente, sostituisci il valore di esempio `us-west-2` con quello corretto Regione AWS per il tuo cluster. Sostituisci il valore di esempio `eks-workshop` con il nome del cluster esistente.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Amministratore AWS, amministratore cloud | 
| Convalida l'output. | Per verificare che le variabili siano state impostate correttamente, esegui il comando seguente.<pre>echo $CLUSTER_NAME</pre><br />Verificate che l'output di questo comando corrisponda all'input specificato nel passaggio precedente. | Amministratore AWS, amministratore cloud | 

### Crea un ruolo IAM e associalo a Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un account di servizio . | Utilizzi [i ruoli IAM per gli account di servizio per](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) mappare i tuoi account di servizio Kubernetes ai ruoli IAM, per consentire una gestione granulare delle autorizzazioni per le tue applicazioni eseguite su Amazon EKS. Puoi usare [eksctl](https://eksctl.io/) per creare e associare un ruolo IAM a un account di servizio Kubernetes specifico all'interno del tuo cluster Amazon EKS. La policy AWS gestita `NeptuneFullAccess` consente l'accesso in scrittura e lettura al cluster Neptune specificato.È necessario che al cluster sia associato un [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) prima di eseguire questi comandi.<br />Crea un account di servizio da associare a una politica AWS gestita denominata. `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 />dove `eks-neptune-sa ` è il nome dell'account di servizio che desideri creare.<br />Al termine, questo comando visualizza la seguente risposta:<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Amministratore AWS, amministratore cloud | 
| Verifica che l'account sia configurato correttamente. | Assicurati che l'account del `eks-neptune-sa` servizio sia configurato correttamente nello spazio dei nomi predefinito del cluster.<pre>kubectl get sa eks-neptune-sa -o yaml</pre><br />L'output dovrebbe essere simile al seguente:<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> | Amministratore AWS, amministratore cloud | 
| Verifica la connettività. | Implementa un pod di esempio chiamato `pod-util` e verifica la connettività 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> | Amministratore AWS, amministratore cloud | 

### Convalida l'attività di connessione
<a name="validate-connection-activity"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Abilita l'autenticazione del database IAM. | Per impostazione predefinita, l'autenticazione del database IAM è disabilitata quando si crea un cluster Neptune DB. È possibile abilitare o disabilitare l'autenticazione del database IAM utilizzando. Console di gestione AWS<br />Segui i passaggi indicati nella AWS documentazione per [abilitare l'autenticazione del database IAM in Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Amministratore AWS, amministratore cloud | 
| Verifica le connessioni. | In questo passaggio, interagisci con il `pod-util` contenitore, che è già in stato di esecuzione, per installare **awscurl** e verificare la connessione.[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Amministratore AWS, amministratore cloud | 

## risoluzione dei problemi
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Impossibile accedere al database Neptune. | Esamina la policy IAM allegata all'account del servizio. Assicurati che consenta le azioni necessarie (ad esempio`neptune:Connec,neptune:DescribeDBInstances`) per le operazioni che desideri eseguire. | 

## Risorse correlate
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Concedi ai carichi di lavoro Kubernetes l'accesso all' AWS utilizzo degli account di servizio Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (documentazione Amazon EKS)
+ [Ruoli IAM per gli account di servizio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (documentazione Amazon EKS)
+ [Creazione di un nuovo cluster Neptune DB](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html) (documentazione Amazon Neptune)