全部產品
Search
文件中心

Resource Orchestration Service:SDK調用樣本

更新時間:Apr 02, 2025

阿里雲SDK針對ROS簡化了使用程式設計語言定義和部署雲資源的過程(如Java、TypeScript、Go、Python、PHP、C++、C#、Node.js和Swift)。本文為您介紹如何使用阿里雲SDK調用ROS API。

說明

關於阿里雲SDK的詳細資料,請參見什麼是阿里雲SDK?

查看OpenAPI文檔

在調用OpenAPI前,建議您先閱讀對應介面文檔,瞭解、學習調用該介面所需要的參數及許可權等。更多資訊,請參見API概覽

準備工作

  1. 擷取AccessKey資訊。

    擷取當前帳號AccessKey資訊用於配置憑證,如果尚未建立,請參見建立AccessKey

    重要

    為避免主帳號泄露AccessKey帶來的安全風險,建議您建立RAM使用者,授予RAM使用者Resource Orchestration Service相關的存取權限,再使用RAM使用者的AccessKey調用SDK。更多資訊,請參見為RAM角色授權

    如果您不瞭解AccessKey且希望快速的使用SDK,可以按照下文建立並授權一個僅用於調用OpenAPI的RAM使用者。

    1. 建立RAM使用者。

      1. 訪問RAM使用者列表,單擊建立使用者

      2. 設定登入名稱稱,並選擇訪問方式使用永久 AccessKey 訪問

      3. 單擊確定,建立RAM使用者並儲存AccessKey IDAccessKey Secret資訊。

        重要

        RAM使用者的AccessKey Secret只在建立時顯示,不支援查看,請注意儲存。

      image

    2. 完成授權。

      1. 訪問RAM使用者列表,單擊目標RAM使用者最右側操作列的添加許可權

      2. 權限原則區塊中輸入關鍵字ROS進行搜尋,選擇AliyunROSFullAccess權限原則。

        重要

        如果系統策略不符合您的需求,根據最小授權原則,建議您建立自訂策略。更多資訊,請參見通過可視化編輯模式建立自訂權限原則

        image

        • AliyunROSFullAccess:管理Resource Orchestration Service服務(ROS)的許可權。

        • AliyunROSReadOnlyAccess:唯讀訪問Resource Orchestration Service服務(ROS)的許可權。

      3. 單擊確定新增授權,完成授權操作。

  2. 配置憑證。

    為避免將AccessKey寫入程式碼到業務代碼中帶來的安全風險,建議您採用配置環境變數的方法管理AccessKey。本文以設定環境變數為例配置憑證。

    Linux和macOS系統

    通過export命令配置環境變數

    重要

    使用export命令配置的臨時環境變數僅對當前會話有效,當會話退出之後所設定的環境變數將會丟失。若需長期保留環境變數,可將export命令配置到對應作業系統的啟動設定檔中。

    • 配置AccessKey ID、AccessKey Secret。

      # 將<ACCESS_KEY_ID>替換為您自己的AccessKey ID。
      export ALIBABA_CLOUD_ACCESS_KEY_ID=<ACCESS_KEY_ID>
      # 將<ACCESS_KEY_SECRET>替換為您自己的AccessKey Secret。
      export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ACCESS_KEY_SECRET>
    • 驗證是否配置成功。

      執行echo $ALIBABA_CLOUD_ACCESS_KEY_ID命令,如果返回正確的AccessKey ID,則說明配置成功。

    Windows系統

    通過圖形化使用者介面GUI
    • 操作步驟

      以下為Windows 10中通過圖形化使用者介面設定環境變數的步驟。

      在案頭按右鍵此電腦,選擇屬性>進階系統設定>環境變數>系統變數/使用者變數>建立,完成以下配置:

      變數

      樣本值

      AccessKey ID

      • 變數名:ALIBABA_CLOUD_ACCESS_KEY_ID

      • 變數值:LTAI****************

      AccessKey Secret

      • 變數名:ALIBABA_CLOUD_ACCESS_KEY_SECRET

      • 變數值:yourAccessKeySecret

    • 測試設定是否成功

      單擊開始(或快速鍵:Win+R)> 運行(輸入 cmd)> 確定(或按 Enter 鍵),開啟命令提示字元,執行echo %ALIBABA_CLOUD_ACCESS_KEY_ID%echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%命令。若返回正確的AccessKey,則說明配置成功。

安裝運行環境以及SDK依賴

您需要安裝程式設計語言的對應版本,以及配置ROS SDK依賴,以滿足運行環境。

可參考下圖在OpenAPI門戶中,根據您使用的程式設計語言配置環境、SDK依賴。

image

使用阿里雲SDK

本節以ListStacks - 查詢資源棧列表介面為例,為您展示如何使用阿里雲SDK調用ROS API。

產生或編寫代碼

產生代碼

您可以通過OpenAPI產生代碼並下載,調用API。

  1. 登入Resource Orchestration ServiceAPI調試列表

  2. 選擇您需要使用的API,並填寫參數,單擊發起調用。本文以ListStacks介面為例。

  3. SDK樣本頁簽下的Python頁簽,單擊下載完整工程,下載Python SDK範例程式碼包。

  4. 在本地解壓範例程式碼包,並進入alibabacloud_sample目錄。

image

編寫代碼

您可以根據API文檔自行編寫代碼並調用API。

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_ros20190910.client import Client as ROS20190910Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ros20190910 import models as ros20190910_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> ROS20190910Client:
        """
        使用AK&SK初始化帳號Client
        @return: Client
        @throws Exception
        """
        # 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
        config = open_api_models.Config(
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 請參考 https://api.aliyun.com/product/ROS
        config.endpoint = f'ros.aliyuncs.com'
        return ROS20190910Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        list_stacks_request = ros20190910_models.ListStacksRequest(
            region_id='cn-hangzhou'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 複製代碼運行請自行列印 API 的傳回值
            client.list_stacks_with_options(list_stacks_request, runtime)
        except Exception as error:
            # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        list_stacks_request = ros20190910_models.ListStacksRequest(
            region_id='cn-hangzhou'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 複製代碼運行請自行列印 API 的傳回值
            await client.list_stacks_with_options_async(list_stacks_request, runtime)
        except Exception as error:
            # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:]) 

運行代碼

運行代碼得到如下輸出結果。

{
  "TotalCount": 1,
  "PageSize": 10,
  "RequestId": "692E6895-AEFC-550C-B968-AE929BB68891",
  "PageNumber": 1,
  "Stacks": [
    {
      "Status": "IMPORT_CREATE_COMPLETE",
      "OperationInfo": {},
      "ResourceGroupId": "rg-acfmz7hmshz****",
      "ServiceManaged": false,
      "StatusReason": "Stack IMPORT_CREATE completed successfully",
      "CreateTime": "2023-06-26T09:40:26",
      "StackType": "ROS",
      "RegionId": "cn-hangzhou",
      "DisableRollback": false,
      "StackName": "TemplateScratch-ResourceImport-wffTp****",
      "Tags": [
        {
          "Value": "rg-acfmz7hmshzcriy",
          "Key": "acs:rm:rgId"
        }
      ],
      "TimeoutInMinutes": 60,
      "StackId": "814d2113-348c-41f1-adb2-85d3aadf****"
    }
  ]
}