kurmann / s3-restore-utilities

Verwaltung von S3-Buckets und Wiederherstellung von Objekten aus AWS Deep Glacier
MIT License
0 stars 0 forks source link

Direct script calling replaces start script #87

Closed kurmann closed 5 months ago

kurmann commented 5 months ago
kurmann commented 5 months ago

Ja, genau! argparse übernimmt die Aufgabe, die Argumente zur Laufzeit des Skripts zu parsen und an die entsprechenden Funktionen weiterzuleiten. Dies ermöglicht eine flexible und saubere Handhabung der Kommandozeilenargumente, sodass verschiedene Skripte mit ihren spezifischen Parametern ausgeführt werden können.

Zusammengefasster Ablauf

  1. argparse parst die Kommandozeilenargumente:

    • Das Supervisor-Skript verwendet argparse, um die Argumente aus der Kommandozeile zu lesen. Dabei wird der erste Parameter als Skriptname (script) und die restlichen Parameter als zusätzliche Argumente (args) behandelt.
  2. AWS CLI Konfiguration:

    • Bevor das eigentliche Skript ausgeführt wird, konfiguriert das Supervisor-Skript die AWS CLI mit den Umgebungsvariablen.
  3. Ausführung des gewünschten Skripts:

    • Basierend auf dem geparsten Skriptnamen und den zusätzlichen Argumenten führt das Supervisor-Skript das gewünschte Skript mit den entsprechenden Parametern aus.

Beispiel-Supervisor-Skript (supervisor.py)

Hier ist das vollständige Supervisor-Skript nochmals, das die Argumente parst und die entsprechenden Skripte mit ihren spezifischen Parametern ausführt:

import os
import subprocess
import sys
import argparse

def configure_aws():
    """Konfiguriert die AWS CLI mit Zugangsdaten aus Umgebungsvariablen."""
    aws_access_key_id = os.getenv('AWS_ACCESS_KEY_ID')
    aws_secret_access_key = os.getenv('AWS_SECRET_ACCESS_KEY')
    aws_default_region = os.getenv('AWS_DEFAULT_REGION', 'eu-west-1')

    if not aws_access_key_id or not aws_secret_access_key:
        print("AWS_ACCESS_KEY_ID oder AWS_SECRET_ACCESS_KEY ist nicht gesetzt.")
        print("Bitte setze die Umgebungsvariablen AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY.")
        return False

    try:
        subprocess.run(['aws', 'configure', 'set', 'aws_access_key_id', aws_access_key_id], check=True)
        subprocess.run(['aws', 'configure', 'set', 'aws_secret_access_key', aws_secret_access_key], check=True)
        subprocess.run(['aws', 'configure', 'set', 'region', aws_default_region], check=True)
        print("AWS CLI Konfiguration abgeschlossen.")
        return True
    except subprocess.CalledProcessError as e:
        print(f"Fehler bei der AWS CLI Konfiguration: {e}")
        return False

def run_script(script_name, args):
    script_path = f"/usr/src/app/scripts/{script_name}.py"
    if os.path.exists(script_path):
        command = ['python3', script_path] + args
        subprocess.run(command, check=True)
    else:
        print(f"Skript {script_name} existiert nicht.")

def main():
    parser = argparse.ArgumentParser(description="Supervisor für S3 Restore Utilities")
    parser.add_argument('script', type=str, help="Name des auszuführenden Skripts")
    parser.add_argument('args', nargs=argparse.REMAINDER, help="Zusätzliche Argumente für das Skript")
    args = parser.parse_args()

    if configure_aws():
        run_script(args.script, args.args)

if __name__ == "__main__":
    main()

Docker Compose File (docker-compose.yml)

Hier ist das docker-compose.yml, das das Supervisor-Skript als entrypoint konfiguriert:

version: '3.8'

services:
  s3-restore-utilities:
    image: kurmann/s3-restore-utilities:latest
    container_name: s3-restore-utilities
    volumes:
      - /volume1/docker/s3-restore-utilities/downloads:/usr/src/app/downloads
      - /volume1/docker/s3-restore-utilities/logs:/usr/src/app/logs
      - ./supervisor.py:/usr/local/bin/supervisor.py  # Bind mount das Supervisor-Skript
    env_file:
      - .env
    entrypoint: ["python3", "/usr/local/bin/supervisor.py"]
    tty: true
    stdin_open: true

volumes:
  downloads:
  logs:

Beispielaufrufe der Skripte

Hier sind einige Beispiele, wie du die verschiedenen Skripte mit den jeweiligen Parametern ausführen kannst:

Zusammenfassung

Mit diesem Ansatz kannst du unterschiedliche Parameter für verschiedene Skripte angeben und sicherstellen, dass der Benutzer auf fehlende Parameter hingewiesen wird.

kurmann commented 5 months ago

Übersicht der Ansätze zur Ausführung und Verwaltung von Docker-Containern

1. Einmalige Ausführung vs. Dauerhafte Dienste

2. Aufrufmethoden

3. Verwaltungstools

4. Zugriffsarten auf Container

Zusammenfassung

  1. Einmalige Ausführung vs. Dauerhafte Dienste:

    • Einmalige Ausführung: Container wird für eine spezifische Aufgabe gestartet und beendet sich danach.
    • Dauerhafte Dienste: Container läuft kontinuierlich, um Anfragen zu bearbeiten.
  2. Aufrufmethoden:

    • Über die Shell: Direktes Ausführen von Befehlen im Terminal.
    • Über Netzwerk (Port-Aufrufe): Bereitstellung von Diensten über definierte Ports.
  3. Verwaltungstools:

    • Docker CLI: Grundlegende Verwaltung von Containern und Ressourcen.
    • Docker Compose: Verwaltung von Multi-Container-Anwendungen.
    • Docker Swarm/Kubernetes: Orchestrierungstools für verteilte Container-Umgebungen.
  4. Zugriffsarten auf Container:

    • Direktzugriff: Direkter Zugang zur Container-Shell oder über API-Aufrufe.
    • Indirekter Zugriff: Zugriff über Netzwerkschnittstellen und Ports.

Durch die Verwendung dieser Ansätze kannst du flexibel und effizient Container-Anwendungen entwickeln, bereitstellen und verwalten, unabhängig von der zugrunde liegenden Technologie oder dem spezifischen Anwendungsfall.