UpdatePolicy
属性
UpdatePolicy
属性を使用して、次のリソースに対する更新を AWS CloudFormation が処理する方法を指定できます。
リソース更新ポリシー
-
AWS::AppStream::Fleet
リソースの場合、CloudFormation で新しい AppStream 2.0 エージェントソフトウェアを使って Image Builder を更新できます。詳細については、AppStream 2.0 バージョンの管理を参照してください。 -
AWS::AutoScaling::AutoScalingGroup
リソースの場合、CloudFormation は加える変更のタイプ、またはスケジュールされたアクションが Auto Scaling グループに関連付けられているかどうかに応じて、3 つの更新ポリシーのいずれかを呼び出します。-
AutoScalingReplacingUpdate
ポリシーとAutoScalingRollingUpdate
ポリシーは、次の操作が 1 つ以上実施された場合にのみ適用されます。-
Auto Scaling グループの
AWS::AutoScaling::LaunchConfiguration
を変更します。 -
Auto Scaling グループの
VPCZoneIdentifier
プロパティの変更。 -
Auto Scaling グループの
LaunchTemplate
プロパティの変更。 -
現在の
LaunchConfiguration
に一致しないインスタンスを含む Auto Scaling グループを更新します。
AutoScalingReplacingUpdate
ポリシーとAutoScalingRollingUpdate
ポリシーの両方を指定した場合、WillReplace
プロパティをtrue
に設定するとAutoScalingReplacingUpdate
が優先されます。 -
-
AutoScalingScheduledAction
ポリシーが適用されるのは、スケジュールされたアクションが関連付けられている Auto Scaling グループを含むスタックを更新する場合です。
-
-
AWS::ElastiCache::ReplicationGroup
リソースの場合、CloudFormation は全体を置き換えるのではなく、シャードを追加または削除してレプリケーショングループのシャードを変更できます。詳細については、「UseOnlineResharding ポリシー」を参照してください。 -
AWS::OpenSearchService::Domain
およびレガシーAWS::Elasticsearch::Domain
リソースの場合、CloudFormation はリソース全体を置き換えることなく、OpenSearch または Elasticsearch の新しいバージョンに OpenSearch Service ドメインをアップグレードすることができます。詳細については、「EnableVersionUpgrade ポリシー」を参照してください。 -
AWS::Lambda::Alias
リソースの場合、エイリアスでバージョンが変更されたときに CloudFormation は CodeDeploy のデプロイを実行します。詳細については、「CodeDeployLambdaAlias 更新ポリシー」を参照してください。
AppStream 2.0 の更新ポリシー
更新ポリシーに対する AppStream 2.0 の構成。
Syntax
JSON
{ "UpdatePolicy": { "StopBeforeUpdate": { "Type": "
Boolean
" }, "StartAfterUpdate": { "Type": "Boolean
" } } }
YAML
UpdatePolicy: StopBeforeUpdate: Type:
Boolean
StartAfterUpdate: Type:Boolean
StopBeforeUpdate
-
更新前に指定されたフリートを停止します。
必須: いいえ
StartAfterUpdate
-
更新後に指定されたフリートを開始します。
必須: いいえ
AutoScalingReplacingUpdate ポリシー
AWS CloudFormation が Auto Scaling グループの置き換え更新を処理する方法を指定するには、AutoScalingReplacingUpdate
ポリシーを使用します。このポリシーでは、AWS CloudFormation が Auto Scaling グループを新しいグループで置き換えるのか、Auto Scaling グループ内のインスタンスのみを置き換えるのかを指定できます。
重要
更新を実行する前に、新旧両方の Auto Scaling グループに Amazon EC2 キャパシティーが十分あることを確認してください。
Syntax
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
ポリシーで指定) に成功のシグナルを送信しなかった場合、置き換え更新は失敗し、AWS CloudFormation は古い Auto Scaling グループにロールバックします。タイプ: ブール
必須: いいえ
AutoScalingRollingUpdate ポリシー
CloudFormation が Auto Scaling グループのローリング更新を処理する方法を指定するには、AutoScalingRollingUpdate
ポリシーを使用します。ローリング更新では、AWS CloudFormation が Auto Scaling グループ内のインスタンスをバッチで更新するか、一度にすべてを更新するかを指定できます。
重要
ローリング更新中、CloudFormation がローリング更新を完了する前に、一部の Auto Scaling プロセスが Auto Scaling グループに変更を行うことがあります。これらの変更により、ローリング更新が失敗する場合があります。ローリング更新中の Auto Scaling プロセスの実行を防止するには、SuspendProcesses
プロパティを使用します。詳細については、「Auto Scaling グループローリング更新を実行するための推奨ベストプラクティスは何か?
スタック更新のロールバックオペレーション中に、CloudFormation は現在のスタックの更新処理の前にテンプレートで指定されている UpdatePolicy
構成を使用することに注意してください。たとえば、スタックテンプレートの UpdatePolicy
で MaxBatchSize
を 1 から 10 に変更したとします。その後、スタック更新を実行して、更新が失敗すると CloudFormation は更新ロールバックオペレーションを開始します。このような場合、CloudFormation は最大バッチサイズとして 10 ではなく 1 を使用します。このため、ローリング更新を開始する可能性が高い AWS::AutoScaling::AutoScalingGroup
リソースへのアップデートとは別に、事前にスタック更新で UpdatePolicy
構成を変更することをお勧めします。
Syntax
JSON
"UpdatePolicy" : { "AutoScalingRollingUpdate" : { "MaxBatchSize" :
Integer
, "MinActiveInstancesPercent" :Integer
, "MinInstancesInService" :Integer
, "MinSuccessfulInstancesPercent" :Integer
, "PauseTime" :String
, "SuspendProcesses" : [List of processes
], "WaitOnResourceSignals" :Boolean
} }
YAML
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 は、そのインスタンスは更新されなかったものと判断します。このプロパティを指定する場合は、
PauseTime
プロパティも有効にする必要があります。MinActiveInstancesPercent
パラメータは、安定化を図ることを目的にインスタンスにのみ適用されます。Auto Scaling グループ内のインスタンス数を指定するには、AWS::AutoScaling::AutoScalingGroup
リソースのMinSize
、MaxSize
、DesiredCapacity
プロパティを参照してください。UpdatePolicy
でMinActiveInstancesPercent
を設定すると、その Auto Scaling グループの現在の希望キャパシティよりも大きいAWS::AutoScaling::AutoScalingGroup
リソースのDesiredCapacity
プロパティに対応して起動するインスタンスにも影響します。デフォルト:
100
タイプ: 整数
必須: いいえ
MinInstancesInService
-
Auto Scaling が古いインスタンスを更新している間、CloudFormation グループ内で使用中となる必要があるインスタンスの最小数を指定します。この値は Auto Scaling グループの
MaxSize
よりも小さくする必要があります。デフォルト:
0
タイプ: 整数
必須: いいえ
MinSuccessfulInstancesPercent
-
更新を成功させるために成功のシグナルを送信する必要があるインスタンスの、 Auto Scaling ローリング更新における割合を指定します。
0
~100
の値を指定できます。CloudFormation は、10% 単位で四捨五入されます。たとえば、成功の最小割合が50
の 5 つのインスタンスを更新する場合、3 つのインスタンスが成功のシグナルを送信する必要があります。PauseTime
プロパティで指定された時間内にインスタンスから信号が送信されない場合、CloudFormation ではインスタンスが更新されなかったものとみなされます。このプロパティを指定する場合、
WaitOnResourceSignals
プロパティとPauseTime
プロパティも有効にする必要があります。MinSuccessfulInstancesPercent
パラメータは、シグナリング目的のインスタンスにのみ適用されます。Auto Scaling グループ内のインスタンス数を指定するには、AWS::AutoScaling::AutoScalingGroup
リソースのMinSize
、MaxSize
、DesiredCapacity
プロパティを参照してください。デフォルト:
100
タイプ: 整数
必須: いいえ
重要
MinSuccessfulInstancesPercent
プロパティが0
に設定されている場合、CloudFormation はキャパシティーインスタンスの 0% がInService
状態になるまで待機します。スタックテンプレート内で定義されている後続のリソースに移動するため、MinSuccessfulInstancesPercent
は Auto Scaling グループの状態がUpdate Complete
とみなされる前に直ちに返されます。CloudFormation テンプレートで他の Auto Scaling グループが定義されている場合、これらのグループも同時に更新されます。すべての Auto Scaling グループが一度にデプロイされ、キャパシティーインスタンスの 0% が
InService
状態の場合、お客様のトラフィックを処理するインスタンスが 0 になることから、可用性上の問題が発生します。CloudFormation では、
MinSuccessfulInstancesPercent
を 0 より大きい値に設定することを推奨します。こうすることで、Auto Scaling グループの更新が完了したとみなされる前に、妥当な最小インスタンスの検証をおこなうことができます。 PauseTime
-
インスタンスにソフトウェアアプリケーションを起動する時間を与えるために、それらのインスタンスのバッチに変更を加えた後に CloudFormation が一時停止する時間の長さ。たとえば、Auto Scaling グループ内のインスタンスの数をスケールアップする場合は
PauseTime
を指定する必要があります。WaitOnResourceSignals
プロパティを有効にした場合、PauseTime
は、Auto Scaling グループが追加されたインスタンスか置き換えられたインスタンスから有効なシグナルを必要な数受け取るのを CloudFormation が待機する必要がある時間の長さです。Auto Scaling グループが受け取るシグナルが所定の数に達する前にPauseTime
を超過すると、更新は失敗します。最良の結果を得るには、アプリケーションが起動する十分な時間を確保できる期間を指定します。更新をロールバックする必要がある場合、PauseTime
が短いとロールバックに失敗する可能性があります。PauseTime
は、ISO8601 期間形式( PT
の形式。それぞれの#
H#
M#
S#
は時間数、分数、秒数を示します) で指定します。最大PauseTime
は 1 時間 (PT1H
) です。デフォルト:
WaitOnResourceSignals
プロパティがtrue
に設定されたときのPT1H
(1 時間)。型: 文字列
必須: いいえ
SuspendProcesses
-
スタックの更新中に Auto Scaling プロセスが停止されるように指定します。プロセスを停止すると、Auto Scaling がスタックの更新に干渉しなくなります。例えば、Amazon EC2 Auto Scaling がアラームに関連付けられたスケーリングポリシーを実行しないようにアラームを停止することができます。有効な値については、「Amazon EC2 Auto Scaling API リファレンス」の「SuspendProcesses」アクションの
ScalingProcesses.member.N
パラメータを参照してください。デフォルト: 指定されていません
タイプ: Auto Scaling プロセスのリスト
必須: いいえ
WaitOnResourceSignals
-
Auto Scaling グループが更新中に新しいインスタンスからのシグナルを待機するかどうかを指定します。インスタンスがインストールを完了し、アプリケーションを設定した後で、Auto Scaling グループの更新を実施するようにする場合は、このプロパティを使用します。新しい EC2 インスタンスがグループで起動されると AWS CloudFormation は Auto Scaling グループの更新を停止します。AWS CloudFormation が更新を続行するには、指定された
PauseTime
内に新しい各々のインスタンスからシグナルを受け取る必要があります。Auto Scaling グループにシグナルを送信するには、cfn-signal ヘルパースクリプトまたはSignalResource
API を使用します。インスタンスが Elastic Load Balancing ヘルスチェックに成功してから成功シグナルを送信する場合は、cfn-init ヘルパースクリプトを使用してヘルスチェック検証を追加します。例については、Auto Scaling ローリング更新
のサンプルテンプレートで verify_instance_health
コマンドを参照してください。デフォルト:
true
タイプ: ブール
必須: 条件的。
MinSuccessfulInstancesPercent
プロパティを指定する場合、WaitOnResourceSignals
プロパティとPauseTime
プロパティも有効にする必要があります。
AutoScalingScheduledAction ポリシー
AWS::AutoScaling::AutoScalingGroup
リソースがスケジュールされたアクションに関連付けられている場合に、AWS CloudFormation が MinSize
、MaxSize
、DesiredCapacity
の各プロパティの更新を処理する方法を指定するには、AutoScalingScheduledAction
ポリシーを使用します。
スケジュールされたアクションを使用すると、Auto Scaling グループのグループサイズプロパティはいつでも変化する可能性があります。Auto Scaling グループやスケジュールされたアクションを含むスタックが更新されると、スケジュールされたアクションが有効になっている場合でも、CloudFormation は Auto Scaling グループのグループサイズのプロパティ値を、テンプレート内の AWS::AutoScaling::AutoScalingGroup
リソースで定義されている値に設定します。
スケジュールされたアクションが有効なときに CloudFormation がどのグループサイズプロパティ値も変更しないようにするには、AutoScalingScheduledAction
更新ポリシーを使用して IgnoreUnmodifiedGroupSizeProperties
を true
に設定し、テンプレートで値を変更しない限り、CloudFormation が MinSize
、MaxSize
、または DesiredCapacity
プロパティを変更しないようにします。
Syntax
JSON
"UpdatePolicy" : { "AutoScalingScheduledAction" : { "IgnoreUnmodifiedGroupSizeProperties" :
Boolean
} }
YAML
UpdatePolicy: AutoScalingScheduledAction: IgnoreUnmodifiedGroupSizeProperties:
Boolean
プロパティ
IgnoreUnmodifiedGroupSizeProperties
-
true
の場合、スタックの更新中、AWS CloudFormation は現在の Auto Scaling グループとテンプレートのAWS::AutoScaling::AutoScalingGroup
リソースに記述されている Auto Scaling グループとの間にあるグループサイズプロパティの違いを無視します。テンプレート内にあるグループサイズプロパティ値のいずれかを変更した場合、AWS 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」を参照してください。
Syntax
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
更新ポリシーにはプロパティがありません。
OpenSearch Service ドメインの更新に関する詳細については、「Amazon OpenSearch Service デベロッパーガイド」の「UpgradeDomain」を参照してください。
Syntax
JSON
"UpdatePolicy" : { "EnableVersionUpgrade" :
Boolean
}
YAML
UpdatePolicy: EnableVersionUpgrade:
Boolean
CodeDeployLambdaAlias 更新ポリシー
CodeDeployLambdaAliasUpdate
リソースでのバージョンの変更時に CodeDeploy デプロイを実行するには、AWS::Lambda::Alias
更新ポリシーを使用します。
Syntax
JSON
"UpdatePolicy" : { "CodeDeployLambdaAliasUpdate" : { "AfterAllowTrafficHook" :
String
, "ApplicationName" :String
, "BeforeAllowTrafficHook" :String
, "DeploymentGroupName" :String
} }
YAML
UpdatePolicy: CodeDeployLambdaAliasUpdate: AfterAllowTrafficHook:
String
ApplicationName:String
BeforeAllowTrafficHook:String
DeploymentGroupName:String
プロパティ
AfterAllowTrafficHook
-
トラフィックのルーティングが完了した後に実行する Lambda 関数の名前。
必須: いいえ
タイプ: 文字列
ApplicationName
-
CodeDeploy アプリケーションの名前。
必須: はい
タイプ: 文字列
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" : { "AvailabilityZones" : [ "us-east-1a", "us-east-1b" ], "DesiredCapacity" : "1", "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, "MaxSize" : "4", "MinSize" : "1" }, "UpdatePolicy" : { "AutoScalingScheduledAction" : { "IgnoreUnmodifiedGroupSizeProperties" : "true" }, "AutoScalingRollingUpdate" : { "MinInstancesInService" : "1", "MaxBatchSize" : "2", "WaitOnResourceSignals" : "true", "PauseTime" : "PT10M" } } }, "ScheduledAction" : { "Type" : "AWS::AutoScaling::ScheduledAction", "Properties" : { "AutoScalingGroupName" : { "Ref" : "ASG" }, "DesiredCapacity" : "2", "StartTime" : "2017-06-02T20 : 00 : 00Z" } }
YAML
ASG: Type: 'AWS::AutoScaling::AutoScalingGroup' Properties: AvailabilityZones: - us-east-1a - us-east-1b DesiredCapacity: '1' LaunchConfigurationName: Ref: LaunchConfig MaxSize: '4' MinSize: '1' UpdatePolicy: AutoScalingScheduledAction: IgnoreUnmodifiedGroupSizeProperties: 'true' AutoScalingRollingUpdate: MinInstancesInService: '1' MaxBatchSize: '2' WaitOnResourceSignals: 'true' PauseTime: PT10M ScheduledAction: Type: 'AWS::AutoScaling::ScheduledAction' Properties: AutoScalingGroupName: Ref: ASG DesiredCapacity: '2' StartTime: '2017-06-02T20 : 00 : 00Z'
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