全部產品
Search
文件中心

Logic Composer:通過AccessKey執行工作流程

更新時間:Jul 13, 2024

使用AccessKey鑒權方式執行工作流程,可以通過SDK調用執行,為您提供更安全的服務。

邏輯編排自訂請求觸發器目前提供了兩種用戶端調用方式,如果無需鑒權,可以直接調用對應觸發器的Endpoint執行工作流程;如果選擇的是AccessKey鑒權方式,需要配合SDK調用執行,可以通過以下步驟執行。

步驟

  1. 擷取 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_IDALIBABA_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