func (infra *Infrastructure) updateLambdaFunction(svc *lambda.Lambda, roleArn string, payload []byte) error { function, err := svc.UpdateFunctionCode(&lambda.UpdateFunctionCodeInput{ ZipFile: payload, FunctionName: aws.String("goad"), Publish: aws.Bool(true), }) if err != nil { return err } return createLambdaAlias(svc, function.Version) }
func createLambdaFunction(l *lambda.Lambda, code []byte, runtime, role, name, handler string, timeout int) error { func_input := &lambda.CreateFunctionInput{ Code: &lambda.FunctionCode{ZipFile: code}, Runtime: aws.String(runtime), Role: aws.String(role), FunctionName: aws.String(name), Handler: aws.String(handler), Timeout: aws.Int64(int64(timeout)), } resp, err := l.CreateFunction(func_input) if err != nil { if err.(awserr.Error).Code() == "ResourceConflictException" { log.Println("Function already exists, trying to update code") input := &lambda.UpdateFunctionCodeInput{ FunctionName: aws.String(name), ZipFile: code, } resp, err = l.UpdateFunctionCode(input) if err != nil { log.Println("Could not update function code", err) return err } configInput := &lambda.UpdateFunctionConfigurationInput{ FunctionName: aws.String(name), Handler: aws.String(handler), Timeout: aws.Int64(int64(timeout)), } resp, err = l.UpdateFunctionConfiguration(configInput) if err != nil { log.Println("Could not update function configuration", err) return err } } else { return err } } log.Println(resp) return nil }