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

Object Storage Service:初期化

最終更新日:Feb 21, 2024

OSSClientは、バケットやオブジェクトなどのObject Storage Service (OSS) リソースを管理するために使用されます。 OSS SDK for C ++ を使用してリクエストを開始するには、OSSClientインスタンスを初期化し、ClientConfigurationのデフォルト設定項目を変更する必要があります。

OSSClientインスタンスの作成

重要
  • OSSClientはスレッドセーフで、複数のスレッドを使用して同じインスタンスにアクセスできます。 OSSClientインスタンスを再利用するか、ビジネス要件に基づいて複数のOSSClientインスタンスを作成できます。

  • InitializeSdk() とShutdownSdk() は、プログラムのライフサイクル中に一度だけ呼び出す必要があるグローバル操作です。

次のいずれかの方法を使用して、OSSClientインスタンスを作成できます。

OSSエンドポイントを使用したOSSClientインスタンスの作成

#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);   

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 

カスタムドメイン名を使用したOSSClientインスタンスの作成

#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* yourEndpointを使用するカスタムドメイン名に設定します。 */
    std::string Endpoint = "yourEndpoint";
    
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    conf.isCname = true;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);   

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 

STSの資格情報を使用したOSSClientインスタンスの作成

Security Token Service (STS) によって提供される一時的なアクセス資格情報には、セキュリティトークンと一時的なAccessKeyペアが含まれます。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 STSから一時的なアクセス資格情報を取得する方法の詳細については、「STSが提供する一時的な資格情報を使用してOSSにアクセスする」をご参照ください。

#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
        
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、一時的なAccessKeyペアとセキュリティトークンが環境変数を使用して設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf); 

    /* ネットワークリソースなどのリソースをリリースします。 */
    ShutdownSdk();
    0を返します。} 

OSSClientインスタンスの設定

ClientConfiguration は OSSClient の設定クラスです。 ClientConfigurationを使用して、userAgent、connectTimeoutMs、maxConnectionsなどのパラメーターを設定できます。

OSSClientを使用してパラメーターを設定できます。 下表に、各パラメーターを説明します。

パラメーター

説明

isCname

CNAMEをエンドポイントとして使用するかどうかを指定します。 デフォルトでは、CNAMEは使用されません。

userAgent

ユーザーエージェント (user-agentヘッダー) 。 デフォルト値: aliyun-sdk-cpp/1.X. X

maxConnections

接続の最大数。 デフォルト値: 16。

requestTimeoutMs

リクエストのタイムアウト期間。 タイムアウト期間を通じてデータが受信されない場合、接続は閉じられます。 デフォルト値: 10000。 単位:ミリ秒。

connectTimeoutMs

接続セットアップのタイムアウト時間。 デフォルト値: 5000。 単位:ミリ秒。

retryStrategy

リクエストが失敗した場合に許可される再試行の最大数。

proxyScheme

プロキシプロトコル。 デフォルト値: HTTP。

proxyPort

プロキシサーバーへの接続に使用されるポート。

proxyPassword

プロキシサーバーへのログインに使用されるパスワード。

proxyUserName

プロキシサーバーへのログオンに使用されるユーザー名。

verifySSL

SSLベースの認証を有効にするかどうかを指定します。 デフォルトでは、SSLベースの認証は無効になっています。

説明

デフォルトでは、SSLベースの認証はOSS SDK for C ++ 1.8.2以降で有効になっています。

caPath

CA証明書のルートパス。 このパラメーターは、verifySSLがtrueに設定されている場合に有効です。 デフォルトでは、このパラメータは空のままです。

caFile

CA証明書のパス。 このパラメーターは、verifySSLがtrueに設定されている場合に有効です。 デフォルトでは、このパラメータは空のままです。

enableCrc64

CRC-64を有効にするかどうかを指定します。 デフォルトでは、CRC-64は有効です。

enableDateSkewAdjustment

HTTPリクエスト時間の自動修正を有効にするかどうかを指定します。 デフォルトでは、HTTPリクエスト時間の自動修正が有効になっています。

sendRateLimiter

最大アップロード速度。 単位: KB/s。

recvRateLimiter

最大ダウンロード速度。 単位: KB/s。

タイムアウト期間の設定

次のコードは、タイムアウト期間を設定する方法の例を示しています。

#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();
    ClientConfiguration conf;

    /* 接続の最大数を指定します。 デフォルト値: 16。 */
    conf.maxConnections = 20;

    /* リクエストのタイムアウト時間を指定します。 タイムアウト期間中にデータが受信されない場合、接続は閉じられます。 単位:ミリ秒。 デフォルト値: 10000。 */
    conf.requestTimeoutMs = 8000;

    /* 接続を確立するためのタイムアウト時間を指定します。 単位:ミリ秒。 デフォルト値: 5000。 */
    conf.connectTimeoutMs = 8000;

    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);  

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 

SSLベースの認証の設定

デフォルトでは、SSLベースの認証はOSS SDK for C ++ V1.8.2以降で有効になっています。 SSLベースの認証が失敗した場合は、SSL証明書の正しいパスを設定するか、SSLベースの認証を無効にする必要があります。

次のコードは、SSLベースの認証を設定する方法の例を示しています。

#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();
    ClientConfiguration conf;

    /* SSLベースの認証を設定します。 デフォルト値:true 値trueは、SSLベースの認証が有効になっていることを示します。 */
    conf.verifySSL = true;

    /* CA証明書のルートパスを指定します。 このパラメーターは、verifySSLがtrueに設定されている場合に有効です。 デフォルトでは、このパラメータは空のままです。 */
    conf.caパス="/etc/ssl/certs/";

    /* CA証明書のパスを指定します。 このパラメーターは、verifySSLがtrueに設定されている場合に有効です。 デフォルトでは、このパラメータは空のままです。 */
    conf.caファイル="/etc/ssl/certs/ca-certificates.crt";

    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);  

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 

帯域幅調整の設定

次のコードは、アップロードとダウンロードの帯域幅調整を設定する方法の例を示しています。

#include <alibabacloud/oss/OssClient.h>
# include <alibabacloud/oss/client/RateLimiter.h>

名前空間listaCloud::OSSを使用します。クラスUserRateLimiter: パブリックRateLimiter
{
パブリック:
    UserRateLimiter() : rate_(0) {};
    〜UserRateLimiter() {};
    virtual void setRate(int rate) { rate_ = rate; };
    virtual int Rate() const { return rate_; };
プライベート:
    int rate_;
};

int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めないでください。 例: exampledir/exampleobject.txt。 */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;

    auto sendrateLimiter = std::make_shared<UserRateLimiter>();
    auto recvrateLimiter = std::make_shared<UserRateLimiter>();
    conf.sendRateLimiter = sendrateLimiter;
    conf.recvRateLimiter = recvrateLimiter;

    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);

    /* ダウンロードの帯域幅調整を設定します。 単位: KB/s。 */
    recvrateLimiter->setRate(256);

    /* アップロードの帯域幅調整を設定します。 単位: KB/s。 */
    sendrateLimiter->setRate(256);

    /* オブジェクトをアップロードします。 ローカルファイルのフルパスを指定します。 */
    auto outcome = client.PutObject(BucketName, ObjectName, "yourLocalFilename");  

    /* アップロード中に制限速度を更新します。 単位: KB/s。 */
    sendrateLimiter->setRate(300);

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 

再試行ポリシーの設定

次のサンプルコードは、再試行ポリシーを設定する方法の例を示しています。

#include <alibabacloud/oss/OssClient.h>
# include <alibabacloud/oss/client/RetryStrategy.h>

名前空間listaCloud::OSSを使用します。クラスUserRetryStrategy: パブリックRetryStrategy
{
パブリック:

    /* maxRetriesは、許可された再試行の最大回数を示します。 scaleFactorは、再試行を試みるまでの待ち時間を計算するために使用される係数を示す。 */
    UserRetryStrategy(long maxRetries = 3、long scaleFactor = 300) :
        m_scaleFactor(scaleFactor), m_maxRetries(maxRetries)  
    {}

    /* shouldRetry関数を指定して、リクエストを再試行するかどうかを判断できます。 */
    bool shouldRetry(const Error & error, long attemptedRetries) const;

    /* calcDelayTimeMs関数を指定して、再試行が試行されるまでの待機時間を計算できます。 */
    long calcDelayTimeMs(constエラー&エラー、long attemptedRetries) const;

プライベート:
    long m_scaleFactor;
    長いm_maxRetries;
};

bool UserRetryStrategy::shouldRetry(const Error & error, long attemptedRetries) const
{    
    if (attemptedRetries >= m_maxRetries)
        return false;

    long responseCode = error.Status();

    // httpコード
    if (((responseCode == 403 && error.Message()).find("RequestTimeTooSkewed") != std::string::npos) | | |
        (responseCode > 499 && responseCode < 599) {
        return true;
    }
    else {
        スイッチ (responseCode)
        {
        // curlエラーコード
        ケース (ERROR_CURL_BASE + 7): // CURLE_COULDNT_CONNECT
        ケース (ERROR_CURL_BASE + 18): // CURLE_PARTIAL_FILE
        ケース (ERROR_CURL_BASE + 23): // CURLE_WRITE_ERROR
        ケース (ERROR_CURL_BASE + 28): // CURLE_OPERATION_TIMEDOUT
        ケース (ERROR_CURL_BASE + 52): // CURLE_GOT_NOTHING
        ケース (ERROR_CURL_BASE + 55): // CURLE_SEND_ERROR
        ケース (ERROR_CURL_BASE + 56): // CURLE_RECV_ERROR
            return true;
        default:
            break;
        };
    }

    falseを返します。}

long UserRetryStrategy::calcDelayTimeMs(const Error & error, long attemptedRetries) const
{
    return (1 << attemptedRetries) * m_scaleFactor;
}

int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();
    ClientConfiguration conf;

    /* リクエストが失敗した場合に許可される再試行の最大回数を指定します。 デフォルト値: 3。 */
    auto defaultRetryStrategy = std::make_shared<UserRetryStrategy>(5);
    conf.retryStrategy = defaultRetryStrategy;

    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);  

    /* ネットワークリソースなどのリソースをリリースします。 */
    ShutdownSdk();
    0を返します。} 

プロキシサーバーの設定

次のサンプルコードは、プロキシサーバーを構成する方法の例を示しています。

#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();
    ClientConfiguration conf;

    /* プロキシサーバーのアドレスを指定します。 */
    conf.proxyHost = "yourProxyHost";

    /* プロキシサーバーのポートを設定します。 */
    conf.proxyPort = 1234;

    /* オプション。 プロキシサーバー認証のユーザー名を指定します。 */
    conf.proxyUserName = "yourProxyUserName";

    /* オプション。 プロキシサーバー認証のパスワードを指定します。 */
    conf.proxyPassword = "yourProxyPassword";

    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);  

    /* ネットワークリソースなどのリソースをリリースします。 */
    ShutdownSdk();
    0を返します。}