Amazon cloudformation 如何减少CloudFormation父堆栈中的参数
我正试图遵循AWS CloudFormation的最佳实践,并建立了许多嵌套在父堆栈下的小堆栈。大多数情况下,这是工作良好;但是,在中间堆栈中,我现在已经超过了最大60个参数计数。当我进入下一个级别并将这些中间堆栈聚合到主父堆栈中时,情况只会变得更糟 CloudFormation文档说,“要指定更多参数,可以使用映射或列表为单个参数分配多个值。”事实上,在回答60个参数限制问题时,这里至少给出了两次准确的引用。然而,人们如何做到这一点呢?当您从一组预定义的值中进行选择(例如,从这些AMI ID或这些子网中进行选择)时,我可以看到映射功能是如何工作的,但当参数是字符串或数字或其他用户输入的数据时,我看不到它是如何工作的;我看不出列表是如何实现的 是否有人举过一两个例子,说明他们如何使用映射和/或列表将多个用户输入的参数合并到单个参数中 编辑,根据评论中的请求,我将添加更多关于我的模板外观的详细信息。下面是所讨论的父堆栈的ParameterGroups部分。它为“邮件存储”(创建EBS卷)、“邮件”(启动主和备份MX服务器并配置Postfix、Dovecot等)和“Roundcube”(启动运行Roundcube的自动缩放web服务器组)汇总嵌套堆栈。所有这些都位于另一个嵌套堆栈“infrastructure”之上,该堆栈部署VPC、子网、ELB、NAT、RDS、安全组和phpmyadminAmazon cloudformation 如何减少CloudFormation父堆栈中的参数,amazon-cloudformation,Amazon Cloudformation,我正试图遵循AWS CloudFormation的最佳实践,并建立了许多嵌套在父堆栈下的小堆栈。大多数情况下,这是工作良好;但是,在中间堆栈中,我现在已经超过了最大60个参数计数。当我进入下一个级别并将这些中间堆栈聚合到主父堆栈中时,情况只会变得更糟 CloudFormation文档说,“要指定更多参数,可以使用映射或列表为单个参数分配多个值。”事实上,在回答60个参数限制问题时,这里至少给出了两次准确的引用。然而,人们如何做到这一点呢?当您从一组预定义的值中进行选择(例如,从这些AMI ID或
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),我仍然认为我尝试做的是正确的事情(尽管可能不是出于所述原因)。或者我不应该尝试将这些模式(“邮件服务器”、“存储”等)汇总到父堆栈中,而只是单独部署它们?