

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

# Neptune で AWS CLI および SDKsを使用するためのベストプラクティス
<a name="best-practices-cli-sdk"></a>

デフォルトでは、 AWS CLI と AWS SDKs 60 秒後にタイムアウトし、失敗したリクエストを自動的に再試行します。完了までに 60 秒以上かかるクエリの場合、このデフォルトの動作によりクエリ実行が重複します。元のクエリがサーバーで実行されている間に、再試行によって新しいリクエストが実行されます。

**重要**  
Neptune データプレーン API ( など`execute-open-cypher-query`) を使用して長時間実行されるクエリを実行する場合は、自動再試行を無効にします。また、読み取りタイムアウトを増減します。それ以外の場合、クライアントは元の がまだ実行中にクエリを再試行するため、Neptune クラスターの負荷が 2 倍になります。

次の推奨事項は、デフォルトの 60 秒タイムアウトよりも長く実行できる Neptune データプレーンオペレーションに適用されます。
+ 読み取りタイムアウトを 0 (無限) に設定するか、予想される最長クエリ期間より大きい値に設定します。
+ 最大試行回数の合計を 1 (1 回、再試行なし) に設定します。これにより、クライアントはサーバーがまだ処理しているリクエストを再試行できなくなります。

次の例は、 AWS CLI および一般的な SDKs に対してこれらの設定を構成する方法を示しています。

------
#### [ AWS CLI ]

```
export AWS_MAX_ATTEMPTS=1
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://{{your-cluster-endpoint}}:{{port}} \
  --open-cypher-query "RETURN 1" \
  --cli-read-timeout 0
```

`--cli-read-timeout 0` パラメータは読み取りタイムアウトを無効にし、 がレスポンスを無期限 AWS CLI に待機できるようにします。`AWS_MAX_ATTEMPTS=1` 環境変数は、最大試行回数の合計を 1 に設定します。つまり、リクエストは再試行なしで 1 回だけ試行されます。

------
#### [ Python (boto3) ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://{{your-cluster-endpoint}}:{{port}}',
    region_name='{{us-east-1}}',
    config=Config(
        retries={'total_max_attempts': 1, 'mode': 'standard'},
        read_timeout=None
    )
)
```

を設定すると、読み取りタイムアウト`read_timeout=None`が無効になります。`total_max_attempts` を に設定する`1`と、リクエストは再試行なしで 1 回だけ試行されます。

------
#### [ Java V2 SDK ]

```
import software.amazon.awssdk.services.neptunedata.NeptunedataClient;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.core.retry.RetryPolicy;
import software.amazon.awssdk.regions.Region;
import java.time.Duration;
import java.net.URI;

// Build the Neptune dataplane client with no retries and infinite timeout
NeptunedataClient neptunedataClient = NeptunedataClient.builder()
    .endpointOverride(URI.create("https://{{your-cluster-endpoint}}:{{port}}"))
    .region(Region.of("{{us-east-1}}"))
    .overrideConfiguration(ClientOverrideConfiguration.builder()
        .apiCallTimeout(Duration.ZERO)
        .retryPolicy(RetryPolicy.none())
        .build())
    .build();
```

`apiCallTimeout` を に設定すると、API コールの無限タイムアウトが`Duration.ZERO`設定されます。を使用すると、すべての自動再試行`RetryPolicy.none()`が無効になります。

------