「stop_failed」状態にある AWS OpsWorks Stacks インスタンスを停止しようとすると、「内部エラー」というメッセージが表示されます。このエラーをトラブルシューティングする方法を教えてください。
簡単な説明
OpsWorks Stacks は、次の 2 つの理由で stop_failed 状態のインスタンスを停止しようとすると、内部エラーメッセージが返されることがあります。
エラーを解決するには、まずスタックの IAM サービスロールが正しく設定されていることを確認します。問題がアクセス許可に関連していない場合は、AWS Command Line Interface (AWS CLI) stop-instance コマンドを実行して、インスタンスを停止します。コマンドには、停止する必要があるインスタンスの --force パラメーターと OpsWorks インスタンス ID を含める必要があります。
解決方法
注意: AWS CLI コマンドの実行時にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
スタックの IAM サービスロールが正しく設定されていることを確認する
[AWS OpsWorks Stacks がユーザーに代わって動作することを許可する] に記載されている手順に従います。
問題がアクセス許可に関連していない場合は、AWS CLI stop-instance コマンドを実行してインスタンスを停止します。
AWS CLI stop-instance コマンドを実行してインスタンスを停止するには
注: AWS CloudShell を使用して次のコマンドを実行することもできます。
1. 次の describe-instances コマンドを実行して、 stoped_failed 状態にあるスタック内のインスタンスのインスタンス ID を返します。
重要: your-stack-id を自分のスタック ID に置き換えます。your-OpsWorks-Stack-Endpoint-region を、スタックがある AWS OpsWorks Stacks のエンドポイントリージョンに置き換えます。
$ aws opsworks describe-instances --stack-id your-stack-id --region your-OpsWorks-Stack-Endpoint-region --query 'Instances[?Status==`stop_failed`].{Id:InstanceId}'
2. 停止するインスタンスのインスタンス ID を特定します。stop-instance コマンドを実行するには、これらのインスタンス ID が必要です。
3. (単一のインスタンスを停止するには) 次の stop-instance コマンドを実行します。
重要: your-opsworks-instance-id を停止するインスタンス ID に、your-opsWorks-Stack-Endpoint-region をスタックがある OpsWorks Stacks のエンドポイントリージョンに置き換えます。
$ aws opsworks stop-instance --instance-id your-opsworks-instance-id --force --region your-OpsWorks-Stack-Endpoint-region
(複数のインスタンスを停止するには) カスタム構文ロジックを使用して、停止するインスタンスを反復する stop-instance コマンドを実行します。
複数のインスタンスを停止する stop-instance コマンドの例
重要: your-stack-id を自分のスタック ID に置き換えます。your-OpsWorks-Stack-Endpoint-region を、スタックがある OpsWorks Stacks のエンドポイントリージョンに置き換えます。
$ for Id in $(aws opsworks describe-instances --stack-id your-stack-id --region your-OpsWorks-Stack-Endpoint-region --query 'Instances[?Status==`stop_failed`].{Id:InstanceId}' --output text) ; do aws opsworks stop-instance --instance-id $Id --force --region your-OpsWorks-Stack-Endpoint-region ; done