Можно ли определять константы в шаблонах SAM, чтобы сделать мой файл шаблона более удобным в сопровождении? - PullRequest
0 голосов
/ 17 июня 2020

Я использую AWS SAM для развертывания моих AWS лямбда-функций в AWS.

Мне удалось определить Runtime один раз в разделе Globals, и мне было интересно, могу ли я мог бы определить константу для роли AWS, которую должны принять мои лямбды (Role: arn:aws:iam::12345678:role/lambda-role), которая в настоящее время повторяется в файле шаблона для каждой функции.

Вот мой шаблон SAM:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Globals:
  Function:
    Runtime: python3.7

Resources:
  FunctionA:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambdas/
      Handler: app.event_handler_a
      Role: arn:aws:iam::12345678:role/lambda-role

  FunctionB:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambdas/
      Handler: app.event_handler_b
      Role: arn:aws:iam::12345678:role/lambda-role

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы можете использовать параметры и переопределить их при развертывании или использовать управляемое развертывание, чтобы сохранить их для следующего запуска развертывания.

Проверьте этот шаблон:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Globals:
  Function:
    Runtime: python3.7

Parameters:
  role:
    Type: String

Resources:
  FunctionA:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambdas/
      Handler: app.event_handler_a
      Role: ${role}

  FunctionB:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambdas/
      Handler: app.event_handler_b
      Role: ${role}

Способ развертывания:

sam deploy --template-file template.yaml --stack-name mystack --capabilities CAPABILITY_IAM --parameter-overrides role = arn: aws: iam :: 12345678: role / lambda-role

В качестве альтернативы вы можете использовать параметр --guided cli. См. Документацию из AWS ниже:

Например, при выполнении команды sam deploy --guided AWS SAM CLI автоматически добавляет необходимые параметры в файл конфигурации. Впоследствии вы можете выполнить sam deploy без параметров, и значения будут извлечены из файла конфигурации.

1 голос
/ 17 июня 2020

Вы можете использовать Параметры или Сопоставления для этого.

Например, с Параметры :

Parameters:

  LambdaRoleArn:
    Type: String
    Default: arn:aws:iam::12345678:role/lambda-role

# Then for example

Resoureces:

  FunctionB:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambdas/
      Handler: app.event_handler_b
      Role: !Ref LambdaRoleArn

Например, с сопоставлениями :

Mappings:

  Lambda:
     Role: 
       Value: arn:aws:iam::12345678:role/lambda-role

# Then for example

Resoureces:

  FunctionB:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambdas/
      Handler: app.event_handler_b
      Role: !FindInMap [Lambda, Role, Value]

Преимущество сопоставлений заключается в том, что их нельзя изменить при развертывании шаблона. Но, очевидно, если вы хотите иметь возможность это сделать, тогда следует использовать параметры.

...