スタック障害オプション
プロビジョニングに失敗した場合、正常にプロビジョニングされたリソースをロールバックせずに失敗時点から開始することで、アプリケーションを繰り返し開発できます。スタック障害オプションを指定することにより、CREATE_FAILED
または UPDATE_FAILED
ステータスのリソースのトラブルシューティングを行うことができます。すべてのスタックデプロイと変更セットオペレーションの障害オプションをプロビジョニングできます。
-
[Preserve successfully provisioned resources] (正常にプロビジョニングされたリソースの保持) に設定された作成オペレーションは、正常に処理されたリソースの状態を保持しますが、失敗したリソースは、次の更新オペレーションが行われるまで失敗した状態が維持されます。
-
[Preserve successfully provisioned resources] (正常にプロビジョニングされたリソースの保持) に設定された更新および変更セットオペレーションは、失敗したリソースを最後の既知の安定した状態にロールバックしながら、正常にプロビジョニングされたリソースの状態を保持します。失敗したリソースは UPDATE_FAILED
状態になります。最後の安定状態が確認されていないリソースは、次のスタックオペレーション時に削除されます。
失敗したリソースのロールバックの一時停止の詳細については、次のセクションを参照してください。
スタック障害オプションの概要
AWS CloudFormation コンソール、API、または AWS CLI からオペレーションを発行する前に、プロビジョニングされたリソースの失敗時の動作を指定します。次に、他の変更を加えずに、リソースのデプロイプロセスを続行します。運用上の障害が発生した場合、CloudFormation は各独立したプロビジョニングパスの最初の障害時に停止します。CloudFormation は、リソース間の依存関係を特定して、独立したプロビジョニングアクションを並列化します。その後、障害が発生するまで、各独立したプロビジョニングパスでリソースのプロビジョニングに進みます。1 つのパスで障害が発生しても、他のプロビジョニングパスには影響しません。CloudFormation は、完了するか、別の障害で停止するまで、リソースのプロビジョニングを続けます。
問題を修正してデプロイプロセスを続行します。CloudFormation は、以前に正常にプロビジョニングできなかったリソースに対するプロビジョニングアクションを再試行する前に、必要な更新を実行します。[Retry] (再試行)、[Update] (更新)、または [Roll back] (ロールバック) オペレーションを送信して、問題を修正します。例えば、Amazon EC2 インスタンスのプロビジョニング中に、EC2 インスタンスの作成オペレーション中に失敗した場合、失敗したリソースをすぐにロールバックするのではなく、そのエラーを調査する必要がある場合があります。システムステータスチェックとインスタンスステータスチェックを確認し、問題が解決したら [Retry] (再試行) オペレーションを選択できます。
スタックオペレーションが失敗し、[Stack failure options] (スタック障害のオプション) メニューから [Preserve successfully provisioned resources] (正常にプロビジョニングされたリソースの保存) を指定した場合、次のオプションを選択できます。
-
[Retry] (再試行) - 失敗したリソースでプロビジョニングオペレーションを再試行し、スタックオペレーションが正常に完了するか、次の失敗が発生するまでテンプレートのプロビジョニングを続行します。AWS Identity and Access Management (IAM) アクセス許可など、テンプレートの変更を必要としない問題が原因でリソースのプロビジョニングに失敗した場合に、このオプションを選択します。
-
[Update] (更新) - プロビジョニングされたリソースは、テンプレートの更新時に更新されます。作成または更新に失敗したリソースは再試行されます。テンプレートエラーが原因でリソースのプロビジョニングに失敗し、テンプレートを変更した場合は、このオプションを選択します。FAILED
状態にあるスタックを更新する場合、スタックの更新を続行するには、[Stack failure options] (スタックの障害オプション) で [Preserve successfully provisioned resources] (正常にプロビジョニングされたリソースを保持する) を選択する必要があります。
-
[Roll back] (ロールバック) - CloudFormation はスタックを最後の既知の安定状態にロールバックします。
スタックのロールバックを一時停止する条件
スタック内の失敗したリソースのロールバックを一時停止するには、次の条件を満たしている必要があります。
-
スタックオペレーション中に、[Preserve successfully provisioned resources] (正常にプロビジョニングされたリソースを保持する) パラメータを指定する必要があります。ロールバック動作の詳細については、「AWS CloudFormation スタックオプションの設定」を参照してください。
-
スタックオペレーションのスタックステータスは、CREATE_FAILED
または UPDATE_FAILED
である必要があります。スタックのステータスの詳細については、「スタックステータスコード」を参照してください。
正常にプロビジョニングされたリソースを保持する (コンソール)
- Create stack
-
スタックの作成オペレーション中に正常にプロビジョニングされたリソースを保持するには
AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。
-
[Create stack] (スタックの作成) を選択し、[With new resources (standard)] (新しいリソースを使用 (標準)) を選択します。
-
[Specify template (テンプレートの指定)] ページで、以下のいずれかのオプションを使用してスタックのテンプレートを選択します。
-
Template is ready (テンプレートの準備ができています)
-
Use a sample template (サンプルテンプレートの使用)
-
Application Composer から構築する
設定を受け入れて、[Next] (次へ) を選択してください。
-
[Specify stack details] (スタック詳細の指定) ページで、[Stack name] (スタックの名前) ボックスにスタック名を入力します。
-
[Parameters] (パラメータ) セクションで、スタックテンプレートで定義されているパラメータを指定します。
デフォルト値を持つパラメータを使用または変更できます。
-
パラメータ値が適切であることを確認したら、[Next] (次へ) を選択します。
-
[Configure stack options] (スタックオプションを設定する) ページでは、スタックのオプションを追加設定できます。
-
[Stack failure options] (スタック障害オプション) の場合、[Preserve successfully provisioned resources] (正常にプロビジョニングされたリソースを保持する) を選択します。
-
スタックオプションが適切であることを確認したら、[Next] (次へ) を選択します。
-
[Review] (確認) ページでスタックを確認し、[Create stack] (スタックの作成) を選択します。
結果: 作成に失敗したリソースは、スタックオペレーションで障害が発生したときにスタックがロールバックされないように、スタックステータスを CREATE_FAILED
に移行します。正常にプロビジョニングされたリソースは、CREATE_COMPLETE
状態にあります。[Stack events] (スタックイベント) タブでスタックを監視できます。
- Update stack
-
スタックの更新オペレーション中に正常にプロビジョニングされたリソースを保持するには
AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。
-
更新するスタックを選択し、次に [Update] (更新)を選択します。
-
[Update stack] (スタックの更新) ページで、以下のいずれかのオプションを使用してスタックのテンプレートを選択します。
-
[Use current template] (現在のテンプレートを使用する)
-
[Replace current template] (現在のテンプレートを置換する)
-
Application Composer でテンプレートを編集する
設定を受け入れて、[Next] (次へ) を選択してください。
-
[Specify stack details] (スタックの詳細を指定する) ページで、スタックテンプレートで定義されているパラメータを指定します。
デフォルト値を持つパラメータを使用または変更できます。
-
パラメータ値が適切であることを確認したら、[Next] (次へ) を選択します。
-
[Configure stack options] (スタックオプションを設定する) ページでは、スタックのオプションを追加設定できます。
-
[Behavior on provisioning failure] (プロビジョニングの失敗時の動作) で、[Preserve successfully provisioned resources] (正常にプロビジョニングされたリソースを保持する) を選択します。
-
スタックオプションが適切であることを確認したら、[Next] (次へ) を選択します。
-
[Review] (確認) ページでスタックを確認し、[Update stack] (スタックの更新) を選択します。
結果: 更新に失敗したリソースは、スタックステータスを UPDATE_FAILED
に移行させ、最後の既知の安定状態にロールバックします。最後の安定状態が確認されていないリソースは、次のスタックオペレーション時に CloudFormation によって削除されます。正常にプロビジョニングされたリソースは、CREATE_COMPLETE
または UPDATE_COMPLETE
状態にあります。[Stack events] (スタックイベント) タブでスタックを監視できます。
- Change set
-
ステータスが CREATE_FAILED
または UPDATE_FAILED
のスタックに対して変更セットを開始できますが、ステータスが UPDATE_ROLLBACK_FAILED
のスタックに対しては開始できません。
変更セットオペレーション中に正常にプロビジョニングされたリソースを保持するには
AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。
-
開始する変更セットを含むスタックを選択し、[Change sets] (変更セット) タブを選択します。
-
変更セットを選択し、[Execute] (実行) を選択します。
-
[Execute change set] (変更セットの実行) の場合、[Preserve successfully provisioned resources] (正常にプロビジョニングされたリソースを保持する) オプションを選択します。
-
[Execute change set] (変更セットの実行) を選択します。
結果: 更新に失敗したリソースは、スタックステータスを UPDATE_FAILED
に移行させ、最後の既知の安定状態にロールバックします。最後の安定状態が確認されていないリソースは、次のスタックオペレーション時に CloudFormation によって削除されます。正常にプロビジョニングされたリソースは、CREATE_COMPLETE
または UPDATE_COMPLETE
状態にあります。[Stack events] (スタックイベント) タブでスタックを監視できます。
正常にプロビジョニングされたリソースを保持する (AWS CLI)
- Create stack
-
スタックの作成オペレーション中に正常にプロビジョニングされたリソースを保持するには
create-stack オペレーション中に --disable-rollback
オプションまたは on-failure DO_NOTHING
列挙を指定します。
-
create-stack コマンドに --disable-rollback
オプションでスタック名とテンプレートを指定します。
aws cloudformation create-stack --stack-name myteststack
--template-body file://DOC-EXAMPLE-BUCKET.json
--disable-rollback
このコマンドは、以下の出力を返します。
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
-
describe-stacks コマンドを使用してスタックの状態を記述します。
aws cloudformation describe-stacks --stack-name myteststack
このコマンドは、以下の出力を返します。
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
"Description": "AWS CloudFormation Sample Template",
"Tags": [],
"Outputs": [],
"StackStatusReason": “The following resource(s) failed to create: [MyBucket]”,
"CreationTime": "2013-08-23T01:02:15.422Z",
"Capabilities": [],
"StackName": "myteststack",
"StackStatus": "CREATE_FAILED",
"DisableRollback": true
}
]
}
- Update stack
-
スタックの更新オペレーション中に正常にプロビジョニングされたリソースを保持するには
-
update-stack コマンドに --disable-rollback
オプションで既存のスタック名とテンプレートを指定します。
aws cloudformation update-stack --stack-name myteststack
--template-url DOC-EXAMPLE-BUCKET.template
--disable-rollback
このコマンドは、以下の出力を返します。
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
-
describe-stacks または describe-stack-events コマンドを使用してスタックの状態を記述します。
aws cloudformation describe-stacks --stack-name myteststack
このコマンドは、以下の出力を返します。
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
"Description": "AWS CloudFormation Sample Template",
"Tags": [],
"Outputs": [],
"CreationTime": "2013-08-23T01:02:15.422Z",
"Capabilities": [],
"StackName": "myteststack",
"StackStatus": "UPDATE_COMPLETE",
"DisableRollback": true
}
]
}
- Change set
-
ステータスが CREATE_FAILED
または UPDATE_FAILED
のスタックに対して変更セットを開始できますが、ステータスが UPDATE_ROLLBACK_FAILED
のスタックに対しては開始できません。
変更セットオペレーション中に正常にプロビジョニングされたリソースを保持するには
execute-change-set オペレーション中に --disable-rollback
オプションを指定します。
-
execute-change-set コマンドに --disable-rollback
オプションでスタック名とテンプレートを指定します。
aws cloudformation execute-change-set --stack-name myteststack
--change-set-name my-change-set
--template-body file://template.yaml
このコマンドは、以下の出力を返します。
{
"Id": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/my-change-set/bc9555ba-a949-xmpl-bfb8-f41d04ec5784",
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
-
--disable-rollback
オプションで変更セットを開始します。
aws cloudformation execute-change-set --stack-name myteststack
--change-set-name my-change-set
-–disable-rollback
-
describe-stacks または describe-stack-events コマンドを使用してスタックのステータスを確認します。
{
"StackEvents": [
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
"EventId": "49c966a0-7b74-11ea-8071-024244bb0672",
"StackName": "myteststack",
"LogicalResourceId": " MyBucket",
"PhysicalResourceId": "MyBucket",
"ResourceType": "AWS::S3::Bucket",
"Timestamp": "2020-04-10T21:43:17.015Z",
"ResourceStatus": "UPDATE_FAILED"
"ResourceStatusReason": "User XYZ is not allowed to perform S3::UpdateBucket on MyBucket"
}
}
-
権限エラーを修正してオペレーションを再試行してください。
aws cloudformation update-stack --stack-name myteststack
--use-previous-template --disable-rollback
このコマンドは、以下の出力を返します。
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
-
describe-stacks または describe-stack-events コマンドを使用してスタックの状態を記述します。
aws cloudformation describe-stacks --stack-name myteststack
このコマンドは、以下の出力を返します。
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
"Description": "AWS CloudFormation Sample Template",
"Tags": [],
"Outputs": [],
"CreationTime": "2013-08-23T01:02:15.422Z",
"Capabilities": [],
"StackName": "myteststack",
"StackStatus": "UPDATE_COMPLETE",
"DisableRollback": true
}
]
}
スタックをロールバックする
CREATE_FAILED または UPDATE_FAILED スタックステータスからスタックをロールバックするには
rollback-stack コマンドを使用して、スタックを最後の安定状態にロールバックします。
-
rollback-stack コマンドでロールバックを開始して、スタック名を指定します。
aws cloudformation rollback-stack --stack-name myteststack
このコマンドは、以下の出力を返します。
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
rollback-stack オペレーションは、スタックに最新の既知の安定状態が含まれていない場合、スタックを削除します。