Amazon S3-Beispielprogramm - AWS SDKfür SAP ABAP

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Amazon S3-Beispielprogramm

Dieser Abschnitt führt Sie durch ein einfaches Beispielprogramm, mit dem Sie den Inhalt eines Amazon S3-Buckets auflisten können, indem SieListObjectsV2.

Voraussetzungen

Sie müssen die folgenden Voraussetzungen erfüllen, um dieses Beispielprogramm ausführen zu können.

  • Sie haben einen Amazon S3-Bucket. In diesem Tutorial wird der Bucket benanntdemo-invoices.customer.com.

  • Transaktion/AWS1/IMG:

    • Hat ein definiertes SDK-Profil mit dem NamenDEMO_S3.

      • Im SDK-Profil die logische IAM-RolleTESTUSERmuss einer IAM-Rolle zugeordnet sein, z. B.arn:aws:iam::111122223333:role/SapDemoFinancewelche Zuschüsses3:ListBucketErlaubnis, den Inhalt Ihres Amazon S3-Buckets aufzulisten.

    • Hat eine logische Ressource namensDEMO_BUCKETdas Ihrem Amazon S3-Bucket mit der SID und dem Client Ihres SAP-Systems zugeordnet ist.

  • Ihr Benutzer hat eine PFCG-Rolle, die:

    • Autorisiert den Benutzer zum ZugriffDEMO_S3SDK-Profil über Auth-Objekt -/AWS1/SESS.

    • Autorisiert den Benutzer für die logische IAM-RolleTESTUSERZugriff über Auth-Objekt -/AWS1/LROL.

  • Ihr SAP-System kann sich authentifizieren beiAWSunter Verwendung der im SDK-Profil definierten Methode.

  • Ihr Amazon EC2-Instance-Profil gewährt Ihrem SAP-System die Rechte fürsts:assumeRolein der IAM-Rollearn:aws:iam::111122223333:role/SapDemoFinanceim SDK-Profil zugeordnet.

Code

Der folgende Codeblock zeigt, wie Ihr Code aussehen würde.

REPORT  zdemo_s3_listbuckets. START-OF-SELECTION.   PARAMETERS pv_lres TYPE  /aws1/rt_resource_logical                      DEFAULT 'DEMO_BUCKET' OBLIGATORY.   DATA(go_session) = /aws1/cl_rt_session_aws=>create( 'DEMO_S3'  ).   DATA(gv_bucket)   = go_session->resolve_lresource( pv_lres ).   DATA(go_s3)       = /aws1/cl_s3_factory=>create( go_session ).   TRY.       DATA(lo_output) = go_s3->listobjectsv2(             iv_bucket = CONV string( gv_bucket )             iv_maxkeys = 100       ).       LOOP AT lo_output->get_contents(  ) INTO DATA(lo_object).         DATA lv_mdate TYPE datum.         CONVERT TIME STAMP lo_object->get_lastmodified( )                 TIME ZONE 'UTC'                 INTO DATE lv_mdate.         WRITE: /  CONV text30( lo_object->get_key( ) ),                  lv_mdate, lo_object->get_size( ).       ENDLOOP.     CATCH /aws1/cx_rt_generic INTO DATA(lo_ex).       DATA(lv_msg) = lo_ex->if_message~get_text(  ).       MESSAGE lv_msg TYPE 'I'.   ENDTRY.

Codeabschnitte

Im Folgenden finden Sie eine Übersicht über den Code in Abschnitten.

  PARAMETERS pv_lres TYPE  /aws1/rt_resource_logical                      DEFAULT 'DEMO_BUCKET' OBLIGATORY.

Der Benutzer kann keinen physischen Bucket-Namen angeben. Sie spezifizieren einen logischen Bucket und die Systemadministratoren (insbesondere der Business Analyst) in Abstimmung mit demAWSAdministrator ordnet logische Buckets physischen Buckets zu/AWS1/IMG. In den meisten Geschäftsszenarien hat der Benutzer keine Möglichkeit, den logischen Bucket auszuwählen — die logische Ressourcen-ID ist fest im Code codiert oder in einer benutzerdefinierten Konfigurationstabelle konfiguriert.

  DATA(go_session) = /aws1/cl_rt_session_aws=>create( 'DEMO_S3'  ).

Diese Zeile richtet eine Sicherheitssitzung ein und deklariert, dass dieses ABAP-Programm erwartet, dieDEMO_S3SDK-Profil. Dieser Aufruf stellt die Verbindung zur SDK-Konfiguration her und ruft die Standardregion, die Authentifizierungseinstellungen und die gewünschte IAM-Rolle ab. Ein Anruf anAUTHORIZATION-CHECKwird automatisch erstellt, um sicherzustellen, dass das Autorisierungsobjekt/AWS1/SESSist zufrieden. ZusätzlichAUTHORIZATION-CHECKanhand des Autorisierungsobjekts werden Aufrufe durchgeführt, um die mächtigste logische IAM-Rolle (mit niedrigerer Sequenznummer) zu ermitteln, für die der Benutzer autorisiert ist/AWS1/LROL. Das SDK geht davon aus, dass die IAM-Rolle der logischen IAM-Rolle für die SID und den Client zugeordnet ist. Anschließend aktiviert das Sitzungsobjekt die Ablaufverfolgung auf der Grundlage der Trace-Einstellungen in derIMG.

Wenn der Benutzer nicht für das angeforderte SDK-Profil oder für eine verfügbare logische IAM-Rolle autorisiert ist, wird eine Ausnahme ausgelöst.

DATA(gv_bucket)   = go_session->resolve_lresource( pv_lres ).

Diese Zeile löst die logische Ressource in einen physischen Bucket-Namen auf. Wenn die logische Ressource nicht aufgelöst werden kann, weil die Konfiguration keine Zuordnung für diese SID/Client-Kombination enthält, wird eine Ausnahme ausgelöst.

  DATA(go_s3)       = /aws1/cl_s3_factory=>create( go_session ).

Diese Zeile erstellt ein API-Objekt für Amazon S3 mithilfe descreate()Methode von/aws1/cl_s3_factory. Das zurückgegebene Objekt ist vom Typ/aws1/if_s3das ist die Schnittstelle für eine Amazon S3-API. Für jeden Dienst muss ein separates API-Objekt erstellt werden. Wenn beispielsweise ein ABAP-Programm Amazon S3 verbraucht,AWS Lambdaund DynamoDB, dann erstellt es API-Objekte aus/aws1/cl_s3_factory,/aws1/cl_lmd_factory, und/aws1/cl_dyn_factory.

Der Konstruktor verfügt über einige optionale Parameter, mit denen Sie die Region angeben können, wenn Sie die konfigurierte Standardregion überschreiben möchten.IMG. Auf diese Weise kann es zwei Fälle geben von/aws1/if_s3, eins fürus-east-1und eine fürus-west-2, wenn Sie Objekte von einem Bucket in einer Region in einen Bucket in einer anderen Region kopieren möchten. In ähnlicher Weise können Sie zwei verschiedene Sicherheitssitzungsobjekte erstellen und diese verwenden, um zwei separate Instanzen von zu erstellen/aws1/cl_s3, wenn Sie einen Bericht benötigen, um aus einem finanzbezogenen Bucket zu lesen und Objekte in einen logistikbezogenen Bucket zu schreiben.

      DATA(lo_output) = go_s3->listobjectsv2(             iv_bucket = CONV string( gv_bucket )             iv_maxkeys = 100       ).

Diese Leitung ist ein Anruf anListObjectsV2. Es erfordert einfache Eingabeargumente und gibt ein einzelnes Objekt zurück. Diese Objekte können tiefe JSON- und XML-Daten darstellen, die in ein objektorientiertes ABAP-Konstrukt deserialisiert wurden. In manchen Fällen kann es ziemlich kompliziert sein. Jetzt müssen Sie nur noch die Ausgabe verarbeiten, um den Inhalt des Buckets aufzulisten.

      LOOP AT lo_output->get_contents(  ) INTO DATA(lo_object).         DATA lv_mdate TYPE datum.         CONVERT TIME STAMP lo_object->get_lastmodified( )                 TIME ZONE 'UTC'                 INTO DATE lv_mdate.         WRITE: /  CONV text30( lo_object->get_key( ) ),                  lv_mdate, lo_object->get_size( ).       ENDLOOP.

Der Zugriff auf die Daten erfolgt mit einemGET...()Stilmethode, die die interne Darstellung der Daten verbirgt.GET_CONTENTS( )gibt eine ABAP-Tabelle zurück und jede Zeile selbst enthält ein Objekt, das einen einzelnen Amazon S3-Eintrag darstellt. In den meisten FällenAWSSDK verfolgt diesen objektorientierten Ansatz und alle Daten werden als Objekte und Tabellen dargestellt. DerLastModifiedFeld wird als Zeitstempel dargestellt, der mit dem ABAP-Native in ein Datum umgewandelt werden kannCONVERT TIME STAMPBefehl. derGET_SIZE()gibt einen zurückINT4für einfache Mathematik- und Formatierungsoperationen.

    CATCH /aws1/cx_rt_generic INTO DATA(lo_ex).       DATA(lv_msg) = lo_ex->if_message~get_text(  ).       MESSAGE lv_msg TYPE 'I'.

Alle Fehler — Verbindungsfehler, 4xx-Client, 5xx-Server oder alle ABAP-Fehler, wie Autorisierungs- oder Konfigurationsfehler, werden als Ausnahmen dargestellt. Sie können jede Ausnahme separat angehen. Sie haben die Wahl, ob eine Exception als Informationsfehler, Wiederholungsversuch, Warnung, Short Dump oder als eine andere Art der Behandlung behandelt werden soll.