You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tool/helper/alibabacloud.go

93 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package helper
import (
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
fc_open20210406 "github.com/alibabacloud-go/fc-open-20210406/v2/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
"os"
)
type AlibabaCloud struct {
AccessKeyId string
AccessKeySecret string
Endpoint string
ServiceName string
FunctionName string
Body []byte
}
func GetAlibabaCloudByEnv() *AlibabaCloud {
return &AlibabaCloud{
AccessKeyId: os.Getenv("AccessKeyId"),
AccessKeySecret: os.Getenv("AccessKeySecret"),
Endpoint: os.Getenv("Endpoint"),
ServiceName: os.Getenv("ServiceName"),
FunctionName: os.Getenv("FunctionName"),
}
}
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
func createClient(c *AlibabaCloud) (_result *fc_open20210406.Client, _err error) {
config := &openapi.Config{
// 必填,您的 AccessKey ID
AccessKeyId: tea.String(c.AccessKeyId),
// 必填,您的 AccessKey Secret
AccessKeySecret: tea.String(c.AccessKeySecret),
}
// 访问的域名, 如1436712680323437.cn-shenzhen.fc.aliyuncs.com
config.Endpoint = tea.String(c.Endpoint)
_result = &fc_open20210406.Client{}
_result, _err = fc_open20210406.NewClient(config)
return _result, _err
}
func Call(c *AlibabaCloud) (_result []byte, _err error) {
// 工程代码泄露可能会导致AccessKey泄露并威胁账号下所有资源的安全性。以下代码示例仅供参考建议使用更安全的 STS 方式更多鉴权访问方式请参见https://help.aliyun.com/document_detail/378661.html
client, _err := createClient(c)
if _err != nil {
return nil, _err
}
invokeFunctionHeaders := &fc_open20210406.InvokeFunctionHeaders{}
invokeFunctionRequest := &fc_open20210406.InvokeFunctionRequest{
Body: c.Body,
}
runtime := &util.RuntimeOptions{}
res, tryErr := func() (_r *fc_open20210406.InvokeFunctionResponse, _e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
// 复制代码运行请自行打印 API 的返回值
_r, _err = client.InvokeFunctionWithOptions(tea.String(c.ServiceName), tea.String(c.FunctionName), invokeFunctionRequest, invokeFunctionHeaders, runtime)
if _err != nil {
return nil, _err
}
return _r, nil
}()
if tryErr != nil {
var error = &tea.SDKError{}
if _t, ok := tryErr.(*tea.SDKError); ok {
error = _t
} else {
error.Message = tea.String(tryErr.Error())
}
// 如有需要,请打印 error
_, _err = util.AssertAsString(error.Message)
if _err != nil {
return nil, _err
}
}
return res.Body, _err
}