同样开源在了BackupLaf项目,也可以根据README.md操作
适用于1.0之间的云函数迁移,私有部署或公有云或免费和付费间迁移。0.8迁移后续会出。
1、新建迁移云函数 FuncMigrate
可以不用发布
import cloud from '@lafjs/cloud'
const oldAppID = 'oldappid'
const oldPat = 'laf_xxxxxxxxold'
const oldServer = 'http://api.laf.dev'
const newAppID = 'newappid'
const newPat = 'laf_xxxxxxxxnew'
const newServer = 'http://api.laf.run'
export async function main(ctx: FunctionContext) {
let oldToken, newToken;
try {
const oldResponse = await cloud.fetch.post(`${oldServer}/v1/pat2token`, {
pat: oldPat
}, {
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
}
});
const newResponse = await cloud.fetch.post(`${newServer}/v1/pat2token`, {
pat: newPat
}, {
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
}
});
oldToken = oldResponse.data.data
newToken = newResponse.data.data;
} catch (error) {
return { data: "获取Token失败,请检查填写的pat和server地址是否正确,"+error }
}
const oldResponse = await cloud.fetch.get(`${oldServer}/v1/apps/${oldAppID}/functions`, {
headers: {
Accept: 'application/json',
Authorization: "Bearer "+oldToken
}
})
const oldFuncList = oldResponse.data.data;
for (let func of oldFuncList) {
const newResponse = await cloud.fetch.post(`${newServer}/v1/apps/${newAppID}/functions`, {
name: func.name,
code: func.source.code.replace(`@/cloud-sdk`, '@lafjs/cloud'),
description: func.desc,
methods: func.methods,
tags: func.tags
}, {
headers: {
Accept: 'application/json',
Authorization: "Bearer "+newToken
}
})
if (newResponse.data.error) {
console.log(`云函数 ${func.name} 迁移失败: ${newResponse.data.error}`)
} else {
console.log(`云函数 ${func.name} 迁移成功`)
}
}
return { data: "迁移成功" }
}
2、修改需要的参数
const oldAppID = 'oldappid' // 老的应用appid
const oldPat = 'laf_xxxxxxxxold' // 老的应用Pat
const oldServer = 'http://api.laf.dev' // 老的Api server地址
const newAppID = 'newappid' // 新的应用appid
const newPat = 'laf_xxxxxxxxnew' // 新的应用Pat
const newServer = 'http://api.laf.run' // 新的Api server地址
根据提示修改以上参数。
Pat的获取:
如果迁移的2个应用不在一个网站,那么新旧Pat就不一样,需要分别获取
如果迁移的2个应用在一个网站,需要填相同的Pat和Server地址
3、开始迁移
配置全部修改完成后,可以点击运行,就开始迁移了,云函数的迁移很快。马上就会有显示结果出来。
如果新应用有相同名称的云函数,则该云函数会迁移失败,但不影响其他云函数迁移。