【发布时间】:2020-12-21 15:08:24
【问题描述】:
我正在创建定义我们的产品环境的模板。 在我们的系统中,我们将使用许多 Lambda,它会生成巨大的 Cloudformation 模板文件,其中包含许多(甚至是被猎杀的)条目,如下所示。可以将一个模板文件拆分为多个单独的文件(例如,一个文件用于一项功能或至少一个文件用于一项服务)。 我知道有子堆栈机制,但在子堆栈中我无法将函数定义存储在本地文件中(我只能提供模板 URL),我不确定是否可以将参数传递给子堆栈。正如您从下面的示例中看到的那样,有许多参数和对其他资源的引用。
APILambadFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ../lambda_functions/
Handler: getUserInfo.lambda_handler
FunctionName: !Sub ${CreatorUsername}-getUserInfo
Runtime: python3.7
VpcConfig:
SecurityGroupIds:
- !Ref SecurityGroupLamda
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
Role:
Fn::GetAtt: [ RoleLamdaRestAPI, Arn ] # Rola dla wszystkich Lamd restowych
Environment:
Variables:
DB_HOST: !GetAtt 'PostgresDB.Endpoint.Address'
DB_PORT: !GetAtt 'PostgresDB.Endpoint.Port'
DB_NAME: !Sub '{{resolve:ssm:/${CreatorUsername}/${EnvType}/PostgresSQL/DBName:1}}'
DB_USERNAME: !Sub '{{resolve:ssm:/${CreatorUsername}/${EnvType}/PostgresSQL/Username:1}}'
CREATOR_USERNAME: !Ref CreatorUsername
ENV_TYPE: !Ref EnvType
Events:
GetUserInfo:
Type: Api
Properties:
Path: /user
Method: get
RestApiId: !Ref ApiGatewayApi
【问题讨论】:
-
与其他语言不同,我实际上建议坚持使用一个大文件,以充分利用 Linter 和 IDE integration 等本地工具,并避免嵌套堆栈的限制,如缺少 change sets和drift detection
-
但是当我读到资源数量限制在 200 左右时,对吗?
-
There is。不幸的是,如果你达到这个限制,现在没有太多选择,但是that limit is being re-evaluated
标签: aws-lambda amazon-cloudformation aws-sam