SDK調(diào)用示例
阿里云SDK針對(duì)ROS簡(jiǎn)化了使用編程語(yǔ)言定義和部署云資源的過(guò)程(如Java、TypeScript、Go、Python、PHP、C++、C#、Node.js和Swift)。本文為您介紹如何使用阿里云SDK調(diào)用ROS API。
關(guān)于阿里云SDK的詳細(xì)信息,請(qǐng)參見(jiàn)什么是阿里云SDK?
查看OpenAPI文檔
在調(diào)用OpenAPI前,建議您先閱讀對(duì)應(yīng)接口文檔,了解、學(xué)習(xí)調(diào)用該接口所需要的參數(shù)及權(quán)限等。更多信息,請(qǐng)參見(jiàn)API概覽。
準(zhǔn)備工作
獲取AccessKey信息。
獲取當(dāng)前賬號(hào)AccessKey信息用于配置憑證,如果尚未創(chuàng)建,請(qǐng)參見(jiàn)創(chuàng)建AccessKey。
重要為避免主賬號(hào)泄露AccessKey帶來(lái)的安全風(fēng)險(xiǎn),建議您創(chuàng)建RAM用戶,授予RAM用戶資源編排ROS相關(guān)的訪問(wèn)權(quán)限,再使用RAM用戶的AccessKey調(diào)用SDK。更多信息,請(qǐng)參見(jiàn)為RAM角色授權(quán)。
創(chuàng)建RAM用戶。
訪問(wèn)RAM用戶列表,單擊創(chuàng)建用戶。
設(shè)置登錄名稱,并選擇訪問(wèn)方式為使用永久 AccessKey 訪問(wèn)。
單擊確定,創(chuàng)建RAM用戶并保存
AccessKey ID
與AccessKey Secret
信息。重要RAM用戶的AccessKey Secret只在創(chuàng)建時(shí)顯示,不支持查看,請(qǐng)注意保存。
完成授權(quán)。
訪問(wèn)RAM用戶列表,單擊目標(biāo)RAM用戶最右側(cè)操作列的添加權(quán)限。
在權(quán)限策略區(qū)塊中輸入關(guān)鍵字
ROS
進(jìn)行搜索,選擇AliyunROSFullAccess權(quán)限策略。重要如果系統(tǒng)策略不符合您的需求,根據(jù)最小授權(quán)原則,建議您創(chuàng)建自定義策略。更多信息,請(qǐng)參見(jiàn)通過(guò)可視化編輯模式創(chuàng)建自定義權(quán)限策略。
AliyunROSFullAccess:管理資源編排服務(wù)(ROS)的權(quán)限。
AliyunROSReadOnlyAccess:只讀訪問(wèn)資源編排服務(wù)(ROS)的權(quán)限。
單擊確定新增授權(quán),完成授權(quán)操作。
配置憑證。
為避免將AccessKey硬編碼到業(yè)務(wù)代碼中帶來(lái)的安全風(fēng)險(xiǎn),建議您采用配置環(huán)境變量的方法管理AccessKey。本文以設(shè)置環(huán)境變量為例配置憑證。
Linux和macOS系統(tǒng)
通過(guò)export命令配置環(huán)境變量
重要使用export命令配置的臨時(shí)環(huán)境變量?jī)H對(duì)當(dāng)前會(huì)話有效,當(dāng)會(huì)話退出之后所設(shè)置的環(huán)境變量將會(huì)丟失。若需長(zhǎng)期保留環(huán)境變量,可將export命令配置到對(duì)應(yīng)操作系統(tǒng)的啟動(dòng)配置文件中。
配置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>
驗(yàn)證是否配置成功。
執(zhí)行
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
命令,如果返回正確的AccessKey ID,則說(shuō)明配置成功。
Windows系統(tǒng)
通過(guò)圖形用戶界面GUI
操作步驟
以下為Windows 10中通過(guò)圖形用戶界面設(shè)置環(huán)境變量的步驟。
在桌面右鍵單擊此電腦,選擇屬性>高級(jí)系統(tǒng)設(shè)置>環(huán)境變量>系統(tǒng)變量/用戶變量>新建,完成以下配置:
變量
示例值
AccessKey ID
變量名:ALIBABA_CLOUD_ACCESS_KEY_ID
變量值:LTAI4GDty8ab9W4Y1D****
AccessKey Secret
變量名:ALIBABA_CLOUD_ACCESS_KEY_SECRET
變量值:IrVTNZNy5yQelTETg0cZML3TQn****
測(cè)試設(shè)置是否成功
單擊開(kāi)始(或快捷鍵:Win+R)> 運(yùn)行(輸入 cmd)> 確定(或按 Enter 鍵),打開(kāi)命令提示符,執(zhí)行
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
、echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
命令。若返回正確的AccessKey,則說(shuō)明配置成功。
安裝運(yùn)行環(huán)境以及SDK依賴
您需要安裝編程語(yǔ)言的對(duì)應(yīng)版本,以及配置ROS SDK依賴,以滿足運(yùn)行環(huán)境。
可參考下圖在OpenAPI門戶中,根據(jù)您使用的編程語(yǔ)言配置環(huán)境、SDK依賴。
使用阿里云SDK
本節(jié)以ListStacks - 查詢資源棧列表接口為例,為您展示如何使用阿里云SDK調(diào)用ROS API。
生成或編寫代碼
生成代碼
您可以通過(guò)OpenAPI生成代碼并下載,調(diào)用API。
選擇您需要使用的API,并填寫參數(shù),單擊發(fā)起調(diào)用。本文以ListStacks接口為例。
在SDK示例頁(yè)簽下的Python頁(yè)簽,單擊下載完整工程,下載Python SDK示例代碼包。
在本地解壓示例代碼包,并進(jìn)入alibabacloud_sample目錄。
編寫代碼
您可以根據(jù)API文檔自行編寫代碼并調(diào)用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初始化賬號(hào)Client
@return: Client
@throws Exception
"""
# 工程代碼泄露可能會(huì)導(dǎo)致 AccessKey 泄露,并威脅賬號(hào)下所有資源的安全性。以下代碼示例僅供參考。
config = open_api_models.Config(
# 必填,請(qǐng)確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# 必填,請(qǐng)確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# Endpoint 請(qǐng)參考 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:
# 復(fù)制代碼運(yùn)行請(qǐng)自行打印 API 的返回值
client.list_stacks_with_options(list_stacks_request, runtime)
except Exception as error:
# 此處僅做打印展示,請(qǐng)謹(jǐn)慎對(duì)待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
# 錯(cuò)誤 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:
# 復(fù)制代碼運(yùn)行請(qǐng)自行打印 API 的返回值
await client.list_stacks_with_options_async(list_stacks_request, runtime)
except Exception as error:
# 此處僅做打印展示,請(qǐng)謹(jǐn)慎對(duì)待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
# 錯(cuò)誤 message
print(error.message)
# 診斷地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
運(yùn)行代碼
運(yùn)行代碼得到如下輸出結(jié)果。
{
"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****"
}
]
}