in source/services/resource-selector/index.ts [80:166]
constructor(event: any) {
if (!process.env.ResourceQueueUrl || process.env.ResourceQueueUrl.trim() === '') {
throw new Error('ResourceQueueUrl was not found in environment variables');
}
this.resourceQueueUrl = process.env.ResourceQueueUrl;
this.isPassthrough = (event.Records && event.Records.length === 1);
if (this.isPassthrough) {
// This event came from SNS, which indicates it was the result of
// a state change event on a resource
event = JSON.parse(event.Records[0].Sns.Message);
this.eventType = 'EventTaskExecution';
this.isManualTrigger = false;
this.passthroughResource = parseARN(event.resources[0]);
this.passthroughResource.resourceAccount = event.resourceAccount;
this.passthroughResource.resourceRegion = event.resourceRegion;
} else {
if (Object.prototype.hasOwnProperty.call(event, 'manualTrigger') && event.manualTrigger === true) {
this.eventType = 'ManualTaskExecution';
this.isManualTrigger = true;
} else {
this.eventType = 'ScheduledTaskExecution';
this.isManualTrigger = false;
}
}
if (Object.prototype.hasOwnProperty.call(event, 'enabled') && event.enabled === true) {
this.isAutomaticTaskExecutionEnabled = true;
} else {
this.isAutomaticTaskExecutionEnabled = false;
}
if (!event.taskId || event.taskId.trim() === '') {
throw new Error('"taskId" was not present in the event');
}
if (!event.name || event.name.trim() === '') {
throw new Error('"name" was not present in the event');
}
if (!event.targetTag || event.targetTag.trim() === '') {
throw new Error('"targetTag" was not present in the event');
}
if (!event.actionName || event.actionName.trim() === '') {
throw new Error('"actionName" was not present in the event');
}
if (!event.accounts || event.accounts.length < 1) {
throw new Error('"accounts" array not present in the event');
}
if (!event.regions || event.regions.length < 1) {
throw new Error('"regions" array not present in the event');
}
if (!event.taskParameters) {
throw new Error('"taskParameters" array not present in the event')
}
const targetResourceTypeParameter = event.taskParameters.find((p: any) => p.Name === 'TargetResourceType');
if (!targetResourceTypeParameter) {
throw new Error('"taskParameters" did not contain "TargetResourceType"');
}
if (!targetResourceTypeParameter.Value || targetResourceTypeParameter.Value.trim() === '') {
throw new Error('"TargetResourceType" in "taskParameters" did not contain a "Value"');
}
this.taskMetadata = {
taskId: event.taskId,
taskName: event.name,
targetResourceType: targetResourceTypeParameter.Value.trim(),
targetTag: event.targetTag,
automationDocumentName: event.actionName,
taskDescription: event.description || '',
accounts: [...event.accounts],
regions: [...event.regions],
taskParameters: event.taskParameters
.filter((p: any) => p.Value && p.Value.trim() !== '')
.map((p: any) => {
return { name: p.Name, value: p.Value }
})
};
}