回答

0

不幸的是,雖然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堆棧中的大量資源並獲得良好結果。

+0

感謝您的更新。讓我嘗試一樣。 – jk1510

+0

嗨,在下面的JSON模板中,他們創建了3個實例。我需要自定義創建5個實例。我將從用戶那裏獲得實例的數量。我怎樣才能修改相同的。? https://github.com/stelligent/stelligent_commons/blob/master/cloudformation/codedeploy-ec2.json – jk1510

相關問題