このトピックでは、セキュアアクセスプロキシを有効にした後、HTTPS 経由でターゲットインスタンスにアクセスする方法について説明します。
前提条件
インスタンスに対して
セキュアアクセスプロキシが有効化されていること。説明DMS コンソールで、 に移動します。[作成済み] タブで、
セキュアアクセスプロキシが有効になっているインスタンスのリストを表示できます。有効にする必要がある場合は、「セキュアアクセスプロキシの有効化」をご参照ください。セキュアアクセスプロキシの権限付与を受けていること。説明セキュアアクセスプロキシの詳細ページで、インスタンスの権限付与ステータスを確認します。権限付与を受けていない場合は、「セキュアアクセスプロキシ権限の申請」をご参照ください。
注意事項
セキュアアクセスプロキシ が有効になっている セキュアコラボレーションインスタンス は、セキュリティルールの対象となります。1 回のクエリで返される行数を最大 3,000 行に制限することを推奨します。DMS は、3,000 行を超える行を返すクエリの安定性を保証しません。
セキュリティルールの制限をバイパスするには、DMS コンソールで提供されるエンドポイントを使用してデータベースにアクセスするか、DMS テクニカルサポートに連絡して特定のユースケースを評価してもらってください。非セキュアコラボレーションインスタンスの場合、クエリごとの最大行数を設定することはできません。デフォルトの制限は 3,000 行です。
リクエストパラメーター
パラメーター | 説明 | 必須 | 合格する方法 |
accessId | ご利用の | はい | このパラメーターは、次のいずれかの方法で渡すことができます:
|
accessSecret | ご利用の | はい | このパラメーターは、次のいずれかの方法で渡すことができます:
|
schema | データベースの名前。 | いいえ | このパラメーターは、次のいずれかの方法で渡すことができます:
|
sql | 実行する SQL ステートメント。 | はい | このパラメーターは、次のいずれかの方法で渡すことができます:
|
レスポンスフィールド
API は JSON フォーマットでレスポンスを返します。
次の表に、JSON レスポンスオブジェクトのフィールドを示します。
フィールド | 型 | 説明 |
columnMetas | 配列 | 各列のメタデータの配列。 |
columnName | 文字列 | 列の名前。 |
columnLabel | 文字列 | 列のラベル。SQL ステートメントの |
columnTypeName | 文字列 | 列のデータの型。 |
precision | 整数 | 列の精度。たとえば、 |
scale | 整数 | 数値列の |
nullable | ブール値 | 列に |
autoIncrement | ブール値 | 列が自動インクリメント列であるかどうかを示します。true:列は自動インクリメントされます。false:されません。 |
tableName | 文字列 | 列を含むテーブルの名前。 |
msg | 文字列 | リクエストが失敗した場合に返されるエラーメッセージ。 |
updateCount | 整数 | DML ステートメントによって影響を受けた行数。 |
requestId | 文字列 |
|
rowCount | 整数 | クエリによって返されたレコード数。 |
rows | 配列 | クエリによって返されたレコードのリスト。配列内の各要素は、 |
success | ブール値 | リクエストが成功したかどうかを示します。true:リクエストは成功しました。false:リクエストは失敗しました。 |
次のコードはレスポンスの例を示しています。
データクエリの成功
{ "columnMetas": [ { "columnName":"column1", "columnLabel":"column1", "columnTypeName":"varchar", "precision":10, "scale":2, "nullable":true, "autoIncrement":true, "tableName":"table1" }, { "columnName":"column2", "columnLabel":"column2", "columnTypeName":"varchar", "precision":10, "scale":2, "nullable":true, "autoIncrement":true, "tableName":"table1" } ], "updateCount": 0, "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi", "rowCount": 1, "rows": [ { "col1": 1, "col2": "xxxx" } ], "success": true }データ更新の成功
{ "updateCount": 0, "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi", "success": true }リクエストの失敗
{ "message": "accessId is required.", "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi", "success": false }
例
コマンドライン、SQL クライアント、またはアプリケーションコードを使用して、セキュアアクセスプロキシ が有効になっている インスタンス にアクセスできます。
エンドポイント が dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com、データベース名が database、AccessKey ID (accessId として渡される) が user、AccessKey Secret (accessSecret として渡される) が pwd、SQL ステートメントが show databases であると仮定します。
cURL コマンドラインの例
# GET リクエスト curl 'https://[your_endpoint]/server/[your_database_name]?accessId=[your_AccessKey_ID]&accessSecret=[your_AccessKey_Secret]&sql=[your_sql_statement]'# GET リクエストの例 curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW%20DATABASES'# POST リクエスト curl 'https://[your_endpoint]/server/[your_database_name]' -H 'accessId:[your_AccessKey_ID]' -H 'accessSecret:[your_AccessKey_Secret]' -H 'Content-Type:text/plain' -d '[your_sql_statement]'# POST リクエストの例 curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database' -H 'accessId:user' -H 'accessSecret:pwd' -H 'Content-Type:text/plain' -d 'SHOW DATABASES'Python の例
説明この例では Python 2 を使用します。
GET リクエスト:
import requests url = "https://[your_endpoint]/server/[your_database_name]?accessId=[your_AccessKey_ID]&accessSecret=[your_AccessKey_Secret]&sql=[your_sql_statement]" print requests.get(url).textGET リクエストの例:
import requests url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES" print requests.get(url).textPOST リクエスト:
import requests url = "https://[your_endpoint]/server/[your_database_name]" headers = { "Content-Type": "text/plain;charset=utf-8", "accessId": "[your_AccessKey_ID]", "accessSecret": "[your_AccessKey_Secret]" } print requests.post(url, headers=headers, data='[your_sql_statement]').textPOST リクエストの例:
import requests url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database" headers = { "Content-Type": "text/plain;charset=utf-8", "accessId": "user", "accessSecret": "pwd" } print requests.post(url, headers=headers, data='SHOW DATABASES').textNode.js の例
GET リクエスト:
const https = require("https"); https.get("https://[your_endpoint]/server/[your_database_name]?accessId=[your_AccessKey_ID]&accessSecret=[your_AccessKey_Secret]&sql=SHOW DATABASES", resp => { resp.on("data", data => { console.log(JSON.parse(data)); }); });GET リクエストの例:
const https = require("https"); https.get("https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES", resp => { resp.on("data", data => { console.log(JSON.parse(data)); }); });POST リクエスト:
const https = require("https"); var req = https.request({ hostname: '[your_endpoint]', port: 443, path: '/server/[your_database_name]', method: 'POST', headers: { 'Content-Type': 'text/plain; charset=UTF-8', accessId: '[your_AccessKey_ID]', accessSecret: '[your_AccessKey_Secret]' } }, resp => { resp.on("data", data => { console.log(JSON.parse(data)); }); }); req.write("[your_sql_statement]"); req.end();POST リクエストの例:
const https = require("https"); var req = https.request({ hostname: 'dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com', port: 443, path: '/server/database', method: 'POST', headers: { 'Content-Type': 'text/plain; charset=UTF-8', accessId: 'user', accessSecret: 'pwd' } }, resp => { resp.on("data", data => { console.log(JSON.parse(data)); }); }); req.write("SHOW DATABASES"); req.end();Postman の例
GET リクエスト:

POST リクエスト:
