constructor()

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