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 benannt
demo-invoices.customer.com
. -
Transaktion
/AWS1/IMG
:-
Hat ein definiertes SDK-Profil mit dem Namen
DEMO_S3
.-
Im SDK-Profil die logische IAM-Rolle
TESTUSER
muss einer IAM-Rolle zugeordnet sein, z. B.arn:aws:iam::
welche Zuschüsse111122223333
:role/SapDemoFinances3:ListBucket
Erlaubnis, den Inhalt Ihres Amazon S3-Buckets aufzulisten.
-
-
Hat eine logische Ressource namens
DEMO_BUCKET
das 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 Zugriff
DEMO_S3
SDK-Profil über Auth-Objekt -/AWS1/SESS
. -
Autorisiert den Benutzer für die logische IAM-Rolle
TESTUSER
Zugriff ü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ür
sts:assumeRole
in der IAM-Rollearn:aws:iam::
im SDK-Profil zugeordnet.111122223333
:role/SapDemoFinance
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_S3
SDK-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-CHECK
wird automatisch erstellt, um sicherzustellen, dass das Autorisierungsobjekt/AWS1/SESS
ist zufrieden. ZusätzlichAUTHORIZATION-CHECK
anhand 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_s3
das 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-1
und 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. DerLastModified
Feld wird als Zeitstempel dargestellt, der mit dem ABAP-Native in ein Datum umgewandelt werden kannCONVERT TIME STAMP
Befehl. derGET_SIZE()
gibt einen zurückINT4
fü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.