Exemple de programme Amazon S3 - AWS SDKpour SAP ABAP

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemple de programme Amazon S3

Cette section présente un exemple de programme simple permettant de répertorier le contenu d'un compartiment Amazon S3 en appelantListObjectsV2.

Prérequis

Vous devez remplir les conditions préalables suivantes pour exécuter cet exemple de programme.

  • Vous disposez d'un compartiment Amazon S3. Dans ce didacticiel, le bucket est nommédemo-invoices.customer.com.

  • Transaction/AWS1/IMG:

    • Possède un profil SDK défini nomméDEMO_S3.

      • Dans le profil du SDK, le rôle IAM logiqueTESTUSERdoit correspondre à un rôle IAM, tel quearn:aws:iam::111122223333:role/SapDemoFinancequelles subventionss3:ListBucketautorisation de répertorier le contenu de votre compartiment Amazon S3.

    • Possède une ressource logique nomméeDEMO_BUCKETqui est mappé à votre compartiment Amazon S3 avec le SID et le client de votre système SAP.

  • Votre utilisateur possède un rôle PFCG qui :

    • Autorise l'utilisateur à accéderDEMO_S3Profil SDK via un objet d'authentification -/AWS1/SESS.

    • Autorise l'utilisateur à jouer un rôle IAM logiqueTESTUSERaccès via un objet d'authentification -/AWS1/LROL.

  • Votre système SAP peut s'authentifier auprès deAWSen utilisant la méthode définie dans le profil du SDK.

  • Votre profil d'instance Amazon EC2 accorde à votre système SAP les droits dests:assumeRoledans le rôle d'IAMarn:aws:iam::111122223333:role/SapDemoFinancemappé dans le profil du SDK.

Code

Le bloc de code suivant montre à quoi ressemblerait votre code.

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.

Sections de code

Ce qui suit est une revue du code par sections.

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

L'utilisateur ne peut pas spécifier de nom de compartiment physique. Ils spécifient un compartiment logique et les administrateurs système (en particulier l'analyste commercial) en coordination avecAWSl'administrateur mappe les compartiments logiques vers les compartiments physiques dans/AWS1/IMG. Dans la plupart des scénarios commerciaux, l'utilisateur n'a pas la possibilité de choisir le compartiment logique : l'ID de ressource logique est codé en dur dans le code ou configuré dans une table de configuration personnalisée.

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

Cette ligne établit une session de sécurité et déclare que ce programme ABAP prévoit d'utiliserDEMO_S3profil SDK. Cet appel constitue la connexion à la configuration du SDK et extrait la région par défaut, les paramètres d'authentification et le rôle IAM souhaité. Un appel àAUTHORIZATION-CHECKest automatiquement créé pour garantir cet objet d'autorisation/AWS1/SESSest satisfait. En outre,AUTHORIZATION-CHECKdes appels seront effectués pour déterminer le rôle IAM logique le plus puissant (numéro de séquence inférieur) pour lequel l'utilisateur est autorisé, en fonction de l'objet d'autorisation/AWS1/LROL. Le SDK part du principe que le rôle IAM est mappé au rôle IAM logique pour le SID et le client. L'objet de session active ensuite le suivi en fonction des paramètres de suivi définis dansIMG.

Si l'utilisateur n'est pas autorisé pour le profil SDK demandé ou pour tout rôle IAM logique disponible, une exception sera déclenchée.

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

Cette ligne convertit la ressource logique en un nom de compartiment physique. Si la ressource logique ne peut pas être résolue parce que la configuration ne possède aucun mappage pour cette combinaison SID/client, une exception sera déclenchée.

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

Cette ligne crée un objet d'API pour Amazon S3 à l'aide ducreate()méthode de/aws1/cl_s3_factory. L'objet renvoyé est du type/aws1/if_s3qui est l'interface d'une API Amazon S3. Un objet d'API distinct doit être créé pour chaque service. Par exemple, si un programme ABAP utilise Amazon S3,AWS Lambda, et DynamoDB, puis il crée des objets d'API à partir de/aws1/cl_s3_factory,/aws1/cl_lmd_factory, et/aws1/cl_dyn_factory.

Certains paramètres facultatifs du constructeur vous permettent de spécifier la région si vous souhaitez remplacer la région par défaut configurée.IMG. De cette façon, il peut y avoir deux cas de/aws1/if_s3, un pourus-east-1et un pourus-west-2, si vous souhaitez copier des objets d'un bucket d'une région vers un bucket d'une autre région. De même, vous pouvez créer deux objets de session de sécurité différents et les utiliser pour créer deux instances distinctes de/aws1/cl_s3, si vous avez besoin d'un rapport à lire à partir d'un bucket lié à la finance et à écrire des objets dans un bucket lié à la logistique.

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

Cette ligne est un appel àListObjectsV2. Elle nécessite des arguments d'entrée simples et renvoie un seul objet. Ces objets peuvent représenter des données JSON et XML approfondies, désérialisées dans une construction orientée objet ABAP. Cela peut être assez compliqué dans certains cas. Il ne vous reste plus qu'à traiter la sortie pour répertorier le contenu du bucket.

      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.

Les données sont accessibles à l'aide d'unGET...()méthode de style qui masque la représentation interne des données.GET_CONTENTS( )renvoie une table ABAP et chaque ligne elle-même contient un objet représentant une seule entrée Amazon S3. Dans la plupart des cas,AWSLe SDK adopte cette approche orientée objet et toutes les données sont représentées sous forme d'objets et de tables. LeLastModifiedle champ est représenté sous la forme d'un horodatage qui peut être converti en date avec l'ABAP natifCONVERT TIME STAMPcommande. leGET_SIZE()renvoie unINT4pour des opérations mathématiques et de mise en forme simplifiées.

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

Toutes les erreurs (connexion, client 4xx, serveur 5xx ou toute autre erreur ABAP, telle que des erreurs d'autorisation ou de configuration) sont représentées comme des exceptions. Vous pouvez traiter chaque exception séparément. Vous pouvez choisir si une exception doit être traitée comme une erreur d'information, une nouvelle tentative, un avertissement, un court dump ou tout autre type de traitement.