

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 了解堆疊部署時間
<a name="stack-deployment-time"></a>

當您建立、更新或刪除堆疊時，CloudFormation 會在範本中佈建每個資源，並在您的資源準備好提供流量時報告堆疊操作已完成。本主題說明 CloudFormation 如何佈建堆疊、堆疊操作需要多長時間，以及如何縮短部署時間。

**Topics**
+ [CloudFormation 如何佈建堆疊](#how-cloudformation-provisions-a-stack)
+ [影響部署時間的因素](#what-affects-deployment-time)
+ [縮短部署時間的方法](#ways-to-shorten-deployment-time)
+ [相關資源](#stack-deployment-time-related-resources)

## CloudFormation 如何佈建堆疊
<a name="how-cloudformation-provisions-a-stack"></a>

CloudFormation 會讀取範本中資源之間的相依性。透過 `Ref`、 `Fn::GetAtt`或 參考其他資源的資源`DependsOn`，會在參考資源之後佈建。彼此沒有相依性的資源會平行佈建。

對於每個資源，CloudFormation 會套用資源組態，然後確認資源已準備好為流量提供服務。CloudFormation 會在每個資源就緒時立即向前移動，因此相依資源會盡早開始。因此，具有較長相依性鏈的堆疊會看到最大的改善。當堆疊中的每個資源都就緒時，CloudFormation 會報告堆疊操作已完成。

此行為會自動套用至堆疊操作。您不需要變更範本或設定任何參數。

## 影響部署時間的因素
<a name="what-affects-deployment-time"></a>

相依性鏈  
彼此相依的最長資源鏈會設定堆疊操作的最短時間。不屬於該鏈的資源會平行佈建，通常不會新增至總時間。

需要更長的時間才能準備就緒的資源  
包含 Amazon RDS 資料庫執行個體、Elastic Load Balancing 負載平衡器、NAT 閘道或 Amazon CloudFront 分佈等資源的工作負載，會花費大部分的部署時間等待這些資源準備好為流量提供服務。

參考資源屬性的輸出  
如果堆疊輸出參考資源屬性，例如使用 `Fn::GetAtt`，CloudFormation 會等到屬性值可用，再完成堆疊操作。此等待可以為操作增加時間。

## 縮短部署時間的方法
<a name="ways-to-shorten-deployment-time"></a>
+ **使用快速模式進行開發反覆運算。**快速模式會在 CloudFormation 套用資源組態時立即完成堆疊操作，而資源會在背景中繼續就緒。如需詳細資訊，請參閱[快速模式](cloudformation-express-mode.md)。
+ **依資源變更的頻率分組資源。**將需要更長的時間才能就緒的資源，例如資料庫，放置在與您經常更新的資源分開的堆疊中。更新經常變更的堆疊，則不包含執行時間較長的資源。
+ **移除您不需要的相依性。**`DependsOn` 只有在資源必須等待另一個資源時宣告。較少的相依性可讓 CloudFormation 平行佈建更多資源。
+ **只有在您需要時才參考輸出中的資源屬性。**參考資源屬性的輸出可以擴展堆疊操作，直到這些值可用為止。

## 相關資源
<a name="stack-deployment-time-related-resources"></a>
+ [CloudFormation 如何運作](cloudformation-overview.md)
+ [快速模式](cloudformation-express-mode.md)
+ [透過變更集更新 CloudFormation 堆疊](using-cfn-updating-stacks-changesets.md)