このトピックでは、セキュアアクセスプロキシを使用して HTTPS 経由でインスタンスにアクセスする方法について説明します。
前提条件
-
インスタンスに対してセキュアアクセスプロキシが有効化されていること。
説明セキュアアクセスプロキシが有効になっているインスタンスは、 ページの [Created] タブで確認できます。この機能を有効にする方法については、「セキュアアクセスプロキシの有効化」をご参照ください。
-
セキュアアクセスプロキシを使用する権限が付与されていること。
説明インスタンスに対する自身の権限ステータスは、セキュアアクセスプロキシの詳細ページで確認してください。権限がない場合は、「セキュアアクセスプロキシ権限の申請」をご参照ください。
注意事項
セキュアアクセスプロキシとセキュアコラボレーションの両機能が有効になっているインスタンスには、セキュリティルールが適用されます。1回のクエリで返される行数は最大 3,000 行に制限することを推奨します。クエリが返す行数が多すぎると、Data Management Service (DMS) は安定性を保証できません。
-
セキュリティルールの制限を回避するには、DMS コンソールのエンドポイントを使用してデータベースにアクセスするか、DMS のテクニカルサポートに連絡して特定のシナリオの評価を依頼してください。
-
セキュアコラボレーション機能を使用しないインスタンスでは、返される最大行数を設定できません。デフォルトの制限は 3,000 行です。
リクエストパラメーター
|
パラメーター |
説明 |
必須 |
メソッド |
|
accessId |
AccessKey ID。 |
はい |
このパラメーターは、以下のいずれかの方法で渡すことができます。
|
|
accessSecret |
AccessKey Secret。 |
はい |
このパラメーターは、以下のいずれかの方法で渡すことができます。
|
|
schema |
データベース名。 |
いいえ |
このパラメーターは、以下のいずれかの方法で渡すことができます。
|
|
sql |
実行する SQL ステートメント。 |
はい |
このパラメーターは、以下のいずれかの方法で渡すことができます。
|
レスポンス形式
HTTPS 経由でインスタンスにアクセスすると、レスポンスは JSON フォーマットで返されます。
JSON オブジェクトは以下の構造を持ちます。
|
フィールド |
タイプ |
説明 |
|
columnMetas |
Array |
列のメタデータのリスト。 |
|
columnName |
String |
列名。 |
|
columnLabel |
String |
列ラベル。SQL ステートメントの |
|
columnTypeName |
String |
列のデータ型。たとえば、 |
|
precision |
Integer |
特定のデータ型の精度。たとえば、 |
|
scale |
Integer |
浮動小数点データ型のスケール。小数点以下の桁数を示します。たとえば、 |
|
nullable |
Boolean |
列が null 値を含むことができるかどうかを示します。 |
|
autoIncrement |
Boolean |
列が自動インクリメントであるかどうかを示します。 |
|
tableName |
String |
列を含むテーブルの名前。 |
|
msg |
String |
リクエストが失敗した場合に返されるエラーメッセージ。 |
|
updateCount |
Integer |
データ操作言語 (DML) ステートメントによって影響を受けたレコード数。 |
|
requestId |
String |
リクエスト ID。問題が発生した場合、トラブルシューティングにこの ID を使用します。 |
|
rowCount |
Integer |
クエリによって返されたレコード数。 |
|
rows |
Array |
クエリによって返されたレコードのリスト。配列の各要素は、 |
|
success |
Boolean |
リクエストが成功したかどうかを示します。 |
以下はレスポンスのサンプルです。
-
クエリの成功
{ "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": [ { "column1": 1, "column2": "xxxx" } ], "success": true } -
更新の成功
{ "updateCount": 0, "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi", "success": true } -
リクエストの失敗
{ "message": "AccessKey ID is required.", "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi", "success": false }
例
コマンドライン、SQL クライアント、またはアプリケーションコードを使用して、セキュアアクセスプロキシが有効になっているインスタンスにアクセスできます。
以下の例では、エンドポイントは dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com、データベース名は database、AccessKey ID は user、AccessKey Secret は pwd、SQL コマンドは SHOW DATABASES とします。
-
curl コマンドの使用
# GET リクエスト curl 'https:///server/ ?accessId= &accessSecret= &sql= ' # GET リクエストの例 curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW%20DATABASES'# POST リクエスト curl 'https:///server/ ' -H 'accessId: ' -H 'accessSecret: ' -H 'Content-Type:text/plain' -d ' ' # 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:///server/ ?accessId= &accessSecret= &sql= " print requests.get(url).text GET リクエストの例:
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:///server/ " headers = { "Content-Type": "text/plain;charset=utf-8", "accessId": " ", "accessSecret": " " } print requests.post(url, headers=headers, data=' ').text POST リクエストの例:
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').text -
Node.js プログラムの使用
GET リクエスト:
const https = require("https"); https.get("https:///server/ ?accessId= &accessSecret= &sql=SHOW DATABASES", resp => { // データを取得 resp.on("data", data => { // データを JSON としてパースしてログに出力 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 => { // データを JSON としてパースしてログに出力 console.log(JSON.parse(data)); }); });POST リクエスト:
const https = require("https"); var req = https.request({ hostname: '', port: 443, path: '/server/ ', method: 'POST', headers: { 'Content-Type': 'text/plain; charset=UTF-8', accessId: ' ', accessSecret: ' ' } }, resp => { // データを取得 resp.on("data", data => { // データを JSON としてパースしてログに出力 console.log(JSON.parse(data)); }); }); // SQL ステートメントを書き込む req.write(" "); // リクエストを終了 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 => { // データを JSON としてパースしてログに出力 console.log(JSON.parse(data)); }); }); // SQL ステートメントを書き込む req.write("SHOW DATABASES"); // リクエストを終了 req.end(); -
Postman クライアントの使用
GET リクエスト: Postman で、URL
https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/databaseに GET リクエストを送信します。URL パラメーターで、accessId をご自身の AccessKey ID に、accessSecret をご自身の AccessKey Secret に、sql を実行する SQL ステートメント (例:SHOW DATABASES) に設定します。[Send] をクリックします。POST リクエスト: Postman で、リクエストメソッドを POST に、URL を
https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/databaseに設定します。[Headers] タブで、Content-Type をtext/plainに、accessId をご自身の AccessKey ID に、accessSecret をご自身の AccessKey Secret に設定します。[Body] タブで [raw] を選択し、[Text] を選び、テキストエリアに SQL ステートメント (例:SHOW DATABASES) を入力します。[Send] をクリックします。