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

问题描述 投票:0回答:2

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

我可以在模板中定义 Runtime 一度 Globals 部分,我想知道我是否可以为我的Lambdas角色定义一个常量(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
amazon-web-services aws-lambda amazon-cloudformation
2个回答
1
投票

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

例如与 参数:

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
投票

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

检查这个模板。

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:rolelambda-role。

另外,你也可以使用--guided cli参数。下面查看AWS的文档。

例如,当执行 sam deploy --guided 命令时,AWS SAM CLI 会自动将所需参数添加到配置文件中。随后你可以在没有参数的情况下执行sam deploy,这些值将从配置文件中检索出来。

© www.soinside.com 2019 - 2024. All rights reserved.