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

# S3 出力バケット

結果は、Mountpoint for Amazon S3 CSI ドライバー経由でマウントされた S3 バケットに、`{jobId}/{name}` オブジェクトとして書き込まれます。

## バケットを作成する

バケットはクラスターと同じリージョンに作成し、Block Public Access は有効のままにしておきます。FineParser は結果を削除しないため、結果に有効期限を設けたい場合はライフサイクルルールを追加します：

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

`us-east-1` の場合は、`--create-bucket-configuration` を省略してください。

## Mountpoint for Amazon S3 CSI ドライバーをインストールする

このドライバーは、専用の IAM ロールを使用してバケットをマウントします。このロールに次のポリシーを付与してください。

```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
```

ドライバーがすでにインストールされている場合は、既存のロールにポリシーをアタッチします。カスタマー管理の KMS キーで暗号化されたバケットを使用する場合は、そのキーに対する `kms:GenerateDataKey` と `kms:Decrypt` も許可してください。詳細については、[Mountpoint for Amazon S3 CSI ドライバー](https://docs.aws.amazon.com/eks/latest/userguide/s3-csi.html)を参照してください。

## チャートを設定する

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

デフォルトのマウントオプションは `allow-delete`、`allow-other`、`uid=65534`、`gid=65534` です。`storage.s3.mountOptions` を設定するとこのリスト全体が置き換えられるため、これら4つのオプションは必ず含めてください。たとえば、プレフィックス配下に書き込む場合は次のようにします。

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

## 独自のクレームを使用する

バケット (またはその他の `ReadWriteMany` ボリューム) 用に PersistentVolume とクレームを作成し、`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   # クラスター内のすべての Mountpoint ボリュームの間で一意であること
    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
```
