- 最原始的设计初衷是为了创建和操作 nas,没有考虑多 nas 配置和 多 vSwitchId 场景。现在辅助函数会和真实的服务 nas 配置会有很大的差异,会导致很多问题:
- 指令会有很多的目录映射,如果中间出现了问题,问题排查会艰难。
- 每次执行都需要修改一下服务 issue issue,导致每次执行 nas 指令时间都会很长。
- 频繁修改服务的 nas 配置,创建 nas 目录偶现没有权限的错误。
- 确保目录存在的辅助函数需要新增版本的校验,这样就不需要每次都去修改函数
- 之前的辅助函数 webpack,现在在 github 跑 build 流程失败
- nas 上传文件参考 cp 的 -r 参数 issue
- 超大文件测试 8g issue
- 是否会出现限流 issue
此版本总体交互上和之前没有什么较大的变化,主要是规范输入的参数和方法的职能。
初始化辅助函数,并且确保目录存在
辅助函数的内存大小(默认 256M): NAS_HELPER_SERVERVICE_MEMORY_SIZE
分片上传代码包大小(默认 5M): NAS_CHUNK_SIZE 请谨慎配置,因为函数计算限制 6M
props:
regionId: string;
serviceName: string; // 主函数的服务名称
role?: string; // 不填写遵循 fc-deploy 的逻辑
description?: string;
vpcConfig:
vpcId: string;
vSwitchId: string[];
securityGroupId: string;
groupId?: number;
userId?: number;
mountPoints:
- serverAddr: string
nasDir: string
fcDir: string
- serverAddr: string
nasDir: string
fcDir: string
- 确保 nas 目录辅助函数
- 代码版本是否是最新,如果不是最新,则更新代码
- 检测服务配置是否是最新,如果不是最新则更新代码
- 确保 nas 目录存在(尝试 3 次,每次间隔 2s )
- 操作 nas 辅助函数
- 代码版本是否是最新,如果不是最新,则更新代码
- 检测服务配置是否是最新,如果不是最新则更新代码
-
每次 build 将版本信息存在一个文件里
git log -n 1 --pretty="format:%h" > ./dist/VERSION
-
部署辅助函数的时候将版本信息写到函数的描述字段里面
-
再次部署的时候,检测本地缓存配置是否和线上一致,如果一致,则跳过修改配置,如果不一致,则修改配置
删除辅助函数
props: regionId: string;
serviceName: string; // 主函数的服务名称
删除确保 nas 目录存在的辅助函数
props: regionId: string;
serviceName: string; // 主函数的服务名称
创建 nas 资源,并创建辅助函数
props:
regionId: string;
serviceName: string; // 主函数的服务名称
role?: string; // 不填写遵循 fc-deploy 的逻辑
description?: string;
vpcConfig:
vpcId: string;
vSwitchId: string[];
securityGroupId: string;
groupId?: number;
userId?: number;
// mountPoints 和 nasName/zoneId/storageType 参数冲突, 如果 mountPoints 存在,则 nasName/zoneId/storageType 不生效
mountPoints?:
- serverAddr: string
nasDir: string
fcDir: string
nasName?: string; // 作为文件系统的 description
zoneId?: string;
storageType: string;
nasDir?: string;
- 判断 mountPoints 是否存在
- 不存在则创建 nas 流程,其中 zoneId 必填项,nasDir 不填写则默认使用服务名称
- 存在则跳过创建流程
- 调用 initHelperService 方法
删除 nas 资源,并删除辅助函数
props:
regionId: string;
serviceName: string; // 主函数的服务名称
// 传入 nasName/zoneId 删除文件系统
nasName?: string;
zoneId?: string;
vpcConfig?: string;
// 传入 fileSystemId 删除文件系统
fileSystemId?: string
// TODO: 传入 mountPointDomain 删除挂载点(暂不实行)
mountPointDomain?: string | string[];
-
删除 nas 流程: fileSystemId > nasName
当 nasName 生效时,会去通过 nasName 查找文件系统,流程同 deploy 复用规则。
-
调用 removeHelperService 方法
操作指令
props:
regionId: string;
serviceName: string; // 主函数的服务名称
role?: string; // 不填写遵循 fc-deploy 的逻辑
description?: string;
vpcConfig:
vpcId: string;
vSwitchId: string[];
securityGroupId: string;
groupId?: number;
userId?: number;
mountPoints?:
- serverAddr: string
nasDir: string
fcDir: string
- upload/download 调用 initHelperService 方法; ls/rm/command 确定辅助函数代码是否是最新的。
- 确保服务配置是最新的。
- 执行流程。