

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Programma di esempio Amazon S3
Programma di esempio

Questa sezione illustra un semplice programma di esempio per elencare il contenuto di un bucket Amazon S3 chiamando. `ListObjectsV2`

**Topics**
+ [

## Prerequisiti
](#prerequisites-example-program)
+ [

## Codice
](#code-example-program)
+ [

## Sezioni di codice
](#code-sections)

## Prerequisiti


È necessario soddisfare i seguenti prerequisiti per eseguire questo programma di esempio.
+ Hai un bucket Amazon S3. In questo tutorial, il bucket ha un nome. `demo-invoices.customer.com`
+ Transazione`/AWS1/IMG`:
  + Ha un profilo SDK definito denominato`DEMO_S3`.
    + Nel profilo SDK, il ruolo IAM logico `TESTUSER` deve essere mappato a un ruolo IAM, ad esempio quello `arn:aws:iam::111122223333:role/SapDemoFinance` che concede l'`s3:ListBucket`autorizzazione a elencare i contenuti del tuo bucket Amazon S3.
  + Ha una risorsa logica denominata `DEMO_BUCKET` mappata sul tuo bucket Amazon S3 con il SID e il client del tuo sistema SAP.
+ Il tuo utente ha un ruolo PFCG che:
  + Autorizza l'utente ad accedere al profilo `DEMO_S3` SDK tramite l'oggetto auth -. `/AWS1/SESS`
  + Autorizza l'utente all'`TESTUSER`accesso logico al ruolo IAM tramite l'oggetto auth -. `/AWS1/LROL`
+ Il sistema SAP può autenticarsi AWS utilizzando il metodo definito nel profilo SDK.
+ Il tuo profilo di EC2 istanza Amazon concede al tuo sistema SAP i diritti di accesso al `sts:assumeRole` ruolo IAM `arn:aws:iam::111122223333:role/SapDemoFinance` mappato nel profilo SDK.

## Codice


Il seguente blocco di codice mostra come sarebbe il tuo codice.

```
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.
```

## Sezioni di codice


Di seguito è riportata una revisione del codice in sezioni.

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

L'utente non può specificare un nome fisico per il bucket. Specificano un bucket logico e gli amministratori di sistema (in particolare l'analista aziendale), in coordinamento con l' AWS amministratore, mappano i bucket logici sui bucket fisici. `/AWS1/IMG` Nella maggior parte degli scenari aziendali, l'utente non ha la possibilità di scegliere il bucket logico: l'ID della risorsa logica è codificato nel codice o configurato in una tabella di configurazione personalizzata.

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

Questa riga stabilisce una sessione di sicurezza e dichiara che questo programma ABAP prevede di utilizzare il profilo SDK. `DEMO_S3` Questa chiamata è la connessione alla configurazione SDK e richiama la regione predefinita, le impostazioni di autenticazione e il ruolo IAM desiderato. `AUTHORIZATION-CHECK`Viene effettuata automaticamente una chiamata a per garantire che l'oggetto di autorizzazione `/AWS1/SESS` sia soddisfatto. Inoltre, verranno effettuate `AUTHORIZATION-CHECK` chiamate per determinare il ruolo IAM logico più potente (numero di sequenza inferiore) per cui l'utente è autorizzato, in base all'oggetto di autorizzazione`/AWS1/LROL`. L'SDK presupporrà che il ruolo IAM sia mappato al ruolo IAM logico per il SID e il client. Quindi, l'oggetto di sessione attiva il tracciamento in base alle impostazioni di traccia in. `IMG`

Se l'utente non è autorizzato per il profilo SDK richiesto o per qualsiasi ruolo IAM logico disponibile, verrà sollevata un'eccezione.

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

Questa riga risolve la risorsa logica in un nome di bucket fisico. Se la risorsa logica non può essere risolta perché la configurazione non ha una mappatura per questa combinazione SID/client, verrà sollevata un'eccezione.

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

Questa riga crea un oggetto API per Amazon S3 utilizzando il `create()` metodo di. `/aws1/cl_s3_factory` L'oggetto restituito è di tipo `/aws1/if_s3` che è l'interfaccia per un'API Amazon S3. È necessario creare un oggetto API separato per ogni servizio. Ad esempio, se un programma ABAP utilizza Amazon S3 e DynamoDB AWS Lambda, crea oggetti API da, e. `/aws1/cl_s3_factory` `/aws1/cl_lmd_factory` `/aws1/cl_dyn_factory`

Il costruttore include alcuni parametri opzionali che consentono di specificare la regione se si desidera sovrascrivere la regione predefinita configurata. `IMG` In questo modo, possono esserci due istanze di`/aws1/if_s3`, una per `us-east-1` e una per`us-west-2`, se si desidera copiare oggetti da un bucket in una regione a un bucket in un'altra regione. Allo stesso modo, è possibile creare due diversi oggetti di sessione di sicurezza e utilizzarli per creare due istanze separate di`/aws1/cl_s3`, se è necessario un report da leggere da un bucket relativo alla finanza e scrivere oggetti in un bucket relativo alla logistica.

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

 `ListObjectsV2`Questa linea è una chiamata a. Richiede semplici argomenti di input e restituisce un singolo oggetto. Questi oggetti possono rappresentare dati JSON e XML profondi, deserializzati in un costrutto ABAP orientato agli oggetti. In alcuni casi può essere piuttosto complicato. Ora, devi solo elaborare l'output per elencare il contenuto del 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.
```

Si accede ai dati utilizzando un metodo di `GET...()` stile che nasconde la rappresentazione interna dei dati. `GET_CONTENTS( )`restituisce una tabella ABAP e ogni riga contiene un oggetto che rappresenta una singola voce di Amazon S3. Nella maggior parte dei casi, AWS SDK adotta questo approccio orientato agli oggetti e tutti i dati sono rappresentati come oggetti e tabelle. Il `LastModified` campo è rappresentato come un timestamp che può essere convertito in una data con il `CONVERT TIME STAMP` comando ABAP-native. Restituisce an per semplici operazioni matematiche e di formattazione`GET_SIZE()`. `INT4`

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

Tutti gli errori: connessione, client 4xx, server 5xx o qualsiasi errore ABAP, come errori di autorizzazione o configurazione, sono rappresentati come eccezioni. È possibile affrontare ogni eccezione separatamente. Puoi scegliere se gestire un'eccezione come un errore informativo, un nuovo tentativo, un avviso, un breve dump o qualsiasi altro tipo di gestione.