private async createFunction()

in src/tasks/LambdaDeployFunction/TaskOperations.ts [155:220]


    private async createFunction(): Promise<string> {
        console.log(tl.loc('CreatingFunction', this.taskParameters.functionName))

        const request: Lambda.CreateFunctionRequest = {
            FunctionName: this.taskParameters.functionName,
            Handler: this.taskParameters.functionHandler,
            Role: await SdkUtils.roleArnFromName(this.iamClient, this.taskParameters.roleARN),
            MemorySize: this.taskParameters.memorySize,
            Timeout: this.taskParameters.timeout,
            Publish: this.taskParameters.publish,
            Runtime: this.taskParameters.runtime,
            Code:
                this.taskParameters.codeLocation === updateFromLocalFile
                    ? {
                          ZipFile: readFileSync(this.taskParameters.localZipFile)
                      }
                    : {
                          S3Bucket: this.taskParameters.s3Bucket,
                          S3Key: this.taskParameters.s3ObjectKey,
                          S3ObjectVersion: this.taskParameters.s3ObjectVersion
                      },
            DeadLetterConfig: {
                TargetArn: this.taskParameters.deadLetterARN
            },
            KMSKeyArn: this.taskParameters.kmsKeyARN
        }

        if (this.taskParameters.description) {
            request.Description = this.taskParameters.description
        }
        if (this.taskParameters.environment) {
            request.Environment = {}
            request.Environment.Variables = SdkUtils.getTagsDictonary(this.taskParameters.environment)
        }
        if (this.taskParameters.tags && this.taskParameters.tags.length > 0) {
            request.Tags = SdkUtils.getTagsDictonary(this.taskParameters.tags)
        }
        if (this.taskParameters.layers && this.taskParameters.layers.length > 0) {
            request.Layers = this.taskParameters.layers
        }
        if (this.taskParameters.securityGroups && this.taskParameters.securityGroups.length > 0) {
            request.VpcConfig = {
                SecurityGroupIds: this.taskParameters.securityGroups,
                SubnetIds: this.taskParameters.subnets
            }
        }
        if (this.taskParameters.tracingConfig && this.taskParameters.tracingConfig !== 'XRay') {
            request.TracingConfig = {
                Mode: this.taskParameters.tracingConfig
            }
        }

        try {
            const response = await this.lambdaClient.createFunction(request).promise()

            if (!response.FunctionArn) {
                throw new Error(tl.loc('NoFunctionArnReturned'))
            }

            await this.waitForStatus(FUNCTION_ACTIVE)

            return response.FunctionArn
        } catch (err) {
            throw new Error(`Failed to create function, error ${err}`)
        }
    }