Aliyun Cdn Sdk
ActionsTags
(2)一款基于阿里云 CDN API 的 Github Action,几乎支持所有的官方 API 调用,具体的细节请结合CDN API 参考
关于如何使用该 action,你可以参考以下,例如:
该aliyun-cdn-sdk基于官方仓库官方模板仓库进行创建
明确你想要用该 Action 来对你的 CDN 做些什么配置。然后去官方 API 文档找到对应的方法,这里以最简单的DescribeCdnDomainConfigs进行演示
在你的 yml 文件中,使用该 Action 并传入正确的配置项即可
- name: DescribeCdnDomainConfigs
id: getDescribeCdnDomainConfigsConfig
uses: weirui88888/[email protected]
with:
accessKeyId: ${{secrets.ALI_ACCESS_KEY_ID}}
accessKeySecret: ${{secrets.ALI_ACCESS_KEY_SECRET}}
parameters: '{"action": "DescribeCdnDomainConfigs", "domainName": "your domain name", "functionNames": "filetype_based_ttl_set,set_req_host_header" }'
该 Action 只有一个输出项responseBody
,应该也够用了。主要根据该配置项能够获取两个有效信息
- 1.调用 cdn api 是否成功
- 2.能够根据
responseBody
获取一些有用的信息,比如获取配置项的的configId
,通过 configId 可以在接下来的步骤中,实现对指定配置的更新和删除
- accessKeyId
- accessKeySecret
- parameters
对于前两个参数,直接在阿里云控制台AccessKey管理
中获取即可。而parameters
参数比较重要,它的类型是字符串对象。形如:
下面的例子是以DescribeCdnDomainConfigs
方法做比喻,具体的配置项还需要结合你的使用场景做变更
'{"action": "DescribeCdnDomainConfigs", "domainName": "your domain name", "functionNames": "filetype_based_ttl_set,set_req_host_header" }'
一切配置的信息都在该参数重配置,常见的有
- action
- api 方法名,比如上述配置中的
DescribeCdnDomainConfigs
- api 方法名,比如上述配置中的
- domainName
- cdn 域名
- functionNames
- 功能函数名称
- responseBody
- 调用该 api 的返回结果作为
输出项
- 调用该 api 的返回结果作为
- name: DescribeCdnDomainConfigs
# 该步骤的id,后续的步骤可以通过steps.yourid.outputs.responseBody拿到域名配置信息
id: getDescribeCdnDomainConfigsConfig
uses: weirui88888/[email protected]
with:
accessKeyId: ${{secrets.ALI_ACCESS_KEY_ID}}
accessKeySecret: ${{secrets.ALI_ACCESS_KEY_SECRET}}
parameters: '{"action": "DescribeCdnDomainConfigs", "domainName": "your domain name", "functionNames": "filetype_based_ttl_set,set_req_host_header" }'
- name: View My Cdn Domain config
run: |
echo ${{steps.getDescribeCdnDomainConfigsConfig.outputs.responseBody}}
同时为了能够方便使用者知道自己使用该 Action 的操作行为路径,在应用程序中,我对关键步骤进行了日志输出,方便用户明确自己的入参
,实际调用CDN方法
,api调用结果
一般开发者不需要过多关注该部分内容,因为大多数使用场景下,我们并不需要高级配置,也就是parameters.runtimeOptions
,除非你有一些高级配置需要配置,具体的配置项请参考aliyun/tea-util
对于基本的参数,只用放到字符串对象顶层即可,比如action
,domainName
,functionNames
等,但是对于一些高级的配置项,需要放置于runtimeOptions
字段中,且runtimeOptions
字段名是不可修改的
'{
"action": "DescribeCdnDomainConfigs",
"domainName": "your domain name",
"functionNames": "filetype_based_ttl_set,set_req_host_header",
"runtimeOptions": {
autoretry?: boolean;
ignoreSSL?: boolean;
maxAttempts?: number;
backoffPolicy?: string;
backoffPeriod?: number;
readTimeout?: number;
connectTimeout?: number;
httpProxy?: string;
httpsProxy?: string;
noProxy?: string;
...
}
}'
另外除了runtimeOptions
字段,其他项的 value,在我的程序中都会进行判断,如果typeof value === 'object'
,我都会调用JSON.stringify
进行干涉
let {action, runtimeOptions, ...requestOptions} = JSON.parse(parameters)
for (let [optionsKey, optionValue] of Object.entries(requestOptions)) {
if (typeof optionValue === 'object') {
requestOptions[optionsKey] = Util.toJSONString(optionValue)
}
}
这么做的目的是因为据我了解,大部分的配置项类型都是字符串,如果不做任何处理的话,在经过程序中的 JSON.parse(parameters)
解析参数过后,可能因为配置字段类型的问题致使运行程序失败
对于我这么做的方式,我也不确定它到底对不对,但是至少看起来能够保证程序正常的运行。
Aliyun Cdn Sdk is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.