是否可以在SAM模板中定义常量以使我的模板文件更易于维护?

时间:2020-06-17 10:21:46

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

我正在使用AWS SAM将我的AWS Lambda函数部署到AWS。

我能够在Runtime部分中定义一次Globals,并且想知道是否可以为我的Lambdas(Role: arn:aws:iam::12345678:role/lambda-role)承担的AWS 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 个答案:

答案 0 :(得分:1)

您可以为此使用ParametersMappings

例如,带有参数

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]

映射的优点是在部署模板时无法修改它们。但是显然,如果您希望能够做到这一点,则应该使用参数。

答案 1 :(得分:1)

您可以使用参数并在部署时覆盖它们,或使用引导式部署将其保存以供下次运行。

检查此模板:

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。 这些值将从配置文件中检索。