> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bucket de salida de S3

Los resultados se escriben como objetos `{jobId}/{name}` en un bucket de S3 montado mediante el controlador CSI de Mountpoint for Amazon S3.

## Crear el bucket

Créelo en la región del clúster y mantenga activada la opción Block Public Access. FineParser nunca elimina los resultados, por lo que, si desea que caduquen, agregue una regla de ciclo de vida:

```bash theme={null}
aws s3api create-bucket --region <region> --bucket my-fineparser-output \
  --create-bucket-configuration LocationConstraint=<region>

aws s3api put-bucket-lifecycle-configuration --bucket my-fineparser-output \
  --lifecycle-configuration '{"Rules":[{"ID":"expire","Status":"Enabled","Filter":{},"Expiration":{"Days":30}}]}'
```

En `us-east-1`, omita `--create-bucket-configuration`.

## Instalar el controlador CSI de Mountpoint for Amazon S3

El controlador monta el bucket con su propio rol de IAM. Asigne a ese rol la siguiente política:

```json fineparser-s3-policy.json theme={null}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": "arn:aws:s3:::my-fineparser-output"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:DeleteObject"],
      "Resource": "arn:aws:s3:::my-fineparser-output/*"
    }
  ]
}
```

```bash theme={null}
aws iam create-policy --policy-name FineParserOutputBucket \
  --policy-document file://fineparser-s3-policy.json

eksctl create iamserviceaccount \
  --cluster <cluster> --region <region> \
  --namespace kube-system --name s3-csi-driver-sa \
  --role-name AmazonEKS_S3_CSI_DriverRole --role-only \
  --attach-policy-arn arn:aws:iam::<account>:policy/FineParserOutputBucket \
  --approve

aws eks create-addon --region <region> --cluster-name <cluster> \
  --addon-name aws-mountpoint-s3-csi-driver \
  --service-account-role-arn arn:aws:iam::<account>:role/AmazonEKS_S3_CSI_DriverRole
```

Si el controlador ya está instalado, adjunte la política a su rol existente. Si el bucket está cifrado con una clave de KMS administrada por el cliente, permita también `kms:GenerateDataKey` y `kms:Decrypt` sobre esa clave. Consulte [Controlador CSI de Mountpoint for Amazon S3](https://docs.aws.amazon.com/eks/latest/userguide/s3-csi.html).

## Configurar el chart

```yaml fineparser-values.yaml theme={null}
storage:
  output:
    s3:
      bucket: my-fineparser-output
  s3:
    region: us-east-2
```

Las opciones de montaje predeterminadas son `allow-delete`, `allow-other`, `uid=65534` y `gid=65534`. Al configurar `storage.s3.mountOptions` se reemplaza la lista completa, por lo que debe conservar esas cuatro. Por ejemplo, para escribir bajo un prefijo:

```yaml fineparser-values.yaml theme={null}
storage:
  s3:
    mountOptions: [allow-delete, allow-other, uid=65534, gid=65534, prefix fineparser/]
```

## Uso de su propio PersistentVolumeClaim

Cree un PersistentVolume y un PersistentVolumeClaim para el bucket, o para cualquier otro volumen `ReadWriteMany`, y configure `storage.output.existingClaim`:

```yaml fineparser-output.yaml theme={null}
apiVersion: v1
kind: PersistentVolume
metadata:
  name: fineparser-output
spec:
  capacity:
    storage: 10Gi
  accessModes: [ReadWriteMany]
  persistentVolumeReclaimPolicy: Retain
  storageClassName: ""
  mountOptions: [allow-delete, allow-other, uid=65534, gid=65534, region us-east-2]
  csi:
    driver: s3.csi.aws.com
    volumeHandle: fineparser-output   # debe ser único entre los volúmenes de Mountpoint del clúster
    volumeAttributes:
      bucketName: my-fineparser-output
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fineparser-output
  namespace: fineparser
spec:
  accessModes: [ReadWriteMany]
  storageClassName: ""
  volumeName: fineparser-output
  resources:
    requests:
      storage: 10Gi
```

```yaml fineparser-values.yaml theme={null}
storage:
  output:
    existingClaim: fineparser-output
```
