Hinweis:

OCI Object Storage-Amazon S3-Kompatibilitäts-API mit AWS SDK für C++ verwenden

Einführung

Mit Oracle Cloud Infrastructure (OCI) Object Storage können Kunden jeden Datentyp in seinem nativen Format sicher speichern. Mit integrierter Redundanz ist OCI Object Storage ideal für die Erstellung moderner Anwendungen, die Skalierbarkeit und Flexibilität erfordern, da es zur Konsolidierung mehrerer Datenquellen für Analyse-, Backup- oder Archivierungszwecke verwendet werden kann.

OCI Object Storage ist für Cloud-Workloads grundlegend. Seine Elastizität, Skalierbarkeit, Zuverlässigkeit und Kosteneffizienz hat ihn zum primären Speicher für unstrukturierte Daten in der Cloud gemacht. Aufgrund seiner Beliebtheit gibt es ein riesiges Ökosystem von Tools für die Arbeit mit OCI Object Storage.

OCI Object Storage bietet eine Amazon S3-Kompatibilitäts-API. Kunden können ihre vorhandenen Amazon S3-Tools weiterhin verwenden und für die Arbeit mit OCI Object Storage minimale Änderungen an ihren Anwendungen vornehmen. Die Amazon S3-Kompatibilitäts-API und die OCI Object Storage-Datasets sind deckungsgleich. Wenn Daten mit der Amazon S3-Kompatibilitäts-API in OCI Object Storage geschrieben werden, können die Daten mit der nativen OCI Object Storage-API zurück gelesen werden und umgekehrt. Kunden, die das AWS SDK für C++ verwenden, finden den Authentifizierungsaspekt bei der Verwendung der Amazon S3-Kompatibilitäts-API möglicherweise herausfordernd. Dieses Tutorial enthält zwei einfache Beispiele für den Einstieg in die Verwendung des AWS SDK für C++.

Hinweis: Hierbei handelt es sich um Beispielskripte, die das AWS-SDK für C++ verwenden. Sie sind keine offiziellen Oracle-Anwendungen und werden nicht von Oracle verwaltet oder unterstützt. Da es sich um Beispiele handelt, sollten Sie sie möglicherweise für Ihren Anwendungsfall in Ihrem eigenen Software-Repository prüfen, aktualisieren und anpassen. Oracle zertifiziert oder unterstützt keine Drittanbieter-SDKs.

Ziele

Voraussetzungen

Aufgabe 1: Pfad- und virtuell gehostete Format-URLs verstehen

Zum Zeitpunkt des Schreibens dieses Tutorials unterstützt die OCI Object Storage-Amazon S3-Kompatibilitäts-API pfadähnliche URLs. Das bedeutet, dass sich der Bucket im URL-Pfad befindet.

Beispiel:

https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName

OR

https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName/MyObjectName

In URLs im virtuell gehosteten Stil ist der OCI Object Storage-Bucket-Name in der Subdomain (oder am Anfang) der URL enthalten.

Beispiel:

https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com

OR

https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyObjectName

Standardmäßig verwendet das AWS SDK für C++ URLs im virtuell gehosteten Stil. Wenn Sie die von AWS erstellten Codebeispiele befolgen und Werte aus Ihrem OCI-Mandanten ersetzen, wird ein Fehler ähnlich der folgenden Ausgabe angezeigt. Weitere Informationen finden Sie unter Buckets erstellen, auflisten und löschen.

curlCode: 60, SSL peer certificate or SSH remote key was not OK 

Da der Code eine virtuell gehostete Format-URL verwendet, referenziert der Code weder den OCI Object Storage-Bucket noch ein gültiges Zertifikat.

Die Einstellung S3Client muss geändert werden, damit URLs im Pfadformat verwendet werden. Die Konfiguration sollte mit dem folgenden Befehl festgelegt werden.

Aws::Client::ClientConfiguration config; 

S3Client s3Client(config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false); 

Aufgabe 2: Mandanten-Namespace und API-Compartment S3 bestimmen

  1. Melden Sie sich bei Ihrem Linux-System an.

    Hinweis: Alle Befehle werden in Ihrem Linux-System ausgeführt, in dem Sie die erforderlichen Voraussetzungen installiert und konfiguriert haben.

  2. Führen Sie den OCI-CLI-Befehl oci os ns get-metadata aus.

    $ oci os ns get-metadata
    {
      "data": {
        "default-s3-compartment-id": "ocid1.tenancy.oc1..bbbbcccdabcc0x0aaaaaa00aaaaaaaaaaa0b0b00ccccccccbbbbbbbb00aa",
        "default-swift-compartment-id": "ocid1.tenancy.oc1..bbbbcccdabcc0x0aaaaaa00aaaaaaaaaaa0b0b00ccccccccbbbbbbbb00aa",
        "namespace": "MyNamespace"
      }
    }
    
  3. Wenn die Compartment-OCID S3 das Wort tenancy enthält, handelt es sich um das Root Compartment. Rufen Sie den Namen mit dem folgenden Befehl ab.

    $ oci iam compartment get --compartment-id <compartment_ocid>
    

    Oder führen Sie für das Root Compartment des Mandanten den folgenden Befehl aus.

    $ oci iam tenancy get --tenancy-id <tenancy_ocid>
    

    Alternativ können Sie die OCI-Konsole verwenden, indem Sie zu Ihrem Profil in der oberen rechten Ecke navigieren und den Mandanten (your_tenancy_name) auswählen, um den Namespace und das API-Compartment S3 zu bestimmen.

    OCI-Mandantenbildschirm

    Das Compartment S3 wird in Aufgabe 4 erneut verwendet.

Aufgabe 3: Kunden-Secret-Key für den Zugriff auf die mit S3 kompatible API erstellen

Generieren Sie einen Secret Key mit OCI-CLI-Befehlen.

  1. Führen Sie den Befehl oci iam customer-secret-key create aus.

    oci iam customer-secret-key create --display-name display-name --user-id ocid1.user.oc1..aaaaaaaa-user-ocid-sdd6ahdouq
    {
    "data": {
         "display-name": "display-name",
         "id": "7aaaa3462aa34271a276002015f30674a5325aaa",
         "inactive-status": null,
         "key": "1aaa577aaaa/aa3aa92aa7aa7aaaaaaAa0aaaAa8AAa=",
         "lifecycle-state": "ACTIVE",
         "time-created": "2024-07-19T19:58:03.794000+00:00",
         "time-expires": null,
         "user-id": "ocid1.user.oc1..aaaaaaaa-user-ocid-sdd6ahdouq"
    },
    "etag": "e63038c73fc24fa087a2a4c3339ef709"
    }
    
  2. Kopieren Sie die ID (AWS_ACCESS_KEY_ID) und den Schlüssel (AWS_SECRET_ACCESS_KEY) an eine sichere Stelle, um später zum Festlegen von Umgebungsvariablen verwendet zu werden.

    Hinweis: Die Benutzer-OCID befindet sich in der OCI-CLI-Konfigurationsdatei, die normalerweise in $HOME/.oci/config gespeichert ist.

Oder

Ein Secret Key kann auch mit der OCI-Konsole generiert werden. Navigieren Sie in der oberen rechten Ecke zu Ihrem Profil, und wählen Sie dann den angezeigten Benutzernamen aus. Klicken Sie auf den Link Kunden-Secret-Keys, Secret-Key generieren, und legen Sie einen Anzeigenamen fest. Klicken Sie auf Kopieren, speichern Sie den Secret Key in einem sicheren Speicherort, und klicken Sie auf Schließen.

Navigieren zu "Kunden-Secret-Keys" aus dem Profil

Nachdem Sie das Fenster Secret Key generieren geschlossen haben, suchen Sie in der Liste der Kunden-Secret-Keys nach dem Anzeigenamen, zeigen Sie mit der Maus auf die Zugriffstaste, und kopieren Sie den Zugriffstaste.

Zugriffsschlüssel kopieren

Aufgabe 4: Zeitraumdaten für die Einrichtung erfassen

  1. Gehen Sie zur OCI-Konsole, navigieren Sie zu Speicher, und klicken Sie auf Buckets.

  2. Klicken Sie unter den Voraussetzungen auf den Bucket-Namen, und notieren Sie sich die folgenden Informationen.

    • Der Name des Buckets.
    • Der Speicherort von Objekten. Dies ist das Präfix.
    • Der Regionsname. Rufen Sie den Regionscode hier ab: Regionen und Availability-Domains. Beispiel: US East (Ashburn) wird durch us-ashburn-1 dargestellt.

    Bucket- und Objektinformationen für die Einrichtung erfassen

Aufgabe 5: Umgebungsvariablen festlegen

Legen Sie die Umgebungsvariablen mit dem folgenden Befehl basierend auf Informationen aus den vorherigen Aufgaben fest.

export AWS_ACCESS_KEY_ID="<your access key ID from Task 3>"
export AWS_SECRET_ACCESS_KEY="<your secret key ID from Task 3>"
export OCI_REGION="bukcet region from Task 4>"
export OCI_NAMESPACE="<namespace name from Task 1>"
export OCI_BUCKET="<your bucket name from Task 4>"
export OCI_PREFIX="<object prefix name from Task 4>"

Beispiel:

export AWS_ACCESS_KEY_ID="da34baaa4ab029f51c34c1cee83d40f0dEXAMPLE" 
export AWS_SECRET_ACCESS_KEY="7w3uMS6kYiYkUpziSlLFcBimBsYDJfojwCWKEXAMPLE=" 
export OCI_REGION="us-ashburn-1" 
export OCI_NAMESPACE="MyNamespace"
export OCI_BUCKET="Images" 
export OCI_PREFIX="2024/12/18/Camera" 

Aufgabe 6: C++-Beispiele erstellen

  1. Führen Sie den folgenden Befehl aus, um das Beispiel-Repository in git zu klonen.

    $ git clone https://github.com/tonymarkel/OCI_AWS_CPP_SDK_S3_Examples.git
    
  2. Führen Sie die folgenden Befehle aus, um in das Verzeichnis zu wechseln, das die C++-Beispiele enthält, erstellen Sie ein Build-Verzeichnis, wechseln Sie in dieses Verzeichnis, und führen Sie dann Build und Make aus.

    $ OCI_AWS_CPP_SDK_S3_Examples 
    $ mkdir build 
    $ cd build 
    $ cmake .. 
    $ make 
    

Hinweis: Hierbei handelt es sich um Beispielskripte, die das AWS-SDK für C++ verwenden. Sie sind keine offiziellen Oracle-Anwendungen und werden nicht von Oracle verwaltet oder unterstützt. Da es sich um Beispiele handelt, sollten Sie sie möglicherweise für Ihren Anwendungsfall in Ihrem eigenen Software-Repository prüfen, aktualisieren und anpassen. Oracle zertifiziert oder unterstützt keine Drittanbieter-SDKs.

Aufgabe 7: Beispiele ausführen

  1. Führen Sie den folgenden Befehl aus, um die Liste der Buckets abzurufen.

    $ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY 
    

    Beispiel:

    $ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY 
    S3 Endpoint is: https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/ 
    Found 3 buckets 
    Demo 
    Images 
    Logs 
    
  2. Führen Sie den folgenden Befehl aus, um die Liste der Objekte abzurufen.

    Beispiel:

    $ ./listObjects $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY $OCI_BUCKET $OCI_PREFIX 
    S3 Object Path is: https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com 
    Bucket is: Images 
    Prefix is: 2024/12/18/Camera 
    LISTING OBJECTS 
    Found 3 objects 
    2024/12/18/Camera/Image1.jpeg 
    2024/12/18/Camera/Image2.jpeg 
    2024/12/18/Camera/DefinitelyNotACat.jpeg 
    

Hinweis: Wenn Probleme auftreten, gehen Sie zu Aufgabe 5 zurück, und stellen Sie sicher, dass die Umgebungsvariablen korrekt festgelegt sind.

Danksagungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.