3

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

资源:

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: for it 吗?

4

2 回答 2

7

SAM 为您创建的最终角色只是您的函数名称,并在末尾添加了“角色”。您可以使用此信息通过普通 CloudFormation 函数获取角色或属性。

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

于 2018-09-19T23:20:09.390 回答
4

我能够测试一个解决方案,在 SAM template.yaml 中,您可以像在 CloudFormation 中一样为逻辑 ID 添加一个输出,该逻辑 ID 在使用诸如Policiesfor等属性时作为转换的一部分自动为您创建AWS::Serverless::Function

生成的 IAM 角色的逻辑 ID 是<Function Logical ID>Role,我使用了以下内容:

Outputs:
  LambdaRole:
    Value: 
      Fn::GetAtt: 
        - "LambdaFunctionRole"
        - "Arn"
    Description: "Lambda IAM Role"
于 2019-05-25T04:37:20.010 回答