API 呼び出しを容易にするために、プロジェクトで Alibaba Cloud SDK と統合することをお勧めします。 SDK は開発プロセスを簡素化し、機能を迅速に統合し、O&M コストを大幅に削減します。 Alibaba Cloud SDK と統合するには、次の手順を実行します。Alibaba Cloud SDK のインストール、アクセス認証情報の構成、および SDK の使用。 このトピックでは、Alibaba Cloud SDK と統合する方法について説明します。
前提条件
Python 3.7 以降がインストールされている。
SDK をインポートする。
SDK Center にログインし、SDK を使用したいサービスを選択します。 この例では、Short Message Service (SMS) を選択します。
[Short Message Service] ページ、[すべての言語] セクションで [Python] を選択します。 [クイックスタート] タブで、Short Message Service (SMS) SDK のインストール方法を取得します。

アクセス認証情報を構成する
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=yourAccessKeyIDAccessKey シークレットを構成し、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 例外を処理する方法の詳細については、「例外処理」をご参照ください。
システムの堅牢性と安定性を確保するために、例外の報告、例外のログ記録、再試行の実行など、適切な例外処理対策を講じることをお勧めします。
詳細については、[サンプルコード] を参照してください。
特殊なシナリオ: Advance オペレーションによるファイルアップロード
オンプレミス機器の画像を処理したり、画像をアップロードしたりするために Image Search または Visual Intelligence API (VIAPI) を使用する場合、ドキュメントに記載されている Image Search または VIAPI の API は直接アップロードをサポートしていません。 画像をアップロードするには、ファイルストリームの送信をサポートする Advance オペレーションを使用する必要があります。 クラウドサービスは、アップロードされたファイルを一時的に Object Storage Service (OSS) に保存し、必要に応じて OSS から一時ファイルを読み取ります。 OSS のデフォルトリージョンは cn-shanghai です。 次の例は、VIAPI の DetectBodyCount オペレーションを呼び出す方法を示しています。
OSS の一時ファイルは定期的にクリアされます。
リクエストクライアントを初期化する
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)リクエストオブジェクトを作成する
<API オペレーション>AdvanceRequestリクエストオブジェクトを作成して、ファイルストリームを渡します。 リクエストオブジェクトで、パラメータ名をImageURLObjectに設定します。# バイナリファイルを開きます。 with open('<FILE_PATH>', "rb") as f: # ファイルパスを置き換えます。 # リクエストパラメータを指定します。 detect_body_count_advance_request = facebody_20191230_models.DetectBodyCountAdvanceRequest( image_urlobject = f, )リクエストを開始する
<API オペレーション名>Advance関数を呼び出して、リクエストを開始します。<API オペレーション名>をキャメルケースで指定します。/# ランタイムパラメータを構成します。 runtime = util_models.RuntimeOptions() client = create_client() # リクエストを開始します。 res = client.detect_body_count_advance(detect_body_count_advance_request, runtime)
FAQ
API オペレーションによってスローされた「このオペレーションを実行する権限がありません」エラーを処理するにはどうすればよいですか?
API オペレーションによってスローされた「SDK.EndpointResolvingError」エンドポイントエラーを処理するにはどうすればよいですか?
AttributeError: "AttributeError' object has no attribute 'message'」または「KeyError: "ALIBABA_CLOUD_ACCESS_KEY_ID"」AccessKey エラーを処理するにはどうすればよいですか?
SDK エラーの処理方法の詳細については、「FAQ」をご参照ください。