我知道這是不可能的在Cloudformation中使用NumberofInstance屬性,我已經在AWS :: AutoScaling :: AutoScalingGroup中使用了「DesiredCapacity」,但是我想知道是否有任何替代方案,比如在內部使用迭代模板是否有可能從用戶那裏獲得「instancecount」,並使用雲形成模板相應地創建ec2實例?
下用戶數據或使用客戶腳本來創建相同的情況下
我知道這是不可能的在Cloudformation中使用NumberofInstance屬性,我已經在AWS :: AutoScaling :: AutoScalingGroup中使用了「DesiredCapacity」,但是我想知道是否有任何替代方案,比如在內部使用迭代模板是否有可能從用戶那裏獲得「instancecount」,並使用雲形成模板相應地創建ec2實例?
下用戶數據或使用客戶腳本來創建相同的情況下
不幸的是,雖然EC2 RunInstances API支持開展多個EC2實例(通過MAXCOUNT/MinCount參數)時,AWS::EC2::Instance
CloudFormation資源只允許您創建單次EC2實例(另請參閱this forum post以進行確認ChrisW @ AWS在這個限制上)。
此外,使用CloudFormation的Intrinsic Functions不可能在模板內進行迭代,因此這也不是一個選項。作爲替代方案,我會推薦使用中間模板格式,然後在需要更強大的表現力時使用預處理器編譯爲CloudFormation模板(JSON或YML)。您可以使用像troposphere這樣的全功能庫,但編寫自己的基本預處理圖層以適應您的用例和編程語言/庫首選項也很容易。
我目前的選擇是嵌入Ruby(ERB),主要是因爲我已經很熟悉它。下面是一個例子template.yml.erb
文件中使用迭代產生一個CloudFormation YAML:
Resources:
<% (1..5).each do |i| -%>
Instance<%=i%>:
Type: AWS::EC2::Instance
# ...etc etc...
<% end -%>
要處理,運行cat template.yml.erb | | ruby -rerb -e "puts ERB.new(ARGF.read, nil, '-').result" > template.yml
,將下面的CloudFormation就緒模板寫template.yml
:
Resources:
Instance1:
Type: AWS::EC2::Instance
# ...etc etc...
Instance2:
Type: AWS::EC2::Instance
# ...etc etc...
Instance3:
Type: AWS::EC2::Instance
# ...etc etc...
Instance4:
Type: AWS::EC2::Instance
# ...etc etc...
Instance5:
Type: AWS::EC2::Instance
# ...etc etc...
我用這個技術來幫助管理複雜CloudFormation堆棧中的大量資源並獲得良好結果。
感謝您的更新。讓我嘗試一樣。 – jk1510
嗨,在下面的JSON模板中,他們創建了3個實例。我需要自定義創建5個實例。我將從用戶那裏獲得實例的數量。我怎樣才能修改相同的。? https://github.com/stelligent/stelligent_commons/blob/master/cloudformation/codedeploy-ec2.json – jk1510