如何在AWS SAM模板(CloudFormation栈)中引用Lambda自动创建角色?
引用SAM自动创建的Lambda角色的两种方法
方法一:直接引用自动生成的角色
当AWS SAM自动为你的Lambda函数创建IAM角色时,不需要额外定义角色,直接通过!GetAtt函数就能获取这个角色的ARN,语法如下:
Role: !GetAtt notesFunction.Role
这里的notesFunction就是你模板中定义的Lambda资源名称,Role是SAM的AWS::Serverless::Function资源暴露的内置属性,返回值就是部署时自动创建的IAM角色的ARN。
方法二:显式定义IAM角色(更可控)
如果希望更清晰地管理角色权限,或者需要在其他资源中频繁引用角色,建议手动定义IAM角色,再让Lambda关联这个角色:
- 在模板的
Resources部分添加角色定义:
NotesFunctionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess # 可根据需求添加自定义权限策略
- 修改Lambda的配置,指定使用这个显式定义的角色:
notesFunction: Type: AWS::Serverless::Function Properties: # 保留原有其他属性 Role: !Ref NotesFunctionRole # ...
之后在需要引用角色的地方,直接用!Ref NotesFunctionRole即可。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

