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

Alibaba Cloud SDK:SDK の統合

最終更新日:Dec 04, 2025

API の呼び出しを容易にするために、プロジェクトに Alibaba Cloud SDK を統合することを推奨します。SDK は開発プロセスを簡素化し、機能を迅速に統合し、運用保守コストを大幅に削減します。Alibaba Cloud SDK を統合するには、Alibaba Cloud SDK のインストール、アクセス認証情報の設定、SDK の使用という手順を実行します。このトピックでは、Alibaba Cloud SDK の統合方法について説明します。

前提条件

  • .Net Framework 4.5 以降、または .Net Standard 2.0 以降

  • C# 5.0 以降

SDK のインポート

  1. SDK Center にログインし、使用する SDK のサービスを選択します。 この例では、Short Message Service (SMS) が選択されています。

  2. [Short Message Service] ページで、[すべての言語] セクションで [C#] を選択します。[クイックスタート] タブで、Short Message Service (SMS) SDK のインストール方法を取得します。image

説明

GitHub でソースコードと関連するインストールガイドラインを表示することもできます。詳細については、「GitHub - aliyun/alibabacloud-csharp-sdk」をご参照ください。

アクセス認証情報の設定

Alibaba Cloud サービスの API 操作を呼び出すには、AccessKey ペアセキュリティトークンサービス (STS) トークンなどのアクセス認証情報を設定する必要があります。AccessKey ペアの漏洩を防ぐために、AccessKey ペアを環境変数に記録できます。その他のセキュリティソリューションについては、「認証情報セキュリティソリューション」をご参照ください。この例では、ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET の環境変数を使用して AccessKey ペアを記録します。

Linux および macOS での環境変数の設定

export コマンドを使用した環境変数の設定

重要

export コマンドを使用して設定された一時的な環境変数は、現在のセッションでのみ有効です。セッションを終了すると、設定された環境変数は無効になります。永続的な環境変数を設定するには、対応するオペレーティングシステムの起動設定ファイルに export コマンドを追加します。

  • AccessKey ID を設定し、Enter キーを押します。

    # <ACCESS_KEY_ID> をご利用の AccessKey ID に置き換えます。
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • AccessKey Secret を設定し、Enter キーを押します。

    # <ACCESS_KEY_SECRET> をご利用の AccessKey Secret に置き換えます。
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • 設定が成功したかどうかを確認します。

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID コマンドを実行します。有効な AccessKey ID が返された場合、環境変数は設定されています。

Windows での環境変数の設定

GUI の使用

  • 手順

    Windows 10 で GUI を使用して環境変数を設定する場合は、次の手順を実行します。

    Windows のデスクトップで、[この PC] を右クリックし、[プロパティ] を選択します。表示されたページで、[システムの詳細設定] をクリックします。[システムのプロパティ] ダイアログボックスで、[詳細設定] タブの [環境変数] をクリックします。[環境変数] ダイアログボックスで、[ユーザー環境変数] または [システム環境変数] セクションの [新規] をクリックします。次に、次の表で説明されている変数を設定します。

    変数

    AccessKey ID

    • 変数名:ALIBABA_CLOUD_ACCESS_KEY_ID

    • 変数値:LTAI****************

    AccessKey Secret

    • 変数名:ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • 変数値:yourAccessKeySecret

  • 設定が成功したかどうかを確認します。

    Windows のデスクトップで、[スタート] をクリックするか、Win + R を押します。[ファイル名を指定して実行] ダイアログボックスで、cmd と入力します。次に、[OK] をクリックするか、Enter キーを押します。表示されたページで、echo %ALIBABA_CLOUD_ACCESS_KEY_ID% および echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET% コマンドを実行します。有効な AccessKey ペアが返された場合、設定は成功しています。

CMD の使用

  • 手順

    管理者としてコマンドプロンプトウィンドウを開き、次のコマンドを実行してオペレーティングシステムに環境変数を追加します。

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    /M は、環境変数がシステムレベルであることを示します。ユーザーレベルの環境変数を設定する場合は、このパラメーターを使用しないことも選択できます。

  • 設定が成功したかどうかを確認します。

    Windows のデスクトップで、[スタート] をクリックするか、Win + R を押します。[ファイル名を指定して実行] ダイアログボックスで、cmd と入力します。次に、[OK] をクリックするか、Enter キーを押します。表示されたページで、echo %ALIBABA_CLOUD_ACCESS_KEY_ID% および echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET% コマンドを実行します。有効な AccessKey ペアが返された場合、設定は成功しています。

Windows PowerShell の使用

PowerShell で、新しい環境変数を設定します。環境変数はすべての新しいセッションに適用されます。

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)

すべてのユーザーの環境変数を設定します。次のコマンドを管理者として実行する必要があります。

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)

一時的な環境変数を設定します。環境変数は現在のセッションにのみ適用されます。

$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"

PowerShell で、Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID および Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET コマンドを実行します。有効な AccessKey ペアが返された場合、設定は成功しています。

SDK の使用

この例では、Short Message Service (SMS)SendMessageToGlobe API 操作が呼び出されます。SendMessageToGlobe の詳細については、「SendMessageToGlobe」をご参照ください。

1. リクエストクライアントの初期化

SDK では、API 操作へのすべてのリクエストはクライアントから送信されます。API 操作を呼び出す前に、リクエストクライアントを初期化する必要があります。リクエストクライアントを初期化するには、複数のメソッドを使用できます。この例では、AccessKey ペアを使用してリクエストクライアントを初期化します。詳細については、「アクセス認証情報の管理」をご参照ください。

重要
  • Dysmsapi Client インスタンスなどのクライアントオブジェクトはスレッドセーフであり、マルチスレッド環境でもセキュリティ上のリスクなく使用できます。スレッドごとにインスタンスを作成する必要はありません。

  • 開発プロジェクトでは、`new` キーワードを使用してクライアントオブジェクトを頻繁に作成することは推奨されません。頻繁に作成すると、リソースの無駄が増え、サービスパフォーマンスが低下するおそれがあります。クライアントはシングルトンモードでカプセル化することを推奨します。これにより、アプリケーションライフサイクル全体にわたり、同一のアクセス認証情報と endpoint に対して、Client インスタンスが 1 つのみ初期化されることが保証されます。

 public static AlibabaCloud.SDK.Dysmsapi20180501.Client CreateClient(){
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
            config.Endpoint = "dysmsapi.aliyuncs.com";
            return new AlibabaCloud.SDK.Dysmsapi20180501.Client(config);
        }

2. リクエストオブジェクトの作成

API 操作を呼び出してパラメーターを渡すには、SDK が提供するリクエストオブジェクトを使用する必要があります。 API 操作のリクエストオブジェクトの名前は、<API operation name>Request というフォーマットに従います。 たとえば、SendMessageToGlobe API 操作のリクエストオブジェクトは SendMessageToGlobeRequest です。 パラメーターの詳細については、API リファレンスをご参照ください。 SendMessageToGlobe 操作のパラメーターの詳細については、「SendMessageToGlobe」をご参照ください。

説明

API 操作がリクエストパラメーターをサポートしていない場合、リクエストオブジェクトを作成する必要はありません。 例えば、DescribeCdnSubList 操作はリクエストパラメーターをサポートしていません。

// リクエストオブジェクトを作成し、必須の入力パラメーターを設定します
AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest sendMessageToGlobeRequest = new AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest
            {   
                // 実際の受信者の番号に置き換えてください。
                To = "<PHONE_NUMBER>",
                // 実際の SMS の内容に置き換えてください。
                Message = "<YOUR_MESSAGE>",
            };

3. クライアントがリクエストを開始します。

リクエスト クライアントを使用して API 操作を呼び出す場合、関数には次のフォーマットで名前を付けることをお勧めします: <API operation name>WithOptions。 この関数には、リクエスト オブジェクトと実行時パラメーターの 2 つのパラメーターが含まれています。 リクエスト オブジェクトは、前のステップで作成されます。 実行時パラメーターは、タイムアウトやプロキシ構成などのリクエスト アクションを指定するために使用されます。 詳細については、「高度な設定」をご参照ください。

説明

API 操作がリクエストパラメーターをサポートしていない場合、リクエストにリクエストオブジェクトを指定する必要はありません。例えば、DescribeCdnSubList 操作を呼び出す場合、実行時パラメーターのみを指定します。

API 操作の応答オブジェクトを、次のフォーマットで命名します: <API operation name>Response。 たとえば、SendMessageToGlobe API 操作の応答オブジェクトは SendMessageToGlobeResponse です。

 // 実行時パラメーターを作成します。
 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
 AlibabaCloud.SDK.Dysmsapi20180501.Client client = CreateClient();
 // リクエストを送信します。
 AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeResponse response = client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);

4. エラー処理

V2.0 .NET SDK は、例外を TeaUnretryableException と TeaException に分類します。

  • TeaUnretryableException:ほとんどの場合、このタイプの例外はネットワークエラーが原因で発生し、最大リトライ回数に達したときにスローされます。

  • TeaException:ほとんどの場合、このタイプの例外はビジネスエラーが原因で発生します。

SDK の例外処理方法の詳細については、「例外処理」をご参照ください。

重要

システムの堅牢性と安定性を確保するために、例外の報告、例外のログ記録、リトライの実行といった適切な例外処理対策を講じてください。

サンプルコード全体の表示

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;
namespace AlibabaCloud.SDK.Sample
{
    public class Sample 
    {
        public static AlibabaCloud.SDK.Dysmsapi20180501.Client CreateClient()
        {
    
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
          
            config.Endpoint = "dysmsapi.aliyuncs.com";
            return new AlibabaCloud.SDK.Dysmsapi20180501.Client(config);
        }

        public static void Main(string[] args)
        {
            AlibabaCloud.SDK.Dysmsapi20180501.Client client = CreateClient();
            // リクエストオブジェクトを作成し、必須の入力パラメーターを設定します
            AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest sendMessageToGlobeRequest = new AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest
            {   
                // 実際の受信者の番号に置き換えてください。
                To = "<PHONE_NUMBER>",
                // 実際の SMS コンテンツに置き換えてください。
                Message = "<YOUR_MESSAGE>",
            };
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            try
            {
                // コードをコピーして実行し、API の戻り値をご自身で出力してください。
                client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
            }
            catch (TeaException error)
            {
                // これは出力例です。例外処理は慎重に行い、エンジニアリングプロジェクトで例外を直接無視しないでください。
                // エラーメッセージを出力します
                Console.WriteLine(error.Message);
                // 診断については、以下のリンクをクリックしてください。
                Console.WriteLine(error.Data["Recommend"]);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                // これは出力例です。例外処理は慎重に行い、エンジニアリングプロジェクトで例外を直接無視しないでください。
                // エラーメッセージを出力します
                Console.WriteLine(error.Message);
                // 診断については、以下のリンクをクリックしてください。
                Console.WriteLine(error.Data["Recommend"]);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }


    }
}

特殊なシナリオ:Advance 操作によるファイルのアップロード

オンプレミスのマシン上のイメージを処理したり、イメージをアップロードしたりするために Image Search または Visual Intelligence API (VIAPI) を使用する場合、ドキュメントに記載されている Image Search または VIAPI の API は直接アップロードをサポートしていません。イメージをアップロードするには、ファイルストリームの転送をサポートする Advance 操作を使用する必要があります。クラウドサービスは、アップロードされたファイルを Object Storage Service (OSS) に一時的に保存し、必要に応じて OSS から一時ファイルを読み取ります。OSS のデフォルトリージョンは cn-shanghai です。次の例では、VIAPI の DetectBodyCount 操作を呼び出す方法を示します。

説明

OSS 内の一時ファイルは定期的にクリアされます。

  1. リクエストクライアントの初期化

    クラウドサービスの RegionId パラメーターと endpoint の両方が指定されていることを確認してください。RegionId は、一時ファイルが保存される OSS リージョンを示します。RegionId パラメーターを設定しない場合、クラウドサービスが OSS とは異なるリージョンを使用し、API タイムアウトが発生する可能性があります。

    public static AlibabaCloud.SDK.Facebody20191230.Client CreateClient()
    {
        AlibabaCloud.OpenApiClient.Models.Config config =
            new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 必須。次の環境変数がコード実行環境に設定されていることを確認してください:ALIBABA_CLOUD_ACCESS_KEY_ID。
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // 必須。次の環境変数がコード実行環境に設定されていることを確認してください:ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
        config.RegionId = "cn-shanghai";
        config.Endpoint = "facebody.cn-shanghai.aliyuncs.com";
        return new AlibabaCloud.SDK.Facebody20191230.Client(config);
    }
  2. リクエストオブジェクトの作成

    <API 操作>AdvanceRequest リクエストオブジェクトを作成して、ファイルストリームを渡します。リクエストオブジェクトで、パラメーター名を ImageURLObject に設定します。

    AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest detectBodyCountAdvanceRequest =
        new AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest
        {
            ImageURLObject = File.OpenRead(@"<FILE_PATH>"), // <FILE_PATH> を実際のファイルパスに置き換えます。
        };   
  3. リクエストの開始

    <API 操作名>Advance 関数を呼び出してリクエストを開始します。

    // 実行時パラメーターを設定します。
    AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    AlibabaCloud.SDK.Facebody20191230.Client client = CreateClient();
    // リクエストを送信します。
    AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountResponse response = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
    Console.WriteLine(AlibabaCloud.TeaUtil.Common.ToJSONString(response));

完全なサンプルコードの表示

// dotnet add package AlibabaCloud.SDK.Facebody20191230 --version 4.1.2

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Tea;
using Tea.Utils;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        public static AlibabaCloud.SDK.Facebody20191230.Client CreateClient()
        {
            AlibabaCloud.OpenApiClient.Models.Config config =
                new AlibabaCloud.OpenApiClient.Models.Config
                {
                    // 必須。次の環境変数がコード実行環境に設定されていることを確認してください:ALIBABA_CLOUD_ACCESS_KEY_ID。
                    AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // 必須。次の環境変数がコード実行環境に設定されていることを確認してください:ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                    AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                };
            config.RegionId = "cn-shanghai";
            config.Endpoint = "facebody.cn-shanghai.aliyuncs.com";
            return new AlibabaCloud.SDK.Facebody20191230.Client(config);
        }

        public static void Main(string[] args)
        {
            try
            {
                AlibabaCloud.SDK.Facebody20191230.Client client = CreateClient();
                // <FILE_PATH> を実際のファイルパスに置き換えます。
                using (FileStream fileStream = File.OpenRead(@"<FILE_PATH>"))
                {
                    AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest detectBodyCountAdvanceRequest =
                        new AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest
                        {
                            ImageURLObject = fileStream,
                        };
                    AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                    AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountResponse response =
                        client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
                    Console.WriteLine(AlibabaCloud.TeaUtil.Common.ToJSONString(response));
                }
            }
            catch (TeaException error)
            {
                // 実際のビジネスシナリオに応じて例外を慎重に処理し、プロジェクト内で例外を無視しないようにしてください。この例で表示されるエラーメッセージは、あくまで参考用です。
                Console.WriteLine(error.Message);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(
                    new Dictionary<string, object> { { "message", _error.Message } }
                );
                // 実際のビジネスシナリオに応じて例外を慎重に処理し、プロジェクト内で例外を無視しないようにしてください。この例で表示されるエラーメッセージは、あくまで参考用です。
                Console.WriteLine(error.Message);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }
    }
}

よくある質問

  • OpenAPI を呼び出すと、「You are not authorized to perform this operation」というエラーメッセージが表示されます。

    原因:Resource Access Management (RAM) ユーザーが使用する AccessKey ペアに、API 操作を呼び出すための権限がありません。

    解決策:RAM ユーザーに必要な権限を付与してください。詳細については、「RAM ユーザーへの権限付与」をご参照ください。

    例えば、「You are not authorized to perform this operation」エラーが SendMessageToGlobe API 操作によってスローされた場合は、次のカスタムポリシーを作成して、RAM ユーザーに必要な権限を付与してください:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  • OpenAPI を呼び出すと、次のエラーが返されます:「System.UnretryableException: One or more errors occurred.」

    原因:リクエストクライアントの初期化時に指定したエンドポイントを、API 操作がサポートしていません。

    解決策:サポートされているエンドポイントを指定して、再試行してください。詳細については、「エンドポイントの設定」をご参照ください。

  • OpenAPI の呼び出しで、次のエラーが返されます:ErrorCode":"InvalidAccessKeyId.NotFound","ErrorMessage":"Specified access key is not found."。

    原因:AccessKey ペアがリクエストに正しく渡されていません。

    解決策:リクエストクライアントを初期化する際に、AccessKey ペアが正しく渡されていることを確認してください。Environment.GetEnvironmentVariable("XXX") は、XXX の値が環境変数から取得されることを示します。

SDK エラーの処理方法の詳細については、「よくある質問」をご参照ください。