我正在创建定义产品环境的模板。 在我们的系统中,我们将使用许多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
答案 0 :(得分:2)
您可以使用CloudFormation的“嵌套堆栈”功能。
在“主” template.yaml中,您按以下方式定义资源:
Resources:
NestedStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: ./any/directory/infrastructure.yml
Parameters:
Environment: Staging
您可以为嵌套Stack提供类似的参数。
Here,您可以了解有关它们的更多信息。