@@ -280,6 +280,21 @@ export default class Scf {
280280 const functionName = inputs . name ;
281281 const { ignoreTriggers = false } = inputs ;
282282
283+ if ( inputs ?. aliasName ) {
284+ if ( ! inputs ?. additionalVersionWeights ) {
285+ throw new ApiTypeError (
286+ 'PARAMETER_SCF' ,
287+ 'additionalVersionWeights is required when aliasName is setted' ,
288+ ) ;
289+ }
290+ if ( ! inputs . publish && ! inputs ?. aliasFunctionVersion ) {
291+ throw new ApiTypeError (
292+ 'PARAMETER_SCF' ,
293+ 'aliasFunctionVersion is required when aliasName is setted' ,
294+ ) ;
295+ }
296+ }
297+
283298 // 在部署前,检查函数初始状态,如果初始为 CreateFailed,尝试先删除,再重新创建
284299 let funcInfo = await this . scf . getInitialStatus ( { namespace, functionName } ) ;
285300
@@ -311,6 +326,11 @@ export default class Scf {
311326 namespace,
312327 description : inputs . publishDescription ,
313328 } ) ;
329+
330+ if ( inputs . aliasName ) {
331+ inputs . aliasFunctionVersion = FunctionVersion ;
332+ }
333+
314334 inputs . lastVersion = FunctionVersion ;
315335 outputs . LastVersion = FunctionVersion ;
316336
@@ -321,13 +341,10 @@ export default class Scf {
321341 } ) ;
322342 }
323343
324- const aliasAddionalVersion = inputs . aliasAddionalVersion || inputs . lastVersion ;
325- const needSetTraffic =
326- inputs . traffic != null && aliasAddionalVersion && aliasAddionalVersion !== '$LATEST' ;
327- const needSetAlias = ( inputs . aliasName && inputs . aliasName !== '$DEFAULT' ) || needSetTraffic ;
328- if ( needSetAlias ) {
344+ // 检测配置的别名是否存在,不存在就创建,存在的话就设置流量
345+ if ( inputs . aliasName ) {
329346 let needCreateAlias = false ;
330- if ( inputs . aliasName && inputs . aliasName !== '$DEFAULT' ) {
347+ if ( inputs . aliasName !== '$DEFAULT' ) {
331348 try {
332349 const aliasInfo = await this . alias . get ( {
333350 namespace,
@@ -347,32 +364,51 @@ export default class Scf {
347364 }
348365 }
349366 }
350- if ( needCreateAlias ) {
351- await this . alias . create ( {
352- namespace,
353- functionName,
354- functionVersion : inputs . aliasFunctionVersion || funcInfo ?. Qualifier ,
355- aliasName : inputs . aliasName ! ,
356- lastVersion : aliasAddionalVersion ! ,
357- traffic : inputs . traffic ! ,
358- description : inputs . aliasDescription ,
359- } ) ;
360- } else {
367+ try {
368+ // 创建别名
369+ if ( needCreateAlias ) {
370+ await this . alias . create ( {
371+ namespace,
372+ functionName,
373+ functionVersion : inputs . aliasFunctionVersion || funcInfo ?. Qualifier ,
374+ aliasName : inputs . aliasName ! ,
375+ description : inputs . aliasDescription ,
376+ additionalVersions : inputs . additionalVersionWeights ,
377+ } ) ;
378+ } else {
379+ // 更新别名
380+ await this . alias . update ( {
381+ namespace,
382+ functionName,
383+ functionVersion : inputs . aliasFunctionVersion || funcInfo ?. Qualifier ,
384+ additionalVersions : inputs . additionalVersionWeights ,
385+ region : this . region ,
386+ aliasName : inputs . aliasName ,
387+ description : inputs . aliasDescription ,
388+ } ) ;
389+ }
390+ } catch ( error ) {
391+ const errorType = needCreateAlias ? 'CREATE_ALIAS_SCF' : 'UPDATE_ALIAS_SCF' ;
392+ throw new ApiTypeError ( errorType , error . message ) ;
393+ }
394+ } else {
395+ // 兼容旧逻辑,即给默认版本$LATEST设置traffic比例的流量,给lastVersion版本设置(1-traffic)比例的流量。
396+ const needSetTraffic =
397+ inputs . traffic != null && inputs . lastVersion && inputs . lastVersion !== '$LATEST' ;
398+ if ( needSetTraffic ) {
361399 await this . alias . update ( {
362400 namespace,
363401 functionName,
364- functionVersion : inputs . aliasFunctionVersion || funcInfo ?. Qualifier ,
402+ region : this . region ,
365403 additionalVersions : needSetTraffic
366- ? [ { weight : strip ( 1 - inputs . traffic ! ) , version : aliasAddionalVersion ! } ]
404+ ? [ { weight : strip ( 1 - inputs . traffic ! ) , version : inputs . lastVersion ! } ]
367405 : [ ] ,
368- region : this . region ,
369406 aliasName : inputs . aliasName ,
370407 description : inputs . aliasDescription ,
371408 } ) ;
409+ outputs . Traffic = inputs . traffic ;
410+ outputs . ConfigTrafficVersion = inputs . lastVersion ;
372411 }
373-
374- outputs . Traffic = inputs . traffic ;
375- outputs . ConfigTrafficVersion = inputs . lastVersion ;
376412 }
377413
378414 // get default alias
0 commit comments