Fotobox S3 Sync

Inhalt
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.
1 AWS Bucket einrichten

2 AWS IAM-Benutzer einrichten
2.1 Benutzer anlegen
- “Personen”

- Person hinzufügen


- Direktes Anfügen von Richtlinien

- Berechtigung erstellen

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"s3-object-lambda:*"
],
"Resource": [
"arn:aws:s3:::photobooth-upload",
"arn:aws:s3:::photobooth-upload/*"
]
}
]
}

2.2 Zugriffsschlüssel setzen

- Zugriffsschlüssel erstellen

- Zugriffsschlüssel und Geheimer Zugriffsschlüssel notieren

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

4 Sync-Script
“/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
cleanupTitelbild KI-generiert