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

Alibaba Cloud SDK:Alibaba Cloud SDK V2.0 for Python と統合する

最終更新日:Jul 05, 2025

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

前提条件

Python 3.7 以降がインストールされている。

SDK をインポートする。

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

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

アクセス認証情報を構成する

Alibaba Cloud サービスの API オペレーションを呼び出すには、AccessKey ペアSecurity Token Service (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 シークレットを構成し、Enter キーを押します。

    # <ACCESS_KEY_SECRET> を AccessKey シークレットに置き換えます。
    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 シークレット

    • 変数名: 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 ペアを使用してリクエストクライアントを初期化します。 詳細については、「アクセス認証情報を管理する」をご参照ください。

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

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

@staticmethod
def create_client() -> Dysmsapi20180501Client:
    config = open_api_models.Config(
           # Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.,
           access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
           # Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.,
           access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
    )
      # See https://api.alibabacloud.com/product/Dysmsapi.
      config.endpoint = f'dysmsapi.aliyuncs.com'
      return Dysmsapi20180501Client(config)

2. リクエストオブジェクトを作成する

API オペレーションを呼び出してパラメータを渡すときは、SDK によって提供されるリクエストオブジェクトを使用する必要があります。 API オペレーションのリクエストオブジェクトに、<API オペレーション名>Request の形式で名前を付けます。 たとえば、SendSms API オペレーションのリクエストオブジェクトは SendSmsRequest です。 パラメータの詳細については、API リファレンスを参照してください。 SendMessageToGlobe オペレーションのパラメータの詳細については、「SendMessageToGlobe」をご参照ください。

説明

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

# Create request object and set required input parameters
send_message_to_globe_request = dysmsapi_20180501_models.SendMessageToGlobeRequest(
           # Please replace with the actual recipient number.
           to='<YOUR_NUMBER>',
           # Please replace with the actual SMS content.
           message='<YOUR_MESSAGE>'
)

3. API リクエストを開始する

リクエストクライアントを使用して API オペレーションを呼び出すときは、関数に <API オペレーション名>_with_options の形式で名前を付けることをお勧めします。 <API オペレーション名> をスネークケースで指定します。 この関数には、リクエストオブジェクトとランタイムパラメータの 2 つのパラメータが含まれています。 リクエストオブジェクトは前の手順で作成されます。 ランタイムパラメータは、タイムアウトやプロキシ構成などのリクエストアクションを指定するために使用されます。 詳細については、「詳細構成」をご参照ください。

説明

API オペレーションがリクエストパラメータをサポートしていない場合は、リクエストでリクエストオブジェクトを指定する必要はありません。 たとえば、DescribeCdnSubList オペレーションを呼び出すときは、ランタイムパラメータのみを指定する必要があります。

# Create runtime parameters.
runtime = util_models.RuntimeOptions()
client = create_client()
# Send a request.
client.send_message_to_globe_with_options(send_message_to_globe_request, runtime)

4. エラーを処理する

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

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

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

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

重要

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

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

SendSmsSendMessageToGlobe の例: SendMessageToGlobe オペレーションを呼び出す

import os
import sys
from typing import List
from alibabacloud_dysmsapi20180501.client import Client as Dysmsapi20180501Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dysmsapi20180501 import models as dysmsapi_20180501_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Dysmsapi20180501Client:
            config = open_api_models.Config(
            # Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # See https://api.alibabacloud.com/product/Dysmsapi.
        config.endpoint = f'dysmsapi.aliyuncs.com'
        return Dysmsapi20180501Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        # Create request object and set required input parameters
        send_message_to_globe_request = dysmsapi_20180501_models.SendMessageToGlobeRequest(
           # Please replace with the actual recipient number.
           to='<YOUR_NUMBER>',
           # Please replace with the actual SMS content.
           message='<YOUR_MESSAGE&MESSAGE>'
        )
        # Create runtime parameters.
        runtime = util_models.RuntimeOptions()
        try:
            # Send a request
            client.send_message_to_globe_with_options(send_message_to_globe_request, runtime)
        except Exception as error:
            # print error message
            print(error.message)
            # Please click on the link below for diagnosis.
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

特殊なシナリオ: Advance オペレーションによるファイルアップロード

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

説明

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

  1. リクエストクライアントを初期化する

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

    def create_client() -> facebody20191230Client:
        config = open_api_models.Config(
            # 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数がコードで指定されていることを確認します。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されていることを確認します。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # endpoint パラメータと regionId パラメータに同じリージョンを指定します。
        config.region_id = 'cn-shanghai'
        config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'
        return facebody20191230Client(config)
  2. リクエストオブジェクトを作成する

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

    # バイナリファイルを開きます。
    with open('<FILE_PATH>', "rb") as f:  # ファイルパスを置き換えます。
         # リクエストパラメータを指定します。
         detect_body_count_advance_request = facebody_20191230_models.DetectBodyCountAdvanceRequest(
                   image_urlobject = f,
         )
  3. リクエストを開始する

    <API オペレーション名>Advance 関数を呼び出して、リクエストを開始します。 <API オペレーション名> をキャメルケースで指定します

    /# ランタイムパラメータを構成します。
    runtime = util_models.RuntimeOptions()
    client = create_client()
    # リクエストを開始します。
    res = client.detect_body_count_advance(detect_body_count_advance_request, runtime)

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

import os

from alibabacloud_facebody20191230 import models as facebody_20191230_models
from alibabacloud_facebody20191230.client import Client as facebody20191230Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> facebody20191230Client:
        config = open_api_models.Config(
            # 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数がコードで指定されていることを確認します。 ,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されていることを確認します。 ,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        config.region_id = 'cn-shanghai'
        return facebody20191230Client(config)

    @staticmethod
    def main() -> None:
        client = Sample.create_client()
        # バイナリファイルを開きます。
        with open('<FILE_PATH>', "rb") as f:  # <FILE_PATH> のファイルパスを置き換えます。
            # リクエストパラメータを指定します。
            detect_body_count_advance_request = facebody_20191230_models.DetectBodyCountAdvanceRequest(
                image_urlobject=f,
            )
            runtime = util_models.RuntimeOptions()
            try:
                # リクエストを開始します。
                res = client.detect_body_count_advance(detect_body_count_advance_request, runtime)
                print(res)
            except Exception as error:
                # 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。 この例に表示されているエラーメッセージは参照用です。
                print(error)


if __name__ == '__main__':
    Sample.main()

FAQ

  1. API オペレーションによってスローされた「このオペレーションを実行する権限がありません」エラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

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

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

    たとえば、SendMessageToGlobe API オペレーションによって「このオペレーションを実行する権限がありません」エラーがスローされた場合は、次のカスタムポリシーを作成して、必要な権限を RAM ユーザーに付与します。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. API オペレーションによってスローされた「SDK.EndpointResolvingError」エンドポイントエラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

    考えられる原因: リクエストクライアントを初期化するときに指定したエンドポイントは、API オペレーションでサポートされていません。

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

  3. AttributeError: "AttributeError' object has no attribute 'message'」または「KeyError: "ALIBABA_CLOUD_ACCESS_KEY_ID"」AccessKey エラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

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

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

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