如何获得动态创建的lambda角色的名称?

时间:2018-09-19 20:16:21

标签: amazon-web-services aws-lambda amazon-cloudformation aws-sam-cli aws-sam

我喜欢在部署模板时如何创建角色+内联策略:

资源:

MyFUnction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
        Description: Enter description of what this specific Lambda does
        CodeUri: hello_world/build/
        Handler: app.lambda_handler
        Runtime: python2.7

        Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object
            Variables:
                PARAM1: VALUE

        Policies:
            # Using AWSLambdaExecute automatically creates a role named: <StackName>Role-<UUID>
            - AWSLambdaExecute
            # This policy is assigned as an  Inline policy to the role
            - Version: '2012-10-17' # Policy Document
              Statement:
                  Effect: Allow
                  Action: ......

现在我可以引用动态创建的角色并在SAM模板中为其添加Output:吗?

2 个答案:

答案 0 :(得分:4)

SAM为您创建的最终角色只是函数的名称,最后加上“ Role”。您可以使用此信息通过正常的CloudFormation函数获取其角色或属性。

例如,如果您想访问MyFunction的角色ARN,则可以在SAM YAML模板中使用!GetAtt MyFunctionRole.Arn!Ref和其他功能也应使用相同的原理。

答案 1 :(得分:1)

我能够测试一个解决方案,在SAM template.yaml中,您可以像在CloudFormation中为逻辑ID添加输出一样,该逻辑ID是在使用诸如{ Policies的{​​1}}

产生的IAM角色的逻辑ID是AWS::Serverless::Function,我使用了以下内容:

<Function Logical ID>Role