本ガイドでは、Alibaba Cloud SDK for Python を使用して DescribeDBInstances API オペレーションを呼び出す手順について説明します。完了後、ご利用の AnalyticDB for PostgreSQL インスタンス一覧を取得する動作確認済みの Python スクリプトと、今後の開発に活用可能な SDK 環境が構築されます。
前提条件
開始する前に、以下の条件を満たしていることをご確認ください。
少なくとも 1 つの AnalyticDB for PostgreSQL インスタンスを持つ Alibaba Cloud アカウント
Python 3 のインストール(バージョン確認には
python --versionを実行してください。必要に応じて python.org からダウンロードできます)ターミナルでコマンドを実行する基本的な知識
仕組み
AnalyticDB for PostgreSQL API へのすべてのリクエストは、Resource Access Management (RAM) ユーザーの AccessKey を使用して認証されます。SDK は環境変数から認証情報を読み取り、署名付きの API リクエストをサービスのエンドポイントに送信します。
設定は以下の 3 段階で構成されます。
適切な権限を持つ RAM ユーザーを作成し、その AccessKey を保存します。
AccessKey を環境変数として設定し、SDK パッケージをインストールします。
スクリプトを実行します。SDK が認証、リクエストの署名、応答の解析を自動的に処理します。
手順 1:RAM ユーザーの作成と権限付与
すでに AnalyticDB for PostgreSQL の権限を持つ RAM ユーザーをお持ちの場合は、手順 2 へ進んでください。
RAM コンソールにログインし、ユーザー ページへ移動します。ユーザーの作成 をクリックします。
ログイン名 に
adbpg-openapi-operatorを入力し、アクセスモード で 永続的な AccessKey を使用したアクセス を選択します。OK をクリックします。作成後に表示される AccessKey ID および AccessKey Secret を必ず保存してください。AccessKey Secret は再表示されません。
ユーザー ページで、先ほど作成したユーザーを見つけ、権限の追加 をクリックします(操作 列内)。
ポリシーのセクションで
AliyunGPDBを検索し、AliyunGPDBReadOnlyAccess を選択します。OK をクリックします。
AliyunGPDBReadOnlyAccessは、インスタンスの照会のみを許可する読み取り専用の権限です。インスタンスの変更も許可する場合は、代わりにAliyunGPDBFullAccessを選択してください。カスタムの権限セットを定義する場合は、「カスタムポリシーの作成」をご参照ください。
手順 2:環境の準備
環境変数の設定
AccessKey をスクリプト内にハードコードせず、環境変数に格納してください。
Linux または macOS の場合:
export ALIBABA_CLOUD_ACCESS_KEY_ID=<ACCESS_KEY_ID>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ACCESS_KEY_SECRET>Windows の場合:
ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET をシステム環境変数に追加し、それぞれに実際の値を設定した後、システムを再起動してください。
以下のプレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 |
|---|---|
<ACCESS_KEY_ID> | 手順 1 で保存した AccessKey ID |
<ACCESS_KEY_SECRET> | 手順 1 で保存した AccessKey Secret |
依存関係のインストール
SDK は以下の 3 つのパッケージに分割されています。
pip install alibabacloud_credentials # 認証情報管理および認証機能
pip install alibabacloud_gpdb20160503 # AnalyticDB for PostgreSQL API クライアント
pip install alibabacloud_tea_console # コンソール出力ユーティリティ手順 3:DescribeDBInstances オペレーションの呼び出し
以下の自己完結型スクリプトは、DescribeDBInstances を呼び出して応答を出力します。スクリプトをコピーし、region_id の値を置き換えた後、そのまま実行してください。
import os
import json
from alibabacloud_gpdb20160503.client import Client as gpdb20160503Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_gpdb20160503 import models as gpdb_20160503_models
from alibabacloud_tea_util import models as util_models
def create_client() -> gpdb20160503Client:
# 認証情報を環境変数から読み込み — AccessKey の値をハードコードしないでください
config = open_api_models.Config(
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)
# 対象リージョンのエンドポイントを設定
config.endpoint = 'gpdb.aliyuncs.com'
return gpdb20160503Client(config)
def main():
client = create_client()
# リクエストの構築 — RegionId により、特定のリージョン内のインスタンスにフィルターを適用
request = gpdb_20160503_models.DescribeDBInstancesRequest(
region_id='cn-hangzhou' # ご利用の対象リージョンに置き換えます
)
runtime = util_models.RuntimeOptions()
try:
response = client.describe_db_instances_with_options(request, runtime)
# 応答の完全な内容を出力して検証します
print(json.dumps(response.body.to_map(), indent=2, default=str))
except Exception as err:
# エラーの種類を確認してトラブルシューティングを行います:
# - InvalidAccessKeyId: AccessKey ID が不正、または未設定
# - Forbidden: RAM ユーザーに必要な権限が付与されていない
# - SignatureDoesNotMatch: AccessKey Secret が不正
print(f"リクエストが失敗しました:{err}")
raise
if __name__ == '__main__':
main()スクリプトを実行します。
python sample.py結果の確認
正常に実行された場合、HTTP ステータスコード 200 とともにインスタンスの一覧が返されます。応答は以下のようになります。
{
"Items": {
"DBCluster": [
{
"CreateTime": "2023-07-31T07:09:32Z",
"DBInstanceCategory": "Basic",
"DBInstanceDescription": "gp-bp1j20nrgf91****",
"DBInstanceId": "gp-bp1j20nrgf91****",
"DBInstanceMode": "StorageElastic",
"DBInstanceNetType": "2",
"DBInstanceStatus": "Running",
"Engine": "gpdb",
"EngineVersion": "6.0",
"ExpireTime": "2023-08-31T16:00:00Z",
"InstanceDeployType": "cluster",
"InstanceNetworkType": "VPC",
"LockMode": "Unlock",
"LockReason": "0",
"MasterNodeNum": 1,
"PayType": "Prepaid",
"RegionId": "cn-hangzhou",
"ResourceGroupId": "rg-acfmz7u4zzr****",
"SegNodeNum": "2",
"StorageSize": "50",
"StorageType": "cloud_essd",
"Tags": {"Tag": []},
"VSwitchId": "vsw-bp1sxxsodv28ey5****",
"VpcId": "vpc-bp1ov7as4yvz4kxei****",
"ZoneId": "cn-hangzhou-j"
}
]
},
"PageNumber": 1,
"PageRecordCount": 1,
"TotalRecordCount": 1,
"RequestId": "22996ADD-A917-5F47-AA7E-2D9A08AF1AC2"
}応答が空の場合(TotalRecordCount: 0)、指定されたリージョンに AnalyticDB for PostgreSQL インスタンスが存在しません。ただし、SDK 自体は正常に動作しています。別のリージョン ID を試してください。
次のステップ
利用可能な AnalyticDB for PostgreSQL の全 API オペレーションを参照:「API の概要」
他の API オペレーションやプログラミング言語向けのサンプルコードを API Explorer からダウンロード
他のプログラミング言語向け SDK を参照:「AnalyticDB for PostgreSQL SDK」