您可以通過STS服務為其他使用者頒發一個臨時訪問憑證,該使用者可使用臨時訪問憑證在有效時間內訪問Tablestore資源。臨時訪問憑證無需透露您的長期密鑰,且超過有效期間後,該憑證自動失效,使您的Tablestore資源訪問更加靈活和安全。
背景資訊
RAM角色是一種虛擬使用者,可以被授予訪問特定資源的許可權。與RAM使用者不同,RAM角色沒有永久身份憑證(登入密碼或存取金鑰),需要被一個可信實體(如RAM使用者)扮演。扮演成功後,可信實體將獲得RAM角色的臨時身份憑證,即安全性權杖(STS Token),使用該安全性權杖就能以RAM角色身份訪問Tablestore。
可信實體為阿里雲帳號的RAM角色主要用於解決跨帳號訪問和臨時授權問題。本文以同帳號的RAM使用者扮演RAM角色為例向您介紹如何使用STS臨時訪問憑證發起請求訪問Tablestore資源。
操作步驟
使用STS臨時訪問憑證訪問Tablestore,首先您需要建立一個RAM角色用於被扮演,該角色需要被授予訪問Tablestore的許可權。其次您需要建立一個RAM使用者用來扮演RAM角色,擷取STS臨時訪問憑證。最後您需要使用擷取到的STS臨時訪問憑證發起請求,訪問Tablestore資源。
步驟一:建立RAM角色
使用阿里雲帳號(主帳號)或Resource Access Management員登入RAM控制台。
在左側導覽列,選擇
,進入角色頁面。單擊建立角色,配置信任主體資訊,單擊確定。
參數
樣本值
信任主體類型
雲帳號
信任主體名稱
當前雲帳號
在建立角色對話方塊,填寫角色名稱為
RamTablestore
,單擊確定。
使用STS服務擷取臨時訪問憑證時需要指定RAM角色的ARN,您可以在角色列表中單擊角色名稱進入角色詳情頁,在基本資料地區內找到ARN並複製。
步驟二:為RAM角色授予訪問Tablestore許可權
使用預設策略
以 AliyunOTSFullAccess
為例授予RAM角色訪問Tablestore的許可權。
AliyunOTSFullAccess
擁有Tablestore的完整存取,您也可以選擇以下方式進行授權。
如果需要唯讀許可權,請授予RAM角色
AliyunOTSReadOnlyAccess
許可權。如果需要唯寫許可權,請授予RAM角色
AliyunOTSWriteOnlyAccess
許可權。
在左側導覽列,選擇
。在角色頁面,找到目標RAM角色。
單擊RAM角色右側的新增授權或單擊角色名稱進入角色詳情頁,在許可權管理地區單擊新增授權。
在新增授權面板的權限原則地區,搜尋
AliyunOTSFullAccess
並選中。單擊確認新增授權。
使用自訂策略
建立自訂權限原則。
在左側導覽列,選擇
。在權限原則頁面,單擊建立權限原則。
在建立權限原則頁面,單擊指令碼編輯,並在輸入框中編寫指令碼,單擊確定。
以下樣本指令碼授予訪問單個執行個體的許可權,您可以根據需要自訂策略指令碼,例如表和API層級的許可權控制或基於情境(IP、訪問時間限制等)的許可權控制。關於RAM Policy的更多資訊,請參見自訂RAM Policy。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ots:*", "Resource": "acs:ots:*:*:instance/your_instance_name*" } ] }
在建立權限原則對話方塊,填寫策略名稱稱,例如
TestRAMPolicy
,單擊確定。
為RAM角色授予自訂權限原則。
在左側導覽列,選擇
。在角色頁面,找到目標RAM角色。
單擊RAM角色右側的新增授權或單擊角色名稱進入角色詳情頁,在許可權管理地區單擊新增授權。
在新增授權面板的權限原則地區,搜尋並選中已建立的自訂權限原則。
單擊確認新增授權。
您可以在角色列表單擊角色名稱進入角色詳情頁,在許可權管理頁簽下查看被授權的權限原則。
步驟三:建立RAM使用者
建立一個RAM使用者用於扮演RAM角色。
使用阿里雲帳號(主帳號)或Resource Access Management員登入RAM控制台。
在左側導覽列,選擇
。在使用者頁面,單擊建立使用者。
在建立使用者頁面的使用者帳號資訊地區,設定使用者基本資料。
登入名稱稱:可包含英文字母、數字、半形句號(.)、短劃線(-)和底線(_),最多64個字元。
顯示名稱:最多包含128個字元或漢字。
標籤:單擊
,輸入標籤鍵和標籤值。為RAM使用者綁定標籤,便於後續基於標籤系統管理使用者。
說明通過單擊添加使用者,您可以大量建立多個RAM使用者。
在訪問方式地區,選中使用永久AccessKey訪問,單擊確定。
說明如果需要使用RAM使用者登入和訪問阿里雲控制台,請選中控制台訪問。
單擊操作列的複製,儲存RAM使用者資訊。您也可以單獨複製AccessKey ID和AccessKey Secret。
重要RAM使用者的AccessKey Secret只在建立時顯示,頁面關閉後將無法查看,請及時儲存並妥善保管。
步驟四:為RAM使用者授予請求AssumeRole的許可權
扮演RAM角色需要授予RAM使用者請求AssumeRole的許可權。
在左側導覽列,選擇
。在使用者頁面,找到目標RAM使用者。
單擊RAM使用者右側的新增授權或單擊使用者名稱稱進入使用者詳情頁,在許可權管理頁簽單擊新增授權。
在新增授權面板的權限原則地區,搜尋
AliyunSTSAssumeRoleAccess
並選中。單擊確認新增授權。
步驟五:使用RAM使用者扮演RAM角色擷取臨時訪問憑證
在訪問資源之前,您需要使用RAM使用者扮演RAM角色擷取臨時訪問憑證,臨時訪問憑證只能在憑證有效期間內使用。此處以Java為例介紹具體操作。
您也可以在OpenAPI門戶直接調用AssumeRole介面擷取臨時訪問憑證。
準備工作
您需要在Maven專案中引用以下依賴。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>sts20150401</artifactId>
<version>1.1.6</version>
</dependency>
範例程式碼
以下範例程式碼使用RAM使用者扮演RAM角色擷取STS臨時訪問憑證並列印到控制台,憑證有效期間是1個小時。
運行代碼前請將RAM使用者的AccessKey以及RAM角色的ARN配置到系統內容變數。
STS服務存取點(Endpoint)列表請參見服務存取點。
import com.aliyun.sts20150401.models.AssumeRoleResponse;
import com.aliyun.tea.*;
public class AssumeRoleSample {
public static com.aliyun.sts20150401.Client createClient() throws Exception {
// 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Endpoint,STS 服務存取點
config.endpoint = "sts.cn-hangzhou.aliyuncs.com";
return new com.aliyun.sts20150401.Client(config);
}
public static void main(String[] args) throws Exception {
com.aliyun.sts20150401.Client client = AssumeRoleSample.createClient();
com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest()
// 臨時訪問憑證的有效時間,單位為秒。最小值為900,最大值以當前角色設定的最大會話時間為準。當前角色最大會話時間取值範圍為3600秒~43200秒,預設值為3600秒。
.setDurationSeconds(3600L)
// 必填,請確保代碼運行環境設定了環境變數 TABLESTORE_STS_ROLE_ARN,即 RAM 角色的 ARN。
.setRoleArn(System.getenv("TABLESTORE_STS_ROLE_ARN"))
// 必填,自訂角色會話名稱,用來區分不同的令牌。
.setRoleSessionName("RAMTablestore");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 擷取 STS 臨時訪問憑證並列印,請妥善保管臨時訪問憑證。
AssumeRoleResponse response = client.assumeRoleWithOptions(assumeRoleRequest, runtime);
System.out.println("Expiration: " + response.getBody().getCredentials().getExpiration());
System.out.println("Access Key Id: " + response.getBody().getCredentials().getAccessKeyId());
System.out.println("Access Key Secret: " + response.getBody().getCredentials().getAccessKeySecret());
System.out.println("Security Token: " + response.getBody().getCredentials().getSecurityToken());
} catch (TeaException error) {
// 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
// 錯誤 message
System.out.println(error.getMessage());
// 診斷地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
// 錯誤 message
System.out.println(error.getMessage());
// 診斷地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}
如果您想瞭解更多語言的STS SDK及程式碼範例,請參見STS SDK概覽。
步驟六:使用臨時訪問憑證訪問Tablestore
準備工作
在Table Store控制台建立執行個體和資料表。
- 重要
新建立的執行個體預設未啟用公網訪問功能。如果您需要通過公網訪問執行個體中的資源,則必須開啟執行個體的公網訪問功能。
根據不同的程式設計語言,安裝對應的Tablestore SDK。
Java
如果您使用的是Maven專案,請在專案的pom.xml檔案中添加如下依賴:
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>tablestore</artifactId> <version>5.17.4</version> </dependency>
更多資訊,請參見安裝Tablestore Java SDK。
Go
在專案目錄中執行
go mod init <DIRNAME>
命令產生go.mod檔案後,執行如下命令安裝TablestoreGo SDK。說明<DIRNAME>
為專案目錄路徑,請以實際路徑為準。go get github.com/aliyun/aliyun-tablestore-go-sdk/tablestore
更多資訊,請參見安裝Tablestore Go SDK。
Python
執行如下命令直接通過pip進行SDK安裝。
sudo pip install tablestore
更多資訊,請參見安裝Tablestore Python SDK。
Node.js
通過npm執行如下命令安裝Table StoreNode.js SDK。
npm install tablestore
更多資訊,請參見安裝Tablestore Node.js SDK。
.NET
具體操作,請參見安裝Tablestore .NET SDK。
PHP
具體操作,請參見安裝Tablestore PHP SDK。
寬表模型
使用寬表模型時,您需要使用STS臨時訪問憑證初始化寬表模型用戶端,並發起相應請求。
運行代碼前請替換代碼內的執行個體資訊,並將STS臨時訪問憑證配置到系統內容變數。
Java
V4簽名(推薦)
以下Java範例程式碼使用V4簽名初始化Client,並擷取執行個體中的所有資料表名稱。
import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.*;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
public class InitClientV4 {
public static void main(String[] args) {
// yourRegion 填寫您的執行個體所在地區,如 cn-hangzhou
final String region = "yourRegion";
// yourInstanceName 填寫您的執行個體名稱
final String instanceName = "yourInstanceName";
// yourEndpoint 填寫您的執行個體訪問地址
final String endpoint = "yourEndpoint";
// 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
// 構造 V4 簽名
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// 初始化Table Store用戶端
SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
/*
// 您可以通過指定 ClientConfiguration 修改預設配置項,以下樣本為部分自訂配置項。
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setConnectionTimeoutInMillisecond(5000); // 設定建立串連的逾時時間,單位為毫秒。
clientConfiguration.setSocketTimeoutInMillisecond(5000); // 設定 socket 逾時時間,單位為毫秒。
clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // 設定重試策略,如果不設定,則採用預設的重試策略。
SyncClient client = new SyncClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
*/
// 列出執行個體中的資料表列表並列印到控制台
ListTableResponse listTableResponse = client.listTable();
listTableResponse.getTableNames().forEach(System.out::println);
// 關閉 Tablestore Client
client.shutdown();
}
}
V2簽名
以下Java範例程式碼使用V2簽名初始化Client,並擷取執行個體中的所有資料表名稱。
import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
public class InitClientV2 {
public static void main(String[] args) {
// yourInstanceName 填寫您的執行個體名稱
final String instanceName = "yourInstanceName";
// yourEndpoint 填寫您的執行個體訪問地址
final String endpoint = "yourEndpoint";
// 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
// 構造 V2 簽名
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// 初始化Table Store用戶端
SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
/*
// 您可以通過指定 ClientConfiguration 修改預設配置項,以下樣本為部分自訂配置項。
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setConnectionTimeoutInMillisecond(5000); // 設定建立串連的逾時時間,單位為毫秒。
clientConfiguration.setSocketTimeoutInMillisecond(5000); // 設定 socket 逾時時間,單位為毫秒。
clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // 設定重試策略,如果不設定,則採用預設的重試策略。
SyncClient client = new SyncClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
*/
// 列出執行個體中的資料表列表並列印到控制台
ListTableResponse listTableResponse = client.listTable();
listTableResponse.getTableNames().forEach(System.out::println);
// 關閉 Tablestore Client
client.shutdown();
}
}
Go
以下Go範例程式碼用於初始化Client,並擷取執行個體中的所有資料表名稱。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-tablestore-go-sdk/tablestore"
)
func main() {
// yourInstanceName 填寫您的執行個體名稱
instanceName := "yourInstanceName"
// yourEndpoint 填寫您的執行個體訪問地址
endpoint := "yourEndpoint"
// 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
accessKeyId := os.Getenv("TABLESTORE_ACCESS_KEY_ID")
accessKeySecret := os.Getenv("TABLESTORE_ACCESS_KEY_SECRET")
securityToken := os.Getenv("TABLESTORE_SESSION_TOKEN")
// 初始化Table Store用戶端
client := tablestore.NewClientWithConfig(endpoint, instanceName, accessKeyId, accessKeySecret, securityToken, nil)
// 列出執行個體中的資料表列表並列印到控制台
tables, err := client.ListTable()
if err != nil {
fmt.Println("Failed to list table.")
} else {
for _, table := range (tables.TableNames) {
fmt.Println(table)
}
}
}
Python
以下Python範例程式碼用於初始化Client,並擷取執行個體中的所有資料表名稱。
# -*- coding: utf-8 -*-
import os
from tablestore import OTSClient
# yourInstanceName 填寫您的執行個體名稱
instance_name = "yourInstanceName"
# yourEndpoint 填寫您的執行個體訪問地址
endpoint = "yourEndpoint"
# 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID")
access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET")
sts_token = os.getenv("TABLESTORE_SESSION_TOKEN")
# 初始化Table Store用戶端
client = OTSClient(endpoint, access_key_id, access_key_secret, instance_name, sts_token=sts_token)
# 列出執行個體中的資料表列表並列印到控制台
resp = client.list_table()
for table_name in resp:
print(table_name)
Node.js
以下Node.js範例程式碼用於初始化Client,並擷取執行個體中的所有資料表名稱。
// 此處為相對路徑,請根據實際情況進行調整。
var TableStore = require('../index.js');
// yourInstanceName 填寫您的執行個體名稱
var instancename = 'yourInstanceName';
// yourEndpoint 填寫您的執行個體訪問地址
var endpoint = 'yourEndpoint';
// 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
var accessKeyId = process.env.TABLESTORE_ACCESS_KEY_ID;
var accessKeySecret = process.env.TABLESTORE_ACCESS_KEY_SECRET;
var stsToken = process.env.TABLESTORE_SESSION_TOKEN;
// 初始化Table Store用戶端
var client = new TableStore.Client({
accessKeyId: accessKeyId,
secretAccessKey: accessKeySecret,
stsToken: stsToken,
endpoint: endpoint,
instancename: instancename
});
// 列出執行個體中的資料表列表並列印到控制台
client.listTable({}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});
PHP
以下PHP範例程式碼用於初始化Client,並擷取執行個體中的所有資料表名稱。
<?php
// 此處為相對路徑,請根據實際情況進行調整。
require (__DIR__ . '/../../vendor/autoload.php');
use Aliyun\OTS\OTSClient as OTSClient;
// yourInstanceName 填寫您的執行個體名稱
$instanceName = "yourInstanceName";
// yourEndpoint 填寫您的執行個體訪問地址
$endpoint = "yourEndpoint";
// 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
$accessKeyId = getenv('TABLESTORE_ACCESS_KEY_ID');
$accessKeySecret = getenv('TABLESTORE_ACCESS_KEY_SECRET');
$stsToken = getenv('TABLESTORE_SESSION_TOKEN');
// 初始化Table Store用戶端
$otsClient = new OTSClient(array(
'EndPoint' => $endpoint,
'AccessKeyID' => $accessKeyId,
'AccessKeySecret' => $accessKeySecret,
'InstanceName' => $instanceName,
'StsToken' => $stsToken,
));
// 列出執行個體中的資料表列表並列印到控制台
$response = $otsClient->listTable (array ());
print json_encode ($response);
時序模型
使用時序模型時,您需要使用STS臨時訪問憑證初始化時序模型用戶端,並發起相應請求。目前Java、Go和Python語言支援操作時序模型。
運行代碼前請替換代碼內的執行個體資訊,並將STS臨時訪問憑證配置到系統內容變數。
Java
V4簽名(推薦)
以下Java範例程式碼使用V4簽名初始化Client,並擷取執行個體中的所有時序表名稱。
import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
public class InitTimeseriesClientV4 {
public static void main(String[] args) {
// yourRegion 填寫您的執行個體所在地區,如 cn-hangzhou
final String region = "yourRegion";
// yourInstanceName 填寫您的執行個體名稱
final String instanceName = "yourInstanceName";
// yourEndpoint 填寫您的執行個體訪問地址
final String endpoint = "yourEndpoint";
// 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
// 構造 V4 簽名
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// 初始化Table Store用戶端
TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
/*
// 您可以通過指定 ClientConfiguration 修改預設配置項,以下樣本為部分自訂配置項。
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setConnectionTimeoutInMillisecond(5000); // 設定建立串連的逾時時間,單位為毫秒。
clientConfiguration.setSocketTimeoutInMillisecond(5000); // 設定 socket 逾時時間,單位為毫秒。
clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // 設定重試策略,如果不設定,則採用預設的重試策略。
TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
*/
// 列出執行個體中的時序表列表並列印到控制台
ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
// 關閉 Tablestore Client
client.shutdown();
}
}
V2簽名
以下Java範例程式碼使用V2簽名初始化Client,並擷取執行個體中的所有時序表名稱。
import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
public class InitTimeseriesClientV2 {
public static void main(String[] args) {
// yourInstanceName 填寫您的執行個體名稱
final String instanceName = "yourInstanceName";
// yourEndpoint 填寫您的執行個體訪問地址
final String endpoint = "yourEndpoint";
// 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
// 構造 V2 簽名
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// 初始化Table Store用戶端
TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
/*
// 您可以通過指定 ClientConfiguration 修改預設配置項,以下樣本為部分自訂配置項。
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setConnectionTimeoutInMillisecond(5000); // 設定建立串連的逾時時間,單位為毫秒。
clientConfiguration.setSocketTimeoutInMillisecond(5000); // 設定 socket 逾時時間,單位為毫秒。
clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // 設定重試策略,如果不設定,則採用預設的重試策略。
TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
*/
// 列出執行個體中的時序表列表並列印到控制台
ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
// 關閉 Tablestore Client
client.shutdown();
}
}
Go
以下Go範例程式碼用於初始化Client,並擷取執行個體中的所有時序表名稱。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-tablestore-go-sdk/tablestore"
)
func main() {
// yourInstanceName 填寫您的執行個體名稱
instanceName := "yourInstanceName"
// yourEndpoint 填寫您的執行個體訪問地址
endpoint := "yourEndpoint"
// 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
accessKeyId := os.Getenv("TABLESTORE_ACCESS_KEY_ID")
accessKeySecret := os.Getenv("TABLESTORE_ACCESS_KEY_SECRET")
securityToken := os.Getenv("TABLESTORE_SESSION_TOKEN")
// 初始化Table Store用戶端
client := tablestore.NewTimeseriesClientWithConfig(endpoint, instanceName, accessKeyId, accessKeySecret, securityToken, nil, nil)
// 列出執行個體中的資料表列表並列印到控制台
timeseriesTables, err := client.ListTimeseriesTable()
if err != nil {
fmt.Println("Failed to list table.")
} else {
for _, timeseriesTablesMeta := range (timeseriesTables.GetTimeseriesTableMeta()) {
fmt.Println(timeseriesTablesMeta.GetTimeseriesTableName())
}
}
}
Python
以下Python範例程式碼用於初始化Client,並擷取執行個體中的所有時序表名稱。
# -*- coding: utf-8 -*-
import os
from tablestore import OTSClient
# yourInstanceName 填寫您的執行個體名稱
instance_name = "yourInstanceName"
# yourEndpoint 填寫您的執行個體訪問地址
endpoint = "yourEndpoint"
# 擷取環境變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID")
access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET")
sts_token = os.getenv("TABLESTORE_SESSION_TOKEN")
# 初始化Table Store用戶端
client = OTSClient(endpoint, access_key_id, access_key_secret, instance_name, sts_token=sts_token)
# 列出執行個體中的時序表列表並列印到控制台
response = client.list_timeseries_table()
for tableMeta in response:
print(tableMeta.timeseries_table_name)
配置環境變數
直接在代碼中儲存訪問憑證容易導致資訊泄露,請按以下操作將訪問憑證儲存在系統內容變數中。
Windows
# 配置 RAM 使用者的 AccessKey ID
setx ALIBABA_CLOUD_ACCESS_KEY_ID your_access_key_id /m
# 配置 RAM 使用者的 AccessKey Secret
setx ALIBABA_CLOUD_ACCESS_KEY_SECRET your_access_key_secret /m
# 配置 RAM 角色的 ARN
setx TABLESTORE_STS_ROLE_ARN your_ram_role_arn /m
# 配置臨時訪問憑證 STS AccessKey ID
setx TABLESTORE_ACCESS_KEY_ID your_sts_access_key_id /m
# 配置臨時訪問憑證 STS AccessKey Secret
setx TABLESTORE_ACCESS_KEY_SECRET your_sts_access_key_secret /m
# 配置臨時訪問憑證 STS Token
setx TABLESTORE_SESSION_TOKEN your_sts_token /m
macOS/Linux/Unix
# 配置 RAM 使用者的 AccessKey ID
export ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id
# 配置 RAM 使用者的 AccessKey Secret
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret
# 配置 RAM 角色的 ARN
export TABLESTORE_STS_ROLE_ARN=your_ram_role_arn
# 配置臨時訪問憑證 STS AccessKey ID
export TABLESTORE_ACCESS_KEY_ID=your_sts_access_key_id
# 配置臨時訪問憑證 STS AccessKey Secret
export TABLESTORE_ACCESS_KEY_SECRET=your_sts_access_key_secret
# 配置臨時訪問憑證 STS Token
export TABLESTORE_SESSION_TOKEN=your_sts_token