

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Program contoh Amazon S3
<a name="example-program"></a>

Bagian ini memandu Anda melalui program contoh sederhana untuk membuat daftar konten bucket Amazon S3 dengan menelepon. `ListObjectsV2`

**Topics**
+ [Prasyarat](#prerequisites-example-program)
+ [Kode](#code-example-program)
+ [Bagian kode](#code-sections)

## Prasyarat
<a name="prerequisites-example-program"></a>

Anda harus memenuhi prasyarat berikut untuk menjalankan program contoh ini.
+ Anda memiliki ember Amazon S3. Dalam tutorial ini, ember diberi nama`demo-invoices.customer.com`.
+ Transaksi`/AWS1/IMG`:
  + Memiliki profil SDK yang ditentukan bernama`DEMO_S3`.
    + Di profil SDK, peran IAM logis `TESTUSER` harus dipetakan ke peran IAM, seperti `arn:aws:iam::111122223333:role/SapDemoFinance` yang memberikan `s3:ListBucket` izin untuk mencantumkan konten bucket Amazon S3 Anda.
  + Memiliki sumber daya logis bernama `DEMO_BUCKET` yang dipetakan ke bucket Amazon S3 Anda dengan SID dan klien sistem SAP Anda.
+ Pengguna Anda memiliki peran PFCG yang:
  + Mengotorisasi pengguna untuk mengakses profil `DEMO_S3` SDK melalui objek auth -. `/AWS1/SESS`
  + Mengotorisasi pengguna untuk `TESTUSER` akses peran IAM logis melalui objek auth -. `/AWS1/LROL`
+ Sistem SAP Anda dapat mengautentikasi dirinya sendiri untuk AWS menggunakan metode yang ditentukan dalam profil SDK.
+ Profil EC2 instans Amazon Anda memberi sistem SAP Anda hak untuk peran IAM yang `arn:aws:iam::111122223333:role/SapDemoFinance` dipetakan `sts:assumeRole` di profil SDK.

## Kode
<a name="code-example-program"></a>

Blok kode berikut menunjukkan seperti apa kode Anda nantinya.

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

## Bagian kode
<a name="code-sections"></a>

Berikut ini adalah ulasan kode di bagian.

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

Pengguna tidak dapat menentukan nama bucket fisik. Mereka menentukan bucket logis dan administrator sistem (khususnya analis bisnis) berkoordinasi dengan AWS administrator memetakan bucket logis ke bucket fisik. `/AWS1/IMG` Dalam sebagian besar skenario bisnis, pengguna tidak memiliki kesempatan untuk memilih bucket logika — ID sumber daya logis dikodekan keras dalam kode atau dikonfigurasi dalam tabel konfigurasi khusus.

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

Baris ini menetapkan sesi keamanan dan menyatakan bahwa program ABAP ini mengharapkan untuk menggunakan profil SDK. `DEMO_S3` Panggilan ini adalah koneksi ke konfigurasi SDK dan menarik Wilayah default, pengaturan otentikasi, dan Peran IAM yang diinginkan. Panggilan ke `AUTHORIZATION-CHECK` dilakukan secara otomatis untuk memastikan bahwa objek otorisasi `/AWS1/SESS` terpenuhi. Selain itu, `AUTHORIZATION-CHECK` panggilan akan dilakukan untuk menentukan peran IAM logis yang paling kuat (nomor urut lebih rendah) yang diizinkan pengguna, berdasarkan objek otorisasi. `/AWS1/LROL` SDK akan mengasumsikan bahwa peran IAM dipetakan ke peran IAM logis untuk SID dan klien. Kemudian, objek sesi mengaktifkan penelusuran berdasarkan pengaturan jejak di. `IMG`

Jika pengguna tidak diizinkan untuk profil SDK yang diminta atau untuk peran IAM logis apa pun yang tersedia, pengecualian akan diajukan.

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

Baris ini menyelesaikan sumber daya logis ke nama bucket fisik. Jika sumber daya logis tidak dapat diselesaikan karena konfigurasi tidak memiliki pemetaan untuk kombinasi SID/klien ini, pengecualian akan dimunculkan.

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

Baris ini membuat objek API untuk Amazon S3 menggunakan `create()` metode. `/aws1/cl_s3_factory` Objek yang dikembalikan adalah tipe `/aws1/if_s3` yang merupakan antarmuka untuk Amazon S3 API. Objek API terpisah harus dibuat untuk setiap layanan. Misalnya, jika program ABAP menggunakan Amazon S3 AWS Lambda,, dan DynamoDB, maka program tersebut akan membuat objek API dari,, dan. `/aws1/cl_s3_factory` `/aws1/cl_lmd_factory` `/aws1/cl_dyn_factory`

Ada beberapa parameter opsional ke konstruktor yang memungkinkan Anda menentukan Wilayah jika Anda ingin mengganti Wilayah default yang dikonfigurasi. `IMG` Dengan cara ini, bisa ada dua contoh`/aws1/if_s3`, satu untuk `us-east-1` dan satu untuk`us-west-2`, jika Anda ingin menyalin objek dari ember di satu Wilayah ke ember di Wilayah lain. Demikian pula, Anda dapat membuat dua objek sesi keamanan yang berbeda dan menggunakannya untuk membuat dua instance terpisah`/aws1/cl_s3`, jika Anda memerlukan laporan untuk membaca dari bucket terkait keuangan dan menulis objek ke bucket terkait logistik.

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

 Baris ini adalah panggilan untuk`ListObjectsV2`. Hal ini membutuhkan argumen masukan sederhana dan mengembalikan satu objek. Objek-objek ini dapat mewakili data JSON dan XHTML yang dalam, de-serialisasi ke dalam konstruksi berorientasi objek ABAP. Ini bisa sangat rumit dalam beberapa kasus. Sekarang, Anda hanya perlu memproses output untuk membuat daftar isi ember.

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

Data diakses menggunakan metode `GET...()` gaya yang menyembunyikan representasi internal data. `GET_CONTENTS( )`mengembalikan tabel ABAP dan setiap baris itu sendiri berisi objek yang mewakili entri Amazon S3 tunggal. Dalam kebanyakan kasus, AWS SDK mengambil pendekatan berorientasi objek ini dan semua data direpresentasikan sebagai objek dan tabel. `LastModified`Bidang direpresentasikan sebagai stempel waktu yang dapat dikonversi ke tanggal dengan `CONVERT TIME STAMP` perintah ABAP-native. `GET_SIZE()` mengembalikan operasi matematika dan pemformatan `INT4` yang mudah.

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

Semua kesalahan — koneksi, klien 4xx, server 5xx, atau kesalahan ABAP apa pun, seperti kesalahan otorisasi atau konfigurasi, direpresentasikan sebagai pengecualian. Anda dapat menangani setiap pengecualian secara terpisah. Anda memiliki pilihan apakah pengecualian harus ditangani sebagai kesalahan informasi, coba lagi, peringatan, pembuangan singkat, atau jenis penanganan lainnya.