よくある質問 - AWS SDK for Go v2

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

よくある質問

SDK の HTTP クライアントを設定するにはどうすればよいですか? ガイドラインやベストプラクティスはありますか?

お客様のワークロードに最適な HTTP ワークフロー設定方法について、具体的なガイダンスは提供できません。この質問への回答は複数の要因 (以下を含むが、それらに限定されない) によって決まります。

  • アプリケーションのネットワーク負荷 (TPS、スループットなど)

  • 使用中のサービス

  • デプロイのコンピューティング特性

  • デプロイの地理的特性

  • アプリケーションに必要な動作やアプリケーション自体の要件 (SLA、タイミングなど)

オペレーションのタイムアウトはどう設定すればよいですか?

前の質問と同様、状況によります。ここで考慮すべき要素は次のとおりです。

  • HTTP クライアント設定に関する上記のすべての要因

  • 独自のアプリケーションのタイミングや SLA 制約 (例: 他のユーザーにトラフィックを提供している場合)

この質問に対する答えを、上流の挙動に基づく単なる経験則から導くべきではありません。例えば、「このオペレーションを 1,000 回実行したところ最大で 5 秒かかったので、安全係数を 2 倍としてタイムアウトを 10 秒に設定する」というような考え方です。環境条件は変化し、サービスが一時的に低下することもあるため、このような前提は予告なく通用しなくなる可能性があります。

SDK によるリクエストがタイムアウトする、または処理に時間がかかりすぎる場合、どうすればよいですか?

ネットワーク通信に時間がかかることによるオペレーション呼び出しの遅延やタイムアウトについては、サポートしかねます。SDK での「ネットワーク通信時間」は、次のいずれかの処理時間を指します。

  • SDK クライアントの HTTPClient.Do() メソッド内で費やされた時間

  • 呼び出し元に転送された HTTP レスポンス本文の Read() で費やされた時間 (例: GetObject)

オペレーションのレイテンシーやタイムアウトによる問題が発生している場合は、まず SDK のオペレーションライフサイクルのテレメトリを取得し、ネットワーク通信時間とその前後のオーバーヘッド時間の内訳を把握する必要があります。この目的に役立つ再利用可能なコードスニペットについては、SDK オペレーションのタイミング計測に関するガイドを参照してください。

read: connection reset エラーを修正するにはどうすればよいですか?

SDK は、connection reset パターンに一致するエラーが発生した場合、そのオペレーションをデフォルトで再試行します。これにより、HTTP レスポンスが完全に読み取られ、モデル化された結果型に逆シリアル化される大半のオペレーションで、エラー処理が可能になります。

ただし、このエラーは再試行ループの外で発生することがあります。例えば、一部のサービスオペレーションでは API の HTTP レスポンス本文が io.ReadCloser を通じて呼び出し元に直接転送され、ネットワークから直接読み取られる場合があります (例: GetObject のオブジェクトペイロード)。レスポンス本文に対して Read を実行する際に、このエラーが発生することがあります。

このエラーは、レスポンスの読み取り中にホスト、サービス、または中間機器 (NAT ゲートウェイ、プロキシ、ロードバランサーなど) が接続を切断したことを示しています。

このエラーは複数の理由で発生する可能性があります。

  • サービスオペレーションの呼び出し後、レスポンスを受信してから、しばらくの間レスポンス本文を読み取らなかった。このタイプのオペレーションでは、HTTP レスポンス本文をできるだけ早く読み取ることをお勧めします。

  • 以前に受信したレスポンス本文をクローズしていなかった。これにより、特定のプラットフォームで接続がリセットされる可能性があります。オペレーションのレスポンスで提供される io.ReadCloser インスタンスは、その内容を使用するかどうかにかかわらず、必ずクローズしてください。

さらに、影響を受ける接続に対して、ネットワークの境界 (例: 管理下にあるプロキシの後ろ)で tcpdump を実行してみてください。AWS エンドポイントが TCP RST を送信しているようであれば、AWS サポートコンソールを使用して該当サービスに対するサポートケースを開いてください。その際は、問題が発生したリクエスト ID や具体的なタイムスタンプを提供できるように準備してください。

HTTP プロキシを SDK で使用しているときに「invalid signature」 (無効な署名) エラーが発生するのはなぜですか?

AWS サービスの署名アルゴリズム (通常は sigv4) は、シリアル化されたリクエストのヘッダー、特に X- プレフィックスの付いたヘッダーに紐付いています。プロキシは送信リクエストを変更してしまう傾向があり、追加の転送情報 (多くの場合 X-Forwarded-For ヘッダー経由) を挿入することで、SDK が計算した署名を実質的に無効化してしまいます。

HTTP プロキシを使用していて署名エラーが発生する場合は、プロキシから送信される時点でのリクエストをキャプチャし、変更がないか判断する必要があります。