本文介紹不同帳號之間如何?Tablestore和MaxCompute之間的無縫串連。

準備工作

跨雲帳號需要兩個阿里雲帳號,帳號A將存取權限授予帳號B,則運行MaxCompute時,帳號B可以訪問帳號A下的表資料。帳號基本資料如下:
说明 以下資訊僅為樣本,在操作時請替換為實際使用的資訊。
專案 Tablestore MaxCompute
阿里雲帳號名 帳號A 帳號B
UID 1234567890**** 5678901234****

使用MaxCompute跨雲帳號訪問Tablestore前,您需要完成以下準備工作:

  • MaxCompute產品詳情頁為帳號B開通MaxCompute服務,並建立工作空間。具體操作,請參見建立項目
  • 分別擷取帳號A和帳號B的AccessKey。具體操作,請參見擷取AccessKey
  • 使用帳號A建立可信實體為阿里雲帳號的RAM角色並設定信任策略內容。具體操作,請參見建立可信實體為阿里雲帳號的RAM角色修改RAM角色的信任策略
    说明 策略內容中的5678901234****為帳號B的UID。

    本樣本中假設建立的RAM角色名稱為AliyunODPSRoleForOtherUser,其信任策略內容樣本如下,表示該RAM角色可以被帳號B下的MaxCompute服務扮演。

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "5678901234****@odps.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }
                            
  • 記錄帳號A的RAM角色AliyunODPSRoleForOtherUser的ARN(例如acs:ram::1234567890****:role/aliyunodpsroleforotheruser),用於後續建立外表時配置。fig_20220706_arn
  • 建立權限原則並為帳號A的RAM角色AliyunODPSRoleForOtherUser授權。具體操作,請參見建立自訂權限原則為RAM角色授權

    自訂權限原則樣本如下,表示RAM角色具有讀寫帳號A華東1(杭州)地區中名稱為cap1的執行個體及其下所有表的許可權。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ots:*",
          "Resource": [
          "acs:ots:cn-hangzhou:1234567890****:instance/cap1",
          "acs:ots:cn-hangzhou:1234567890****:instance/cap1/table/*"
          ],
          "Condition": {}
        }
      ]
    }

    關於自訂許可權的更多資訊,請參見自訂許可權

  • 在Tablestore控制台建立執行個體和建立資料表。具體操作,請參見建立執行個體和資料表

    在本樣本中,建立的Tablestore執行個體和資料表資訊如下:

    • 執行個體名稱:cap1
    • 資料表名稱:vehicle_track
    • 主鍵資訊:vid (integer),gt (integer)
    • 訪問網域名稱:https://cap1.cn-hangzhou.ots-internal.aliyuncs.com
      说明 使用MaxCompute訪問Tablestore時,建議使用Tablestore的私網地址。
    • 確保執行個體網路類型配置為允許任意網路訪問

使用MaxCompute訪問Tablestore

跨帳號訪問的操作與同帳號下的訪問相同,只是在建立外部表格時要使用角色ARN(即rolearn)。

帳號B通過MaxCompute建立外部表格,指定準備工作中建立的角色ARN來訪問Tablestore。

CREATE EXTERNAL TABLE ads_log_ots_pt_external
(
vid bigint,
gt bigint,
longitude double,
latitude double,
distance double ,
speed double,
oil_consumption double
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler'
WITH SERDEPROPERTIES (
'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption',
'tablestore.table.name'='vehicle_track',
'odps.properties.rolearn'='acs:ram::1234567890****:role/aliyunodpsroleforotheruser'
)
LOCATION 'tablestore://cap1.cn-hangzhou.ots-internal.aliyuncs.com'
USING 'odps-udf-example.jar'