スキップしてコンテンツを表示

Amazon S3 バケットで「cp」コマンドまたは「sync」コマンドを実行したときの接続エラーをトラブルシューティングする方法を教えてください。

所要時間2分
0

Amazon Simple Storage Service (Amazon S3) バケットで AWS コマンドラインインターフェイス (AWS CLI) コマンド "cp" または "sync" を実行したいのですが、エラーが発生します。

解決策

注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

AWS CLI で cp コマンドまたは sync コマンドを実行するには、適切な Amazon S3 エンドポイントに接続する必要があります。この条件が満たされない場合、エラーが発生し、サービスがエンドポイント URL に接続できなかったか、接続がタイムアウトしたことを示すメッセージが表示されます。発生したエラーに応じて、次のトラブルシューティング手順を実行します。

"Could not connect to the endpoint URL" エラー

リージョンと Amazon S3 ポイントが適切であることを確認する

AWS CLI でコマンドを実行すると、API リクエストが AWS リージョンのデフォルト Amazon S3 エンドポイントに送信されます。リージョンを指定した場合、AWS CLI はリージョン固有の Amazon S3 エンドポイントに API リクエストを送信します。次に、AWS CLI はリクエストをバケットのリージョナル Amazon S3 エンドポイントにリダイレクトします。

リージョンまたはエンドポイントの指定に誤入力があった場合、"Could not connect to the endpoint URL" エラーが発生する可能性があります。たとえば、次のコマンドは、エンドポイント名に余分な e が含まれることが原因でエラーを返します。

aws s3 cp filename s3://DOC-EXAMPLE-BUCKET/ --endpoint-url https://s3-acceleratee.amazonaws.com

cp コマンドまたは sync コマンドを実行する前に、関連するリージョンAmazon S3 エンドポイントが正確であることを確認してください。AWS CLI コマンドの実行時に --debug フラグを指定すると、AWS CLI が使用するエンドポイントを特定できます。コマンド例:

aws s3 cp filename s3://DOC-EXAMPLE-BUCKET/ --debug

注: Amazon S3 Transfer Acceleration を使用する場合は、バケットで有効化します。エンドポイント bucket-name.s3-accelerate.amazonaws.com を使用します。または、デュアルスタックエンドポイント bucket-name.s3-accelerate.dualstack.amazonaws.com を使用して IPv6 経由でバケットに接続します。bucket-name を目的のバケット名に置き換えてください。

DNS が Amazon S3 エンドポイントを解決できることを確認する

DNS が Amazon S3 エンドポイントに解決できることを確認するには、DNS クエリツール (例: nslookup、digping) を使用します。コマンド例:

nslookup s3.amazonaws.com
dig s3.amazonaws.com
ping s3.amazonaws.com

DNS が Amazon S3 エンドポイントに解決できない場合は、DNS 構成をトラブルシューティングします。DNS プロバイダーに Amazon Route 53 を使用する場合は、「Amazon Route 53 のトラブルシューティング」を参照してください。

"Connect timeout on endpoint URL" エラー

ネットワークが Amazon S3 エンドポイントに接続できることを確認する

ネットワークのファイアウォールは、Amazon S3 エンドポイントに対するトラフィックを、Amazon S3 トラフィックに使用するポートで許可していることを確認します。

たとえば、次の telnet コマンドは、Amazon S3 エンドポイント ap-southeast-2 へのポート 443 での接続をテストします。

telnet s3.ap-southeast-2.amazonaws.com 443

ネットワークパケットをキャプチャして分析し、マシンが Amazon S3 エンドポイントとの TCP ハンドシェイクを正常に完了できることを確認するには、次の tcpdump コマンドを実行します。

sudo tcpdump -i eth0 'host s3.ap-southeast-2.amazonaws.com and port 443' -s0 -w samplecapture.pcap

注: eth0 を Elastic ネットワークインターフェイスに、ap-southeast-2 を Amazon S3 エンドポイントのリージョンに、443 をポートに置き換えてください。-s0 フラグでパケット全体をキャプチャし、-w samplecapture.pcap でキャプチャをファイルに書き込みます。Wireshark などのツールを使用すると、ファイル内の情報を分析できます。

接続を確認するには、TCP スリーウェイハンドシェイク (SYN、SYN-ACK、ACK) を見つけます。SYN-ACK 応答を含まない SYN パケットのみが表示される場合は、ファイアウォールまたはルーティングに問題があります。、

Amazon S3 エンドポイントに対するルーティングの問題または途中のパケットロスを検出するには、次の mtr コマンドを実行します。

mtr -n -T -c 200 s3.ap-southeast-2.amazonaws.com -P 443 --report

注: ap-southeast-2 をリージョンに、443 をポートに置き換えてください。-n フラグを指定すると、DNS 解決を無効化してテストを高速化できます。-T フラグを指定すると、Internet Control Messenger Protocol (ICMP) よりも正確な TCP パケットが使用されます。上記のコマンドは、テストを 200 サイクル実行することで統計情報の正確性を改善し、レポートを生成します。

Windows では、WinMTR で同等のルーティングテストを実行できます。高遅延、パケットのドロップ、ルーティングのループなど、Amazon S3 エンドポイントへの接続に影響する要素がないか確認します。

Amazon EC2 インスタンスの VPC 構成を確認する

Amazon Elastic Compute Cloud (Amazon EC2) で "Connection timeout" エラーが発生する場合は、仮想プライベートクラウド (VPC) 構成を確認します。

EC2 インスタンスがパブリックサブネットに配置されている場合は、次の設定を確認します。

EC2 インスタンスがプライベートサブネットに配置されている場合は、次の設定を確認します。

  • NAT ゲートウェイがサブネットのルートテーブルに関連付けられていることを確認します。
  • Amazon S3 で VPC エンドポイントを使用する場合は、AWS CLI 構成ファイルに正しいリージョンが含まれることを確認します。
    注: Amazon S3 の VPC エンドポイントはリージョン固有です。たとえば、sync--region us-west-1 を実行したものの、VPC エンドポイントが他のリージョンに配置されている場合、"Could not connect to the endpoint URL" エラーが発生します。

AWS PrivateLink を使用して VPC 内の Amazon S3 にアクセスする場合は、Reachability Analyzer を使用します。このツールは、セキュリティグループ、ネットワーク ACL、ルートテーブルにおける、接続をブロックする可能性がある構成ミスを特定する補助となります。たとえば、Reachability Analyzer の分析を作成すると、インスタンスとインターフェイスエンドポイント間のルートを確認できます。

コメントはありません

関連するコンテンツ