> ## 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.

# Compartiment S3 de sortie

Les résultats sont écrits sous forme d’objets `{jobId}/{name}` dans un compartiment S3 monté au moyen du pilote CSI Mountpoint for Amazon S3.

## Créer le compartiment

Créez-le dans la région du cluster et laissez l'option Block Public Access activée. FineParser ne supprime jamais les résultats : si vous souhaitez qu'ils expirent, ajoutez une règle de cycle de vie :

```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}}]}'
```

Dans la région `us-east-1`, omettez `--create-bucket-configuration`.

## Installer le pilote CSI Mountpoint for Amazon S3

Le pilote monte le compartiment à l’aide de son propre rôle IAM. Attribuez à ce rôle la stratégie suivante :

```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 le pilote est déjà installé, attachez la stratégie à son rôle existant. Si le compartiment est chiffré avec une clé KMS gérée par le client, autorisez également `kms:GenerateDataKey` et `kms:Decrypt` sur cette clé. Voir [Pilote CSI Mountpoint for Amazon S3](https://docs.aws.amazon.com/eks/latest/userguide/s3-csi.html).

## Configurer le chart

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

Les options de montage par défaut sont `allow-delete`, `allow-other`, `uid=65534` et `gid=65534`. Définir `storage.s3.mountOptions` remplace cette liste : veillez donc à conserver ces quatre options. Par exemple, pour écrire sous un préfixe :

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

## Utiliser votre propre PersistentVolumeClaim

Créez un PersistentVolume et un PersistentVolumeClaim pour le compartiment, ou pour tout autre volume `ReadWriteMany`, puis définissez `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   # doit être unique parmi les volumes Mountpoint du cluster
    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
```
