AWS Cloudformation SAM文件-如何拆分为许多较小的文件?

时间:2020-09-02 12:35:58

标签: aws-lambda amazon-cloudformation aws-sam

我正在创建定义产品环境的模板。 在我们的系统中,我们将使用许多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

1 个答案:

答案 0 :(得分:2)

您可以使用CloudFormation的“嵌套堆栈”功能。

在“主” template.yaml中,您按以下方式定义资源:

Resources:
  NestedStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: ./any/directory/infrastructure.yml
      Parameters:
        Environment: Staging

您可以为嵌套Stack提供类似的参数。

Here,您可以了解有关它们的更多信息。