private async createStack()

in src/tasks/CloudFormationCreateOrUpdateStack/TaskOperations.ts [90:160]


    private async createStack(): Promise<string> {
        const request: CloudFormation.CreateStackInput = {
            StackName: this.taskParameters.stackName,
            OnFailure: this.taskParameters.onFailure,
            RoleARN: this.taskParameters.roleARN
        }

        switch (this.taskParameters.templateSource) {
            case fileSource:
                if (this.taskParameters.s3BucketName) {
                    request.TemplateURL = await this.uploadTemplateFile(
                        this.taskParameters.templateFile,
                        this.taskParameters.s3BucketName
                    )
                } else {
                    request.TemplateBody = await this.loadTemplateFile(this.taskParameters.templateFile)
                }
                break

            case urlSource:
                request.TemplateURL = this.taskParameters.templateUrl
                break

            case s3Source:
                // sync call
                request.TemplateURL = await SdkUtils.getPresignedUrl(
                    this.s3Client,
                    'getObject',
                    this.taskParameters.s3BucketName,
                    this.taskParameters.s3ObjectKey
                )
                break
        }

        request.Parameters = this.loadTemplateParameters()

        console.log(tl.loc('CreateStack', this.taskParameters.templateFile))

        request.NotificationARNs = this.getNotificationArns(this.taskParameters.notificationARNs)
        request.ResourceTypes = this.getResourceTypes(this.taskParameters.resourceTypes)
        request.Capabilities = this.getCapabilities(
            this.taskParameters.capabilityIAM,
            this.taskParameters.capabilityNamedIAM,
            this.taskParameters.capabilityAutoExpand
        )
        request.Tags = SdkUtils.getTags<CloudFormation.Tag[]>(this.taskParameters.tags)

        if (this.taskParameters.monitorRollbackTriggers) {
            request.RollbackConfiguration = {
                MonitoringTimeInMinutes: this.taskParameters.monitoringTimeInMinutes,
                RollbackTriggers: this.constructRollbackTriggerCollection(this.taskParameters.rollbackTriggerARNs)
            }
        }

        try {
            const response: CloudFormation.CreateStackOutput = await this.cloudFormationClient
                .createStack(request)
                .promise()
            tl.debug(`Stack id ${response.StackId}`)
            await waitForStackCreation(this.cloudFormationClient, request.StackName, this.taskParameters.timeoutInMins)

            if (!response.StackId) {
                return ''
            }

            return response.StackId
        } catch (err) {
            console.error(tl.loc('StackCreateRequestFailed', (err as Error).message), err)
            throw err
        }
    }