Skip to content

Commit 4e1f892

Browse files
authored
Fixes multiregion code for autoscaler lambdas (#6231)
1 parent 7290f72 commit 4e1f892

File tree

4 files changed

+23
-17
lines changed

4 files changed

+23
-17
lines changed

terraform-aws-github-runner/modules/runners/lambdas/runners/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ SHELL=/bin/bash -o pipefail
22

33
.PHONY: clean
44
clean:
5-
rm -rf dist node_modules
5+
rm -rf dist node_modules coverage
66
rm runners.zip
77

88
.PHONY: build

terraform-aws-github-runner/modules/runners/lambdas/runners/src/scale-runners/config.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,9 @@ export class Config {
137137
}
138138

139139
get shuffledAwsRegionInstances(): string[] {
140-
let arr: string[];
141-
if (this.awsRegionsToVpcIds.size > 0) {
142-
arr = Array.from(this.awsRegionsToVpcIds.keys());
143-
} else {
144-
arr = [...this.awsRegionInstances];
145-
}
146-
return shuffleArrayInPlace(arr);
140+
const regions: Set<string> = new Set(this.awsRegionsToVpcIds.keys());
141+
this.awsRegionInstances.forEach((region) => regions.add(region));
142+
return shuffleArrayInPlace(Array.from(regions));
147143
}
148144

149145
get ghesUrlApi(): undefined | string {

terraform-aws-github-runner/modules/runners/lambdas/runners/src/scale-runners/runners.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,11 @@ export async function listRunners(
146146
ec2Filters.push({ Name: tags[attr as keyof typeof tags], Values: [filters[attr] as string] }),
147147
);
148148
}
149-
console.debug(`[listRunners]: REGIONS ${Config.Instance.shuffledAwsRegionInstances}`);
149+
const awsRegionsInstances = Config.Instance.shuffledAwsRegionInstances;
150+
console.debug(`[listRunners]: REGIONS ${awsRegionsInstances}`);
150151
const runningInstances = (
151152
await Promise.all(
152-
Config.Instance.shuffledAwsRegionInstances
153+
awsRegionsInstances
153154
.filter((r) => regions?.has(r) ?? true)
154155
.map((awsRegion) => {
155156
console.debug(`[listRunners]: Running for region ${awsRegion}`);
@@ -163,11 +164,23 @@ export async function listRunners(
163164
.describeInstances({ Filters: ec2Filters })
164165
.promise()
165166
.then((describeInstanceResult): DescribeInstancesResultRegion => {
167+
const listOfRunnersIdType: string[] = (
168+
describeInstanceResult?.Reservations?.flatMap((reservation) => {
169+
return (
170+
reservation.Instances?.map((instance) => {
171+
return `${instance.InstanceId} - ${
172+
instance.Tags?.find((e) => e.Key === 'RunnerType')?.Value
173+
}`;
174+
}) ?? []
175+
);
176+
}) ?? []
177+
).filter((desc): desc is string => desc !== undefined);
166178
console.debug(
167179
`[listRunners]: Result for EC2({ region: ${awsRegion} })` +
168-
`.describeInstances({ Filters: ${ec2Filters} }) = ` +
180+
`.describeInstances({ Filters: ${JSON.stringify(ec2Filters)} }) = ` +
169181
`${describeInstanceResult?.Reservations?.length ?? 'UNDEF'}`,
170182
);
183+
console.debug(`[listRunners]: ${listOfRunnersIdType.join('\n ')}`);
171184
return { describeInstanceResult, awsRegion };
172185
});
173186
},
@@ -482,8 +495,8 @@ export async function createRunner(runnerParameters: RunnerInputParameters, metr
482495
runnerParameters.runnerType.labels ? ' [' + runnerParameters.runnerType.labels.join(',') + ']' : ''
483496
}`;
484497

485-
const shuffledAwsRegionInstances = Config.Instance.shuffledAwsRegionInstances;
486-
for (const [awsRegionIdx, awsRegion] of shuffledAwsRegionInstances.entries()) {
498+
const awsRegionsInstances = Config.Instance.shuffledAwsRegionInstances;
499+
for (const [awsRegionIdx, awsRegion] of awsRegionsInstances.entries()) {
487500
const runnerSubnetSequence = await getCreateRunnerSubnetSequence(runnerParameters, awsRegion, metrics);
488501

489502
const ec2 = new EC2({ region: awsRegion });
@@ -582,7 +595,7 @@ export async function createRunner(runnerParameters: RunnerInputParameters, metr
582595
const msg =
583596
`[${subnetIdx}/${subnets.length} - ${subnet}] ` +
584597
`[${vpcId}] ` +
585-
`[${awsRegionIdx}/${shuffledAwsRegionInstances.length} - ${awsRegion}] Issue creating instance ` +
598+
`[${awsRegionIdx}/${awsRegionsInstances.length} - ${awsRegion}] Issue creating instance ` +
586599
`${runnerParameters.runnerType.instance_type}${labelsStrLog}: ${e}`;
587600
errors.push([msg, e, awsRegion]);
588601
console.warn(msg);

terraform-aws-github-runner/modules/runners/lambdas/runners/src/scale-runners/scale-up.test.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,9 +1083,6 @@ describe('_calculateScaleUpAmount', () => {
10831083
availableCount,
10841084
);
10851085

1086-
const availAfterHandinglingRequest = availableCount - requestedCount;
1087-
const amtBelowMin = minRunners - availAfterHandinglingRequest;
1088-
10891086
// We were above min runners before, and we should scale up enough to not dip below min runners
10901087
expect(scaleUpAmount).toEqual(3);
10911088
}

0 commit comments

Comments
 (0)