OSSClientは、Object Storage Service (OSS) のJavaクライアントです。 バケットやオブジェクトなどのOSSリソースの管理に使用されます。 OSS SDK for Javaを使用してリクエストを開始するには、OSSClientインスタンスを初期化し、ビジネス要件に基づいてClientConfiguration設定クラスのデフォルト設定項目を変更する必要があります。
前提条件
アクセス資格情報が設定されます。 詳細については、「アクセス資格情報の設定」をご参照ください。
OSSClientインスタンスの作成
OSSClientはスレッドセーフで、複数のスレッドを使用して同じインスタンスにアクセスできます。 同じOSSClientインスタンスを再利用するか、ビジネス要件に基づいて複数のOSSClientインスタンスを作成できます。
OSSClientインスタンスには接続プールがあります。 OSSClientインスタンスを使用しなくなった場合は、shutdownメソッドを呼び出してOSSClientインスタンスをシャットダウンします。 これにより、OSSClientインスタンスの数が多すぎることによるリソースの枯渇を防ぎます。
(推奨) V4署名アルゴリズムの使用
より良いセキュリティを提供するV4署名アルゴリズムを使用することを推奨します。 V4署名アルゴリズムを使用する場合は、regionとSignVersionの2つのパラメーターを追加します。 リージョンはAlibaba CloudリージョンIDである必要があります。 例: cn-杭州
SignVersionをSignVersion.V4形式で指定します。 OSS SDK for Java 3.17.4以降はV4署名をサポートしています。
次のサンプルコードは、OSSエンドポイントとV4署名アルゴリズムを使用してOSSClientインスタンスを作成する方法の例を示しています。 Security Token Service (STS) から取得したカスタムドメイン名またはアクセス資格情報を使用してOSSClientインスタンスを作成するには、実際のシナリオに基づいて次のサンプルコードを変更します。
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region of the endpoint. Example: cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Create an OSSClient instance.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
// Shut down the OSSClient instance.
ossClient.shutdown();
(非推奨) V1署名アルゴリズムの使用
2024年12月1日以降、Object Storage Service (OSS) のV1署名アルゴリズムは、新しいUIDを持つ新規顧客は利用できなくなります。 2025年6月1日以降、OSSはV1署名アルゴリズムを更新および維持しなくなり、V1署名アルゴリズムは新しいバケットで使用できなくなります。 ビジネスへの影響を防ぐため、できるだけ早い機会にV1シグネチャをV4シグネチャにアップグレードします。
OSSエンドポイントを使用したOSSClientインスタンスの作成
次のサンプルコードは、OSSエンドポイントを使用してOSSClientインスタンスを作成する方法の例を示しています。 さまざまなリージョンのOSSエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
// Shut down the OSSClient instance.
ossClient.shutdown();
カスタムドメイン名を使用したOSSClientインスタンスの作成
次のサンプルコードは、カスタムドメイン名を使用してOSSClientインスタンスを作成する方法の例を示しています。 詳細については、「カスタムドメイン名をバケットのデフォルトドメイン名にマップする」をご参照ください。
カスタムドメイン名を使用する場合、ossClient.listBucketsメソッドは使用できません。
// Specify the custom domain name.
String endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Create ClientBuilderConfiguration and change the default values of the parameters based on your business requirements.
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// Specify whether to use CNAME. CNAME is used to map the custom domain name to the bucket.
conf.setSupportCname(true);
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf);
// Shut down the OSSClient instance.
ossClient.shutdown();
STSから取得したアクセス資格情報を使用したOSSClientインスタンスの作成
次のサンプルコードは、STSから取得したアクセス資格情報を使用してOSSClientインスタンスを作成する方法の例を示しています。
STSの設定方法の詳細については、「STSが提供する一時的なアクセス資格情報を使用してOSSにアクセスする」をご参照ください。
AssumeRole操作を呼び出すか、さまざまなプログラミング言語のSTS SDKを使用して、一時的なアクセス資格情報を取得できます。 詳細については、「概要」をご参照ください。
一時的なアクセス資格情報は、一時的なAccessKeyペアとセキュリティトークンで構成されます。 一時的なAccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 一時的なアクセス資格情報の有効期間は秒単位です。 一時的なアクセス資格情報の最小有効期間は900秒です。 一時的なアクセス資格情報の最大有効期間は、現在のロールに指定されている最大セッション期間です。 詳細については、「RAMロールの最大セッション期間の指定」をご参照ください。
完全なサンプルコードについては、「許可されたアクセス」をご参照ください。
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Obtain temporary access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
// Shut down the OSSClient instance.
ossClient.shutdown();
STSAssumeRoleを使用したOSSClientインスタンスの作成
次のサンプルコードは、STSAssumeRoleを使用してOSSClientインスタンスを作成する方法の例を示しています。
// Specify the region for which you want to authorize STSAssumeRole to access. In this example, the China (Hangzhou) region is used. Specify your actual region.
String region = "cn-hangzhou";
// Obtain the AccessKey ID and AccessKey secret of the RAM user from the environment variables. Before you run the sample code, make sure that the environment variables are configured.
String accessKeyId = System.getenv("ALIYUN_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIYUN_ACCESS_KEY_SECRET");
// Obtain the ARN of the RAM role from the environment variable. Before you run the sample code, make sure that the environment variables are configured.
String roleArn = System.getenv("ALIYUN_STS_ROLE_ARN");
// Create an STSAssumeRoleSessionCredentialsProvider instance.
STSAssumeRoleSessionCredentialsProvider credentialsProvider = CredentialsProviderFactory.newSTSAssumeRoleSessionCredentialsProvider(
region, accessKeyId, accessKeySecret, roleArn);
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Create ClientBuilderConfiguration.
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf);
// Shut down the OSSClient instance.
ossClient.shutdown();
EcsRamRoleを使用したOSSClientインスタンスの作成
インスタンスにアタッチされたRAMロールを使用して、ECS (Elastic Compute Service) インスタンスからOSSにアクセスできます。 RAMロールをECSインスタンスにアタッチして、STSから取得した一時的なアクセス資格情報を使用してインスタンスからOSSにアクセスできます。 STSの一時的なアクセス資格情報は自動的に生成および更新されます。 アプリケーションは、インスタンスメタデータURLを使用してSTSの一時的なアクセス資格情報を取得できます。
次のサンプルコードは、EcsRamRoleを使用してOSSClientインスタンスを作成する方法の例を示しています。
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Use ecs-ram-role to obtain temporary access credentials.
InstanceProfileCredentialsProvider credentialsProvider = CredentialsProviderFactory.newInstanceProfileCredentialsProvider("ecs-ram-role");
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, new ClientBuilderConfiguration());
// Shut down the OSSClient instance.
ossClient.shutdown();
Apsara StackまたはプライベートリージョンでのOSSClientインスタンスの作成
次のサンプルコードは、Apsara StackまたはプライベートリージョンでOSSClientインスタンスを作成する方法の例を示しています。
// Specify the endpoint of the region in which the bucket is located.
String endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Create ClientBuilderConfiguration and change the default values of the parameters based on your business requirements.
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// Disable CNAME.
conf.setSupportCname(false);
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf);
// Shut down the OSSClient instance.
ossClient.shutdown();
IPアドレスを使用したOSSClientインスタンスの作成
次のサンプルコードは、IPアドレスを使用してOSSClientインスタンスを作成する方法の例を示しています。
// In specific scenarios, such as scenarios that involve a private region, an IP address is used as an endpoint. In these scenarios, you must specify the actual IP address.
String endpoint = "https://10.10.10.10";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Create ClientBuilderConfiguration.
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// Enable access from a second-level domain. By default, access from second-level domains is disabled. OSS SDK for Java 2.1.2 or later automatically detects IP addresses. If you use OSS SDK for Java whose version is earlier than 2.1.2, you must specify this parameter.
conf.setSLDEnabled(true);
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf);
// Shut down the OSSClient instance.
ossClient.shutdown();
OSSClient インスタンスの設定
ClientConfigurationは、OSSClientインスタンスの構成クラスです。 ClientConfigurationを使用して、プロキシ、接続タイムアウト期間、最大接続数などのパラメーターを設定できます。 次の表に、OSSClientインスタンスを設定するときに設定できるパラメーターを示します。
パラメーター | 説明 | 移動方法 |
MaxConnections | 許可されるHTTP接続の最大数。 デフォルト値: 1024。 | ClientConfiguration.setMaxConnections |
SocketTimeout | ソケット層でのデータ送信のタイムアウト期間。 単位:ミリ秒。 デフォルト値: 50000 | ClientConfiguration.setSocketTimeout |
ConnectionTimeout | 接続を確立するためのタイムアウト期間。 単位:ミリ秒。 デフォルト値: 50000 | ClientConfiguration.setConnectionTimeout |
ConnectionRequestTimeout | 接続プールから接続を取得するためのタイムアウト時間。 単位:ミリ秒。 デフォルトでは、タイムアウト期間は無制限です。 | ClientConfiguration.setConnectionRequestTimeout |
IdleConnectionTime | アイドル接続のタイムアウト期間。 タイムアウト期間が終了すると、接続は閉じられます。 単位:ミリ秒。 デフォルト値: 60000 | ClientConfiguration.setIdleConnectionTime |
MaxErrorRetry | リクエストエラー発生時の最大リトライ回数。 デフォルト値: 3。 | ClientConfiguration.setMaxErrorRetry |
SupportCname | CNAME をエンドポイントとして使用できるかどうかを指定します。 デフォルトでは、CNAMEをエンドポイントとして使用できます。 | ClientConfiguration.setSupportCname |
SLDEnabled | 第2レベルドメインからのアクセスを有効にするかどうかを指定します。 デフォルトでは、第2レベルドメインからのアクセスは無効になっています。 | ClientConfiguration.setSLDEnabled |
プロトコル | OSSへの接続に使用されるプロトコル。 デフォルト値: HTTP。 有効な値: HTTPおよびHTTPS。 | ClientConfiguration.setProtocol |
UserAgent | ユーザーエージェント (HTTPヘッダーのuser-agentフィールド) 。 デフォルト値: | ClientConfiguration.setUserAgent |
ProxyHost | プロキシサーバーへのアクセスに使用されるホストのIPアドレス。 | ClientConfiguration.setProxyHost |
ProxyPort | プロキシサーバーへの接続に使用されるポート。 | ClientConfiguration.setProxyPort |
ProxyUsername | プロキシサーバーへのログオンに使用されるユーザー名。 | ClientConfiguration.setProxyUsername |
ProxyPassword | プロキシサーバーへのログインに使用されるパスワード。 | ClientConfiguration.setProxyPassword |
RedirectEnable | HTTPリダイレクトを有効にするかどうかを指定します。 説明 OSS SDK for Java 3.10.1以降のHTTPリダイレクトを有効にするかどうかを設定できます。 デフォルトでは、OSS SDK for Java 3.10.1以降でHTTPリダイレクトが有効になっています。 | ClientConfiguration.setRedirectEnable |
VerifySSLEnable | SSLベースの認証を有効にするかどうかを指定します。 説明 OSS SDK for Java 3.10.1以降のSSLベースの認証を有効にするかどうかを指定できます。 OSS SDK for Java 3.10.1以降では、デフォルトでSSLベースの認証が有効になっています。 | ClientConfiguration.setVerifySSLEnable |
次のサンプルコードは、ClientConfigurationを使用してOSSClientインスタンスのパラメーターを設定する方法の例を示しています。
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Create ClientBuilderConfiguration.
// ClientBuilderConfiguration is a configuration class of an OSSClient instance. You can use ClientBuilderConfiguration to configure parameters, such as proxies, connection timeout period, and the maximum number of connections.
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// Specify the maximum number of HTTP connections allowed by an OSSClient instance. Default value: 1024.
conf.setMaxConnections(200);
// Specify the timeout period for data transmission at the socket layer. Unit: milliseconds. Default value: 50000.
conf.setSocketTimeout(10000);
// Specify the timeout period for establishing a connection. Unit: milliseconds. Default value: 50000.
conf.setConnectionTimeout(10000);
// Specify the timeout period for obtaining a connection from the connection pool. Unit: milliseconds. By default, the timeout period is unlimited.
conf.setConnectionRequestTimeout(1000);
// Specify the timeout period for idle connections. The connection is closed after the timeout period ends. Unit: milliseconds. Default value: 60000.
conf.setIdleConnectionTime(10000);
// Specify the maximum number of retries when a request error occurs. Default value: 3.
conf.setMaxErrorRetry(5);
// Specify whether CNAME can be used as an endpoint. By default, CNAME can be used as an endpoint.
conf.setSupportCname(true);
// Specify whether access from second-level domains is enabled. By default, access from second-level domains is disabled.
conf.setSLDEnabled(true);
// Specify the protocol used to connect to OSS. Valid values: HTTP and HTTPS. Default value: HTTP.
conf.setProtocol(Protocol.HTTP);
// Specify User-Agent in the HTTP header. Default value: aliyun-sdk-java.
conf.setUserAgent("aliyun-sdk-java");
// Specify the IP address of the proxy server. Replace <yourProxyHost> with the IP address of the proxy server. Example: 196. xxx.xxx.
conf.setProxyHost("<yourProxyHost>");
// Specify the username verified by the proxy server. Replace <yourProxyUserName> with the username of the proxy server. Example: root.
conf.setProxyUsername("<yourProxyUserName>");
// Specify the password verified by the proxy server. Replace <yourProxyPassword> with the password of the user.
conf.setProxyPassword("<yourProxyPassword>");
// Specify whether to enable HTTP redirection. Default value: true.
conf.setRedirectEnable(true);
// Specify whether to enable SSL-based authentication. Default value: true.
conf.setVerifySSLEnable(true);
// Create an OSSClient instance.
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(conf)
.region(region)
.build();
// Shut down the OSSClient instance.
ossClient.shutdown();
再試行ポリシー
エラーが発生すると、OSSはリクエストタイプごとに異なる再試行ポリシーを使用します。
リクエストがPOSTリクエストの場合、OSSはデフォルトでリクエストを再試行しません。
非POSTリクエストが次のいずれかのシナリオに一致する場合、OSSはデフォルトの再試行ポリシーに基づいて最大3回までリクエストを再試行します。
ClientException例外が報告されると、ConnectionTimeout、SocketTimeout、ConnectionRefused、UnknownHost、またはSocketExceptionのいずれかのエラーコードが返されます。
OSSException例外が報告されると、InvalidResponse以外のエラーコードが返されます。
返されたHTTPステータスコードが500、502、または503の場合。
既定の再試行ポリシーがビジネス要件を満たせない場合は、カスタム再試行ポリシーを作成し、ClientConfigurationクラスを使用して再試行の最大数を設定できます。 ほとんどの場合、カスタム再試行ポリシーを作成しないことをお勧めします。 次のサンプルコードは、カスタム再試行ポリシーを作成する方法の例を示しています。
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Create ClientBuilderConfiguration.
// ClientBuilderConfiguration is a configuration class of an OSSClient instance. You can use ClientBuilderConfiguration to specify the maximum number of retries, a custom retry policy, and the connection timeout period.
ClientBuilderConfiguration conf= new ClientBuilderConfiguration();
// Specify the maximum number of retries when a request error occurs. Default value: 3.
conf.setMaxErrorRetry(5);
// Specify a custom retry policy. In most cases, we recommend that you do not specify a custom retry policy.
// For example, the TestRetryStrategy class is a retry policy that you specify. In this case, the TestRetryStrategy class must inherit RetryStrategy.
conf.setRetryStrategy(new TestRetryStrategy());
// Create an OSSClient instance.
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(conf)
.region(region)
.build();
// Shut down the OSSClient instance.
ossClient.shutdown();
次のステップ
OSSClientインスタンスを初期化した後、インスタンスを使用してリクエストを開始できます。 詳細については、「OSS SDK For Javaの使用を開始する」をご参照ください。