static async getInstances()

in source/services/tagHandler/lib/EC2Helper.ts [31:109]


  static async getInstances(key: string, value: string): Promise<string[]> {
    try {
      logger.debug({
        label: "TagHelper/getInstances",
        message: `${JSON.stringify({ tag_key: key, tag_value: value })}`,
      });
      const instances: string[] = [];
      const ec2 = new EC2({
        apiVersion: config.ec2,
        customUserAgent: config.customUserAgent,
      });
      let nextToken = "";
      let resp = await ec2
        .describeTags({
          Filters: [
            {
              Name: "key",
              Values: [key],
            },
            {
              Name: "value",
              Values: [value],
            },
            {
              Name: "resource-type",
              Values: ["instance"],
            },
          ],
          MaxResults: config.apiMaxResults,
        })
        .promise();
      if (resp.Tags) {
        resp.Tags.forEach((item) => {
          instances.push(item.ResourceId as string);
        });
      }
      nextToken = resp.NextToken as string;
      // pagination
      while (nextToken) {
        resp = await ec2
          .describeTags({
            Filters: [
              {
                Name: "key",
                Values: [key],
              },
              {
                Name: "value",
                Values: [value],
              },
              {
                Name: "resource-type",
                Values: ["instance"],
              },
            ],
            MaxResults: config.apiMaxResults,
            NextToken: nextToken,
          })
          .promise();
        if (resp.Tags) {
          resp.Tags.forEach((item) => {
            instances.push(item.ResourceId as string);
          });
        }
        nextToken = resp.NextToken as string;
      }
      logger.debug({
        label: "TagHelper/getInstances",
        message: `instances with given tag: ${instances}`,
      });
      return instances;
    } catch (e) {
      logger.error({
        label: "TagHelper/getInstances",
        message: JSON.stringify(e),
      });
      throw new Error("error in describing tag for instances");
    }
  }