使用AccessKey鑒權方式執行工作流,可以通過SDK調用執行,為您提供更安全的服務。
邏輯編排自定義請求觸發器目前提供了兩種客戶端調用方式,如果無需鑒權,可以直接調用對應觸發器的Endpoint執行工作流;如果選擇的是AccessKey鑒權方式,需要配合SDK調用執行,可以通過以下步驟執行。
步驟
獲取 Path。單擊工作流圖形化設計中對應的自定義請求觸發器節點當收到 HTTP 請求時展開觸發器詳情。單擊 Path 后面的復制按鈕復制該觸發器的調用 Path。
2. 通過RAM授權
如果是使用AccessKey進行訪問,請提前給AccessKey對應的RAM用戶賦予權限,具體操作可參見 使用RAM授權。
3. 使用SDK調用
阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
本示例通過將AccessKey保存在環境變量中來實現身份驗證為例。關于如何配置環境變量,請參見身份驗證配置。
本示例中使用的環境變量名分別為
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
。
Java
安裝依賴
將 Maven 依賴項添加到 pom.xml 中
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.3</version>
</dependency>
代碼示例
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
public class TestJavaSDK {
public static void main(String[] args) {
// RegionID使用default,后面通過setDomain指定具體的Endpoint
// 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下資源的安全
DefaultProfile profile = DefaultProfile.getProfile("default", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setProtocol(ProtocolType.HTTPS);
request.setMethod(MethodType.POST);
request.setDomain("lc.<regionId>.aliyuncs.com");
request.setVersion("2019-09-25");
// 注意下面的 <Path> 替換為第1步復制的 Path
request.setUriPattern("<Path>");
// 這里根據工作流需求設置參數
request.putQueryParameter("RegionId", "us-east-1");
request.putHeadParameter("Content-Type", "application/json");
// 這里根據工作流需求設置正文,注意是 JSON 字符串
String requestBody = "";
request.setHttpContent(requestBody.getBytes(), "utf-8", FormatType.JSON);
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
GO
代碼示例
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
// RegionID使用default,后面通過request.Domain指定具體的Endpoint
// 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下資源的安全
client, err := sdk.NewClientWithAccessKey("default", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Method = "POST"
request.Scheme = "https" // https | http
request.Domain = "lc.<regionId>.aliyuncs.com"
request.Version = "2019-09-25"
// 注意下面的 <Path> 替換為第1步復制的 Path
request.PathPattern = "<Path>"
request.Headers["Content-Type"] = "application/json"
// 這里根據工作流需求設置參數
request.QueryParams["RegionId"] = "us-east-1"
// 這里根據工作流需求設置正文,注意是 JSON 字符串
body := ``
request.Content = []byte(body)
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
Python
代碼示例
#!/usr/bin/env python
#coding=utf-8
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
# RegionID使用default,后面通過request.set_domain指定具體的Endpoint
# 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下資源的安全
client = AcsClient(os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), 'default')
request = CommonRequest()
request.set_accept_format('json')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_domain('lc.<regionId>.aliyuncs.com')
request.set_version('2019-09-25')
# 注意下面的 <Path> 替換為第1步復制的 Path
request.set_uri_pattern('<Path>')
# 這里根據工作流需求設置參數
request.add_query_param('RegionId', "us-east-1")
request.add_header('Content-Type', 'application/json')
# 這里根據工作流需求設置正文,注意是 JSON 字符串
body = ''''''
request.set_content(body.encode('utf-8'))
response = client.do_action_with_exception(request)
# python2: print response
print(str(response, encoding = 'utf-8'))
Ruby
# gem install aliyunsdkcore
require 'aliyunsdkcore'
# 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下資源的安全
client = ROAClient.new(
access_key_id: ENV['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret: ENV['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint: 'https://lc.<regionId>.aliyuncs.com',
api_version: '2019-09-25'
)
response = client.request(
method: 'POST',
# 注意下面的 <Path> 替換為第1步復制的 Path
uri: '<Path>',
# 這里根據工作流需求設置參數
queries: {
"RegionId": "cn-hangzhou",
},
headers: {
"Content-Type": "application/json"
},
# 這里根據工作流需求設置正文,注意是 JSON 字符串
body: ``,
options: {}
)
print response
Node.js
安裝依賴
npm install @alicloud/pop-core
代碼示例
var ROAClient = require('@alicloud/pop-core').ROAClient;
// 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下資源的安全
var client = new ROAClient({
accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
endpoint: 'https://lc.<regionId>.aliyuncs.com',
apiVersion: '2019-09-25',
});
async function test() {
try {
var res = await client.request(
'POST',
'<Path>', // 注意這里的 <Path> 替換為第1步復制的 Path
{}, // 這里根據工作流需求設置參數
'<request body>', // 這里根據工作流需求設置正文,注意是 JSON 字符串
{
'content-type': 'application/json',
}
);
console.log('invoke workflow: ', res);
} catch (err) {
console.error(err);
}
}
test().then();
接口詳細入參可以查看SDK 源碼。
支持的地域
該功能目前支持以下地域。需要注意該功能的Endpoint和邏輯編排管控類API的Endpoint不同,請使用如下表格中對應地域的Endpoint。
Region | RegionId | Endpoint |
華東2(上海) | cn-shanghai | https://lc.cn-shanghai.aliyuncs.com |
美國(弗吉尼亞) | us-east-1 | https://lc.us-east-1.aliyuncs.com |
新加坡 | ap-southeast-1 | https://lc.ap-southeast-1.aliyuncs.com |