# Implementación en AWS

## Requisitos previos

1. En una estación de trabajo con acceso a su nube de AWS, instale las siguientes herramientas si aún no las tiene disponibles:
   * AWS CLI: <https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html>
   * Helm: <https://helm.sh/docs/intro/install/>
   * Kubectl: <https://kubernetes.io/docs/tasks/tools/>
2. Cree un nuevo clúster EKS:
   1. Seleccione Configuración personalizada y desactive el Modo automático de EKS:

      <figure><img src="https://3116332745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvrraExym8pNEUvBDoima%2Fuploads%2FwrhoeGpLInLc4cwHjwRM%2FScreenshot%202025-05-16%20at%208.15.01%E2%80%AFAM.png?alt=media&#x26;token=c67e5a48-03a3-40b7-b403-ba7b42275fa7" alt=""><figcaption></figcaption></figure>

      <figure><img src="https://3116332745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvrraExym8pNEUvBDoima%2Fuploads%2FTE8f4vZVK98JcYCOWtOh%2FScreenshot%202025-05-16%20at%208.16.56%E2%80%AFAM.png?alt=media&#x26;token=b18f229b-f137-4a11-9de8-c1760bba5422" alt=""><figcaption></figcaption></figure>
   2. Cree una nueva función IAM de clúster con la configuración predeterminada y selecciónela.
   3. En la siguiente pantalla, asegúrese de seleccionar la VPC y las subredes donde desea instalar la aplicación
   4. En la pantalla de complementos (Paso 4), agregue el complemento EBS CSI Driver:\
      \
      ![](https://3116332745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvrraExym8pNEUvBDoima%2Fuploads%2F7X7mTFuydjabNGmBAfnf%2FScreenshot%202025-05-16%20at%205.57.15%E2%80%AFPM.png?alt=media\&token=e39f999a-d5ce-4225-86ba-610f0a505937)
   5. Cree el clúster y espere a que termine de inicializarse. Una vez que esté listo, vaya a la pestaña Compute y haga clic en Agregar un grupo de nodos.
   6. Cree una nueva función IAM para el grupo de nodos. Además de las políticas predeterminadas, adjunte la `AmazonEBSCSIDriverPolicy` \
      \ <img src="https://3116332745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvrraExym8pNEUvBDoima%2Fuploads%2Fgqnsfzw4Dh02Kxp1zw8J%2FScreenshot%202025-05-16%20at%205.59.39%E2%80%AFPM.png?alt=media&#x26;token=c33a75c4-76b8-4192-8eb0-51cbd1c029ba" alt="" data-size="original">
   7. Elija Amazon Linux 2 como el tipo de AMI<br>

      <figure><img src="https://3116332745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvrraExym8pNEUvBDoima%2Fuploads%2Fsn53vWS3gSdZ9fPINkkZ%2FScreenshot%202025-05-19%20at%207.36.28%E2%80%AFAM.png?alt=media&#x26;token=aad5c384-3b23-420d-9afe-4529001ea603" alt=""><figcaption></figcaption></figure>
   8. Seleccione un tipo de instancia con al menos 16 GB de RAM. m6i.xlarge o más grande es una buena opción.
   9. Establezca el tamaño del disco en 100 GiB
   10. Establezca el tamaño deseado y el tamaño máximo en al menos 3 nodos
3. Conecte el kubectl de su estación de trabajo al nuevo clúster EKS. Sustituya `<eks-cluster-name>` por su nuevo clúster EKS en lo siguiente:

```bash
aws eks update-kubeconfig --name <eks-cluster-name>
```

## Instalación del Helm Chart de Violet

1. Agregue un nuevo perfil que contenga las Credenciales AWS de Violet a su estación de trabajo. Estos valores son proporcionados por Violet Labs y son específicos de su instalación:

```bash
aws configure --profile violet-external

AWS Access Key ID [None]: <your-violet-access-key>
AWS Secret Access Key [None]: <your-violet-access-key-secret>
Default region name [None]: us-west-1
```

2. Cree un nuevo archivo, `violet-values.yml` que contenga sus credenciales de AWS y la configuración específica de la aplicación:

```yaml
domain: # El dominio donde se servirá Violet. El subdominio debe ser "violet": violet.mydomain.com
customerName: # El nombre del cliente de su licencia. Proporcionado por Violet
licenseKey: # Su clave de licencia. Proporcionada por Violet
adminEmail: # correo electrónico del usuario administrador para el cliente
adminName: # nombre completo del usuario administrador ("Nombre Apellido") para el cliente

aws:
  accessKeyId: # Su clave de acceso AWS de Violet, proporcionada por Violet
  accessKeySecret: # Su secreto de acceso AWS de Violet, proporcionado por Violet

neo4j:
  volúmenes:
    datos:
      dinámico:
        storageClassName: gp2
global:
  storageClass: gp2
  
# opcional: Esto es obligatorio si desea usar una base de datos externa en lugar de una postgres interna creada automáticamente por el chart de helm
postgresql:
  enabled: false # Esto desactiva la base de datos postgresql interna
  auth:
    host: # nombre de host para la base de datos externa (p. ej. '[db_name].postgres.database.azure.com')
    password: # contraseña para el usuario de la base de datos de la aplicación, usada por la app
    username: # nombre de usuario para el usuario de la base de datos de la aplicación, usado por la app
    adminPassword: # nombre de usuario para la BD, con permisos de migraciones y seed
    adminUsername: # contraseña para la BD, con permisos de migraciones y seed
```

3. Cree un nuevo namespace de Kubernetes para la instalación de Violet:

```bash
kubectl create namespace violet
```

4. Instale el chart del controlador ingress nginx que permite a EKS configurar un balanceador de carga para enrutar el tráfico desde Internet a la nueva implementación de Violet:

```bash
helm install --namespace kube-system nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx
```

5. Instale el agente de registros mezmo. Esto transmite los registros de su clúster al equipo de Violet para asistencia en solución de problemas y monitoreo.

```
kubectl apply -f https://assets.logdna.com/clients/logdna-agent/3/agent-namespace.yaml

# Obtenga <mezmo-ingestion-key> de su entrada en 1Pass
kubectl create secret generic logdna-agent-key -n logdna-agent --from-literal=logdna-agent-key=<mezmo-ingestion-key> 

kubectl apply -f https://assets.logdna.com/clients/logdna-agent/3/agent-resources.yaml
```

6. Instale el chart external-secrets. Esto se utiliza para cargar algunos secretos específicos del cliente desde AWS en la implementación de Violet:

```bash
helm repo add external-secrets https://charts.external-secrets.io
helm repo update
helm upgrade --namespace external-secrets --create-namespace --install --version 0.16.2 --wait external-secrets external-secrets/external-secrets
```

7. Cree un secreto que permita a Kubernetes acceder al repositorio de Charts de Helm de Violet:

```bash
kubectl create secret docker-registry --namespace violet ecr-creds --docker-server=911167899009.dkr.ecr.us-west-1.amazonaws.com --docker-username=AWS --docker-password=$(aws ecr --profile violet-external get-login-password)
```

8. Inicie sesión en el repositorio de Helm:

```bash
aws ecr --profile violet-external get-login-password | helm registry login --username AWS --password-stdin 911167899009.dkr.ecr.us-west-1.amazonaws.com
```

9. Instale el chart de Helm de Violet:

```bash
helm upgrade --namespace violet --create-namespace --install myviolet oci://911167899009.dkr.ecr.us-west-1.amazonaws.com/violet-helm --version 1.0.0-main -f violet-values.yml
```

Tenga en cuenta que puede tardar hasta 5 minutos en ejecutar los scripts de aprovisionamiento de la base de datos. Puede comprobar el estado de la implementación viendo los pods:

```bash
kubectl get pods -n violet
```

Después de que la instalación se complete, el chart de helm imprimirá información y comandos, incluyendo la URL para acceder a su nueva implementación, cómo obtener el nombre DNS del balanceador de carga de ingress en el que se sirve la implementación (para configurar reglas DNS) y cómo obtener la contraseña autogenerada para el `violet_admin@violetlabs.com` cuenta.
