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");
}
}