apiVersion: barmancloud.cnpg.io/v1
kind: ObjectStore
metadata: {name: orders-backup, namespace: data}
spec:
  configuration:
    destinationPath: s3://REPLACE_BACKUP_BUCKET/orders/
    s3Credentials: {inheritFromIAMRole: true}
    wal: {compression: gzip}
    data: {compression: gzip}
  retentionPolicy: '14d'
  instanceSidecarConfiguration:
    resources:
      requests: {cpu: 100m, memory: 128Mi}
      limits: {cpu: '1', memory: 512Mi}
---
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata: {name: orders-db, namespace: data}
spec:
  instances: 3
  imageName: REPLACE_APPROVED_CNPG_POSTGRES_17_IMAGE_AT_DIGEST
  enableSuperuserAccess: false
  bootstrap:
    initdb:
      database: orders
      owner: orders_owner
  storage: {size: 50Gi, storageClass: REPLACE_ENCRYPTED_STORAGECLASS}
  walStorage: {size: 10Gi, storageClass: REPLACE_ENCRYPTED_STORAGECLASS}
  resources:
    requests: {cpu: '1', memory: 2Gi}
    limits: {cpu: '2', memory: 4Gi}
  affinity:
    enablePodAntiAffinity: true
    podAntiAffinityType: required
    topologyKey: topology.kubernetes.io/zone
  postgresql:
    parameters:
      max_connections: '150'
      archive_timeout: '60s'
    synchronous:
      method: any
      number: 1
      dataDurability: required
    pg_hba:
      - hostnossl all all all reject
      - hostssl all all all scram-sha-256
  serviceAccountTemplate:
    metadata:
      annotations: {eks.amazonaws.com/role-arn: REPLACE_BACKUP_ROLE_ARN}
  plugins:
    - name: barman-cloud.cloudnative-pg.io
      isWALArchiver: true
      parameters: {barmanObjectName: orders-backup}
---
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata: {name: orders-daily, namespace: data}
spec:
  schedule: '0 0 20 * * *'
  immediate: true
  backupOwnerReference: self
  cluster: {name: orders-db}
  method: plugin
  pluginConfiguration: {name: barman-cloud.cloudnative-pg.io}
