in source/services/resource-selector/index.ts [374:429]
async function verifyTagExistsOnResources(handlerData: FunctionData): Promise<boolean> {
const sts = new AWS.STS({ apiVersion: '2011-06-15' });
const { resourceAccount, resourceRegion } = handlerData.passthroughResource;
const taskId = handlerData.taskMetadata.taskId;
const roleArn = `arn:aws:iam::${resourceAccount}:role/${resourceAccount}-${resourceRegion}-${taskId}`;
const stsParams: AWS.STS.AssumeRoleRequest = {
RoleArn: roleArn,
RoleSessionName: 'ops_conductor_query_by_tag',
DurationSeconds: 900
};
const assumedRole = await sts.assumeRole(stsParams).promise();
const taggingAPIParams: AWS.ResourceGroupsTaggingAPI.GetResourcesInput = {
TagFilters: [
{
Key: handlerData.taskMetadata.targetTag
}
],
ResourcesPerPage: 100,
};
const resourceTaggingApi = new AWS.ResourceGroupsTaggingAPI(
{
apiVersion: '2017-01-26',
accessKeyId: assumedRole.Credentials.AccessKeyId,
secretAccessKey: assumedRole.Credentials.SecretAccessKey,
sessionToken: assumedRole.Credentials.SessionToken,
region: handlerData.passthroughResource.resourceRegion
}
);
// Call the Resource Tagging API at least once and repeat if a PaginationToken was returned
let foundResource = false;
do {
const data = await resourceTaggingApi.getResources(taggingAPIParams).promise();
for (let resourceMapping of data.ResourceTagMappingList) {
// Due to the difference between API getResources ARN and the actual ARN, extract the resource ID from the ARNs
let resourceArn = resourceMapping.ResourceARN.split(':').pop();
let eventResourceArn = handlerData.passthroughResource.fullArn.split(':').pop();
if (resourceArn === eventResourceArn) {
foundResource = true;
break;
}
}
if (data.PaginationToken && data.PaginationToken.trim() !== '') {
taggingAPIParams.PaginationToken = data.PaginationToken;
} else {
// Remove PaginationToken from params so we exit the while loop
delete taggingAPIParams.PaginationToken;
}
} while (!foundResource && Object.prototype.hasOwnProperty.call(taggingAPIParams, 'PaginationToken'));
return foundResource;
}