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

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

最終更新日:Apr 03, 2025

転送アクセラレーションを有効にすることで、長距離のバケット内のオブジェクトのアップロードとダウンロードを高速化できます。たとえば、中国本土にいる場合、中国本土以外にあるバケットにオブジェクトをアップロードしたり、バケットからオブジェクトをダウンロードしたりするときに、転送アクセラレーションを有効にすることができます。このようにして、データのアップロードまたはダウンロードが高速化されます。転送アクセラレーション機能は、世界中に分散したデータセンターによる最適化されたエンドツーエンドのソリューションを提供し、インターネット経由での 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。アクセラレーションエンドポイントは、中国本土以外のリージョン全体に分散されています。中国本土以外のリージョンのアクセラレーションエンドポイントは、ICP 登録を取得していないマップされたカスタムドメインを中国(香港)リージョンまたは中国本土以外の他のリージョンにあるバケットの OSS アクセラレーションドメインにポイントするように 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 {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // バケットの転送アクセラレーションを構成します。
            // enabled が true に設定されている場合、転送アクセラレーションは有効になります。enabled が false に設定されている場合、転送アクセラレーションは無効になります。
            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

# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマップするリージョンの ID を指定します。例:cn-hangzhou。署名アルゴリズム V4 を使用する場合は、このパラメーターが必要です。
region = "cn-hangzhou"

# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# バケットの転送アクセラレーションを構成します。
# enabled が true に設定されている場合、転送アクセラレーションは有効になります。enabled が false に設定されている場合、転送アクセラレーションは無効になります。
enabled = 'true'
bucket.put_bucket_transfer_acceleration(enabled)
package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}

	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットの転送アクセラレーションを有効にするリクエストを作成します。
	request := &oss.PutBucketTransferAccelerationRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		TransferAccelerationConfiguration: &oss.TransferAccelerationConfiguration{
			Enabled: oss.Ptr(true), // 転送アクセラレーションを有効にします。
		},
	}

	// リクエストを実行して、転送アクセラレーションを有効にします。
	result, err := client.PutBucketTransferAcceleration(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケット転送アクセラレーションの設定に失敗しました %v", err)
	}

	// 結果を表示します。
	log.Printf("バケット転送アクセラレーションの設定結果:%#v\n", result)
}

ossutil を使用する

ossutil を使用して、バケットの転送アクセラレーションを有効にできます。 ossutil のインストール方法の詳細については、「ossutil のインストール」をご参照ください。

次のコマンドは、examplebucket という名前のバケットの転送アクセラレーションを有効にする方法の例を示しています。

ossutil api put-bucket-transfer-acceleration --bucket examplebucket --transfer-acceleration-configuration "{\"Enabled\":\"true\"}"

このコマンドの詳細については、「put-bucket-transfer-acceleration」をご参照ください。

転送アクセラレーションを使用する

ブラウザを使用する

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

ossutil を使用する

  • ossutil を使用してバケット内のオブジェクトへのアクセスを高速化する必要がある場合は、構成ファイルで指定されているエンドポイントをアクセラレーションエンドポイントに置き換えます。

    • ossutil の構成ファイルを見つけて開きます。デフォルトでは、構成ファイルは次のパスに保存されます。

      • Linux/home/user/.ossutilconfig

      • WindowsC:\Users\user\.ossutilconfig

      • macOS/Users/user/.ossutilconfig

      ossutil を構成するときに別のパスを指定した場合は、指定したパスに移動します。

    • エンドポイントを変更します。構成ファイルで、endpoint フィールドを見つけて、その値をアクセラレーションエンドポイントに変更します。

      [Credentials]
      endpoint = oss-accelerate.aliyuncs.com
      accessKeyID = yourAccessKeyID
      accessKeySecret = yourAccessKeySecret
      region=cn-hangzhou

      構成ファイルを保存して、変更を有効にします。

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

    ossutil cp /path/to/local/file oss://examplebucket/exampleobject  -e  oss-accelerate.aliyuncs.com

ossbrowser 1.0 を使用する

重要

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

次の表に、ossbrowser を使用して OSS 内のオブジェクトにアクセスするときに構成する必要があるパラメーターを示します。

パラメーター

説明

エンドポイント

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

AccessKeyIdAccessKeySecret

アカウントの 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 および OSS SDK for Go を使用して単純なアップロードと単純なダウンロードを高速化する方法の例を示しています。

  • 単純なアップロード

    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 {
            // アクセラレーションエンドポイントを指定します。この例では、グローバルアクセラレーションエンドポイントが使用されています。
            String endpoint = "https://oss-accelerate.aliyuncs.com";
            // アクセス認証情報をプロジェクトコードに保存しないことをお勧めします。そうしないと、アクセス認証情報が漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。この例では、アクセス認証情報は環境変数から取得されます。サンプルコードを実行する前に、環境変数が構成されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例:examplebucket。
            String bucketName = "examplebucket";
            // オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。完全なパスにバケット名を含めないでください。
            String objectName = "exampledir/exampleobject.txt";
            // ローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。
            // ローカルファイルのパスが指定されていない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。
            String filePath= "D:\\localpath\\examplefile.txt";
    
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            // V4 署名アルゴリズムの使用を明示的に宣言します。
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // PutObjectRequest オブジェクトを作成します。
                PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, filePath);
                // オプション。オブジェクトのストレージクラスと ACL を指定します。
                // ObjectMetadata metadata = new ObjectMetadata();
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
                // metadata.setObjectAcl(CannedAccessControlList.Private);
                // putObjectRequest.setMetadata(metadata);
    
                // オブジェクトをアップロードします。
                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();
                }
            }
        }
    }            
    package main
    
    import (
    	"context"
    	"flag"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    // グローバル変数を指定します。
    var (
    	region     string // バケットが配置されているリージョン。
    	bucketName string // バケットの名前。
    	objectName string // オブジェクトの名前。
    )
    
    // コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
    func init() {
    	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
    	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
    	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
    }
    
    func main() {
    	// コマンドラインパラメーターを解析します。
    	flag.Parse()
    
    	// バケット名が空かどうかを確認します。
    	if len(bucketName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("無効なパラメーター、バケット名が必要です")
    	}
    
    	// バケットが配置されているリージョンが空かどうかを確認します。
    	if len(region) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("無効なパラメーター、リージョンが必要です")
    	}
    
    	// オブジェクト名が空かどうかを確認します。
    	if len(objectName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
    	}
    
    	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region).
    		WithEndpoint("oss-accelerate.aliyuncs.com") // アクセラレーションエンドポイントを指定します。
    
    	// OSSClient インスタンスを作成します。
    	client := oss.NewClient(cfg)
    
    	// アップロードするローカルファイルのパスを指定します。例:/Users/localpath/exampleobject.txt。
    	localFile := "/Users/localpath/exampleobject.txt"
    
    	// ローカルファイルをアップロードするリクエストを作成します。
    	putRequest := &oss.PutObjectRequest{
    		Bucket:       oss.Ptr(bucketName),      // バケットの名前を指定します。
    		Key:          oss.Ptr(objectName),      // オブジェクトの名前を指定します。
    		StorageClass: oss.StorageClassStandard, // オブジェクトのストレージクラスを Standard に設定します。
    		Acl:          oss.ObjectACLPrivate,     // オブジェクトの ACL を private に設定します。
    	}
    
    	// リクエストを実行して、ローカルファイルをアップロードします。
    	result, err := client.PutObjectFromFile(context.TODO(), putRequest, localFile)
    	if err != nil {
    		log.Fatalf("ファイルからのオブジェクトの配置に失敗しました %v", err)
    	}
    
    	// オブジェクトのアップロード結果を表示します。
    	log.Printf("オブジェクトの配置結果:%#v\n", result)
    }
    
  • 単純なダウンロード

    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 {
            // アクセラレーションエンドポイントを指定します。この例では、グローバルアクセラレーションエンドポイントが使用されています。
            String endpoint = "https://oss-accelerate.aliyuncs.com";
            // アクセス認証情報をプロジェクトコードに保存しないことをお勧めします。そうしないと、アクセス認証情報が漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。この例では、アクセス認証情報は環境変数から取得されます。サンプルコードを実行する前に、環境変数が構成されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例:examplebucket。
            String bucketName = "examplebucket";
            // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:testfolder/exampleobject.txt。
            String objectName = "testfolder/exampleobject.txt";
            String filePath = "D:\\localpath\\examplefile.txt";
    
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            // V4 署名アルゴリズムの使用を明示的に宣言します。
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // 指定したパスにローカルファイルとしてオブジェクトをダウンロードします。パスに同じ名前のファイルがすでに存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。パスに同じ名前のファイルが存在しない場合、ダウンロードされたオブジェクトはパスに保存されます。
                // ダウンロードされたオブジェクトのローカルパスを指定しない場合、ダウンロードされたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。
                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();
                }
            }
        }
    }
    package main
    
    import (
    	"context"
    	"flag"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    // グローバル変数を指定します。
    var (
    	region     string // バケットが配置されているリージョン。
    	bucketName string // バケットの名前。
    	objectName string // オブジェクトの名前。
    )
    
    // コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
    func init() {
    	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
    	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
    	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
    }
    
    func main() {
    	// コマンドラインパラメーターを解析します。
    	flag.Parse()
    
    	// バケット名が空かどうかを確認します。
    	if len(bucketName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("無効なパラメーター、バケット名が必要です")
    	}
    
    	// バケットが配置されているリージョンが空かどうかを確認します。
    	if len(region) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("無効なパラメーター、リージョンが必要です")
    	}
    
    	// オブジェクト名が空かどうかを確認します。
    	if len(objectName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
    	}
    
    	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region).
    		WithEndpoint("oss-accelerate.aliyuncs.com") // アクセラレーションエンドポイントを指定します。
    
    	// OSSClient インスタンスを作成します。
    	client := oss.NewClient(cfg)
    
    	// ダウンロードしたオブジェクトを保存する完全なパスを指定します。例:/Users/localpath/downloadobject.txt。
    	localFile := "/Users/localpath/exampleobject.txt"
    
    	// オブジェクトをダウンロードするリクエストを作成します。
    	getRequest := &oss.GetObjectRequest{
    		Bucket: oss.Ptr(bucketName), // バケットの名前。
    		Key:    oss.Ptr(objectName), // オブジェクトの名前。
    	}
    
    	// オブジェクトをローカルコンピューターにダウンロードし、ダウンロード結果を表示します。
    	result, err := client.GetObjectToFile(context.TODO(), getRequest, localFile)
    	if err != nil {
    		log.Fatalf("ファイルへのオブジェクトの取得に失敗しました %v", err)
    	}
    
    	log.Printf("オブジェクトの取得に成功しました。結果:HTTPStatusCode=%d、ContentLength=%d\n", result.StatusCode, result.ContentLength)
    }
    

転送アクセラレーションの効果をテストする

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 を有効にした後、転送アクセラレーションを有効にし、OSS アクセラレーションドメインを CDN アクセラレーションドメインのオリジンとして指定し、CDN アクセラレーションドメインを OSS バケットにマッピングすることもできます。詳細については、「アクセラレーションドメイン名をマッピングする」をご参照ください。

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

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

OSS API

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