Triggering renders from Go
To trigger a Lambda render using Go, you can use the Remotion Lambda Go client. Note the following:
- You first need to complete the Lambda setup.
- Sending large input props (>200KB) is not supported with Go at the moment.
- Always match the version of the Go client with the version of the Lambda function you deployed. Otherwise, calls will fail due to version mismatch!
main.gogo
package mainimport ("fmt""log""os""github.com/go-playground/validator/v10""github.com/joho/godotenv"// Match the version with the version of your deployed functions"github.com/remotion-dev/remotion/packages/lambda-go/v3.3.89")type ValidationError struct {Field stringMessage string}func msgForTag(fe validator.FieldError) string {switch fe.Tag() {case "required":return "This field is required"}return fe.Error() // default error}func main() {// Load the environment variables from the .env fileerr := godotenv.Load()if err != nil {log.Fatal(err)}// Specify the URL to your Webpack bundleserveUrl := os.Getenv("REMOTION_APP_SERVE_URL")// Specify the function you would like to callfunctionName := os.Getenv("REMOTION_APP_FUNCTION_NAME")// Specify the region you deployed to, for example "us-east-1"region := os.Getenv("REMOTION_APP_REGION")// Set parameters for renderrenderInputRequest := remotionlambda.RemotionOptions{ServeUrl: serveUrl,FunctionName: functionName,Region: region,// The data that composition will useInputProps: map[string]interface{}{"data": "Let's play",},Composition: "main", // The composition to use}// Execute the render processrenderResponse, renderError := remotionlambda.RenderMediaOnLambda(renderInputRequest)// Check if there are validation errorsif renderError != nil {validationOut := make([]ValidationError, len(renderError.(validator.ValidationErrors)))for i, fieldError := range renderError.(validator.ValidationErrors) {validationOut[i] = ValidationError{fieldError.Field(), msgForTag(fieldError)}}for _, apiError := range validationOut {fmt.Printf("%s: %s\n", apiError.Field, apiError.Message)}return}// Get bucket informationfmt.Printf("Bucket name: %s, Render ID: %s\n", renderResponse.BucketName, renderResponse.RenderId)// Render Progress requestrenderProgressInputRequest := remotionlambda.RenderConfig{FunctionName: functionName,Region: region,RenderId: renderResponse.RenderId,BucketName: renderResponse.BucketName,}// Execute getting the render progressrenderProgressResponse, renderProgressError := remotionlambda.GetRenderProgress(renderProgressInputRequest)// Check if we have errorif renderProgressError != nil {log.Fatal("%s %s", "Invalid render progress response", renderProgressError)}// Get the overall render progressfmt.Printf("Progress: %f", renderProgressResponse.OverallProgress)}
main.gogo
package mainimport ("fmt""log""os""github.com/go-playground/validator/v10""github.com/joho/godotenv"// Match the version with the version of your deployed functions"github.com/remotion-dev/remotion/packages/lambda-go/v3.3.89")type ValidationError struct {Field stringMessage string}func msgForTag(fe validator.FieldError) string {switch fe.Tag() {case "required":return "This field is required"}return fe.Error() // default error}func main() {// Load the environment variables from the .env fileerr := godotenv.Load()if err != nil {log.Fatal(err)}// Specify the URL to your Webpack bundleserveUrl := os.Getenv("REMOTION_APP_SERVE_URL")// Specify the function you would like to callfunctionName := os.Getenv("REMOTION_APP_FUNCTION_NAME")// Specify the region you deployed to, for example "us-east-1"region := os.Getenv("REMOTION_APP_REGION")// Set parameters for renderrenderInputRequest := remotionlambda.RemotionOptions{ServeUrl: serveUrl,FunctionName: functionName,Region: region,// The data that composition will useInputProps: map[string]interface{}{"data": "Let's play",},Composition: "main", // The composition to use}// Execute the render processrenderResponse, renderError := remotionlambda.RenderMediaOnLambda(renderInputRequest)// Check if there are validation errorsif renderError != nil {validationOut := make([]ValidationError, len(renderError.(validator.ValidationErrors)))for i, fieldError := range renderError.(validator.ValidationErrors) {validationOut[i] = ValidationError{fieldError.Field(), msgForTag(fieldError)}}for _, apiError := range validationOut {fmt.Printf("%s: %s\n", apiError.Field, apiError.Message)}return}// Get bucket informationfmt.Printf("Bucket name: %s, Render ID: %s\n", renderResponse.BucketName, renderResponse.RenderId)// Render Progress requestrenderProgressInputRequest := remotionlambda.RenderConfig{FunctionName: functionName,Region: region,RenderId: renderResponse.RenderId,BucketName: renderResponse.BucketName,}// Execute getting the render progressrenderProgressResponse, renderProgressError := remotionlambda.GetRenderProgress(renderProgressInputRequest)// Check if we have errorif renderProgressError != nil {log.Fatal("%s %s", "Invalid render progress response", renderProgressError)}// Get the overall render progressfmt.Printf("Progress: %f", renderProgressResponse.OverallProgress)}