Amazon cloudformation 如何减少CloudFormation父堆栈中的参数

Amazon cloudformation 如何减少CloudFormation父堆栈中的参数,amazon-cloudformation,Amazon Cloudformation,我正试图遵循AWS CloudFormation的最佳实践,并建立了许多嵌套在父堆栈下的小堆栈。大多数情况下,这是工作良好;但是,在中间堆栈中,我现在已经超过了最大60个参数计数。当我进入下一个级别并将这些中间堆栈聚合到主父堆栈中时,情况只会变得更糟 CloudFormation文档说,“要指定更多参数,可以使用映射或列表为单个参数分配多个值。”事实上,在回答60个参数限制问题时,这里至少给出了两次准确的引用。然而,人们如何做到这一点呢?当您从一组预定义的值中进行选择(例如,从这些AMI ID或

我正试图遵循AWS CloudFormation的最佳实践,并建立了许多嵌套在父堆栈下的小堆栈。大多数情况下,这是工作良好;但是,在中间堆栈中,我现在已经超过了最大60个参数计数。当我进入下一个级别并将这些中间堆栈聚合到主父堆栈中时,情况只会变得更糟

CloudFormation文档说,“要指定更多参数,可以使用映射或列表为单个参数分配多个值。”事实上,在回答60个参数限制问题时,这里至少给出了两次准确的引用。然而,人们如何做到这一点呢?当您从一组预定义的值中进行选择(例如,从这些AMI ID或这些子网中进行选择)时,我可以看到映射功能是如何工作的,但当参数是字符串或数字或其他用户输入的数据时,我看不到它是如何工作的;我看不出列表是如何实现的

是否有人举过一两个例子,说明他们如何使用映射和/或列表将多个用户输入的参数合并到单个参数中

编辑,根据评论中的请求,我将添加更多关于我的模板外观的详细信息。下面是所讨论的父堆栈的ParameterGroups部分。它为“邮件存储”(创建EBS卷)、“邮件”(启动主和备份MX服务器并配置Postfix、Dovecot等)和“Roundcube”(启动运行Roundcube的自动缩放web服务器组)汇总嵌套堆栈。所有这些都位于另一个嵌套堆栈“infrastructure”之上,该堆栈部署VPC、子网、ELB、NAT、RDS、安全组和phpmyadmin

 AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: Mandatory Parameters
        Parameters:
          - Vpc
          - NumberOfAZs
          - AvailabilityZones
          - AMIID
          - WantRoundCube
      -
        Label:
          default: Recommended Parameters
        Parameters:
          - AdminUser
          - AdminPubKey
      -
        Label:
          default: Mail Storage Parameters
        Parameters:
          - SpoolSize
          - LogSize
          - CreateSwap
          - SwwapSize
          - EncryptedBoolean
          - Cmk
          - SpoolDelPolicy
          - LogDelPolicy
          - MasterSpoolSnapshot
          - MasterLogSnapshot
          - BackupSpoolSnapshot
          - BackupLogSnapshot
      -
        Label:
          default: Primary MX EC2 Instance Parameters
        Parameters:
          - PrimaryServerName
          - VirtualUID
          - EC2KeyName
          - MailInstanceType
          - MailSecurityGroup
          - StorageStackName
          - PrimarySubnet
          - InsertTestData
      -
        Label:
         default: Backup MX EC2 Instance Parameters
        Parameters:
          - BackupServerName
          - BackupMailInstanceType
          - BackupSubnet
      -
        Label:
          default: Database Parameters
        Parameters:
          - DatabaseStackName
          - MailDBName
          - MailDBUser
          - MailDBPassword
          - MailDBBackup
      -
        Label:
          default: Postfix Primary Parameters
        Parameters:
          - Origin
          - Banner
          - RelayHost
          - RootMailRecipient
          - InetProtocols
          - EnableSpfChecks
          - EnableOpenDkim
          - OpenDkimDomains
      -
        Label:
          default: SSL Parameters
        Parameters:
          - CertSource
          - AccountEmail
          - DNSZone
          - DNSSleep
          - CertFileDir
      -
        Label:
          default: Dovecot Parameters
        Parameters:
          - MaxUserConnections
      -
        Label:
          default: Amavisd, SpamAssassin, ClamAV
        Parameters:
          - SAFinalDest
          - SAKillLevelDeflt
          - SetMyHost
     -
        Label:
          default: Roundcube
        Parameters:
          - AllowPasswdChange
          - AlternativeIAMRole
          - AlternativeInitializationScript
          - DnsName
          - EnableDebug
          - EnvironmentVariables
          - Hash
          - PublicAlbListenerArn
          - RoundcubeDBName
          - RoundcubeDBUser
          - RoundcubeDBPass
          - RoundcubeInstanceType
          - RoundcubeSecurityGroup
          - Skin
      -
        Label:
          default: AWS S3 Configuration
        Parameters:
          - MirovoyCFAssetsBucket
          - MailS3KeyPrefix
          - RoundcubeS3KeyPrefix
          - SkelFileDir
      - Label:
          default: Testing Configuration
        Parameters:
          - UnknownLocalErrorCode
          - XandrosPass
          - VivitaPass
          - ExternalTestEmail
          - SSLDebug
          - ADLogLevel
          - DisableVirusChecks
          - DisableSpamChecks
          - DisableServices
      -
        Label:
          default: Postfix Optional Parameters
        Parameters:
          - DelayWarningTime
          - MaxQueueLifetime
          - MinBackoffTime
         - MaxBackoffTime
          - HeloTimeout
          - RecipientLimit
          - SoftErrLimit
          - HardErrLimit
          - SpfTimeLimit
我很高兴在必要时发布更多的模板,但显然已经很长了:)


谢谢

我觉得你使用的参数数量相当高。你能举一个如何使用CloudFormation模板的例子吗?嗯,我有点同意:)我怀疑我对如何使用嵌套堆栈缺乏一些架构上的理解。更新帖子以包含示例。
我试图遵循AWS CloudFormation最佳实践,并在父堆栈下设置了许多小堆栈。
我不认为这是CloudFormation最佳实践的一部分。嵌套堆栈应该用于您想要重用的公共模式:嗯,有趣。我不知道我是从哪里得到这个想法的,也不知道我是如何稍微曲解它的,但我仍然不认为我的目标是错误的。如果我查看AWS参考体系结构(例如,或),我仍然认为我尝试做的是正确的事情(尽管可能不是出于所述原因)。或者我不应该尝试将这些模式(“邮件服务器”、“存储”等)汇总到父堆栈中,然后单独部署它们?我觉得你使用的参数数量相当多。你能举一个如何使用CloudFormation模板的例子吗?嗯,我有点同意:)我怀疑我对如何使用嵌套堆栈缺乏一些架构上的理解。更新帖子以包含示例。
我试图遵循AWS CloudFormation最佳实践,并在父堆栈下设置了许多小堆栈。
我不认为这是CloudFormation最佳实践的一部分。嵌套堆栈应该用于您想要重用的公共模式:嗯,有趣。我不知道我是从哪里得到这个想法的,也不知道我是如何稍微曲解它的,但我仍然不认为我的目标是错误的。如果我查看AWS参考体系结构(例如,or),我仍然认为我尝试做的是正确的事情(尽管可能不是出于所述原因)。或者我不应该尝试将这些模式(“邮件服务器”、“存储”等)汇总到父堆栈中,而只是单独部署它们?