すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:転送アクセラレーション

最終更新日:Nov 10, 2024

転送アクセラレーションを有効にすると、バケット内のオブジェクトのアップロードとダウンロードを長距離で高速化できます。 たとえば、中国本土にいる場合、中国本土の外部にあるバケットにオブジェクトをアップロードしたり、バケットからオブジェクトをダウンロードしたりするときに、転送アクセラレーションを有効にできます。 このようにして、データのアップロードまたはダウンロードが高速化されます。 転送高速化機能は、世界中に分散したデータセンターを備えた最適化されたエンドツーエンドのソリューションを提供し、インターネット経由のObject Storage Service (OSS) へのアクセスを高速化します。 この機能を有効にすると、バケット宛てのリクエストは、最適なネットワークパスとプロトコルを使用して、ユーザーに最も近いデータセンターにルーティングされます。

前提条件

現在のAlibaba Cloudアカウントの実名登録が完了しました。 詳細については、「」をご参照ください。実名登録を完了するにはどうすればよいですか?

シナリオ

  • リモートデータ転送を高速化

    世界中のユーザーにサービスを提供するフォーラムやオンラインコラボレーションツールは、OSSにデータを保存できます。 転送アクセラレーションにより、さまざまなリージョンのユーザーが最適なネットワークパスを介してOSSのデータにアクセスできます。 これにより、データ転送が加速され、ユーザーエクスペリエンスが向上します。

  • ギガバイト級およびテラバイト級のオブジェクトのアップロードとダウンロードを高速化

    大きなオブジェクトが長距離にわたってアップロードまたはダウンロードされると、ネットワーク待ち時間が長いために送信障害が発生する可能性があります。 転送アクセラレーションは、最適なルート選択、プロトコルスタックチューニング、および送信アルゴリズムの最適化を組み合わせて、インターネットを介した大きなオブジェクトのリモート転送中のタイムアウトを削減します。 転送アクセラレーションをマルチパートアップロードおよび再開可能ダウンロードと組み合わせて、長距離アップロードおよび大型オブジェクトのダウンロード用のソリューションを実装できます。

  • 動的データとコールドデータのダウンロードを加速

    ユーザーエクスペリエンスは、写真管理アプリケーション、ゲーム、eコマースアプリケーション、企業ポータルWebサイト、金融アプリケーションなど、高いデータダウンロード速度を必要とするアプリケーションでの製品競争力と顧客維持の推進要因です。 ソーシャルネットワーキングアプリケーションに関する良いフィードバックを得るには、高いダウンロード速度も必要です。 転送アクセラレーションを使用すると、帯域幅の使用率を最大化し、OSSからのデータ転送を高速化できます。

使用上の注意

  • 転送アクセラレーションは、次のリージョンでサポートされています。中国 (杭州) 、中国 (上海) 、中国 (南京-地方地域) 、中国 (福州-地方地域) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フフホト) 、中国 (ウランカブ) 、中国 (深セン) 、中国 (河原) 、中国 (広州) 、中国 (成都) 、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、日本 (東京) 、韓国 (ソウル) 、シンガポール、オーストラリア (シドニー) サービス終了、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、タイ (バンコク) 、ドイツ (フランクフルト) 、英国 (ロンドン) 、アラブ首長国連邦 (ドバイ).

  • アクセラレーションエンドポイントを使用してデータのアップロードを高速化すると、転送アクセラレーション料金が請求されます。 アクセラレーションエンドポイントを使用してデータのダウンロードを高速化すると、転送アクセラレーション料金とインターネット経由のアウトバウンドトラフィックの料金が請求されます。 たとえば、アクセラレーションエンドポイントを使用して、転送アクセラレーションが有効になっているバケットから1 GBのデータをダウンロードする場合、1 GBのデータの転送アクセラレーション料金と、インターネット経由の1 GBのアウトバウンドトラフィックの料金が請求されます。 詳細については、「高速化料金の転送」および「トラフィック料金」をご参照ください。

  • 転送アクセラレーションを有効にすると、アクセス速度を向上させるためにアクセラレーションエンドポイントが必要になります。 ただし、デフォルトのエンドポイントを使用してOSSにアクセスできます。 転送の高速化が不要なシナリオでは、デフォルトのエンドポイントを使用して不要な課金を防ぐことができます。 エンドポイントの詳細については、「リージョンおよびエンドポイント」をご参照ください。

  • 転送エンドポイントを指定してAPI操作を呼び出してOSSにアクセスする場合、HTTPまたはHTTPSプロトコルのみがサポートされます。 リアルタイムメッセージングプロトコル (RTMP) などの他のプロトコルはサポートされていません。

  • 転送加速ロジックに基づいて、安全なデータ転送を保証するためにHTTPSが使用されてもよい。 クライアントがアクセラレーションエンドポイントを使用してHTTP経由でバケットにアクセスする場合でも、アクセスログに記録されるプロトコルはHTTPSである場合があります。

転送アクセラレーションの有効化

バケットの転送アクセラレーションを有効にすると、デフォルトのエンドポイントまたは次のいずれかの転送アクセラレーションエンドポイントを使用してバケットにアクセスできます。

  • グローバルアクセラレーションエンドポイント: oss-accelerate.aliyuncs.com。 アクセラレーションエンドポイントは世界中に分散されています。 グローバルアクセラレーションエンドポイントを使用して、すべてのリージョンのバケットのデータ転送を高速化できます。

  • 中国本土以外のリージョンのアクセラレーションエンドポイント: oss-accelerate-overseas.aliyuncs.com。 アクセラレーションエンドポイントは、中国本土以外のリージョンに分散しています。 中国本土以外のリージョンのアクセラレーションエンドポイントを使用できるのは、中国 (香港) リージョンまたは中国本土以外の他のリージョンにあるバケットのOSSアクセラレーションドメインにICPファイリングなしで、マッピングされたカスタムドメインをポイントするCNAMEレコードを追加した場合のみです。

次のいずれかの方法を使用して、転送アクセラレーションを有効にできます。

OSSコンソールの使用

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、バケットの設定 > トランスミッション加速 を選択します。

  4. トランスミッション加速 ページで、[転送アクセラレーション] をオンにし、表示されるメッセージで OK をクリックします。

    転送アクセラレーションを有効または無効にした後、変更が有効になるまでに約30分かかります。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用して転送アクセラレーションを有効にする方法の例を示しています。 他のプログラミング言語でOSS SDKを使用して転送アクセラレーションを有効にする方法の詳細については、「概要」をご参照ください。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;

public class Demo {

    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // Configure transfer acceleration for the bucket. 
            // If enabled is set to true, transfer acceleration is enabled. If enabled is set to false, transfer acceleration is disabled. 
            boolean enabled = true;
            ossClient.setBucketTransferAcceleration(bucketName, enabled);

        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 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. 
# Specify the name of the bucket. 
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# Configure transfer acceleration for the bucket. 
# If enabled is set to true, transfer acceleration is enabled. If enabled is set to false, transfer acceleration is disabled. 
enabled = 'true'
bucket.put_bucket_transfer_acceleration(enabled)
package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func HandleError(err error) {
	fmt.Println("Error:", err)
	os.Exit(-1)
}

func main() {
	// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Create an OSSClient instance. 
	// 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. Specify your actual endpoint. 
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Specify the name of the bucket. 
	bucketName := "examplebucket"

	// Enable transfer acceleration for the bucket. 
	// The Enabled parameter specifies whether to enable transfer acceleration. A value of true specifies that transfer acceleration is enabled. A value of false specifies that transfer acceleration is disabled. 
	accConfig := oss.TransferAccConfiguration{}
	accConfig.Enabled = true

	err = client.SetBucketTransferAcc(bucketName, accConfig)
	if err != nil {
		HandleError(err)
	}
	fmt.Printf("set bucket transfer accelerate success\n")
}

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketTransferAcceleration」をご参照ください。

転送アクセラレーションの使用

ブラウザの使用

オブジェクトURLを使用してブラウザからオブジェクトにアクセスする場合は、URLのエンドポイント部分をアクセラレーションエンドポイントに置き換えます。 たとえば、転送アクセラレーションを使用して https://test.oss-cn-shenzhen.aliyuncs.com/myphoto.jpg へのアクセスを高速化するには、URLを https://test.oss-accelerate.aliyuncs.com/myphoto.jpg に変更します。 アクセスするオブジェクトのアクセス制御リスト (ACL) が非公開の場合、アクセス要求に署名する必要があります。

ossutilの使用

  • ossutilの構成ファイルで指定されたエンドポイントをアクセラレーションエンドポイントに置き換えます。

    ossutilを使用してバケット内のデータへのアクセスを高速化する必要がある場合は、設定ファイルで指定されたエンドポイントを高速化エンドポイントに置き換えます。 詳細については、「ossutil」をご参照ください。

  • コマンドへの -e oss-accelerate.aliyuncs.comの追加

    ossutilでコマンドを実行する場合は、コマンドに -e oss-accelerate.aliyuncs.comを追加します。 次の図は、ossutilを使用してcpコマンドを実行してオブジェクトをアップロードするときに、アクセラレーションエンドポイントを指定する方法を示しています。

    ossu

ossbrowserの使用

重要

ossbrowserを使用してバケットにアクセスする場合、AccessKeyペアと、バケットのプリセットパスまたはOSSのバケットのディレクトリを指定する必要があります。

次の表に、ossbrowserを使用してOSSのデータにアクセスするときに設定する必要があるパラメーターを示します。

パラメーター

説明

Endpoint

[カスタマイズ] を選択し、https://oss-accelerate.aliyuncs.com を入力します。

AccessKeyIdおよびAccessKeySecret

アカウントのAccessKeyペアを提供します。 AccessKeyペアを取得する方法の詳細については、「AccessKeyペアの取得」をご参照ください。

重要

データのセキュリティを確保するため、RAMユーザーのAccessKeyペアを使用してossbrowserにログインすることを推奨します。 RAMユーザーとしてログオンするには、次のポリシーがRAMユーザーにアタッチされていることを確認します。AliyunOSSFullAccessAliyunRAMFullAccess、およびAliyunSTSAssumeRoleAccess。 詳細については、「権限の管理」をご参照ください。

プリセットOSSパス

ユーザーがアクセスできるバケットまたはバケットのディレクトリを指定します。 形式: oss:// bucketname/pathたとえば、examplebucketという名前のバケットのexamplefolderディレクトリ内のオブジェクトとサブディレクトリにのみアクセスする権限がある場合は、oss:// examplebucket/examplefolder/ と入力します。

例:

Transfer.jpg

OSS SDKの使用

OSS SDKを使用してデータアクセスを高速化する必要がある場合は、エンドポイントパラメーターを高速化エンドポイントに設定します。 次のサンプルコードは、OSS SDK for Javaを使用して簡単なアップロードと簡単なダウンロードを高速化する方法の例を示しています。

  • 簡易アップロード

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.PutObjectRequest;
    import java.io.File;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            // Specify an acceleration endpoint. In this example, the global acceleration endpoint is used. 
            String endpoint = "https://oss-accelerate.aliyuncs.com";
            // We recommend that you do not save access credentials in the project code. Otherwise, access credentials may be leaked. As a result, the security of all resources in your account is compromised. In this example, access credentials are obtained from environment variables. Before you run the sample code, make sure that the environment variables are configured. 
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // Specify the name of the bucket. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the full path of the object. Example: exampledir/exampleobject.txt. Do not include the bucket name in the full path. 
            String objectName = "exampledir/exampleobject.txt";
            // Specify the full path of the local file that you want to upload. Example: D:\\localpath\\examplefile.txt. 
            // If the path of the local file is not specified, the local file is uploaded from the path of the project to which the sample program belongs. 
            String filePath= "D:\\localpath\\examplefile.txt";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // Create a PutObjectRequest object.             
                PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, filePath);
                // Optional. Specify the storage class and ACL of the object. 
                // ObjectMetadata metadata = new ObjectMetadata();
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
                // metadata.setObjectAcl(CannedAccessControlList.Private);
                // putObjectRequest.setMetadata(metadata);
    
                // Upload the local file. 
                ossClient.putObject(putObjectRequest);
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }            
  • 簡易ダウンロード

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.GetObjectRequest;
    import java.io.File;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            // Specify an acceleration endpoint. In this example, the global acceleration endpoint is used. 
            String endpoint = "https://oss-accelerate.aliyuncs.com";
            // We recommend that you do not save access credentials in the project code. Otherwise, access credentials may be leaked. As a result, the security of all resources in your account is compromised. In this example, access credentials are obtained from environment variables. Before you run the sample code, make sure that the environment variables are configured. 
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // Specify the name of the bucket. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the full path of the object. Do not include the bucket name in the full path. Example: testfolder/exampleobject.txt. 
            String objectName = "testfolder/exampleobject.txt";
            String filePath = "D:\\localpath\\examplefile.txt";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // Download the object as a local file in the specified path. If a file that has the same name already exists in the path, the downloaded object overwrites the file. If no file that has the same name exists in the path, the downloaded object is saved in the path. 
                // If you do not specify a local path for the downloaded object, the downloaded object is saved to the path of the project to which the sample program belongs. 
                ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(filePath));
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

転送加速の効果をテストする

ossutilの使用

ossutilでコマンドを実行して、デフォルトのエンドポイントとアクセラレーションエンドポイントをそれぞれ使用してオブジェクトをOSSにアップロードできます。 オブジェクトのアップロードに使用された時間を比較して、転送アクセラレーションの効果を確認できます。 次の図に示すサンプルコマンドでは、デフォルトのエンドポイントを使用してオブジェクトをアップロードするには -e oss-us-west-1.aliyuncs.comが使用され、アクセラレーションエンドポイントを使用してオブジェクトをアップロードするには -e oss-accelerate.aliyuncs.comが使用されます。

よくある質問

OSSは、転送アクセラレーションに加えて他のアクセラレーションソリューションをサポートしていますか?

はい。OSSはAlibaba Cloud CDNベースのアクセスアクセラレーションもサポートしています。 詳細については、「Alibaba Cloud CDNを使用したOSSへのアクセスの高速化」をご参照ください。

複数のアクセラレーションソリューションを同時に設定できますか?

はい、複数のアクセラレーションソリューションを同時に設定できます。 たとえば、Alibaba Cloud CDNを有効にした後、転送アクセラレーションを有効にし、CDNアクセラレーションドメインのオリジンとしてOSSアクセラレーションドメインを指定し、CDNアクセラレーションドメインをOSSバケットにマッピングすることもできます。 詳細については、「Map accelerated domain names」をご参照ください。

アクセラレーションエンドポイントを使用してバケットをリストできないのはなぜですか?

転送の高速化は、https://BucketName.oss-accelerate.aliyuncs.com 形式のドメイン名に対してのみ有効です。 アクセラレーションエンドポイントにはバケット名は含まれません。 したがって、アクセラレーションエンドポイントを使用してバケットをリストすることはできません。 特定のリージョンのバケットを一覧表示するには、リージョンのデフォルトエンドポイント (中国 (杭州) リージョンの https://oss-cn-hangzhou.aliyuncs.com など) を使用することを推奨します。