{"record":{"id":"9ff449ba7408dc17","repo":"remotion-dev/remotion","slug":"failed-to-upload-inputprops-to-s3-w","errorCode":null,"errorMessage":"failed to upload inputProps to S3: %w","messagePattern":"failed to upload inputProps to S3: %w","errorType":"exception","errorClass":"error","httpStatus":null,"severity":"error","filePath":"packages/lambda-go/s3.go","lineNumber":159,"sourceCode":"\t\t\tLocationConstraint: types.BucketLocationConstraint(region),\n\t\t}\n\t}\n\tif _, err := svc.CreateBucket(context.TODO(), input); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create bucket: %w\", err)\n\t}\n\treturn bucket, nil\n}\n\n// uploadInputPropsToS3 writes the serialized props to S3 as private JSON.\nfunc uploadInputPropsToS3(svc objectUploader, bucket string, key string, payload string) error {\n\t_, err := svc.PutObject(context.TODO(), &s3.PutObjectInput{\n\t\tBucket:      new(bucket),\n\t\tKey:         new(key),\n\t\tBody:        strings.NewReader(payload),\n\t\tContentType: new(\"application/json\"),\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to upload inputProps to S3: %w\", err)\n\t}\n\treturn nil\n}\n","sourceCodeStart":141,"sourceCodeEnd":163,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/lambda-go/s3.go#L141-L163","documentation":"Returned by uploadInputPropsToS3 when PutObject fails while writing the serialized input props JSON to the bucket. This path is only reached when the props are too large to inline (see needsUpload), so it implies the bucket exists but the object write itself was rejected.","triggerScenarios":"svc.PutObject returns AccessDenied (no s3:PutObject on the bucket), the bucket was deleted between resolution and upload, a bucket policy blocks puts from the caller's principal, or the payload exceeded allowed object size limits (very large input props).","commonSituations":"IAM policy scoped to specific prefixes that does not include `input-props/*`. A bucket policy denying non-TLS or non-VPCE requests. Passing very large input props (multi-hundred-MB) that the SDK struggles to stream.","solutions":["Grant s3:PutObject on `arn:aws:s3:::<bucket>/input-props/*` to the caller's role.","Inspect the wrapped error code: AccessDenied → permission; NoSuchBucket → bucket vanished; SlowDown → add retry/backoff.","Reduce input props size; very large props should be pre-uploaded and referenced by URL instead of inlined.","Check for a bucket policy that denies puts from outside a VPC endpoint and add the endpoint if needed."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := uploadInputPropsToS3(svc, bucket, key, payload); err != nil {\n    var awsErr smithy.APIError\n    if errors.As(err, &awsErr) && awsErr.ErrorCode() == \"AccessDenied\" {\n        // grant s3:PutObject on arn:aws:s3:::<bucket>/input-props/*\n    }\n    return err\n}","preventionTips":["Grant s3:PutObject on the input-props prefix to the caller role.","Keep input props small enough to stay inline when possible.","Pre-upload large data yourself and pass a reference URL."],"tags":["aws","s3","upload","iam","input-props","go","lambda-go"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}