设置
1. 安装 @remotion/lambda
- npm
- yarn
- pnpm
- bun
npm i --save-exact @remotion/lambda@4.0.206
npm i --save-exact @remotion/lambda@4.0.206
pnpm i @remotion/lambda@4.0.206
pnpm i @remotion/lambda@4.0.206
bun i @remotion/lambda@4.0.206
bun i @remotion/lambda@4.0.206
yarn --exact add @remotion/lambda@4.0.206
yarn --exact add @remotion/lambda@4.0.206
Also update
remotion
and all `@remotion/*`
packages to the same version.Remove all
^
character in front of the version numbers of it as it can lead to a version conflict.2. 创建角色策略
- 进入 AWS 账户 IAM 策略部分
- 点击 "创建策略"
- 点击 JSON
- 在项目中,在命令行中键入
npx remotion lambda policies role
并将其复制到 AWS 的 "JSON" 字段中。 - 点击下一步。在标签页上,您无需填写任何内容。再次点击下一步。
- 将策略精确地命名为
remotion-lambda-policy
。其他字段可以保持不变。
3. 创建角色
- 进入 AWS 账户 IAM 角色部分
- 点击 "创建角色"。
- 在 "用例" 下,选择 "Lambda"。点击下一步。
- 在 "权限策略" 下,过滤
remotion-lambda-policy
并选中复选框以分配此策略。点击下一步。 - 在最后一步中,将角色命名为
remotion-lambda-role
精确地。其他字段可以保持不变。 - 点击 "创建角色" 以确认。
4. 创建用户
- 进入 AWS 账户 IAM 用户部分
- 点击
添加用户
- 输入任何用户名,例如
remotion-user
。 - 不要勾选 "启用控制台访问" 选项。您不需要它。
- 点击 "下一步"。
- 再次点击 "下一步",不要更改任何设置。您现在应该在 "审阅并创建" 步骤上。
- 点击 "创建用户"。
5. 为用户 创建访问密钥
- 进入 AWS 账户 IAM 用户部分
- 点击步骤 4 中创建的用户的名称。
- 转到 "安全凭证" 选项卡,并滚动到 "访问密钥" 部分。
- 点击 "创建访问密钥" 按钮。
- 选择 "在 AWS 计算服务上运行的应用程序"。
- 忽略可能出现的警告,并选中 "我了解建议..." 复选框。
- 点击 "下一步"。
- 点击 "创建访问密钥"。
- 在项目的根目录中添加一个
.env
文件,并以以下格式添加刚刚复制的凭据:
.envtxt
REMOTION_AWS_ACCESS_KEY_ID=<Access key ID>REMOTION_AWS_SECRET_ACCESS_KEY=<Secret access key>
.envtxt
REMOTION_AWS_ACCESS_KEY_ID=<Access key ID>REMOTION_AWS_SECRET_ACCESS_KEY=<Secret access key>
6. 为您的用户添加权限
- 转到AWS账户IAM用户部分
- 选择您刚创建的用户。
- 在“权限策略”面板中的“添加权限”下拉菜单中单击“添加内联策略”。
- 单击“JSON”选项卡。
- 在终端中输入:
npx remotion lambda policies user
,并将打印出的内容复制到AWS文本字段中。 - 单击“Review policy”。
- 为策略命名。例如
remotion-user-policy
,但也可以是其他任何名称。 - 单击“Create policy”以确认。
7. 可选:验证权限设置
通过执行以下命令检查所有用户权限,并使用AWS策略模拟器验证它们:
bash
npx remotion lambda policies validate
bash
npx remotion lambda policies validate
对于接下来的步骤,您可以在CLI上执 行它们,也可以使用Node.JS API以编程方式执行。
8. 部署一个函数
- CLI
- Node.JS
通过执行以下命令部署一个可以在您的AWS账户中渲染视频的函数:
bash
npx remotion lambda functions deploy
bash
npx remotion lambda functions deploy
您可以使用deployFunction()
部署一个可以在您的AWS账户中渲染视频的函数。
ts
const {functionName } = awaitdeployFunction ({region : "us-east-1",timeoutInSeconds : 120,memorySizeInMb : 2048,createCloudWatchLogGroup : true,});
ts
const {functionName } = awaitdeployFunction ({region : "us-east-1",timeoutInSeconds : 120,memorySizeInMb : 2048,createCloudWatchLogGroup : true,});
函数名称将被返回,您将需要它来进行渲染。
该函数包含了必要的二进制文件和JavaScript代码,可以从serve URL获取并进行渲染。函数与Remotion版本绑定,如果您升级Remotion,您需要部署一个新函数。函数不包括您的Remotion代码,您需要在下一步中部署它。
9. 部署一个站点
- CLI
- Node.JS
运行以下命令将您的 Remotion 项目部署到 S3 存储桶。将项目的 入口点 作为最后一个参数传递。
bash
npx remotion lambda sites create src/index.ts --site-name=my-video
bash
npx remotion lambda sites create src/index.ts --site-name=my-video
将打印一个指向部署项目的 服务 URL。
在将来更新 Remotion 视频时,请重新部署您的站点。传递相同的 --site-name
来覆盖先前的部署。如果不传递 --site-name
,则每次部署都会生成一个唯一的 URL。
首先,您需要在您首选的区域创建一个 S3 存储桶。如果已经存在一个存储桶,则将使用该存储桶:
ts
importpath from "path";import {deploySite ,getOrCreateBucket } from "@remotion/lambda";const {bucketName } = awaitgetOrCreateBucket ({region : "us-east-1",});
ts
importpath from "path";import {deploySite ,getOrCreateBucket } from "@remotion/lambda";const {bucketName } = awaitgetOrCreateBucket ({region : "us-east-1",});
接下来,将您的 Remotion 项目上传到 S3 存储桶。指定您的 Remotion 项目的入口点,这是调用 registerRoot()
的文件。
ts
const {serveUrl } = awaitdeploySite ({bucketName ,entryPoint :path .resolve (process .cwd (), "src/index.ts"),region : "us-east-1",siteName : "my-video",});
ts
const {serveUrl } = awaitdeploySite ({bucketName ,entryPoint :path .resolve (process .cwd (), "src/index.ts"),region : "us-east-1",siteName : "my-video",});
在将来更新 Remotion 视频时,请重新部署您的站点。传递相同的 siteName
来覆盖先前的部署。如果不传递 siteName
,则每次部署都会生成一个唯一的 URL。
10. 检查 AWS 并发限制
检查 AWS 给予您账户的并发限制:
npx remotion lambda quotas
npx remotion lambda quotas
默认情况下,每个区域的并发调用限制为 1000
。但是,新账户的限制可能低至 10
。每个 Remotion 渲染可能会同时使用多达 200 个函数,因此如果您被分配的限制非常低,您可能希望立即请求增加限制。
11. 渲染视频
- CLI
- Node.JS
获取您从第9步收到的URL - 您的"serve URL" - 并运行以下命令。还要传入您想要渲染的合成物的ID。
bash
npx remotion lambda render <serve-url> <composition-id>
bash
npx remotion lambda render <serve-url> <composition-id>
直到视频渲染完成,进度将被打印出来。恭喜!您使用 Remotion Lambda 渲染了您的第一个视频 🚀
您已经从之前的步骤中获得了函数名称。但由于您只需要部署一次函数,因此在渲染视频之前以编程方式检索已部署函数的名称是很有用的,以防您的 Node.JS 程序重新启动。我们可以使用 compatibleOnly
标志调用 getFunctions()
来仅获取具有匹配版本的函数。
ts
import {getFunctions ,renderMediaOnLambda ,getRenderProgress ,} from "@remotion/lambda";constfunctions = awaitgetFunctions ({region : "us-east-1",compatibleOnly : true,});constfunctionName =functions [0].functionName ;
ts
import {getFunctions ,renderMediaOnLambda ,getRenderProgress ,} from "@remotion/lambda";constfunctions = awaitgetFunctions ({region : "us-east-1",compatibleOnly : true,});constfunctionName =functions [0].functionName ;
现在,我们可以使用 renderMediaOnLambda()
函数触发渲染。
ts
const {renderId ,bucketName } = awaitrenderMediaOnLambda ({region : "us-east-1",functionName ,serveUrl :url ,composition : "HelloWorld",inputProps : {},codec : "h264",imageFormat : "jpeg",maxRetries : 1,framesPerLambda : 20,privacy : "public",});
ts
const {renderId ,bucketName } = awaitrenderMediaOnLambda ({region : "us-east-1",functionName ,serveUrl :url ,composition : "HelloWorld",inputProps : {},codec : "h264",imageFormat : "jpeg",maxRetries : 1,framesPerLambda : 20,privacy : "public",});
现在渲染将运行,一段时间后视频将在您的 S3 存储桶中可用。您随时可以通过调用 getRenderProgress()
来获取视频渲染的状态。
ts
while (true) {await newPromise ((resolve ) =>setTimeout (resolve , 1000));constprogress = awaitgetRenderProgress ({renderId ,bucketName ,functionName ,region : "us-east-1",});if (progress .done ) {console .log ("Render finished!",progress .outputFile );process .exit (0);}if (progress .fatalErrorEncountered ) {console .error ("Error enountered",progress .errors );process .exit (1);}}
ts
while (true) {await newPromise ((resolve ) =>setTimeout (resolve , 1000));constprogress = awaitgetRenderProgress ({renderId ,bucketName ,functionName ,region : "us-east-1",});if (progress .done ) {console .log ("Render finished!",progress .outputFile );process .exit (0);}if (progress .fatalErrorEncountered ) {console .error ("Error enountered",progress .errors );process .exit (1);}}
此代码将每秒轮询以检查视频的进度,并在渲染完成时退出脚本。恭喜!检查您的 S3 存储桶 - 您刚刚使用 Remotion Lambda 渲染了您的第一个视频 🚀
下一步
- 选择您想要在其中运行 Remotion Lambda 的区域。
- 熟悉 CLI 和 Node.JS API(在侧边栏中列出)。
- 学习如何升级 Remotion Lambda。
- 在上线之前,请查看生产清单。
- 如果您有任何问题,请查看FAQ或在我们的Discord 频道中提问。