Inhalt

Fotobox S3 Sync

In diesem Projekt geht es um die technische Umsetzung meiner Fotobox, die aufgenommene Bilder nicht nur lokal speichert, sondern sie unmittelbar und automatisiert in einen Cloud-Speicher überträgt. Konkret werden die Fotos direkt nach der Aufnahme in einen S3-Bucket von Amazon Web Services hochgeladen. Dadurch stehen sie nahezu in Echtzeit online zur Verfügung und können von Gästen sofort abgerufen oder weiterverarbeitet werden.


Bucket erstellen

  • “Personen”
IAM Dashboard
  • Person hinzufügen
Personenübersicht
Personendetails angeben
  • Direktes Anfügen von Richtlinien
Berechtigungen festlegen
  • Berechtigung erstellen
Berechtigungen angeben
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"s3:*",
				"s3-object-lambda:*"
			],
			"Resource": [
			    "arn:aws:s3:::photobooth-upload", 
			    "arn:aws:s3:::photobooth-upload/*"
			]
		}
	]
}
Berechtigungen pruefen
Berechtigungen festlegen
Anmeldeinformationen
  • Zugriffsschlüssel erstellen
Zugriffsschlüssel - Methode
  • Zugriffsschlüssel und Geheimer Zugriffsschlüssel notieren
Zugriffsschlüssel abrufen

  • Installationsanleitung befolgen, dabei auf die richtige Architektur achten: uname -m
  • aws –version
  • aws configure
aws configure

“/usr/local/bin/photobooth_s3_sync.sh”

#!/bin/bash
# Photobooth S3 Sync Script
# Lädt Dateien zuverlässig in einen S3-Bucket hoch, ohne parallele Prozesse zuzulassen.

# === Konfiguration ===
BUCKET="photobooth"
REGION="eu-central-1"
LOCAL_DIR="/home/photobooth/data/media/processed_full/"
LOGFILE="/var/log/photobooth-s3-sync.log"
LOCKFILE="/tmp/photobooth_s3_sync.lock"
RETRIES=5
SLEEP_BETWEEN=10  # Sekunden zwischen Wiederholungen

# === Funktionen ===
log() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a "$LOGFILE"
}

cleanup() {
  rm -f "$LOCKFILE"
}

sync_directory() {
  for ((i=1; i<=RETRIES; i++)); do
    log "Sync-Versuch $i gestartet..."
    aws s3 sync "$LOCAL_DIR" "s3://$BUCKET/" --region "$REGION" --only-show-errors --delete
    if [ $? -eq 0 ]; then
      log "Sync erfolgreich abgeschlossen."
      return 0
    fi
    log "Sync fehlgeschlagen (Versuch $i). Neuer Versuch in $SLEEP_BETWEEN Sekunden ..."
    sleep "$SLEEP_BETWEEN"
  done
  log "Alle Sync-Versuche fehlgeschlagen."
  return 1
}

# === Lock prüfen ===
if [ -f "$LOCKFILE" ]; then
  PID=$(cat "$LOCKFILE")
  if ps -p "$PID" > /dev/null 2>&1; then
    log "Sync läuft bereits (PID $PID) – starte keinen neuen."
    exit 0
  else
    log "Lockfile vorhanden, aber Prozess existiert nicht mehr – entferne Lock."
    rm -f "$LOCKFILE"
  fi
fi

# Lock setzen
echo $$ > "$LOCKFILE"
trap cleanup EXIT

log "Starte S3-Sync-Prozess..."
sync_directory
cleanup

Titelbild KI-generiert