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

End*_*dre 5 amazon-web-services aws-cloudformation aws-lambda

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

我能够Runtime在该Globals部分中定义一次,并且想知道是否可以为我的 Lambda 承担的 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
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 10

您可以为此使用参数映射。

例如参数

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
Run Code Online (Sandbox Code Playgroud)

例如,使用映射

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]
Run Code Online (Sandbox Code Playgroud)

映射的优点是部署模板时无法修改它们。但显然,如果你想能够做到这一点,那么就应该使用参数。