これは新しい AWS CloudFormation テンプレートリファレンスガイドです。ブックマークとリンクを更新してください。CloudFormation の開始方法については、『AWS CloudFormation ユーザーガイド』を参照してください。
UpdatePolicy 属性
UpdatePolicy 属性を使用して、スタック更新操作中に AWS 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が優先されます。 -
-
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 属性の構文とプロパティを説明します。
AppStream 2.0 の更新ポリシー
更新前に AppStream 2.0 フリートを停止し、更新後に再起動するには、AppStream 2.0 更新ポリシーを使用します。
構文
JSON
{ "UpdatePolicy": { "StopBeforeUpdate": { "Type": "Boolean" }, "StartAfterUpdate": { "Type": "Boolean" } } }
YAML
UpdatePolicy: StopBeforeUpdate: Type:BooleanStartAfterUpdate: 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 ポリシーを使用する際に考慮すべきこと:
-
CloudFormation が更新をロールバックするときは、現行のスタック更新の前にテンプレートで指定された
UpdatePolicy設定を使用します。例えば、UpdatePolicyでMaxBatchSizeを 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?」を参照してください。 -
CloudFormation は、インスタンスの起動時または終了時における Amazon EC2 Auto Scaling ライフサイクルフックの使用をサポートしています。これは、インスタンスが次の状態に移行する前に、カスタムアクションを実行する時間を提供します。新しいインスタンスが
InService状態になることを確実にするには、カスタムアクションが終了するときに、ライフサイクルフックをCONTINUE結果で完了させます。応答を受け取っておらず、ライフサイクルフックがタイムアウトする場合は、デフォルトで、インスタンスの起動が失敗し、中止されたと見なされます。InService状態になるインスタンスがない場合、ローリング更新は最終的に失敗します。 -
インスタンスメンテナンスポリシー、終了ポリシー、スケールイン保護などの Amazon EC2 Auto Scaling 機能を CloudFormation ローリング更新で使用することはできません。ローリング更新は、それを踏まえて計画してください。
-
AutoScalingRollingUpdateポリシーを使用してプレイスメントグループ設定を削除すると、そのプレイスメントグループは Auto Scaling グループと CloudFormation テンプレートからも削除されます。また、これにより段階的更新がトリガーされるため、新しいインスタンスはプレイスメントグループで起動されません。
構文
JSON
"UpdatePolicy" : { "AutoScalingRollingUpdate" : { "MaxBatchSize" :Integer, "MinActiveInstancesPercent" :Integer, "MinInstancesInService" :Integer, "MinSuccessfulInstancesPercent" :Integer, "PauseTime" :String, "SuspendProcesses" : [List of processes], "WaitOnResourceSignals" :Boolean} }
YAML
UpdatePolicy: AutoScalingRollingUpdate: MaxBatchSize:IntegerMinActiveInstancesPercent:IntegerMinInstancesInService:IntegerMinSuccessfulInstancesPercent:IntegerPauseTime:StringSuspendProcesses: -List of processesWaitOnResourceSignals:Boolean
プロパティ
MaxBatchSize-
同時置換が可能なインスタンスの最大数を指定します。
デフォルト:
1最大:
100タイプ: 整数
必須: いいえ
MinActiveInstancesPercent-
更新を成功させるため、Auto Scaling グループのインスタンスのうち、ローリング更新中にそのグループが希望するキャパシティに対して
InService状態にあるインスタンスの割合を指定します。値は 0~100 の間で指定できます。CloudFormation は、10% 単位で四捨五入されます。例えば、InServiceの最小パーセンテージを 50 として 5 つのインスタンスを更新する場合、少なくとも 3 つのインスタンスがInService状態になる必要があります。インスタンスが規定の 1 時間でInService状態に移行しなかった場合、CloudFormation は、そのインスタンスは更新されなかったものと判断します。UpdatePolicyでMinActiveInstancesPercentを設定すると、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) です。警告
WaitOnResourceSignalsがtrueに設定されている場合、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に設定する必要があります。
AutoScalingScheduledAction ポリシー
スケジュールされたアクションが AWS::AutoScaling::AutoScalingGroup リソースに関連付けられているときに CloudFormation が MinSize、MaxSize、DesiredCapacity の各プロパティの更新を処理する方法を指定するには、AutoScalingScheduledAction ポリシーを使用します。
スケジュールされたアクションを使用すると、Auto Scaling グループのグループサイズプロパティはいつでも変化する可能性があります。Auto Scaling グループやスケジュールされたアクションを含むスタックが更新されると、スケジュールされたアクションが有効になっている場合でも、CloudFormation は Auto Scaling グループのグループサイズのプロパティ値を、テンプレート内の AWS::AutoScaling::AutoScalingGroup リソースで定義されている値に設定します。
スケジュールされたアクションが有効なときに CloudFormation がどのグループサイズプロパティ値も変更しないようにするには、AutoScalingScheduledAction 更新ポリシーを使用して IgnoreUnmodifiedGroupSizeProperties を true に設定し、テンプレートで値を変更しない限り、CloudFormation が MinSize、MaxSize、または DesiredCapacity プロパティを変更しないようにします。
構文
JSON
"UpdatePolicy" : { "AutoScalingScheduledAction" : { "IgnoreUnmodifiedGroupSizeProperties" :Boolean} }
YAML
UpdatePolicy: AutoScalingScheduledAction: IgnoreUnmodifiedGroupSizeProperties:Boolean
プロパティ
IgnoreUnmodifiedGroupSizeProperties-
trueの場合、CloudFormation はスタックの更新中に、現在の Auto Scaling グループと、テンプレートのAWS::AutoScaling::AutoScalingGroupリソースに記述されている Auto Scaling グループとの間のグループサイズプロパティの違いを無視します。テンプレートのグループサイズプロパティ値のいずれかを変更した場合、CloudFormation は変更された値を使用して Auto Scaling グループを更新します。注記
このプロパティは、スタックのロールバック中に無視されます。
デフォルト:
false型: ブール
必須: いいえ
UseOnlineResharding ポリシー
AWS::ElastiCache::ReplicationGroup リソース全体を置き換えるのではなく、シャードを追加または削除してレプリケーションを変更するには、UseOnlineResharding 更新ポリシーを使用します。
UseOnlineResharding が true に設定されている場合、AWS::ElastiCache::ReplicationGroup リソースの NumNodeGroups プロパティと NodeGroupConfiguration プロパティを更新でき、CloudFormation は中断することなく、これらのプロパティを更新します。UseOnlineResharding が false に設定されている場合、または指定しない場合、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に対してPrimaryAvailabilityZone、ReplicaAvailabilityZones、ReplicaCountのプロパティを正確に指定する必要があります。ここでも、ElastiCache コンソール (https://console.aws.amazon.com/elasticache/) または DescribeReplicationGroups を使用して、各ノードグループの実際の値を取得して、スタックテンプレートの値と比較することができます。ノードグループのプロパティ値は、個別のスタックの更新として、またはノードグループの数を変更する同じスタックの更新の一部として更新できます。 UseOnlineResharding更新ポリシーを使用して中断することなくノードグループの数を更新すると、ElastiCache は指定された数のスロット間でキースペースを均等に分散します。後で更新することはできません。したがって、この方法でノードグループの数を更新した後で、各ノードグループ内の実際の値が反映されなくなるため、スタックテンプレートからそれぞれのNodeGroupConfigurationのSlotsプロパティに指定された値を削除する必要があります。 -
実際のノードグループの削除結果は異なる場合があります。
現在のノードグループの数より小さい
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 更新ポリシーを使用します。
EnableVersionUpgrade が true に設定されている場合、AWS::OpenSearchService::Domain リソースの EngineVersion プロパティ (またはレガシー AWS::Elasticsearch::Domain リソースの ElasticsearchVersion プロパティ) を更新することができます。これにより、CloudFormation が中断することなくそのプロパティを更新します。EnableVersionUpgrade が false に設定されているか、指定されていない場合、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} }
YAML
UpdatePolicy: CodeDeployLambdaAliasUpdate: AfterAllowTrafficHook:StringApplicationName:StringBeforeAllowTrafficHook:StringDeploymentGroupName: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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !ReflogicalNameVersion: !GetAttlogicalName.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'
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