如何在SST中为所有Lambda函数配置通用角色?
解决SST中Lambda函数复用通用IAM角色的问题
方法一:提前创建通用角色,全局引用
先在SST栈中定义一个包含所有Lambda所需权限的通用IAM角色,之后所有Lambda函数都直接引用这个角色即可。
示例代码:
import { StackContext, Role, Function } from "@serverless-stack/resources"; export default function MyStack({ stack }: StackContext) { // 创建通用Lambda角色,配置基础权限 const commonLambdaRole = new Role(stack, "CommonLambdaRole", { assumedBy: "lambda.amazonaws.com", permissions: [ "s3:GetObject", "dynamodb:Query", // 按需添加所有Lambda共用的权限 ], }); // 单个Lambda引用通用角色 new Function(stack, "UserHandler", { handler: "src/user.handler", role: commonLambdaRole, }); // 批量创建200个Lambda时用循环复用角色 for (let i = 0; i < 200; i++) { new Function(stack, `BatchLambda${i}`, { handler: `src/batch/${i}.handler`, role: commonLambdaRole, }); } }
方法二:通过基础配置批量复用
如果需要统一更多Lambda的配置(比如内存、超时),可以先定义一个包含通用角色的基础配置对象,后续所有Lambda都继承这个配置。
示例代码:
import { StackContext, Role, Function } from "@serverless-stack/resources"; export default function MyStack({ stack }: StackContext) { // 定义通用角色 const commonRole = new Role(stack, "CommonLambdaRole", { assumedBy: "lambda.amazonaws.com", permissions: ["s3:ListBucket", "dynamodb:Scan"], }); // 封装通用Lambda配置 const baseLambdaConfig = { role: commonRole, memorySize: 256, timeout: 30, }; // 批量创建Lambda时复用配置 for (let i = 0; i < 200; i++) { new Function(stack, `WorkerLambda${i}`, { handler: `src/workers/${i}.handler`, ...baseLambdaConfig, }); } }
注意事项
- 通用角色的权限要覆盖所有Lambda的需求,避免出现权限不足;若个别Lambda需要特殊权限,可在通用角色基础上追加附加权限,或单独为其创建角色(尽量减少单独角色数量)。
- 遵循最小权限原则,不要给通用角色赋予不必要的权限,降低安全风险。
- 更新通用角色权限后,所有引用该角色的Lambda会自动生效,无需逐个修改配置。
内容的提问来源于stack exchange,提问作者test mail
相关产品推荐
相关产品推荐

