@@ -280,6 +280,21 @@ export default class Scf {
280
280
const functionName = inputs . name ;
281
281
const { ignoreTriggers = false } = inputs ;
282
282
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
+
283
298
// 在部署前,检查函数初始状态,如果初始为 CreateFailed,尝试先删除,再重新创建
284
299
let funcInfo = await this . scf . getInitialStatus ( { namespace, functionName } ) ;
285
300
@@ -311,6 +326,11 @@ export default class Scf {
311
326
namespace,
312
327
description : inputs . publishDescription ,
313
328
} ) ;
329
+
330
+ if ( inputs . aliasName ) {
331
+ inputs . aliasFunctionVersion = FunctionVersion ;
332
+ }
333
+
314
334
inputs . lastVersion = FunctionVersion ;
315
335
outputs . LastVersion = FunctionVersion ;
316
336
@@ -321,13 +341,10 @@ export default class Scf {
321
341
} ) ;
322
342
}
323
343
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 ) {
329
346
let needCreateAlias = false ;
330
- if ( inputs . aliasName && inputs . aliasName !== '$DEFAULT' ) {
347
+ if ( inputs . aliasName !== '$DEFAULT' ) {
331
348
try {
332
349
const aliasInfo = await this . alias . get ( {
333
350
namespace,
@@ -347,32 +364,51 @@ export default class Scf {
347
364
}
348
365
}
349
366
}
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 ) {
361
399
await this . alias . update ( {
362
400
namespace,
363
401
functionName,
364
- functionVersion : inputs . aliasFunctionVersion || funcInfo ?. Qualifier ,
402
+ region : this . region ,
365
403
additionalVersions : needSetTraffic
366
- ? [ { weight : strip ( 1 - inputs . traffic ! ) , version : aliasAddionalVersion ! } ]
404
+ ? [ { weight : strip ( 1 - inputs . traffic ! ) , version : inputs . lastVersion ! } ]
367
405
: [ ] ,
368
- region : this . region ,
369
406
aliasName : inputs . aliasName ,
370
407
description : inputs . aliasDescription ,
371
408
} ) ;
409
+ outputs . Traffic = inputs . traffic ;
410
+ outputs . ConfigTrafficVersion = inputs . lastVersion ;
372
411
}
373
-
374
- outputs . Traffic = inputs . traffic ;
375
- outputs . ConfigTrafficVersion = inputs . lastVersion ;
376
412
}
377
413
378
414
// get default alias
0 commit comments