Wie man mit boto3 auf EODATA zugreift auf CODE-DE

Unter EODATA verstehen wir das Erdbeobachtungsdatenarchiv, das z.B. über CREODIAS oder das Copernicus Data Space Ecosystem verfügbar ist. Über CODE-DE können Sie direkt auf dieses Archiv zugreifen.

In diesem Artikel erfahren Sie, wie Sie von einer virtuellen Maschine unter Linux oder Windows in der CODE-DE Cloud mit der Python-Bibliothek boto3 auf das EODATA-Repository zugreifen können.

Was werden wir behandeln?

  • Installation von boto3

  • Ausführen der Skripte aus diesem Artikel

  • Durchsuchen von EODATA

  • Herunterladen einer einzelnen Datei aus dem EODATA-Repository

Voraussetzungen

Nr. 1 Konto

Sie benötigen ein CODE-DE Konto mit Zugriff auf die Horizon-Schnittstelle: https://cloud.fra1-1.cloudferro.com/auth/login/?next=/.

Nr. 2 Virtuelle Maschine

Sie benötigen eine virtuelle Maschine, die auf CODE-DE cloud läuft. Dieser Artikel ist für Ubuntu 22.04 und für Windows Server 2022 geschrieben.

Der Zugriff mit anderen Betriebssysteme könnte ebenfalls funktionieren, wird hioer aber nicht beschrieben und erfordert möglicherweise eine Anpassung der hier angegebenen Befehle.

In jedem Fall muss Ihre virtuelle Maschine Zugriff auf das Netzwerk haben, das den Zugriff auf das EODATA-Repository ermöglicht. Dieses Netzwerk heißt entweder eodata oder hat einen Namen, der mit eodata_ beginnt.

Linux VM

Sie können eine virtuelle Linux-Maschine erstellen, wie in einem der folgenden Artikel beschrieben:

Windows VM

Der folgende Artikel enthält Informationen zur Erstellung einer virtuellen Windows-Maschine: /cloud/How-to-create-Windows-VM-on-OpenStack-Horizon-and-access-it-via-web-console-on-CODE-DE

Wenn Sie die Webkonsole für den Zugriff auf Ihre virtuelle Windows-Maschine verwenden, können Sie den Artikel, den Sie gerade lesen, in einem Webbrowser (z. B. Microsoft Edge) öffnen, der auf dieser virtuellen Maschine installiert ist, und den Python-Code in einen Texteditor Ihrer Wahl kopieren.

Nr. 3 Python

Python muss auf Ihrer virtuellen Maschine installiert sein.

Wenn Sie Linux verwenden, kann dieser Artikel helfen: Wie installiert man Python virtualenv/virtualenvwrapper

Und für Windows können Sie diesen Artikel lesen: Wie man Python unter Windows installiert auf CODE-DE

Nr. 4 Erhalt von Zugangs- und des Geheim-Schlüssels

Um auf EODATA zugreifen zu können, benötigen Sie einen Zugangs- oder Access- Schlüssel und einen geheimen (secret) Schlüssel. Sie erhalten beide, indem Sie diesem Artikel folgen: Wie man Zugangsdaten für den Zugriff auf EODATA auf einer VM auf CODE-DE erhält

Nr. 5 Grundkenntnisse in Python

boto3 ist eine Python-Bibliothek, Sie müssen sich also mit Python auskennen.

Installation von boto3

Befolgen Sie die entsprechenden Verfahren zur Installation von boto3:

Installation von boto3 unter Linux

Wenn Sie eine Python-Umgebung wie virtualenv verwenden, geben Sie die Umgebung ein, in der Sie boto3 installieren möchten. Führen Sie darin den folgenden Befehl aus:

pip3 install boto3

Sie können das Paket auch global installieren:

sudo apt install python3-boto3

Installation von boto3 unter Windows

Folgen Sie diesem Artikel, um boto3 unter Windows zu installieren: Wie installiert man Boto3 unter Windows auf CODE-DE

So führen Sie die Skripte in diesem Artikel aus

Die Methode zur Ausführung der Skripte ist je nach Betriebssystem Ihrer Wahl unterschiedlich.

So führen Sie Skripte mit der Linux-Kommandozeile aus

Öffnen Sie einen Texteditor Ihrer Wahl wie nano oder vim. Fügen Sie das Skript ein. Nehmen Sie die entsprechenden Änderungen am Code vor (z. B. Zuweisung von Werten an Variablen). Speichern Sie die Datei.

Sobald Sie den Texteditor verlassen haben, führen Sie den Befehl python3 gefolgt von dem Namen Ihres Skripts in dem Verzeichnis aus, in dem es sich befindet. Zum Beispiel:

python3 browse.py

Das Skript sollte ausgeführt werden.

Ausführen von Skripten mit der Windows-Eingabeaufforderung

Öffnen Sie einen einfachen Texteditor (wie Notepad). Fügen Sie das Skript ein. Nehmen Sie die entsprechenden Änderungen am Code vor (z. B. Zuweisung von Werten an Variablen). Speichern Sie die Datei mit der Erweiterung .py (stellen Sie sicher, dass Windows nicht die Erweiterung .txt hinzufügt).

Öffnen Sie die Eingabeaufforderung (cmd.exe). Navigieren Sie zu dem Verzeichnis, in dem sich das Skript befindet, z. B. mit dem Befehl cd:

cd C:\Users\John\scripts

Führen Sie das Skript mit dem Befehl python gefolgt von seinem Namen aus, zum Beispiel:

python browse.py

EODATA durchsuchen

Sie können boto3 verwenden, um das EODATA-Repository zu durchsuchen. Der benötigte Code ist in diesem Abschnitt zu finden.

Variable Name

Was zugewiesen werden soll

access_key

Ihr Zugriffs Schlüssel. Siehe Voraussetzungen Nr. 4.

secret_key

Ihr Secret Schlüssel. Siehe Voraussetzungen Nr. 4.

directory

Das Verzeichnis im EODATA Repository das sie durchsuchen wollen.

Achten Sie beim Ausfüllen der Variablen directory darauf, dass Sie die folgenden Regeln beachten:

  • Verwenden Sie Schrägstriche / als Trennzeichen zwischen den Elementen des Pfades (Verzeichnisse und Dateien)

  • Beginnen Sie den Pfad nicht mit einem Schrägstrich /

  • Da das Element, das Sie untersuchen, ein Verzeichnis ist, schließen Sie den Pfad mit einem Schrägstrich ab /

  • Starten Sie den Pfad mit dem Namen des Ordners im Stammverzeichnis des EODATA-Repository (zum Beispiel Sentinel-2 oder Sentinel-5P)

Wenn Sie das Stammverzeichnis des EODATA-Repositorys erkunden möchten, weisen Sie der Variablen directory eine leere Zeichenfolge zu:

directory=''

Wenn Sie kein spezielles Verzeichnis haben, das Sie untersuchen möchten, sondern diese Methode einfach nur testen wollen, können Sie den Wert, der der Variablen directory im Beispielcode unten zugewiesen wurde, beibehalten.

Die Variablen host und container enthalten den EODATA-Endpunkt bzw. den Namen des verwendeten Containers. Sie brauchen sie nicht zu ändern.

import boto3

access_key='YOUR_ACCESS_KEY'
secret_key='YOUR_SECRET_KEY'
directory='Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/'

host='http://eodata.cloudferro.com'
container='DIAS'

s3=boto3.client('s3',aws_access_key_id=access_key, aws_secret_access_key=secret_key,endpoint_url=host)

print(s3.list_objects(Delimiter='/',Bucket=container,Prefix=directory,MaxKeys=30000)['CommonPrefixes'])

Wenn Sie Ihre access und secret Schlüssel angegeben, aber die Variable directory nicht geändert haben, listet der obige Code die Produkte auf, die im Verzeichnis Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ des EODATA-Repository gefunden wurden. In diesem Fall sollte die Ausgabe wie folgt aussehen:

[{'Prefix': 'Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110329_000000603113_00267_52867_0000.N1/'}, {'Prefix': 'Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110428_000000603113_00267_52867_0000.N1/'}, {'Prefix': 'Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110446_000000603113_00267_52867_0000.N1/'}]

Diese Ausgabe kann als eine „Liste von Verzeichnissen“ beschrieben werden. Jedes dieser Verzeichnisse enthält einen Schlüssel namens Präfix, der den Pfad zu einer Datei oder einem Verzeichnis angibt. Anstatt diese Liste wie oben zu drucken, können Sie sie in einer Schleife durchlaufen, um die Lesbarkeit der Ausgabe zu verbessern:

import boto3

access_key='YOUR_ACCESS_KEY'
secret_key='YOUR_SECRET_KEY'
directory='Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/'

host='http://eodata.cloudferro.com'
container='DIAS'

s3=boto3.client('s3',aws_access_key_id=access_key, aws_secret_access_key=secret_key,endpoint_url=host)

for i in s3.list_objects(Delimiter='/',Bucket=container,Prefix=directory,MaxKeys=30000)['CommonPrefixes']:
    print(i['Prefix'])

Dieses Mal sollte die Ausgabe nur die Pfade anzeigen:

Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110329_000000603113_00267_52867_0000.N1/
Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110428_000000603113_00267_52867_0000.N1/
Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110446_000000603113_00267_52867_0000.N1/

Herunterladen einer einzelnen Datei aus dem EODATA-Repository

Dieser Abschnitt beschreibt, wie man eine Datei aus dem EODATA-Repository herunterlädt.

Das nachstehende Skript sollte diese Datei in ein Verzeichnis herunterladen, von dem aus das Skript ausgeführt wird. Wenn dieses Verzeichnis bereits eine Datei mit demselben Namen wie die herunterzuladende Datei enthält, wird diese ohne Rückfrage überschrieben.

Ersetzen Sie im folgenden Code die folgenden Variablen:

Variable Name

Was zugewiesen werden soll

access_key

Ihr Zugriffs Schlüssel. Siehe Voraussetzungen Nr. 4.

secret_key

Ihr Secret Schlüssel. Siehe Voraussetzungen Nr. 4.

key

Der Pfad (mit Verzeichnissen) zur Datei, die Sie vom EODATA Repository herunter laden wollen.

Achten Sie beim Ausfüllen der Variablen key auf die folgenden Regeln:

  • Verwenden Sie Schrägstriche / als Trennzeichen zwischen den Elementen des Pfades (Verzeichnisse und Dateien)

  • Beginnen oder beenden Sie den Pfad nicht mit einem Schrägstrich /

  • Beginnen Sie den Pfad mit dem Namen des Ordners, der sich im Stammverzeichnis des EODATA-Repositorys befindet (zum Beispiel Sentinel-2 oder Sentinel-5P)

Wenn Sie keine spezielle Datei herunterladen möchten, sondern nur diese Methode testen wollen, können Sie den Wert, der der Variablen key im Beispielcode unten zugewiesen wurde, beibehalten.

Auch hier enthalten die Variablen host und container den EODATA-Endpunkt bzw. den Namen des verwendeten Containers. Sie brauchen sie nicht zu ändern.

import boto3

access_key='YOUR_ACCESS_KEY'
secret_key='YOUR_SECRET_KEY'
key='Landsat-5/TM/L1T/2011/11/16/LS05_RMPS_TM__GTC_1P_20111116T100042_20111116T100111_147386_0194_0035_4BF1/LS05_RMPS_TM__GTC_1P_20111116T100042_20111116T100111_147386_0194_0035_4BF1.BP.PNG'

host='http://eodata.cloudferro.com'
container='DIAS'

s3=boto3.resource('s3',aws_access_key_id=access_key,
aws_secret_access_key=secret_key, endpoint_url=host,)

bucket=s3.Bucket(container)

filename=key.split("/")[-1]

bucket.download_file(key, filename)

Wenn Sie Ihren Zugangsschlüssel und Ihren geheimen Schlüssel angegeben haben, aber den Inhalt der Variable key nicht geändert haben, sollte der Code die Datei namens

LS05_RMPS_TM__GTC_1P_20111116T100042_20111116T100111_147386_0194_0035_4BF1.BP.PNG

herunterladen, die sich im u.a. Stammverzeichnis des Produkts befindet:

LS05_RMPS_TM__GTC_1P_20111116T100042_20111116T100111_147386_0194_0035_4BF1

Nach der Ausführung des Skripts sollte die Ausgabe leer sein. Unabhängig davon sollte die heruntergeladene Datei in dem Verzeichnis sichtbar sein, in dem das Skript ausgeführt wurde. So sieht es zum Beispiel unter Linux aus:

../_images/access-eodata-boto3-03_creodias.png

Was als nächstes zu tun ist

Sie können diese Skripte weiter modifizieren, damit sie Ihren Bedürfnissen besser entsprechen, oder sie in Ihre eigenen Anwendungen integrieren. Diese Skripte könnten auch in anderen Entwicklungsumgebungen funktionieren. Auf eine Beschreibung wird hier verzichtet.

boto3 kann auch verwendet werden, um auf Objektspeicher-Container der CODE-DE Cloud: Wie man mit boto3 auf den Objektspeicher von CODE-DE zugreift zuzugreifen.