転送アクセラレーションを有効にすると、バケット内のオブジェクトのアップロードとダウンロードを長距離で高速化できます。 たとえば、中国本土にいる場合、中国本土の外部にあるバケットにオブジェクトをアップロードしたり、バケットからオブジェクトをダウンロードしたりするときに、転送アクセラレーションを有効にできます。 このようにして、データのアップロードまたはダウンロードが高速化されます。 転送アクセラレーション機能は、世界中に分散したデータセンターを備えた最適化されたエンドツーエンドのソリューションを提供し、インターネット経由のObject Storage Service (OSS) へのアクセスを高速化します。 この機能を有効にすると、バケット宛てのリクエストは、最適なネットワークパスとプロトコルを使用して、ユーザーに最も近いデータセンターにルーティングされます。
シナリオ
リモートデータ転送を高速化
世界中のユーザーにサービスを提供するフォーラムやオンラインコラボレーションツールは、OSSにデータを保存できます。 転送アクセラレーションにより、さまざまなリージョンのユーザーが最適なネットワークパスを介してOSSのデータにアクセスできます。 これにより、データ転送が加速され、ユーザーエクスペリエンスが向上します。
ギガバイトサイズとテラバイトサイズのオブジェクトのアップロードとダウンロードを高速化
大きなオブジェクトが長距離にわたってアップロードまたはダウンロードされると、ネットワーク待ち時間が長いために送信障害が発生する可能性があります。 転送アクセラレーションは、最適なルート選択、プロトコルスタックチューニング、および送信アルゴリズムの最適化を組み合わせて、インターネットを介した大きなオブジェクトのリモート転送中のタイムアウトを削減します。 転送アクセラレーションをマルチパートアップロードおよび再開可能ダウンロードと組み合わせて、長距離のアップロードおよび大型オブジェクトのダウンロードに対するソリューションを実装できます。
動的データとコールドデータのダウンロードを加速
ユーザーエクスペリエンスは、写真管理アプリケーション、ゲーム、eコマースアプリケーション、企業ポータルWebサイト、金融アプリケーションなど、高いデータダウンロード速度を必要とするアプリケーションでの製品競争力と顧客維持の推進要因です。 ソーシャルネットワーキングアプリケーションに関する良いフィードバックを得るには、高いダウンロード速度も必要です。 転送アクセラレーションを使用すると、帯域幅の使用率を最大化し、OSSでのデータ転送を高速化できます。
使用上の注意
転送アクセラレーションは、中国 (杭州) 、中国 (上海) 、中国 (南京-地方) 、中国 (福州-地方) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フフホト) 、中国 (ウランカブ) 、中国 (深セン) 、中国 (河安) 、中国 (広州) でサポートされています。中国 (成都) 、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、日本 (東京) 、韓国 (ソウル) 、シンガポール、オーストラリア (シドニー) 、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、タイ (バンコク) 、インド (ムンバイ) 、ドイツ (フランクフルト) 、英国 (ロンドン) 、アラブ首長国連邦 (ドバイ)
アクセラレーションエンドポイントを使用してデータのアップロードを高速化すると、転送アクセラレーション料金が請求されます。 アクセラレーションエンドポイントを使用してデータのダウンロードを高速化すると、転送アクセラレーション料金とインターネット経由のアウトバウンドトラフィックの料金が請求されます。 たとえば、アクセラレーションエンドポイントを使用して、転送アクセラレーションが有効になっているバケットから1 GBのデータをダウンロードする場合、1 GBのデータの転送アクセラレーション料金と、インターネット経由の1 GBのアウトバウンドトラフィックの料金が請求されます。 詳細については、「高速化料金の転送」および「トラフィック料金」をご参照ください。
転送アクセラレーションを有効にすると、アクセス速度を向上させるためにアクセラレーションエンドポイントが必要になります。 ただし、デフォルトのエンドポイントを使用してOSSにアクセスできます。 転送の高速化が不要なシナリオでは、デフォルトのエンドポイントを使用して不要な課金を防ぐことができます。 エンドポイントの詳細については、「リージョンおよびエンドポイント」をご参照ください。
アクセラレーションエンドポイントには、HTTPまたはHTTPSプロトコルを使用するAPI操作を呼び出すことによってのみアクセスできます。 OSSは、RTMP (Real-Time Messaging Protocol) などの他のプロトコルを使用するAPI操作を呼び出すことによるアクセスをサポートしていません。
転送加速ロジックに基づいて、安全なデータ転送を保証するためにHTTPSが使用されてもよい。 クライアントがアクセラレーションエンドポイントを使用してHTTP経由でバケットにアクセスする場合でも、アクセスログに記録されるプロトコルはHTTPSである場合があります。
転送アクセラレーションの有効化
バケットの転送アクセラレーションを有効にすると、デフォルトのエンドポイントまたは次の2つの転送アクセラレーションエンドポイントのいずれかを使用してバケットにアクセスできます。
グローバルアクセラレーションエンドポイント:
oss-accelerate.aliyuncs.com
。 アクセラレーションエンドポイントは世界中に分散されています。 グローバルアクセラレーションエンドポイントを使用して、すべてのリージョンのバケットのデータ転送を高速化できます。中国本土以外のリージョンのアクセラレーションエンドポイント:
oss-accelerate-overseas.aliyuncs.com
。 アクセラレーションエンドポイントは、中国本土以外のリージョンに分散しています。 ICPファイリングなしで、マップされたカスタムドメイン名と一緒にアクセラレーションエンドポイントを使用して、中国 (香港) リージョンまたは中国本土以外の別のリージョンのバケットへのアクセスを高速化することもできます。
次のいずれかの方法を使用して、転送アクセラレーションを有効にできます。
OSSコンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションツリーで、バケットの設定 > トランスミッション加速 を選択します。
トランスミッション加速 ページで、[転送アクセラレーション] をオンにし、表示されるメッセージで OK をクリックします。
転送アクセラレーションを有効または無効にした後、変更が有効になるまでに約30分かかります。
OSS SDKの使用
次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用して転送アクセラレーションを有効にする方法の例を示しています。 他のプログラミング言語でOSS SDKを使用して転送アクセラレーションを有効にする方法の詳細については、「概要」をご参照ください。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。public classデモ {
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";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// バケットの転送アクセラレーションを設定します。
// enabledがtrueに設定されている場合、転送アクセラレーションが有効になります。 enabledがfalseに設定されている場合、転送アクセラレーションは無効になります。
boolean enabled = true;
ossClient.setBucketTransferAcceleration(bucketName、有効);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
インポートoss2
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
# バケットの転送アクセラレーションを設定します。
# enabledがtrueに設定されている場合、転送アクセラレーションが有効になります。 enabledがfalseに設定されている場合、転送アクセラレーションは無効になります。
enabled = 'true'
import (import (import)
"fmt"
"os"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
)
func HandleError (エラーエラー) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClientインスタンスを作成します。
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。
bucketName := "examplebucket"
// バケットの転送アクセラレーションを有効にします。
// Enabledパラメーターは、転送アクセラレーションを有効にするかどうかを指定します。 値がtrueの場合、転送アクセラレーションが有効になることを指定します。 falseの値は、転送アクセラレーションが無効であることを指定します。
accConfig := oss.TransferAccConfiguration{}
accConfig.Enabled = true
err = client.SetBucketTransferAcc(bucketName, accConfig)
if err! =nil {
HandleError(err)
}
fmt.Printf("set bucket transfer accelerate success\n")
}
パッケージメインbucket.put_bucket_transfer_acceleration(enabled)
RESTful 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コマンドを実行してオブジェクトをアップロードするときに、アクセラレーションエンドポイントを指定する方法を示しています。
ossbrowserの使用
ossbrowserを使用してバケットにアクセスする場合、AccessKeyペアとOSSのバケットのプリセットパスを指定する必要があります。
次の表に、ossbrowserを使用してOSSのデータにアクセスするときに設定する必要があるパラメーターを示します。
パラメーター | 説明 |
Endpoint | [カスタマイズ] を選択し、 |
AccessKeyIdおよびAccessKeySecret | アカウントのAccessKeyペアを提供します。 AccessKeyペアを取得する方法の詳細については、「AccessKeyペアの取得」をご参照ください。 重要 データセキュリティのため、RAMユーザーのAccessKeyペアを使用してossbrowserにログインすることを推奨します。 RAMユーザーとしてログオンするには、次のポリシーがRAMユーザーにアタッチされていることを確認します。 |
プリセットOSSパス | ユーザーがアクセスできるバケットまたはバケットのディレクトリを指定します。 OSSパスは |
次の図は、アクセラレーションエンドポイントを使用してアクセスを高速化するようにossbrowserを設定する方法の例を示しています。
OSS SDKの使用
OSS SDKを使用してデータアクセスを高速化する必要がある場合は、エンドポイントパラメーターを高速化エンドポイントに設定します。 次のサンプルでは、OSS SDK for Javaを使用して簡単なアップロードと簡単なダウンロードを高速化する方法の例を示します。
簡易アップロード
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.PutObjectRequestをインポートします。java.io. ファイルをインポートします。public classデモ { 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。 バケット名をフルパスに含めないでください。 文字列objectName = "exampledir/exampleobject.txt"; // アップロードするローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 // ローカルファイルのパスが指定されていない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 String filePath= "D :\\ localpath\\examplefile.txt"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // PutObjectRequestオブジェクトを作成します。 PutObjectRequest putObjectRequest=新しいPutObjectRequest(bucketName, objectName, filePath); // Optional. オブジェクトのストレージクラスとACLを指定します。 // ObjectMetadata metadata=新しいObjectMetadata(); // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); // metadata.setObjectAcl(CannedAccessControlList.Private); // putObjectRequest.setMetadata (メタデータ); // ローカルファイルをアップロードします。 ossClient.putObject(putObjectRequest); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
簡易ダウンロード
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.GetObjectRequestをインポートします。java.io. ファイルをインポートします。public classデモ { 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。 文字列objectName = "testfolder/exampleobject.txt"; String filePath = "D :\\ localpath\\examplefile.txt"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // コンピュータ上の指定されたパスにオブジェクトをダウンロードします。 同じ名前のファイルがすでにパスに存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。 パスに同じ名前のファイルが存在しない場合、ダウンロードしたオブジェクトはパスに保存されます。 // ダウンロードしたオブジェクトのローカルパスを指定しない場合、ダウンロードしたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。 ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(filePath)); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
転送加速の効果をテストする
ossutilの使用
ossutilでコマンドを実行して、デフォルトのエンドポイントとアクセラレーションエンドポイントをそれぞれ使用してオブジェクトをOSSにアップロードできます。 オブジェクトのアップロードに使用された時間を比較して、転送アクセラレーションの効果を確認できます。 次の図に示すサンプルコマンドでは、デフォルトのエンドポイントを使用してオブジェクトをアップロードするには -e oss-us-west-1.aliyuncs.com
が使用され、アクセラレーションエンドポイントを使用してオブジェクトをアップロードするには -e oss-accelerate.aliyuncs.com
が使用されます。