Skip to content

Commit 4d75d43

Browse files
DarminZdarminzhou
and
darminzhou
authored
feat: create alias (#301)
Co-authored-by: darminzhou <[email protected]>
1 parent c5b2223 commit 4d75d43

File tree

3 files changed

+61
-18
lines changed

3 files changed

+61
-18
lines changed

src/modules/scf/entities/alias.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,21 @@ import BaseEntity from './base';
1313

1414
export default class AliasEntity extends BaseEntity {
1515
async create(inputs: ScfCreateAlias) {
16-
const publishInputs = {
16+
const publishInputs: any = {
1717
Action: 'CreateAlias' as const,
1818
FunctionName: inputs.functionName,
19-
FunctionVersion: inputs.functionVersion,
19+
FunctionVersion: inputs.functionVersion || '$LATEST',
2020
Name: inputs.aliasName,
2121
Namespace: inputs.namespace || 'default',
22-
RoutingConfig: {
23-
AdditionalVersionWeights: [{ Version: inputs.lastVersion, Weight: inputs.traffic }],
24-
},
2522
Description: inputs.description || 'Published by Serverless Component',
2623
};
24+
if (inputs.lastVersion && inputs.traffic) {
25+
publishInputs.RoutingConfig = {
26+
AdditionalVersionWeights: [
27+
{ Version: inputs.lastVersion, Weight: strip(1 - inputs.traffic) },
28+
],
29+
};
30+
}
2731
const Response = await this.request(publishInputs);
2832
return Response;
2933
}

src/modules/scf/index.ts

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -321,19 +321,56 @@ export default class Scf {
321321
});
322322
}
323323

324+
const aliasAddionalVersion = inputs.aliasAddionalVersion || inputs.lastVersion;
324325
const needSetTraffic =
325-
inputs.traffic != null && inputs.lastVersion && inputs.lastVersion !== '$LATEST';
326-
if (needSetTraffic) {
327-
await this.alias.update({
328-
namespace,
329-
functionName,
330-
region: this.region,
331-
additionalVersions: needSetTraffic
332-
? [{ weight: strip(1 - inputs.traffic!), version: inputs.lastVersion! }]
333-
: [],
334-
aliasName: inputs.aliasName,
335-
description: inputs.aliasDescription,
336-
});
326+
inputs.traffic != null && aliasAddionalVersion && aliasAddionalVersion !== '$LATEST';
327+
const needSetAlias = (inputs.aliasName && inputs.aliasName !== '$DEFAULT') || needSetTraffic;
328+
if (needSetAlias) {
329+
let needCreateAlias = false;
330+
if (inputs.aliasName && inputs.aliasName !== '$DEFAULT') {
331+
try {
332+
const aliasInfo = await this.alias.get({
333+
namespace,
334+
functionName,
335+
region: this.region,
336+
aliasName: inputs.aliasName,
337+
});
338+
if (!aliasInfo?.Name) {
339+
needCreateAlias = true;
340+
}
341+
} catch (error: any) {
342+
if (
343+
error.message &&
344+
(error.message.includes('未找到指定的') || error.message.include('is not found'))
345+
) {
346+
needCreateAlias = true;
347+
}
348+
}
349+
}
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 {
361+
await this.alias.update({
362+
namespace,
363+
functionName,
364+
functionVersion: inputs.aliasFunctionVersion || funcInfo?.Qualifier,
365+
additionalVersions: needSetTraffic
366+
? [{ weight: strip(1 - inputs.traffic!), version: aliasAddionalVersion! }]
367+
: [],
368+
region: this.region,
369+
aliasName: inputs.aliasName,
370+
description: inputs.aliasDescription,
371+
});
372+
}
373+
337374
outputs.Traffic = inputs.traffic;
338375
outputs.ConfigTrafficVersion = inputs.lastVersion;
339376
}

src/modules/scf/interface.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export interface ScfListAliasInputs extends ScfGetAliasInputs {}
142142

143143
export interface ScfCreateAlias {
144144
functionName: string;
145-
functionVersion: string;
145+
functionVersion?: string;
146146
aliasName: string;
147147
namespace?: string;
148148
lastVersion: string;
@@ -279,6 +279,8 @@ export interface ScfDeployInputs extends ScfCreateFunctionInputs {
279279

280280
aliasName?: string;
281281
aliasDescription?: string;
282+
aliasFunctionVersion?: string;
283+
aliasAddionalVersion?: string;
282284

283285
tags?: Record<string, string>;
284286

0 commit comments

Comments
 (0)