Skip to content

Lambda: Custom output destination not working for Tigris (S3-compatible) #5227

@empz

Description

@empz

According to this docs (https://www.remotion.dev/docs/lambda/custom-destination#saving-to-another-cloud), we should be able to output a video to any S3-compatible storage.

Tigris is an S3-compatible storage and I've been using the official AWS S3 SDK as they recommend to work with it, no issues.
https://www.tigrisdata.com/docs/api/s3/

When trying to:

renderMediaOnLambda({
    functionName: functionName,
    region: REGION,
    serveUrl: siteName,
    composition: compositioName,
    inputProps: inputProps,
    webhook: webhook,
    deleteAfter: "30-days",
    timeoutInMilliseconds: 90_000, // 90 seconds
    downloadBehavior: {
      type: "download",
      fileName: null,
    },
    outName: {
      key: generateId(12),
      bucketName: "my.bucket.name",
      s3OutputProvider: {
        endpoint: TIGRIS_ENDPOINT,
        accessKeyId: env.TIGRIS_ACCESS_KEY_ID,
        secretAccessKey: env.TIGRIS_SECRET_ACCESS_KEY,
      },
    },
    privacy: "no-acl"
  });

I get the following error:

{
  "message": "Unable to access item \"OYqtngXszMav\" from bucket \"my.bucket.name\" (S3 Endpoint = https://fly.storage.tigris.dev). The Lambda role must have permission for both \"s3:GetObject\" and \"s3:ListBucket\" actions.",
  "name": "Error",
  "stack": "Error: Unable to access item \"OYqtngXszMav\" from bucket \"my.bucket.name\" (S3 Endpoint = https://fly.storage.tigris.dev). The Lambda role must have permission for both \"s3:GetObject\" and \"s3:ListBucket\" actions.\n    at zwn (/var/task/index.js:152:24007)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async IRn (/var/task/index.js:152:47803)\n    at async ORn (/var/task/index.js:152:52773)\n    at async xAn (/var/task/index.js:153:26375)\n    at async Runtime.handleOnceStreaming (file:///var/runtime/index.mjs:1206:26)"
}

As mentioned, I'm able to instantiate and use a standard S3Client using the following code, with the same endpoint and credentials

new S3Client({
      region,
      endpoint,
      credentials: {
        accessKeyId,
        secretAccessKey,
      },
    });

One particularity that's worth mentioning is that the bucket name is actually in the shape of subdomain.domain.tld because Tigris requires the bucket name to match the CNAME record if you want to use custom domains (which I am using).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions