

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS SDK for SAP ABAP features
<a name="features"></a>

AWS SDK for SAP ABAP には以下の機能があります。

**Topics**
+ [プログラムによる設定](#programmatic-configuration)
+ [ウェーター](#waiters)
+ [ページネーター](#paginators)
+ [再試行動作](#retry-behavior)
+ [署名者](#presigners)
+ [クロスアカウント IAM ロールの連鎖](#source-profile)

## プログラムによる設定
<a name="programmatic-configuration"></a>

 AWS SDK for SAP ABAP には `/n/AWS1/IMG` IMG 変換を使用し、プログラムによる設定には AWS SDK for SAP ABAP - BTP エディションにはカスタムビジネス設定アプリケーションを使用します。

プログラムによる設定を開始するには、まず `get_config( )` コマンドで設定オブジェクトを取得します。

```
data(lo_config) = lo_s3->get_config( ).
```

各設定オブジェクトは、`IMG` に対応する `GET`ter と `SET`ter を含む `/AWS1/IF_RT_CONFIG` インターフェイスを実装します。例えば、デフォルトリージョンはオーバーライドできます。次のコマンド例を参照してください。

```
lo_s3->get_config( )->/aws1/if_rt_config~set_region( 'us-east-1' ).
```

設定オブジェクトの中には、`IMG` 表現がなく、最大再試行回数など、プログラムでしか設定できないものもあります。次のコマンド例を参照してください。

```
lo_s3->get_config( )->/aws1/if_rt_config~set_max_attempts( 10 ).
```

の設定オブジェクト AWS のサービス には、 で表されていないサービス固有のメソッドを含めることもできます`/aws1/if_rt_config`。例えば、Amazon S3 は、`foobucket.s3.region.amazonaws.com` 仮想エンドポイントまたは `s3.region.amazonaws.com/foobucket` パススタイルを使用して `foobucket` という名前のバケットをアドレス指定できます。以下のコマンド例でパススタイルの使用を強制できます。

```
lo_s3->get_config( )->set_forcepathstyle( abap_true ).
```

サービス設定の詳細については、[AWS SDK for SAP ABAP 「 - API リファレンスガイド](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)」を参照してください。

## ウェーター
<a name="waiters"></a>

非同期 AWS APIs を使用する場合は、特定のリソースが利用可能になるまで待ってから、さらにアクションを実行する必要があります。たとえば、 の `CREATETABLE()` API は、テーブルステータス ですぐに Amazon DynamoDB 応答します`CREATING`。読み取りまたは書き込み操作は、テーブルのステータスが `ACTIVE` に変更された後にのみ開始できます。ウェーターを使用すると、リソースに対してアクションを実行する前に、 AWS リソースが特定の状態にあることを確認できます。

ウェーターは、サービスオペレーションを使用して、 AWS リソースが目的の状態に達するか、リソースが目的の状態に達しないと判断されるまで、リソースのステータスをポーリングします。 AWS リソースを継続的にポーリングするコードを書くのは時間がかかり、エラーが発生しやすくなります。ウェーターは、ユーザーに代わってポーリングを実施する責任を負うことで、この複雑さを簡素化するのに役立ちます。

ウェーターを使用した次の Amazon S3 の例を参照してください。

```
DATA(lo_session) = /aws1/cl_rt_session_aws=>create( cv_pfl ).
DATA(lo_s3) = /aws1/cl_s3_factory=>create( lo_session ).
 
" Create a bucket - initiates the process of creating an S3 bucket and might return before the bucket exists
lo_s3→createbucket( iv_bucket = |amzn-s3-demo-bucket| ).
 
" Wait until the newly created bucket becomes available
lo_s3->get_waiter( )->bucketexists(
    iv_max_wait_time = 200
    iv_bucket = |amzn-s3-demo-bucket|
).
```
+ 次の例では、Amazon S3 クライアントを使用してバケットを作成ます。`get_waiter()` コマンドは、いつ `bucketexists` を指定するように実装されています。
+ ウェーターごとに `iv_max_wait_time` パラメータを指定する必要があります。これは、ウェーターが完了するまで待たなければならない合計時間を表します。前述の例では、ウェーターは 200 秒間実行できます。
+ 必須パラメータには追加の入力が必要な場合があります。前の例では、`iv_bucket` パラメータには Amazon S3 バケット名が必要です。
+ `/AWS1/CX_RT_WAITER_FAILURE` 例外は、ウェーターが `iv_max_wait_time` パラメータで指定された最大時間を超えたことを示します。
+ `/AWS1/CX_RT_WAITER_TIMEOUT` 例外は、ウェーターが目的の状態に達しなかったために停止したことを示します。

## ページネーター
<a name="paginators"></a>

一部の AWS のサービス オペレーションでは、ページ分割されたレスポンスが提供されます。応答ごとに固定量のデータを返すようにページ分割されます。結果セット全体を取得するには、トークンまたはマーカーを使用して後続のリクエストを行う必要があります。例えば、`ListObjectsV2` Amazon S3 オペレーションは、一度に最大で 1,000 個のオブジェクトを返します。結果の次のページを取得するには、適切なトークンを使用して後続のリクエストを行う必要があります。

ページ分割とは、連続してリクエストを送信して、前のリクエストが中断したところから再開するプロセスです。ページネーターは SDK for SAP ABAP によって提供される結果のイテレーターです。ページ分割された API は、ページ分割トークンを使用する API の基本的なメカニズムを理解していなくても簡単に使用できます。

**ページネーターの操作**

ペジネーターオブジェクトを返す `get_paginator()` メソッドを使用してペジネーターを作成できます。ページネーターオブジェクトは、ページ分割中のオペレーションを呼び出します。ページネーターオブジェクトは、基になる API に提供される必須パラメータを受け入れます。このプロセスは、`has_next()` および `get_next()` メソッドを使用して、ページ分割された結果を繰り返し処理できるイテレーターオブジェクトを返します。
+ `has_next()` は、呼び出されたオペレーションで利用できる応答またはページが他にもあるかどうかを示すブール値を返します。
+ `get_next()` は、オペレーションレスポンスを返します。

次の例では、ページネーターを使用して取得した S3 バケット内のすべてのオブジェクトを一覧表示しています。

```
DATA(lo_session) = /aws1/cl_rt_session_aws=>create( 'DEMO' ).
DATA(lo_s3) = /aws1/cl_s3_factory=>create( lo_session ).

TRY.
    DATA(lo_paginator) = lo_s3->get_paginator( ).
    DATA(lo_iterator) = lo_paginator->listobjectsv2(  
        iv_bucket = 'example_bucket'
    ).
    WHILE lo_iterator->has_next( ). 
        DATA(lo_output) = lo_iterator->get_next( ).
        LOOP AT lo_output->get_contents(  ) INTO DATA(lo_object).
            WRITE: / lo_object->get_key( ), lo_object->get_size( ).
        ENDLOOP.
    ENDWHILE.
CATCH /aws1/cx_rt_generic INTO DATA(lo_ex).
    MESSAGE lo_ex->if_message~get_text(  ) TYPE 'I'.
ENDTRY.
```

## 再試行動作
<a name="retry-behavior"></a>

SDK for SAP ABAP では、スロットリングまたは一時的なエラーにより失敗した AWS のサービス へのリクエストの最大再試行回数を設定できます。サービスクライアントレベルで許可される再試行の回数、つまり失敗して例外が発生する前に SDK がオペレーションを再試行する回数は、サービス設定オブジェクトの `AV_MAX_ATTEMPTS` 属性によって指定されます。サービスクライアントオブジェクトが作成されると、SDK は `AV_MAX_ATTEMPTS` 属性をデフォルト値の 3 に設定します。サービス設定オブジェクトを使用すると、最大再試行回数をプログラムで希望の値に設定できます。詳細については、次の例を参照してください。

```
" Retrieve configuration object using Amazon S3 service’s get_config( ) method
DATA(lo_config) = lo_s3->get_config( ).

" Set the maximum number of retries to 5
lo_config->/aws1/if_rt_config~set_max_attempts( 5 ).
 
" Get the value of the maximum retry attempt.
DATA(lv_max_retry_attempts) = lo_config->/aws1/if_rt_config~get_max_attempts( ).
```

**注記**  
設定オブジェクト ABAP SDK では `/AWS1/IF_RT_CONFIG~SET_RETRY_MODE()` メソッドで*再試行モード*を設定できますが、SDK は `standard` 再試行モードのみをサポートします。詳細については、「SDK およびツールリファレンスガイド」の「[Retry behavior](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html)」を参照してください。 AWS SDKs 

## 署名者
<a name="presigners"></a>

署名付き URLs を使用して、一部の に時間制限付きアクセスを許可できます AWS のサービス。署名付き URL は、ブラウザに入力することも、プログラムで使用してサービスオペレーションを実行することもできます。署名付き URL は、有効期限日時まで複数回使用できます。詳細については、[URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html) SDK for SAP ABAP クライアントの使用」には、そのサービスの署名者を作成`GET_PRESIGNER()`するための特別なメソッドが呼び出されます。次に、API クライアントのメソッドに対応する署名者のメソッドを呼び出します。ただし、実際にオペレーションを実行するのではなく、署名付き URL を返す点が異なります。

```
" Retrieve a presigner for Amazon S3
DATA(lo_presigner) = lo_s3->get_presigner( iv_expires_sec = 600 ).

" the presigner getobject() method has the same signature as
" lo_s3->getobject(), but it doesn't actually make the call.
" to the service.  It just prepares a presigned URL for a future call
DATA(lo_presigned_req) = lo_presigner->getobject( iv_bucket = iv_bucket_name iv_key = iv_key ).

" You can provide this URL to a web page, user, email etc so they
" can retrieve the file.  The URL will expire in 10 minutes.
ov_url = lo_presigned_req->get_url( ).
```

## クロスアカウント IAM ロールの連鎖
<a name="source-profile"></a>

クロスアカウント IAM ロール連鎖のサポートにより、ソースプロファイル設定を通じて複数の AWS アカウントにわたるリソースへのシームレスなアクセスが可能になります。この機能を使用すると、複数のロールの前提条件を設定できます。1 つのプロファイルはロールを引き受け、別のロールを引き受けて、複雑なクロスアカウントアクセスパターンを有効にします。

詳細については、[「クロスアカウントアクセスのソースプロファイルの使用](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/source-profile.html)」を参照してください。