View a markdown version of this page

Express モードで AWS CloudFormation スタックをより迅速にデプロイする - AWS CloudFormation

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-name my-stack \ --template-body file://my-template.yaml \ --deployment-config '{"mode": "EXPRESS"}'
Express モードでスタックを更新する

次のコマンドは、Express モードを使用してスタックを更新します。

aws cloudformation update-stack --stack-name my-stack \ --template-body file://my-template.yaml \ --deployment-config '{"mode": "EXPRESS"}'
Express モードでスタックを削除する

次のコマンドは、Express モードを使用してスタックを削除します。

aws cloudformation delete-stack --stack-name my-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 = truesamconfig.toml ファイルに保存され、後続のデプロイで Express モードが自動的に使用されます。

Express モードが有効になっている場合、AWS SAM CLI はデプロイ設定を CloudFormation に渡します。--disable-rollback フラグは、デプロイ設定内のロールバック動作を制御します。

コンソールで Express モードを使用する

CloudFormation コンソールでスタックを作成または更新するときは、[スタックオプションの設定] ステップで Express モードを有効にできます。[デプロイオプション] で、デプロイモードに [Express] を選択します。

変更セットで Express モードを使用する

変更セットの作成時にデプロイ設定を指定することで、変更セットで Express モードを使用できます。

aws cloudformation create-change-set --stack-name my-stack \ --change-set-name my-change-set \ --template-body file://my-template.yaml \ --deployment-config '{"mode": "EXPRESS"}'

変更セットを実行すると、CloudFormation は変更セットの作成時に指定された Express モードのデプロイ設定を適用します。

Express モードでのロールバック動作

Express モードを使用すると、CloudFormation はデフォルトでロールバックを無効にします。リソースオペレーションが失敗した場合、CloudFormation は自動的に変更をロールバックしません。

Express モードの使用時にロールバックを再度有効にするには、--deployment-config パラメータで disableRollbackfalse に設定します。

aws cloudformation create-stack --stack-name my-stack \ --template-body file://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::CustomResourceCustom::* リソースを含む) は、デフォルトの動作に従います。Express モードであっても、CloudFormation は、カスタムリソースがレスポンスシグナルを送信した後、オペレーションが完了したと見なします。低速のカスタムリソースまたはスタックするカスタムリソースによって高速イテレーションワークフローでの遅延が発生しないようにするには、ServiceTimeout プロパティで最大待機時間を設定します。詳細については、「応答タイムアウト」を参照してください。

AWS CDK ホットスワップデプロイとの比較

Express モードと AWS CDK ホットスワップデプロイの比較を次の表に示します。

機能 Express モード AWS CDK ホットスワップ
デプロイメカニズム すべてのリソースオペレーションに CloudFormation を使用します CloudFormation をバイパスし、サービス API を直接呼び出します
テンプレートの互換性 既存のすべての CloudFormation テンプレートで動作します。 サポートされるリソースタイプのセットが制限されています
スタックの状態 スタックの状態はテンプレートとの一貫性を維持します スタックの状態がテンプレートからドリフトする可能性があります
ロールバックのサポート ロールバックがサポートされます (デフォルトでは無効) ロールバックはサポートされません
リソースカバレッジ すべてのAll CloudFormation リソースタイプ 制限されたリソースタイプ (AWS Lambda、Amazon ECS、AWS Step Functions など)
推奨用途 開発ワークフローとイテレーションワークフロー サポートされているリソースを含む開発ワークフローのみ