Express モードで AWS CloudFormation スタックをより迅速にデプロイする
CloudFormation の Express モードでは、リソースが完全に安定するのを待つことなく、CloudFormation がリソース設定を適用するとすぐにスタックオペレーションを完了できます。Express モードを使用すると、反復型開発ワークフローでスタックの作成、更新、削除を大幅に高速化できます。
Express モードは、既存のすべての CloudFormation テンプレートで動作します。Express モードを使用するためにテンプレートを変更する必要はありません。
トピック
Express モードを使用するとき
リソースが完全に安定するのを待つよりも速度が重要な開発ワークフローとイテレーションワークフローには、Express モードを使用します。次の場合に Express モードを使用します。
-
開発中にテンプレートの変更を反復処理する場合。
-
リソース設定が有効かどうかについて、より迅速なフィードバックが必要な場合。
-
続行する前にリソースが完全に動作するのを待つ必要がない場合。
デプロイが完了したと見なされる前に、リソースが完全に安定し、運用されていることを確認する必要がある本番環境のデプロイでは、デフォルトのデプロイモードを使用します。
Express モードの仕組み
デフォルトのデプロイモードでは、CloudFormation は各リソースが完全に安定した状態になるまで待機してから、リソースの完了を報告します。例えば、Amazon EC2 インスタンスを作成すると、CloudFormation はインスタンスが running 状態になるまで待機します。
Express モードでは、CloudFormation は、リソースを作成、更新、または削除するための API コールが成功するとすぐにリソースオペレーションが完了したと見なします。ほとんどの場合、CloudFormation はリソースが最終的な運用状態になるまで待機しません。
つまり、Express モードのスタックオペレーションが完了した後は次のようになります。
-
リソースがまだ変更を初期化または伝播している可能性があります。
-
リソースがまだトラフィックを処理または接続を受け入れる準備ができていない可能性があります。
-
削除オペレーションがまだ進行中である可能性があります。
CloudFormation が Express モードで依存関係を処理する方法
Express モードは、テンプレートで定義されたリソースの依存関係を尊重します。リソースが別のリソースの ID または属性を参照する場合 (Ref または Fn::GetAtt 経由)、CloudFormation は、依存リソースを開始する前に、参照されたリソースの設定が適用されていることを確認します。参照されたリソースの準備が整っていないために依存リソースで一時的な障害が発生した場合、CloudFormation はオペレーションを再試行します。
相互に依存関係のないリソースは、並行して続行できます。
Express モードでは、リソースの依存関係の順序は変更されません。スタックオペレーションが完了を報告すると変更されます。
Express モードの開始方法
Express モードは、AWS Command Line Interface (AWS CLI)、AWS Cloud Development Kit (AWS CDK) (AWS CDK)、CloudFo rmation コンソール、および変更セットで使用できます。以下のセクションでは、それぞれの方法で Express モードを有効にする方法について説明します。
AWS CLI で Express モードを使用する
AWS CLI で Express モードを使用するには、スタックオペレーションコマンドに --deployment-config パラメータを追加します。
Express モードでスタックを作成する
次のコマンドは、Express モードを使用してスタックを作成します。
aws cloudformation create-stack --stack-namemy-stack\ --template-bodyfile://my-template.yaml\ --deployment-config '{"mode": "EXPRESS"}'
Express モードでスタックを更新する
次のコマンドは、Express モードを使用してスタックを更新します。
aws cloudformation update-stack --stack-namemy-stack\ --template-bodyfile://my-template.yaml\ --deployment-config '{"mode": "EXPRESS"}'
Express モードでスタックを削除する
次のコマンドは、Express モードを使用してスタックを削除します。
aws cloudformation delete-stack --stack-namemy-stack\ --deployment-config '{"mode": "EXPRESS"}'
AWS CDK で Express モードを使用する
AWS Cloud Development Kit (AWS CDK) (AWS CDK) で Express モードを使用するには、cdk deploy コマンドで --express フラグを使用します。
cdk deploy --express
AWS SAM で Express モードを使用する
AWS SAM CLI で Express モードを使用するには、デプロイまたは同期コマンドに --express フラグを追加します。
sam deploy --express
sam sync --express
プロジェクト設定で設定を保持するには、--save-params を使用します。
sam deploy --express --save-params
express = true が samconfig.toml ファイルに保存され、後続のデプロイで Express モードが自動的に使用されます。
Express モードが有効になっている場合、AWS SAM CLI はデプロイ設定を CloudFormation に渡します。--disable-rollback フラグは、デプロイ設定内のロールバック動作を制御します。
コンソールで Express モードを使用する
CloudFormation コンソールでスタックを作成または更新するときは、[スタックオプションの設定] ステップで Express モードを有効にできます。[デプロイオプション] で、デプロイモードに [Express] を選択します。
変更セットで Express モードを使用する
変更セットの作成時にデプロイ設定を指定することで、変更セットで Express モードを使用できます。
aws cloudformation create-change-set --stack-namemy-stack\ --change-set-namemy-change-set\ --template-bodyfile://my-template.yaml\ --deployment-config '{"mode": "EXPRESS"}'
変更セットを実行すると、CloudFormation は変更セットの作成時に指定された Express モードのデプロイ設定を適用します。
Express モードでのロールバック動作
Express モードを使用すると、CloudFormation はデフォルトでロールバックを無効にします。リソースオペレーションが失敗した場合、CloudFormation は自動的に変更をロールバックしません。
Express モードの使用時にロールバックを再度有効にするには、--deployment-config パラメータで disableRollback を false に設定します。
aws cloudformation create-stack --stack-namemy-stack\ --template-bodyfile://my-template.yaml\ --deployment-config '{"mode": "EXPRESS", "disableRollback": false}'
Express モードとネストされたスタック
親スタックで Express モードを使用すると、設定は階層内のすべてのネストされたスタックに伝播されます。個々のネストされたスタックに Express モードを個別に指定する必要はありません。ルートスタックとそのネストされたスタック内のすべてのリソースは、設定が適用されるとすぐに完了します。
リソースの準備状況に関する考慮事項
Express モードは、リソースが完全に安定した状態になる前にリソースオペレーションを完了するため、リソースがトラフィックに完全に対応するため、またはマルチリージョン伝播を完了するための追加の時間が必要になる場合があります。次の表は、さまざまなリソースタイプの例を使用して予想されるリソースの動作の種類を示しています。ここに示すのは一例であり、サポートされているリソースの完全なリストを示すものではありません。
| リソースタイプ | 運用 | 準備状況 |
|---|---|---|
| Amazon CloudFront ディストリビューション | 作成/更新 | 設定が適用された後、ディストリビューションがグローバルにデプロイされるまでに数分かかる場合があります。 |
| Amazon EC2 インスタンス | 作成 | スタックオペレーションの完了後も、インスタンスは初期化中 (ユーザーデータスクリプトの実行、ステータスチェック) である可能性があります。 |
| AWS Lambda 関数 | 削除 | 削除オペレーションが完了を報告した後も、関数リソースがクリーンアップ中である可能性があります。 |
| Amazon Elastic Container Service (Amazon ECS) サービス | 作成/更新 | スタックオペレーションの完了後も、サービスタスクがまだ起動中であるか定常状態に達しようとしている可能性があります。 |
サポートされていない機能と制限事項
次の機能とサービスは、Express モードではサポートされていません。
- CloudFormation StackSets
-
CloudFormation は、StackSets オペレーションでの Express モードをサポートしていません。
次のリソースには、Express モードでの特定の動作があります。
- カスタムリソース
-
カスタムリソース (
AWS::CloudFormation::CustomResourceとCustom::*リソースを含む) は、デフォルトの動作に従います。Express モードであっても、CloudFormation は、カスタムリソースがレスポンスシグナルを送信した後、オペレーションが完了したと見なします。低速のカスタムリソースまたはスタックするカスタムリソースによって高速イテレーションワークフローでの遅延が発生しないようにするには、ServiceTimeoutプロパティで最大待機時間を設定します。詳細については、「応答タイムアウト」を参照してください。
AWS CDK ホットスワップデプロイとの比較
Express モードと AWS CDK ホットスワップデプロイの比較を次の表に示します。
| 機能 | Express モード | AWS CDK ホットスワップ |
|---|---|---|
| デプロイメカニズム | すべてのリソースオペレーションに CloudFormation を使用します | CloudFormation をバイパスし、サービス API を直接呼び出します |
| テンプレートの互換性 | 既存のすべての CloudFormation テンプレートで動作します。 | サポートされるリソースタイプのセットが制限されています |
| スタックの状態 | スタックの状態はテンプレートとの一貫性を維持します | スタックの状態がテンプレートからドリフトする可能性があります |
| ロールバックのサポート | ロールバックがサポートされます (デフォルトでは無効) | ロールバックはサポートされません |
| リソースカバレッジ | すべてのAll CloudFormation リソースタイプ | 制限されたリソースタイプ (AWS Lambda、Amazon ECS、AWS Step Functions など) |
| 推奨用途 | 開発ワークフローとイテレーションワークフロー | サポートされているリソースを含む開発ワークフローのみ |
関連リソース
-
「AWS CloudFormation API リファレンス」の 「CreateStack」。