Мне нравится, как создается встроенная политика роль + при развертывании шаблона:

Ресурсы:

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: ......

Теперь я могу указать роль, которая создается динамически, и добавить для нее Output: в шаблон SAM?

3
red888 19 Сен 2018 в 23:16

2 ответа

Лучший ответ

Результирующая роль, которую SAM создает для вас, - это просто имя вашей функции с добавлением «Роль» в конце. Вы можете использовать эту информацию, чтобы получить роль или ее свойства с помощью обычных функций CloudFormation.

Например, если вы хотите получить доступ к роли ARN для MyFunction, вы должны использовать !GetAtt MyFunctionRole.Arn в своем шаблоне SAM YAML. Тот же принцип должен применяться к !Ref и другим функциям.

6
Keeton Hodgson 19 Сен 2018 в 23:20

Мне удалось протестировать решение этой проблемы: в SAM template.yaml вы можете добавить вывод, как в CloudFormation, для логического идентификатора, который создается автоматически для вас как часть преобразования при использовании таких свойств, как {{X0} } для AWS::Serverless::Function

Логический идентификатор результирующей роли IAM - <Function Logical ID>Role, я использовал следующее:

Outputs:
  LambdaRole:
    Value: 
      Fn::GetAtt: 
        - "LambdaFunctionRole"
        - "Arn"
    Description: "Lambda IAM Role"
3
stuntkiwi 25 Май 2019 в 04:37