我正在使用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
答案 0 :(得分:1)
您可以为此使用Parameters或Mappings。
例如,带有参数:
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。 这些值将从配置文件中检索。