View a markdown version of this page

UpdatePolicy 属性 - AWS CloudFormation

これは新しい CloudFormation テンプレートリファレンスガイドです。ブックマークとリンクを更新してください。CloudFormation の開始方法については、『AWS CloudFormation ユーザーガイド』を参照してください。

UpdatePolicy 属性

UpdatePolicy 属性を使用して、スタック更新操作中に CloudFormation が特定のリソースに対する更新を処理する方法を指定します。

概要

次の説明にあるように、UpdatePolicy 属性を使用することで、以下のリソースの更新方法を制御することができます。

  • AWS::AppStream::Fleet – CloudFormation はフリートを停止および起動することができ、その結果としてフリートのインスタンスが置き換えられます。これにより、スタック更新の直後に最新の変更がすべてのインスタンスに適用されます。

  • AWS::AutoScaling::AutoScalingGroup – Auto Scaling グループでは、1 つ、または複数の更新ポリシーを使用して、CloudFormation が特定の更新を処理する方法を制御できます。これらのポリシーには以下が含まれます。

    • AutoScalingReplacingUpdate および AutoScalingRollingUpdate ポリシー – CloudFormation は、AutoScalingReplacingUpdate ポリシーを使用して Auto Scaling グループとそのインスタンスを置き換えるか、AutoScalingRollingUpdate ポリシーを使用してインスタンスのみを置き換えることができます。これらの置換オペレーションは、次の変更を 1 つ以上行ったときに発生します。

      • Auto Scaling グループの AWS::AutoScaling::LaunchConfiguration の変更。

      • Auto Scaling グループの VPCZoneIdentifier プロパティの変更。

      • Auto Scaling グループの LaunchTemplate プロパティの変更。

      • Auto Scaling グループの PlacementGroup プロパティの変更。

      • 現在の LaunchConfiguration に一致しないインスタンスを含む Auto Scaling グループの更新。

      AutoScalingReplacingUpdate ポリシーと AutoScalingRollingUpdate ポリシーの両方を指定した場合に WillReplace プロパティを true に設定すると、AutoScalingReplacingUpdate が優先されます。

    • AutoScalingInstanceRefresh ポリシー – Auto Scaling グループの特定のプロパティを変更すると、CloudFormation は Auto Scaling インスタンスの更新を実行します。AutoScalingRollingUpdate に比べると、このポリシーはインスタンスメンテナンスポリシー (launch-before-terminate を含む)、終了ポリシー、スケールイン保護、ルートボリューム置換、および追加の Amazon EC2 Auto Scaling 機能をサポートしています。同じ Auto Scaling グループで AutoScalingInstanceRefreshAutoScalingRollingUpdate の両方を指定することはできません。詳細については、「AutoScalingInstanceRefresh ポリシー」を参照してください。

    • AutoScalingScheduledAction ポリシー – このポリシーは、特定の時間にグループをスケールするアクションがスケジュールされている Auto Scaling グループが含まれるスタックを更新するときに適用されます。CloudFormation は、スタックテンプレートで明示的に変更されている場合を除き、グループの最小サイズ、最大サイズ、希望容量を変更できません。このポリシーは、スケジュールされているスケーリングアクティビティに支障をきたす可能性のある、予期しない更新を防ぐために役立ちます。

  • AWS::ElastiCache::ReplicationGroup – CloudFormation は、リソース全体を置き換えるのではなく、シャードを追加または削除することによって、レプリケーショングループのシャードを変更できます。

  • AWS::OpenSearchService::Domain および AWS::Elasticsearch::Domain (レガシー) – CloudFormation は OpenSearch Service ドメインを、リソース全体を置き換えることなく OpenSearch または Elasticsearch の新しいバージョンにアップグレードできます。

  • AWS::Lambda::Alias – CloudFormation は、エイリアスでバージョンが変更されたときに CodeDeploy デプロイを実行できます。

この後のセクションでは、各リソースタイプでサポートされる UpdatePolicy 属性の構文とプロパティを説明します。

WorkSpaces Applications の更新ポリシー

更新前に WorkSpaces Applications フリートを停止し、更新後に再起動するには、WorkSpaces Applications 更新ポリシーを使用します。

構文

JSON

{ "UpdatePolicy": { "StopBeforeUpdate": { "Type": "Boolean" }, "StartAfterUpdate": { "Type": "Boolean" } } }

YAML

UpdatePolicy: StopBeforeUpdate: Type: Boolean StartAfterUpdate: Type: Boolean
StopBeforeUpdate

更新前に指定されたフリートを停止します。

必須: いいえ

StartAfterUpdate

更新後に指定されたフリートを開始します。

必須: いいえ

AutoScalingReplacingUpdate ポリシー

Auto Scaling グループと、それに含まれるインスタンスを置き換えるには、AutoScalingReplacingUpdate ポリシーを使用します。

更新を実行する前に、新旧両方の Auto Scaling グループに Amazon EC2 キャパシティーが十分あることを確認してください。

構文

JSON

"UpdatePolicy" : { "AutoScalingReplacingUpdate" : { "WillReplace" : Boolean } }

YAML

UpdatePolicy: AutoScalingReplacingUpdate: WillReplace: Boolean

プロパティ

WillReplace

Auto Scaling グループとそこに含まれるインスタンスが更新時に置き換えられるかどうかを指定します。置き換えられる場合、CloudFormation は新しいグループの作成が完了するまで古いグループを保持します。更新に失敗した場合、CloudFormation は古い Auto Scaling グループにロールバックし、新しい Auto Scaling グループを削除できます。

CloudFormation は、新しいグループを作成するとき、インスタンスをデタッチすることもアタッチすることもありません。新しい Auto Scaling グループを正常に作成すると、CloudFormation はクリーンアッププロセス中に古い Auto Scaling グループを削除します。

WillReplace パラメーターを設定するときは、必ず一致する CreationPolicy 属性 を指定してください。インスタンスの最小数 (MinSuccessfulInstancesPercent プロパティで指定) が Timeout 期間 (CreationPolicy 属性で指定) 内に成功シグナルを送信しない場合、置き換え更新は失敗し、CloudFormation が古い Auto Scaling グループにロールバックします。

型: ブール

必須: いいえ

AutoScalingRollingUpdate ポリシー

スケーリングアクティビティが古いインスタンスを新しいインスタンスに徐々に置き換えるのを待つ代わりに、Auto Scaling グループ内のインスタンスのローリング更新を実行するには、AutoScalingRollingUpdate ポリシーを使用します。このポリシーは、CloudFormation が Auto Scaling グループ内のインスタンスをバッチ単位で置き換えるか、リソース全体を置き換えずにすべてのインスタンスを一度に置き換えるかを指定する柔軟性を提供します。

AutoScalingRollingUpdate ポリシーを使用する際に考慮すべきこと:

警告

ローリング更新では、Auto Scaling グループに設定されているインスタンスメンテナンスポリシーは適用されません。ローリング更新中、正常な容量はグループに設定された MinHealthyPercentage を下回る可能性があります。MaxHealthyPercentage の値に関係なく、CloudFormation は既存のインスタンスを終了する前に新しいインスタンスを起動しません。スタックの更新中にインスタンスメンテナンスポリシーを保持するには、AutoScalingInstanceRefresh ポリシー を使用します。

  • CloudFormation が更新をロールバックするときは、現行のスタック更新の前にテンプレートで指定された UpdatePolicy 設定を使用します。例えば、UpdatePolicyMaxBatchSize を 1 から 10 に変更してスタック更新を実行したら、更新が失敗したとします。CloudFormation は、ロールバックするときにの最大バッチサイズとして、10 ではなく 1 を使用します。このようなシナリオを回避するには、ローリング更新を開始すると思われる Auto Scaling グループへの更新を行う前に、個別の更新で UpdatePolicy を変更しておきます。

  • CloudFormation では、ローリング更新に干渉して失敗する可能性のある Amazon EC2 Auto Scaling プロセスを一時的に停止する SuspendProcesses プロパティを指定することをお勧めします。詳細については、「How can I update my Auto Scaling group when I update my CloudFormation stack?」を参照してください。

    または、AutoScalingInstanceRefresh ポリシーはスタックの更新中にすべての Auto Scaling グループプロセスをサポートしているため、停止する必要はありません。ヘルスチェックや AZ の再調整などのプロセスをアクティブに保つ必要がある場合は、代わりに AutoScalingInstanceRefresh を使用します。詳細については、「AutoScalingInstanceRefresh ポリシー」を参照してください。

  • CloudFormation は、インスタンスの起動時または終了時における Amazon EC2 Auto Scaling ライフサイクルフックの使用をサポートしています。これは、インスタンスが次の状態に移行する前に、カスタムアクションを実行する時間を提供します。新しいインスタンスが InService 状態になることを確実にするには、カスタムアクションが終了するときに、ライフサイクルフックを CONTINUE 結果で完了させます。応答を受け取っておらず、ライフサイクルフックがタイムアウトする場合は、デフォルトで、インスタンスの起動が失敗し、中止されたと見なされます。InService 状態になるインスタンスがない場合、ローリング更新は最終的に失敗します。

  • その他の Amazon EC2 Auto Scaling 機能 (終了ポリシーやスケールイン保護など) を CloudFormation ローリング更新で使用することはできません。次のいずれかの機能が必要なときは、AutoScalingInstanceRefresh を使用します。詳細については、「AutoScalingInstanceRefresh ポリシー」を参照してください。

  • AutoScalingRollingUpdate ポリシーを使用してプレイスメントグループ設定を削除すると、そのプレイスメントグループは Auto Scaling グループと CloudFormation テンプレートからも削除されます。また、これにより段階的更新がトリガーされるため、新しいインスタンスはプレイスメントグループで起動されません。

構文

JSON

"UpdatePolicy" : { "AutoScalingRollingUpdate" : { "MaxBatchSize" : Integer, "MinActiveInstancesPercent" : Integer, "MinInstancesInService" : Integer, "MinSuccessfulInstancesPercent" : Integer, "PauseTime" : String, "SuspendProcesses" : [ List of processes ], "WaitOnResourceSignals" : Boolean } }

プロパティ

MaxBatchSize

同時置換が可能なインスタンスの最大数を指定します。

デフォルト: 1

最大: 100

タイプ: 整数

必須: いいえ

MinActiveInstancesPercent

更新を成功させるため、Auto Scaling グループのインスタンスのうち、ローリング更新中にそのグループが希望するキャパシティに対して InService 状態にあるインスタンスの割合を指定します。値は 0~100 の間で指定できます。CloudFormation は、10% 単位で四捨五入されます。例えば、InService の最小パーセンテージを 50 として 5 つのインスタンスを更新する場合、少なくとも 3 つのインスタンスが InService 状態になる必要があります。インスタンスが規定の 1 時間で InService 状態に移行しなかった場合、CloudFormation は、そのインスタンスは更新されなかったものと判断します。

UpdatePolicyMinActiveInstancesPercent を設定すると、AWS::AutoScaling::AutoScalingGroup リソースの DesiredCapacity プロパティがその Auto Scaling グループの現在の希望キャパシティよりも大きい場合に起動するインスタンスにも影響します。

デフォルト: 100

タイプ: 整数

必須: いいえ

MinInstancesInService

Auto Scaling が古いインスタンスを更新している間、CloudFormation グループ内で使用中となる必要があるインスタンスの最小数を指定します。この値は Auto Scaling グループの MaxSize よりも小さくする必要があります。

警告

MinInstancesInService プロパティの値を、Auto Scaling グループの MinSize 以上に設定することをお勧めします。これにより、0 個のインスタンスがカスタマートラフィックを処理するため、ローリング更新中の潜在的な可用性の問題が回避されます。

デフォルト: 0

タイプ: 整数

必須: いいえ

MinSuccessfulInstancesPercent

更新を成功させるために成功のシグナルを送信する必要があるインスタンスの、 Auto Scaling ローリング更新における割合を指定します。値は 0~100 の間で指定できます。CloudFormation は、10% 単位で四捨五入されます。たとえば、成功の最小割合が 50 の 5 つのインスタンスを更新する場合、3 つのインスタンスが成功のシグナルを送信する必要があります。PauseTime プロパティで指定された時間内にインスタンスから信号が送信されない場合、CloudFormation ではインスタンスが更新されなかったものとみなされます。

MinSuccessfulInstancesPercent プロパティの値を 0 より大きい値に設定することをお勧めします。MinSuccessfulInstancesPercent プロパティが 0 に設定されている場合、CloudFormation はキャパシティインスタンスの 0% が InService 状態になるまで待機します。スタックテンプレート内で定義されている後続のリソースに移動するため、MinSuccessfulInstancesPercent は Auto Scaling グループの状態が UPDATE_COMPLETE とみなされる前に直ちに返されます。CloudFormation テンプレートで他の Auto Scaling グループが定義されている場合、これらのグループも同時に更新されます。すべての Auto Scaling グループが一度にデプロイされ、キャパシティーインスタンスの 0% が InService 状態の場合、お客様のトラフィックを処理するインスタンスが 0 になることから、可用性上の問題が発生します。

デフォルト: 100

タイプ: 整数

必須: いいえ

PauseTime

インスタンスにソフトウェアアプリケーションを起動する時間を与えるために、それらのインスタンスのバッチに変更を加えた後に CloudFormation が一時停止する時間の長さ。

PauseTime は、ISO8601 期間形式 (PT#H#M#S の形式。それぞれの # は時間数、分数、秒数を示します) で指定します。最大 PauseTime は 1 時間 (PT1H) です。

警告

WaitOnResourceSignalstrue に設定されている場合、PauseTime はタイムアウト値として機能します。これは、AWS::AutoScaling::AutoScalingGroup リソースの DesiredCapacity プロパティを増やすことで、CloudFormation がローリング更新中に置き換えられるインスタンスと追加される新しいインスタンスから必要な数の有効なシグナルを受信するまで待機する最大時間を決定します。CloudFormation が予想されるシグナルを受信する前に PauseTime を超えた場合、更新は失敗します。最良の結果を得るには、アプリケーションが起動する十分な時間を確保できる期間を指定します。更新をロールバックする必要がある場合、PauseTime が短いとロールバックに失敗する可能性があります。

デフォルト: WaitOnResourceSignals プロパティが true に設定されたときの PT5M (5 分間)。それ以外の場合、デフォルト値は設定されません。

タイプ: 文字列

必須: いいえ

SuspendProcesses

スタックの更新中に Auto Scaling プロセスが停止されるように指定します。プロセスを停止すると、Auto Scaling がスタックの更新に干渉しなくなります。例えば、Amazon EC2 Auto Scaling がアラームに関連付けられたスケーリングポリシーを実行しないようにアラームを停止することができます。有効な値については、「Amazon EC2 Auto Scaling ユーザーガイド」の「プロセスのタイプ」を参照してください。

デフォルト: 指定されていません

タイプ: Auto Scaling プロセスのリスト

必須: いいえ

WaitOnResourceSignals

CloudFormation が新しいインスタンスからの成功シグナルを待ってから更新を続行するかどうかを指定します。CloudFormation は、指定された PauseTime 期間成功シグナルを待機します。

Auto Scaling グループにシグナルを送信するには、cfn-signal ヘルパースクリプトを使用します。Elastic Load Balancing に関連付けられている Auto Scaling グループの場合、cfn-init ヘルパースクリプトを使用して、成功のシグナリングを行う前にインスタンスが正常であることを確認するためにヘルスチェックを追加することを検討してください。例については、GitHub リポジトリにある Amazon EC2 Auto Scaling ローリングアップデートのサンプルテンプレートの verify_instance_health コマンドを参照してください。

デフォルト: false

型: ブール

必須: 条件的。MinSuccessfulInstancesPercent プロパティを指定する場合は、WaitOnResourceSignals プロパティを true に設定する必要があります。

AutoScalingInstanceRefresh ポリシー

Auto Scaling インスタンスの更新を実行することによって Auto Scaling グループのインスタンスを更新するには、AutoScalingInstanceRefresh ポリシーを使用します。インスタンスの更新機能の完全なリストについては、「Amazon EC2 Auto Scaling ユーザーガイド」の「Use an instance refresh to update instances in an Auto Scaling group」を参照してください。

CloudFormation は、AWS::AutoScaling::AutoScalingGroup リソースの次のいずれかのプロパティを更新する場合にのみインスタンスの更新を実行します。

  • LaunchTemplate

  • MixedInstancesPolicy

  • VPCZoneIdentifier

  • AvailabilityZones

  • AvailabilityZoneIds

  • PlacementGroup

AutoScalingInstanceRefresh ポリシーを使用する場合は、次の点を考慮してください。

  • 同じ Auto Scaling グループで AutoScalingInstanceRefreshAutoScalingRollingUpdate の両方のポリシーを指定することはできません。指定するとスタックの更新が失敗します。

  • CloudFormation スタックのロールバックは、AutoScalingInstanceRefresh のロールバックメカニズムです。インスタンスの更新が失敗すると、CloudFormation はスタックをロールバックし、新しいインスタンスの更新を開始して、グループを以前の設定に復元します。CloudFormation が既に開始しているインスタンスの更新で Auto Scaling RollbackInstanceRefresh API オペレーションを使用することはできません。更新を元に戻すには、CancelInstanceRefresh API を使用するか、スタックの更新をロールバックします。

  • Auto Scaling グループは、一度に 1 つのインスタンス更新のみを実行できます。AutoScalingInstanceRefresh ポリシーを使用してスタックの更新を開始するときに、ユーザーが開始したインスタンスの更新が進行中の場合、スタックの更新が失敗する可能性があります。

  • インスタンスの更新 StrategyReplaceRootVolume に設定すると、起動テンプレートまたは混合インスタンスポリシー内の ImageId への変更のみが許可されます。その他のプロパティを変更すると、スタックの更新が失敗する可能性があります。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Replace root volumes during instance refresh」を参照してください。

  • スタックの更新の各方向 (フォワードとロールバック) は、36 時間の CloudFormation リソースタイムアウトによって制限されます。

  • 長時間実行するインスタンスの更新は、CloudFormation が Auto Scaling の呼び出しに使用する一時的な認証情報の有効期間を超える可能性があります。これを回避するには、スタックでサービスロールを設定します。詳細については、「 CloudFormation サービスロール」を参照してください。

注記

インスタンスの更新は、cfn-signal ヘルパースクリプトをサポートしていません。インスタンスの更新中にインスタンスの準備状況を確認する方法については、「インスタンスの更新中にインスタンスの準備状況を確認する」を参照してください。

構文

JSON

"UpdatePolicy" : { "AutoScalingInstanceRefresh" : { "Strategy" : String, "Preferences" : { "AlarmSpecification" : { "Alarms" : [ List of alarm names ] }, "BakeTime" : Integer, "CheckpointDelay" : Integer, "CheckpointPercentages" : [ List of integers ], "InstanceWarmup" : Integer, "MaxHealthyPercentage" : Integer, "MinHealthyPercentage" : Integer, "ScaleInProtectedInstances" : String, "SkipMatching" : Boolean, "StandbyInstances" : String } } }

YAML

UpdatePolicy: AutoScalingInstanceRefresh: Strategy: String Preferences: AlarmSpecification: Alarms: - List of alarm names BakeTime: Integer CheckpointDelay: Integer CheckpointPercentages: - List of integers InstanceWarmup: Integer MaxHealthyPercentage: Integer MinHealthyPercentage: Integer ScaleInProtectedInstances: String SkipMatching: Boolean StandbyInstances: String

プロパティ

Strategy

インスタンスの更新に使用する戦略。有効な値は、Rolling および ReplaceRootVolume です。ReplaceRootVolume 戦略の詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Replace root volumes during instance refresh」を参照してください。

: 文字列

必須: はい

Preferences

インスタンスの更新の設定を行います。インスタンスのウォームアップ時間、最小正常率と最大正常率、インスタンスが Standby 状態であるかスケールインから保護されている場合に Amazon EC2 Auto Scaling が使用する動作が含まれます。追加の機能を有効にすることもできます。

  • チェックポイント

  • CloudWatch アラーム

  • スキップマッチング

  • ベイク時間

: 設定

必須: いいえ

詳細設定

AlarmSpecification

CloudWatch アラーム仕様。CloudWatch アラームを使用すると、インスタンスの更新中に問題を特定し、アラームのしきい値に達した場合にスタックをロールバックできます。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Start an instance refresh with auto rollback」を参照してください。

: AlarmSpecification

必須: いいえ

BakeTime

インスタンスの更新が完了とみなされるまで、インスタンスの更新の終了時に待機する時間 (秒)。

デフォルト: 0

最小: 0

最大: 172800

タイプ: 整数

必須: いいえ

CheckpointDelay

チェックポイントの後に続行する前に待機する時間 (秒単位)。CheckpointPercentages に値を指定し、CheckpointDelay には指定しない場合、CheckpointDelay はデフォルトで 3600 (1 時間) になります。

最小: 0

最大: 172800

タイプ: 整数

必須: いいえ

CheckpointPercentages

各チェックポイントのしきい値 (昇順)。それぞれの名前は一意である必要があります。Auto Scaling グループ内のすべてのインスタンスを置き換えるには、配列の最後の数値が 100 である必要があります。使用例については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Add checkpoints to an instance refresh」を参照してください。

: 整数のリスト

必須: いいえ

InstanceWarmup

インスタンスの更新を待機してから、新しいインスタンスが InService 状態になった後、次のインスタンスの置き換えに進むまでの時間 (秒単位)。

InstanceWarmup を指定しない場合、Auto Scaling は DefaultInstanceWarmup プロパティの値を使用します。すべてのユースケースで DefaultInstanceWarmup の値を設定することをお勧めします。

どちらのプロパティにも値を指定しない場合、Auto Scaling は HealthCheckGracePeriod プロパティの値を使用します。

タイプ: 整数

必須: いいえ

MaxHealthyPercentage

インスタンスを置換するときにワークロードをサポートするための正常で稼働中の状態、または保留中のグループの最大の割合を指定します。この値は、Auto Scaling グループの望ましいキャパシティに対するパーセント値で表されます。MaxHealthyPercentage を指定する場合、MinHealthyPercentage も指定する必要があります。その差は 100 以下である必要があります。範囲を大きくすると、同時に置き換えることができるインスタンスの数が増えます。

デフォルト: Auto Scaling グループのインスタンスメンテナンスポリシーで設定された値 (定義されている場合)。それ以外の場合、StrategyRolling の場合は 110、または StrategyReplaceRootVolume の場合は 100

最小: 100

最大: 200

タイプ: 整数

必須: いいえ

MinHealthyPercentage

ワークロードをサポートしてオペレーションを続行するために稼働状態を維持し、正常で使用準備ができているグループの最小割合を指定します。この値は、Auto Scaling グループの望ましいキャパシティに対するパーセント値で表されます。

デフォルト: Auto Scaling グループのインスタンスメンテナンスポリシーで設定された値 (定義されている場合)。それ以外の場合、StrategyRolling の場合は 100、または StrategyReplaceRootVolume の場合は 90

最小: 0

最大: 100

タイプ: 整数

必須: いいえ

ScaleInProtectedInstances

スケールインから保護されているインスタンスが見つかった場合に Amazon EC2 Auto Scaling が使用する動作を選択します。有効な値を次に示します。

  • 更新: Amazon EC2 Auto Scaling は、スケールインから保護されているインスタンスを置き換えます。

  • 無視:Amazon EC2 Auto Scaling は、スケールインから保護されているインスタンスを無視し、保護されていないインスタンスの置き換えを続行します。

  • 待機: Amazon EC2 Auto Scaling は、ユーザーがスケールイン保護を削除するまで 1 時間待機します。そうでない場合、インスタンスの更新は失敗します。

デフォルト: Wait

: 文字列

必須: いいえ

SkipMatching

スキップマッチングが有効化されているかどうかを示します。有効化されている場合 (true)、Auto Scaling はスタックテンプレートで指定された設定に一致するインスタンスの置き換えをスキップします。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Use an instance refresh with skip matching」を参照してください。

デフォルト: true

型: ブール

必須: いいえ

StandbyInstances

Standby 状態のインスタンスが見つかった場合に Amazon EC2 Auto Scaling が使用する動作を選択します。有効な値を次に示します。

  • 終了: Amazon EC2 Auto Scaling は、Standby にあるインスタンスを終了します。

  • 無視: Amazon EC2 Auto Scaling は、Standby 状態のインスタンスを無視し、InService 状態のインスタンスの置き換えを続行します。

  • 待機: Amazon EC2 Auto Scaling は、ユーザーがインスタンスをサービスに戻すまで 1 時間待機します。そうでない場合、インスタンスの更新は失敗します。

デフォルト: Wait

: 文字列

必須: いいえ

AlarmSpecification

Alarms

インスタンスの更新をモニタリングする 1 つ以上の CloudWatch アラームの名前。最大 10 つのアラームを指定できます。

: 文字列のリスト

必須: いいえ

インスタンスの更新中にインスタンスの準備状況を確認する

デフォルトでは、新しく起動されたインスタンスが Auto Scaling グループで設定されているヘルスチェックに合格すると、インスタンスの更新は自動的に次のインスタンスセットに進みます。これには、Amazon EC2 ヘルスチェックと Elastic Load Balancing ヘルスチェック (設定されている場合) が含まれます。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Auto Scaling グループ内のインスタンスのヘルスチェック」を参照してください。

インスタンスが InService に移行する前にアプリケーションのブートストラップを必要とする場合は、Auto Scaling グループに autoscaling:EC2_INSTANCE_LAUNCHING ライフサイクルフックを追加します。インスタンスの更新は、ライフサイクルフックが完了するのを待ってから、次のインスタンスセットに進みます。CompleteLifecycleAction API を呼び出してフックを完了します。この呼び出しは、起動テンプレートのユーザーデータスクリプトを使用してインスタンス自体から行うか、外部サービスから行うことができます。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Amazon EC2 Auto Scaling lifecycle hooks」と「Complete a lifecycle action in an Auto Scaling group」を参照してください。

AutoScalingScheduledAction ポリシー

スケジュールされたアクションが AWS::AutoScaling::AutoScalingGroup リソースに関連付けられているときに CloudFormation が MinSizeMaxSizeDesiredCapacity の各プロパティの更新を処理する方法を指定するには、AutoScalingScheduledAction ポリシーを使用します。

スケジュールされたアクションを使用すると、Auto Scaling グループのグループサイズプロパティはいつでも変化する可能性があります。Auto Scaling グループやスケジュールされたアクションを含むスタックが更新されると、スケジュールされたアクションが有効になっている場合でも、CloudFormation は Auto Scaling グループのグループサイズのプロパティ値を、テンプレート内の AWS::AutoScaling::AutoScalingGroup リソースで定義されている値に設定します。

スケジュールされたアクションが有効なときに CloudFormation がどのグループサイズプロパティ値も変更しないようにするには、AutoScalingScheduledAction 更新ポリシーを使用して IgnoreUnmodifiedGroupSizePropertiestrue に設定し、テンプレートで値を変更しない限り、CloudFormation が MinSizeMaxSize、または DesiredCapacity プロパティを変更しないようにします。

構文

JSON

"UpdatePolicy" : { "AutoScalingScheduledAction" : { "IgnoreUnmodifiedGroupSizeProperties" : Boolean } }

プロパティ

IgnoreUnmodifiedGroupSizeProperties

true の場合、CloudFormation はスタックの更新中に、現在の Auto Scaling グループと、テンプレートの AWS::AutoScaling::AutoScalingGroup リソースに記述されている Auto Scaling グループとの間のグループサイズプロパティの違いを無視します。テンプレートのグループサイズプロパティ値のいずれかを変更した場合、CloudFormation は変更された値を使用して Auto Scaling グループを更新します。

注記

このプロパティは、スタックのロールバック中に無視されます。

デフォルト: false

型: ブール

必須: いいえ

UseOnlineResharding ポリシー

AWS::ElastiCache::ReplicationGroup リソース全体を置き換えるのではなく、シャードを追加または削除してレプリケーションを変更するには、UseOnlineResharding 更新ポリシーを使用します。

UseOnlineReshardingtrue に設定されている場合、AWS::ElastiCache::ReplicationGroup リソースの NumNodeGroups プロパティと NodeGroupConfiguration プロパティを更新でき、CloudFormation は中断することなく、これらのプロパティを更新します。UseOnlineReshardingfalse に設定されている場合、または指定しない場合、NumNodeGroups プロパティおよび NodeGroupConfiguration プロパティを更新すると、CloudFormation が AWS::ElastiCache::ReplicationGroup リソース全体を置き換えます。

UseOnlineResharding 更新ポリシーにはプロパティがありません。

UseOnlineResharding 更新ポリシーを true に設定するときは、次の点を考慮します。

  • 指定されたスタック更新オペレーションの唯一の更新として、NodeGroupConfiguration プロパティおよび NumNodeGroups プロパティの更新を実行することを強くお勧めします。

    レプリケーショングループのノードグループ構成の更新は、リソースに大きな負荷がかかります。スタックの更新が失敗した場合、CloudFormation はレプリケーショングループのノードグループ構成の変更をロールバックしません。ただし、CloudFormation は失敗した更新オペレーションの一部として変更された他のすべてのプロパティをロールバックします。

  • ノードグループを更新するためには、すべてのノードグループを特定する必要があります。

    NodeGroupConfiguration プロパティを指定した場合、CloudFormation が中断することなくノードの数を更新するために、各ノードグループ構成に対して NodeGroupId も指定する必要があります。

    レプリケーショングループの作成時に、各ノードグループの ID を指定しない場合、ElastiCache は各ノードグループの ID を自動的に生成します。中断することなくレプリケーショングループを更新するには、ElastiCache コンソール (https://console.aws.amazon.com/elasticache/)、または DescribeReplicationGroups を使用して、レプリケーショングループ内にあるすべてのノードグループの ID を取得します。次に、シャードの追加や削除を行う前に、スタックテンプレートの各ノードグループの ID を指定します。

    注記

    ベストプラクティスとして、スタックテンプレートでレプリケーショングループを作成するときに、指定した各ノードグループの ID を含めます。

    さらに、中断することなくノードの数を更新するには、各 NodeGroupConfiguration に対して PrimaryAvailabilityZoneReplicaAvailabilityZonesReplicaCount のプロパティを正確に指定する必要があります。ここでも、ElastiCache コンソール (https://console.aws.amazon.com/elasticache/) または DescribeReplicationGroups を使用して、各ノードグループの実際の値を取得して、スタックテンプレートの値と比較することができます。ノードグループのプロパティ値は、個別のスタックの更新として、またはノードグループの数を変更する同じスタックの更新の一部として更新できます。

    UseOnlineResharding 更新ポリシーを使用して中断することなくノードグループの数を更新すると、ElastiCache は指定された数のスロット間でキースペースを均等に分散します。後で更新することはできません。したがって、この方法でノードグループの数を更新した後で、各ノードグループ内の実際の値が反映されなくなるため、スタックテンプレートからそれぞれの NodeGroupConfigurationSlots プロパティに指定された値を削除する必要があります。

  • 実際のノードグループの削除結果は異なる場合があります。

    現在のノードグループの数より小さい NumNodeGroups 値を指定すると、CloudFormation は ElastiCache に指定した数のノードに到達できるように必要な数のノードグループを削除するように指示します。ただし、ElastiCache は必ずしも必要な数のノードグループを削除できるとは限りません。イベントで ElastiCache が必要な数のノードグループを削除できない場合、CloudFormation ではこれを警告するスタックイベントが生成されます。ElastiCache がいずれのノードグループも削除できない場合、CloudFormation リソースの更新は失敗します。

レプリケーショングループを変更する方法の詳細については、「Amazon ElastiCache API リファレンス」の「ModifyReplicationGroupShardConfiguration」を参照してください。

構文

JSON

"UpdatePolicy" : { "UseOnlineResharding" : Boolean }

YAML

UpdatePolicy: UseOnlineResharding: Boolean

EnableVersionUpgrade ポリシー

すべての AWS::OpenSearchService::Domain または AWS::Elasticsearch::Domain リソースを置き換えるのではなく、OpenSearch Service ドメインを OpenSearch または Elasticsearch の新しいバージョンにアップグレードする場合は、EnableVersionUpgrade 更新ポリシーを使用します。

EnableVersionUpgradetrue に設定されている場合、AWS::OpenSearchService::Domain リソースの EngineVersion プロパティ (またはレガシー AWS::Elasticsearch::Domain リソースの ElasticsearchVersion プロパティ) を更新することができます。これにより、CloudFormation が中断することなくそのプロパティを更新します。EnableVersionUpgradefalse に設定されているか、指定されていない場合、EngineVersion または ElasticsearchVersion プロパティを更新すると、CloudFormation は AWS::OpenSearchService::Domain/AWS::Elasticsearch::Domain リソース全体を置き換えます。

EnableVersionUpgrade 更新ポリシーにはプロパティがありません。

詳細については、「Amazon OpenSearch Service デベロッパーガイド」の「Amazon OpenSearch Service ドメインのアップグレード」を参照してください。

構文

JSON

"UpdatePolicy" : { "EnableVersionUpgrade" : Boolean }

YAML

UpdatePolicy: EnableVersionUpgrade: Boolean

CodeDeployLambdaAliasUpdate ポリシー

CodeDeployLambdaAliasUpdate リソースでのバージョンの変更時に CodeDeploy デプロイを実行するには、AWS::Lambda::Alias 更新ポリシーを使用します。

構文

JSON

"UpdatePolicy" : { "CodeDeployLambdaAliasUpdate" : { "AfterAllowTrafficHook" : String, "ApplicationName" : String, "BeforeAllowTrafficHook" : String, "DeploymentGroupName" : String } }

プロパティ

AfterAllowTrafficHook

トラフィックのルーティングが完了した後に実行する Lambda 関数の名前。

必須: いいえ

タイプ: 文字列

ApplicationName

CodeDeploy アプリケーションの名前。

Required: Yes

タイプ: 文字列

BeforeAllowTrafficHook

トラフィックのルーティングが開始する前に実行する Lambda 関数の名前。

必須: いいえ

タイプ: 文字列

DeploymentGroupName

CodeDeploy デプロイグループの名前。ここでは、トラフィック移行ポリシーが設定されます。

必須: はい

タイプ: 文字列

AWS::Lambda::Alias リソースの UpdatePolicy 属性を指定する例については、「Lambda エイリアスの更新ポリシー」を参照してください。

次の例では、更新グループを Auto Scaling グループに追加する方法と、メタデータの更新時に可用性を維持する方法を示します。

Auto Scaling グループに UpdatePolicy を追加します。

次の例は、更新ポリシーの追加方法を示しています。更新中、Auto Scaling グループは 2 個のインスタンスのバッチを更新し、少なくとも 1 つのインスタンスをサービスで最低 1 個のインスタンスを稼動状態にします。WaitOnResourceSignals フラグが設定されているため、Auto Scaling グループはグループに追加される新しいインスタンスを待機します。新しいインスタンスは、次のインスタンスのバッチを更新する前に、Auto Scaling グループにシグナルを送信する必要があります。

JSON

"ASG" : { "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "VPCZoneIdentifier":[ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate":{ "LaunchTemplateId":{ "Ref":"logicalName" }, "Version":{ "Fn::GetAtt":[ "logicalName", "LatestVersionNumber" ] } }, "MaxSize":"4", "MinSize":"1" }, "UpdatePolicy":{ "AutoScalingScheduledAction":{ "IgnoreUnmodifiedGroupSizeProperties":"true" }, "AutoScalingRollingUpdate":{ "MinInstancesInService":"1", "MaxBatchSize":"2", "WaitOnResourceSignals":"true", "PauseTime":"PT10M", "SuspendProcesses":[ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions", "InstanceRefresh" ] } } }

YAML

ASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '4' MinSize: '1' UpdatePolicy: AutoScalingScheduledAction: IgnoreUnmodifiedGroupSizeProperties: 'true' AutoScalingRollingUpdate: MinInstancesInService: '1' MaxBatchSize: '2' WaitOnResourceSignals: 'true' PauseTime: PT10M SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions - InstanceRefresh

AutoScalingReplacingUpdate ポリシー

次の例では、関連付けられた Auto Scaling グループを更新時に強制的に置き換えるポリシーを宣言しています。更新が成功するためには、インスタンスの割合 (MinSuccessfulPercentParameter パラメーターにより指定) が Timeout 期間内に成功のシグナルを送信する必要があります。

JSON

"UpdatePolicy" : { "AutoScalingReplacingUpdate" : { "WillReplace" : true } }, "CreationPolicy" : { "ResourceSignal" : { "Count" : { "Ref" : "ResourceSignalsOnCreate"}, "Timeout" : "PT10M" }, "AutoScalingCreationPolicy" : { "MinSuccessfulInstancesPercent" : { "Ref" : "MinSuccessfulPercentParameter" } } }

YAML

UpdatePolicy: AutoScalingReplacingUpdate: WillReplace: true CreationPolicy: ResourceSignal: Count: !Ref 'ResourceSignalsOnCreate' Timeout: PT10M AutoScalingCreationPolicy: MinSuccessfulInstancesPercent: !Ref 'MinSuccessfulPercentParameter'

AutoScalingInstanceRefresh ポリシー

次の例は、AutoScalingInstanceRefresh ポリシーの一般的な 2 つの設定を示しています。最初の例では、launch-before-terminate を使用して、更新中に容量を維持します。2 番目の例では、デプロイで問題が発生した場合に CloudWatch アラームを使用してスタックをロールバックします。

Launch-before-terminate 更新

次の例では、launch-before-terminate を使用する AutoScalingInstanceRefresh ポリシーを宣言します。MinHealthyPercentage100 に設定すると、既存のインスタンスが終了する前に新しいインスタンスが起動し、200MaxHealthyPercentage ではグループのサイズが一時的に 2 倍になります。このポリシーは、設定に一致しているインスタンスもスキップします。

JSON
"ASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "logicalName" }, "Version" : { "Fn::GetAtt" : [ "logicalName", "LatestVersionNumber" ] } }, "MaxSize" : "4", "MinSize" : "1" }, "UpdatePolicy" : { "AutoScalingInstanceRefresh" : { "Strategy" : "Rolling", "Preferences" : { "MinHealthyPercentage" : 100, "MaxHealthyPercentage" : 200, "SkipMatching" : true } } } }
YAML
ASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '4' MinSize: '1' UpdatePolicy: AutoScalingInstanceRefresh: Strategy: Rolling Preferences: MinHealthyPercentage: 100 MaxHealthyPercentage: 200 SkipMatching: true

アラームベースのロールバックで更新する

次の例では、チェックポイント、アラームベースのロールバック、ベイク時間を含む AutoScalingInstanceRefresh ポリシーを宣言します。Auto Scaling は各チェックポイントで 5 分間一時停止し、完了してから成功を宣言するまで 10 分間待機します。

JSON
"ASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "logicalName" }, "Version" : { "Fn::GetAtt" : [ "logicalName", "LatestVersionNumber" ] } }, "MaxSize" : "4", "MinSize" : "1" }, "UpdatePolicy" : { "AutoScalingInstanceRefresh" : { "Strategy" : "Rolling", "Preferences" : { "CheckpointPercentages" : [ 33, 66, 100 ], "CheckpointDelay" : 300, "BakeTime" : 600, "AlarmSpecification" : { "Alarms" : [ "my-cloud-watch-alarm" ] } } } } }
YAML
ASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '4' MinSize: '1' UpdatePolicy: AutoScalingInstanceRefresh: Strategy: Rolling Preferences: CheckpointPercentages: - 33 - 66 - 100 CheckpointDelay: 300 BakeTime: 600 AlarmSpecification: Alarms: - my-cloud-watch-alarm

cfn-init Helper スクリプトのメタデータを更新する際の可用性の維持

インスタンスにソフトウェアアプリケーションをインストールするとき、AWS::CloudFormation::Init メタデータキーと cfn-init ヘルパースクリプトを使用して、Auto Scaling グループ内のインスタンスをブートストラップすることができます。CloudFormation がパッケージをインストールしてコマンドを実行し、メタデータに記述されている他のブートストラップアクションを実行します。

メタデータのみ更新する場合 (たとえば、パッケージを別のバージョンに更新する場合)、cfn-hup ヘルパーデーモンを使用して更新を検出し、適用できます。ただし、cfn-hup デーモンはインスタンスごとに別個に実行されます。デーモンがすべてのインスタンスで同時に実行されてしまった場合、アプリケーションまたはサービスが更新中に使用不可能になる可能性があります。可用性を確保するには、CloudFormation が一度に 1 つのバッチでインスタンスを更新するようにローリング更新を強制します。

重要

ローリング更新ポリシーを強制するには、CloudFormation が新しいインスタンスを作成した後、古いインスタンスを削除する必要があります。古いインスタンスに保存されている情報は失われます。

ローリング更新を強制するには、起動構成リソースの論理 ID を変更した後、スタックと、元の論理 ID (関連付けられている Auto Scaling グループなど) を指すすべての参照を更新します。CloudFormation が Auto Scaling グループ上でローリング更新をトリガーし、すべてのインスタンスを置き換えます。

元のテンプレート

"LaunchConfig": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "Comment" : "Install a simple PHP application", "AWS::CloudFormation::Init" : { ... } } }

更新された論理 ID

"LaunchConfigUpdateRubygemsPkg": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "Comment" : "Install a simple PHP application", "AWS::CloudFormation::Init" : { ... } } }

Lambda エイリアスの更新ポリシー

次の例では、UpdatePolicy リソースの AWS::Lambda::Alias 属性を指定します。デプロイの詳細はすべて、ポリシーに渡されるアプリケーションおよびデプロイグループによって定義されます。

JSON

"Alias": { "Type": "AWS::Lambda::Alias", "Properties": { "FunctionName": { "Ref": "LambdaFunction" }, "FunctionVersion": { "Fn::GetAtt": [ "FunctionVersionTwo", "Version" ] }, "Name": "MyAlias" }, "UpdatePolicy": { "CodeDeployLambdaAliasUpdate": { "ApplicationName": { "Ref": "CodeDeployApplication" }, "DeploymentGroupName": { "Ref": "CodeDeployDeploymentGroup" }, "BeforeAllowTrafficHook": { "Ref": "PreHookLambdaFunction" }, "AfterAllowTrafficHook": { "Ref": "PreHookLambdaFunction" } } } }

YAML

Alias: Type: AWS::Lambda::Alias Properties: FunctionName: !Ref LambdaFunction FunctionVersion: !GetAtt FunctionVersionTwo.Version Name: MyAlias UpdatePolicy: CodeDeployLambdaAliasUpdate: ApplicationName: !Ref CodeDeployApplication DeploymentGroupName: !Ref CodeDeployDeploymentGroup BeforeAllowTrafficHook: !Ref PreHookLambdaFunction AfterAllowTrafficHook: !Ref PreHookLambdaFunction