export async function getRegions()

in lambda-layers/lib/get-regions.ts [44:84]


export async function getRegions(): Promise<Array<string>> {
  const ssm = new SSMClient({
    region: 'us-west-2',
  });

  let moreData = true;
  let data = await ssm.send(new GetParametersByPathCommand({
    Path: '/aws/service/global-infrastructure/services/lambda/regions',
  }));

  const regions: Array<string> = []
  while(moreData) {
    if (!data.Parameters) {
      throw new Error('Failed to get regions from SSM');
    }

    const parameters = data.Parameters;
    for (const parameter of parameters) {
      if (!parameter.Value) {
        console.error(`No value found for ${parameter}`);
        continue;
      }
      if (isValidRegion(parameter.Value)) {
        regions.push(parameter.Value);
      } else {
        console.log(`Skipping ${parameter.Value}`)
      }
    }

    if (data.NextToken) {
      data = await ssm.send(new GetParametersByPathCommand({
        Path: '/aws/service/global-infrastructure/services/lambda/regions',
        NextToken: data.NextToken,
      }));
    } else {
      moreData = false;
    }
  }

  return regions;
}