現象
OSS SDK を使用してバケットにアクセスすると、次のエラーが返されます:
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint原因
endpoint パラメーターが指定されていないか、間違ったリージョンを指しています。各 OSS バケットは作成されたリージョンに紐付けられており、すべてのリクエストはそのリージョンのエンドポイントを使用する必要があります。
例えば、バケットが中国 (青島) リージョンで作成されたにもかかわらず、SDK が杭州のエンドポイント (oss-cn-hangzhou.aliyuncs.com) で初期化された場合、OSS はこのエラーでリクエストを拒否します。
ソリューション
endpoint パラメーターを、バケットが作成されたリージョンのエンドポイントに設定してください。
以下の例は、正しい初期化パターンを示しています。
import os
import oss2
# バケットが作成されたリージョンに一致するエンドポイントを使用します。
# エンドポイントの完全なリスト: https://www.alibabacloud.com/help/oss/user-guide/regions-and-endpoints
endpoint = 'https://oss-cn-qingdao.aliyuncs.com' # ご利用のバケットのリージョンエンドポイントに置き換えてください
access_key_id = os.environ.get('OSS_ACCESS_KEY_ID')
access_key_secret = os.environ.get('OSS_ACCESS_KEY_SECRET')
auth = oss2.Auth(access_key_id, access_key_secret)
bucket = oss2.Bucket(auth, endpoint, 'examplebucket')import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
// バケットが作成されたリージョンに一致するエンドポイントを使用します。
// エンドポイントの完全なリスト: https://www.alibabacloud.com/help/oss/user-guide/regions-and-endpoints
String endpoint = "https://oss-cn-qingdao.aliyuncs.com"; // ご利用のバケットのリージョンエンドポイントに置き換えてください
String accessKeyId = System.getenv("OSS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("OSS_ACCESS_KEY_SECRET");
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);https://oss-cn-qingdao.aliyuncs.com を、ご利用のバケットのリージョンの実際のエンドポイントに置き換えてください。完全なリストについては、「リージョンとエンドポイント」をご参照ください。
複数リージョンのバケットへのアクセス
アプリケーションが異なるリージョンのバケットにアクセスする場合は、リージョンごとに対応するエンドポイントを持つ個別のクライアントインスタンスを作成してください。
import os
import oss2
access_key_id = os.environ.get('OSS_ACCESS_KEY_ID')
access_key_secret = os.environ.get('OSS_ACCESS_KEY_SECRET')
auth = oss2.Auth(access_key_id, access_key_secret)
# 中国 (青島) リージョン用のクライアント
qingdao_bucket = oss2.Bucket(auth, 'https://oss-cn-qingdao.aliyuncs.com', 'examplebucket')
# 杭州リージョン用のクライアント
hangzhou_bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')String accessKeyId = System.getenv("OSS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("OSS_ACCESS_KEY_SECRET");
// 中国 (青島) リージョン用のクライアント
OSS qingdaoClient = new OSSClientBuilder().build(
"https://oss-cn-qingdao.aliyuncs.com",
accessKeyId,
accessKeySecret
);
// 杭州リージョン用のクライアント
OSS hangzhouClient = new OSSClientBuilder().build(
"https://oss-cn-hangzhou.aliyuncs.com",
accessKeyId,
accessKeySecret
);参考資料
リージョンとエンドポイント — すべての OSS リージョンのパブリックエンドポイントと内部エンドポイント
Java SDK — OSS Java SDK 開発者リファレンス