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

Alibaba Cloud SDK:SDK の統合

最終更新日:Nov 09, 2025

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

前提条件

  • Go 1.10.x 以降がインストールされていること。

SDK のインポート

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

  2. [インストール] ページ、[すべての言語][Go] を選択します。 次に、[クイックスタート] タブで、Short Message Service (SMS) の SDK インストール方法を見つけることができます。image

アクセス資格情報の設定

Alibaba Cloud サービスの API 操作を呼び出すには、AccessKey ペアセキュリティトークンサービス (STS) トークンなどのアクセス資格情報を設定する必要があります。 AccessKey ペアの漏洩を防ぐために、AccessKey ペアを環境変数に記録できます。 他のセキュリティソリューションの詳細については、「資格情報のセキュリティソリューション」をご参照ください。 この例では、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_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 の使用

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

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

V2.0 SDK では、すべての OpenAPI 呼び出しはクライアントを介して開始されます。 OpenAPI 操作を呼び出す前に、クライアントを初期化する必要があります。 クライアントはいくつかの方法で初期化できます。 この例では、AccessKey を使用してクライアントを初期化する方法を示します。 他の初期化方法の詳細については、「アクセス資格情報の管理」をご参照ください。

重要
  • クライアントインスタンスはスレッドセーフであり、マルチスレッド環境で使用できます。 スレッドごとに個別のインスタンスを作成する必要はありません。

  • 開発プロジェクトでは、クライアントオブジェクトを頻繁に作成しないことをお勧めします。 そうしないと、リソースの浪費が増加し、サービスのパフォーマンスが低下する可能性があります。 単一のインスタンスを使用してクライアントをカプセル化することをお勧めします。 これにより、アプリケーションライフサイクル全体で、同じアクセス資格情報とエンドポイントに対して 1 つのクライアントインスタンスのみが初期化されることが保証されます。

import (
  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "os"
)

func CreateClient () (_result *dysmsapi20180501.Client, _err error) {
  config := &openapi.Config{
    // 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  _result = &dysmsapi20180501.Client{}
  _result, _err = dysmsapi20180501.NewClient(config)
  return _result, _err
}

2. Request 構造体インスタンスの作成

OpenAPI 呼び出しのパラメーターを渡すときは、SDK が提供する Request 構造体を使用する必要があります。 OpenAPI Request 構造体の命名形式は <OpenAPI 操作名>Request です。 たとえば、`SendSms` 操作のリクエスト構造体は `SendSmsRequest` です。 リクエストパラメーターの詳細については、対応する API ドキュメントをご参照ください。 この例の API ドキュメントについては、「SendMessageToGlobe」をご参照ください。

説明

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

// リクエストオブジェクトを作成し、必須の入力パラメーターを設定します
sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
  // 実際の受信者番号に置き換えてください。
  To: tea.String("<YOUR_VALUE>"),
  // 実際の SMS コンテンツに置き換えてください。
  Message: tea.String("<YOUR_VALUE>"),
}

3. クライアントによるリクエストの開始

クライアントを使用して OpenAPI 操作を呼び出す場合は、<操作名>WithOptions 関数を使用することをお勧めします。 この関数は 2 つのパラメーターを取ります。1 つ目は API Request 構造体へのポインター、2 つ目は実行時オプション構造体へのポインターです。 実行時オプションは、タイムアウト設定やプロキシ設定などのリクエストの動作を設定するために使用されます。 詳細については、「高度な設定」をご参照ください。

説明

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

// import 文に 'util "github.com/alibabacloud-go/tea-utils/v2/service"' を追加する必要があります。

func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }
  // リクエストオブジェクトを作成し、必須の入力パラメーターを設定します
  sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
    // 実際の受信者番号に置き換えてください。
    To: tea.String("<YOUR_VALUE>"),
    // 実際の SMS コンテンツに置き換えてください。
    Message: tea.String("<YOUR_VALUE>"),
  }
  runtime := &util.RuntimeOptions{}
  // コードをコピーして実行し、API の戻り値を自分で出力してください。
  response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
  if _err != nil {
    return nil, _err
  }
  return response, _err
}

4. エラーの処理

Alibaba Cloud SDK V2.0 for Go は、例外を次のタイプに分類します。

  • error: このタイプの例外は、ビジネス以外のエラーが原因で発生します。 たとえば、SDK ソースファイルが変更されたために検証が失敗した場合や、解析が失敗した場合にエラーがスローされます。

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

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

重要

システムの堅牢性と安定性を確保するために、例外の報告、例外のログ記録、再試行などの適切な例外処理手段を講じることをお勧めします。

詳細については、サンプルコードをご参照ください。

の例: SendMessageToGlobe 操作の呼び出し

package main

import (
  "fmt"
  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
  "os"
)

func CreateClient() (_result *dysmsapi20180501.Client, _err error) {
  config := &openapi.Config{
    // 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  _result = &dysmsapi20180501.Client{}
  _result, _err = dysmsapi20180501.NewClient(config)
  return _result, _err
}

func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }
  // リクエストオブジェクトを作成し、必須の入力パラメーターを設定します
  sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
    // 実際の受信者番号に置き換えてください。
    To: tea.String("<YOUR_VALUE>"),
    // 実際の SMS コンテンツに置き換えてください。
    Message: tea.String("<YOUR_VALUE>"),
  }
  runtime := &util.RuntimeOptions{}
  // コードをコピーして実行し、API の戻り値を自分で出力してください。
  response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
  if _err != nil {
    return nil, _err
  }
  return response, _err
}

func main() {
  response, err := _main()
  if err != nil {
    panic(err)
  }
  fmt.Println(response.Body)
}

特殊なシナリオ: 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 のタイムアウトが発生する可能性があります。

    import (
      "os"
    
      openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client"
      "github.com/alibabacloud-go/tea/tea"
    )
    
    func CreateClient() (_result *facebody20191230.Client, _err error) {
      config := &openapi.Config{
        // 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が実行時環境に設定されていることを確認してください。
        AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
        // 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が実行時環境に設定されていることを確認してください。
        AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
      }
      // エンドポイントと regionId は同じリージョンに設定する必要があります。
      config.RegionId = tea.String("cn-shanghai")
      config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com")
      _result, _err = facebody20191230.NewClient(config)
      return _result, _err
    }
  2. AdvanceRequest 構造体インスタンスの作成

    ローカルファイルをアップロードする場合、ファイルストリームを渡すには SDK が提供する AdvanceRequest 構造体を使用する必要があります。 AdvanceRequest 構造体の命名形式は <OpenAPI 操作名>AdvanceRequest です。 ファイルストリームを渡すためのパラメーター名を見つけるには、対応する AdvanceRequest 構造体で io.Reader 型のパラメーターを探します。

    // ファイルパスに置き換えます。
    filePath := `<FILE_PATH>`
    // ファイルを開いてストリームを作成します。
    file, err := os.Open(filePath)
    if err != nil {
      return fmt.Errorf("Failed to open file: %v", err)
    }
    defer file.Close() // ファイルを閉じます。
    // AdvanceRequest 構造体のインスタンスを作成します。
    detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
      ImageURLObject: file,
    }
  3. リクエストの開始

    <操作名>Advance 関数を呼び出してリクエストを開始します。 入力パラメーターは、AdvanceRequest 構造体へのポインターです。

    // import 文に 'util "github.com/alibabacloud-go/tea-utils/v2/service"' を追加する必要があります。
    
    func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) {
      client, _err := CreateClient()
      if _err != nil {
        return nil, _err
      }
    
      // ファイルパスに置き換えます。
      filePath := `<FILE_PATH>`
      // ファイルを開いてストリームを作成します。
      file, err := os.Open(filePath)
      if err != nil {
        return nil, fmt.Errorf("Failed to open file: %v", err)
      }
      defer file.Close() // ファイルを閉じます。
      // リクエストオブジェクトを作成します。
      detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
        ImageURLObject: file,
      }
      runtime := &util.RuntimeOptions{}
      // リクエストを開始します。
      response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime)
    
      if _err != nil {
        return nil, _err
      }
      return response, nil
    }

クリックして完全なサンプルコードを表示

package main

import (
  "fmt"
  "os"

  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)

func CreateClient() (_result *facebody20191230.Client, _err error) {

  config := &openapi.Config{
    // 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が実行時環境に設定されていることを確認してください。
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が実行時環境に設定されていることを確認してください。
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.RegionId = tea.String("cn-shanghai")
  config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com")
  _result, _err = facebody20191230.NewClient(config)
  return _result, _err
}

func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }

  // ファイルパスに置き換えます。
  filePath := `<FILE_PATH>`
  // ファイルを開いてストリームを作成します。
  file, err := os.Open(filePath)
  if err != nil {
    return nil, fmt.Errorf("Failed to open file: %v", err)
  }
  defer file.Close() // ファイルを閉じます。
  // リクエストオブジェクトを作成します。
  detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
    ImageURLObject: file,
  }
  runtime := &util.RuntimeOptions{}
  // リクエストを開始します。
  response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime)

  if _err != nil {
    return nil, _err
  }
  return response, nil
}
func main() {
  response, err := _main()
  if err != nil {
    panic(err)
  }
  fmt.Println(response)
}

よくある質問

  1. API 操作によってスローされた "You are not authorized to perform this operation" エラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

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

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

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

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. API 操作によってスローされた "SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host" エラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

    考えられる原因: リクエストクライアントを初期化するときに指定したエンドポイントを API 操作がサポートしていません。

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

  3. API 操作によってスローされた "SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found" エラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

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

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

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