我正在使用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
例如与 参数:
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]
映射的好处是在部署模板时不能修改。但很明显,如果你希望能够做到这一点,那么应该使用参数。
你可以使用参数,并在部署时覆盖它们,或者使用引导式部署将它们保存到下一次部署运行。
检查这个模板。
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,这些值将从配置文件中检索出来。