EC2 Linux インスタンスが応答しなくなった、あるいは起動の問題が発生しています。Linux 用 EC2Rescue を使用してオペレーティングシステムレベルの問題をトラブルシューティングする方法を教えてください。
最終更新日: 2020 年 4 月 15 日
Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスに接続できない、または起動の問題が発生しています。これらの問題の修正には、OpenSSH ファイルのアクセス許可などの一般的な問題を修正するか、システム (OS) のログを収集して分析とトラブルシューティングを行う必要があります。EC2Rescue for Linux を使用してこれを行うにはどうすればよいですか?
簡単な説明
Linux 用 EC2Rescue は、Amazon EC2 Linux インスタンスの問題の診断やトラブルシューティングに役立つツールです。Linux 用 EC2Rescue は Amazon EC2 Linux インスタンスで実行し、オペレーティングシステムレベルの問題を修正します。Linux 用 EC2Rescue では、詳細なログ、システム使用状況レポート、設定ファイルも収集し、さらなる分析を実施できます。
Linux 用 EC2Rescue が対処する一般的なシナリオ:
- vmstat、iostat、mpstat などのシステム使用率レポートを収集する。
- syslog、dmesg、アプリケーションエラーログ、SSM ログなどのログと詳細を収集する。
- 非対称ルーティングやルートデバイスラベルの重複など、システムの問題を検出する。
- OpenSSH ファイルのアクセス許可の修正、既知の問題のあるカーネルパラメータの無効化など、システムの問題を自動的に修正します。
システム要件
Linux 用 EC2Rescue では、以下の前提条件を満たす Amazon EC2 Linux インスタンスが必要です。
サポートされているオペレーティングシステム
- Amazon Linux 2
- Amazon Linux 2016.09+
- SLES 12+
- RHEL 7+
- Ubuntu 16.04+
ソフトウェア要件
- Python 2.7.9+ または 3.2+
解決方法
レスキューインスタンスを使用して、到達不可能な Amazon EC2 Linux インスタンスをトラブルシューティングするには:
1. 同じ Amazon Machine Image (AMI) を使用しかつ障害のあるインスタンスと同じアベイラビリティーゾーンで、仮想プライベートクラウド (VPC) で新しい Amazon EC2 インスタンスを起動します。新しいインスタンスは「レスキュー」インスタンスになります。
または、同じ AMI を使用しかつ障害のあるインスタンスと同じアベイラビリティーゾーンにある場合は、アクセスできる既存のインスタンスを使用できます。
2. 障害のあるインスタンスから Amazon Elastic Block Store (Amazon EBS) ルートボリュームの接続解除(/dev/xvda または /dev/sda1) を行います。
3. レスキューインスタンスに EBS ボリュームを、セカンダリデバイス (/dev/sdf) としてアタッチします。
4. SSH を使用してレスキューインスタンスに接続します。
5. ステップ 3 でレスキューインスタンスに添付された新しいボリュームのマウントポイントディレクトリ (/rescue) を作成します。
$ sudo mkdir /rescue
6. ステップ 5 で作成したディレクトリにボリュームをマウントします。
$ sudo mount /dev/xvdf1 /rescue
注: デバイス (/dev/xvdf1) は、別のデバイス名でレスキューインスタンスに添付されている場合があります。lsblk コマンドを使って、使用可能なディスクデバイスとマウントポイントを表示し、正しいデバイス名を確認してください。
注: ボリュームのマウントが失敗した場合は、dmesg | tail を確認してください。ログで UUID の競合が示されている場合は、オプションの -o nouuid を使用します。
7. ルートディレクトリ (chroot) を新しくマウントしたボリュームに変更します。
$ sudo -i
# for i in proc sys dev run; do mount --bind /$i /rescue/$i ; done
# chroot /rescue
8. オフラインの Linux ルートボリュームに Linux 用 EC2Rescue ツールをダウンロードし、インストールします。
$ curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz
$ tar -xvf ec2rl.tgz
9. ヘルプファイルを一覧表示して、インストールを確認します。
$ cd ec2rl-<version_number>
$ ./ec2rl help
10. すべてのモジュールを sudo として実行するには、オプションを指定せずに Linux 用 EC2Rescue を実行します。
$ sudo ./ec2rl run
11. /var/temp/ec2rl で結果を表示します。
cat /var/tmp/ec2rl/<logfile_location>/Main.log
12. 結果に基づいて、サポートされているモジュールの修正を有効にします。
$ ./ec2rl run --remediate
13. 修復が完了したら、chroot を終了し、セカンダリデバイスをマウント解除します。
$ exit
$ sudo umount /rescue
注意: マウント解除の作業が成功しない場合は、レスキューインスタンスを停止または再起動して、マウント解除のクリーンを有効にする必要があります。
14. レスキュー EC2 インスタンスからセカンダリボリューム (/dev/sdf) を接続解除し、/dev/xvda (ルートボリューム) として元のインスタンスに添付します。
15. EC2 インスタンスを起動し、インスタンスが応答していることを確認します。
注意: AWS Systems Manager Automation ドキュメントを使用して、接続の問題をトラブルシューティングすることもできます。詳細については、「チュートリアル: 到達不可能なインスタンスでの EC2Rescue ツールの実行」をご参照ください。AWSSupport-ExecuteEC2Rescue ドキュメントは、Systems Manager のアクション、AWS CloudFormation のアクション、および AWS Lambda 関数の組み合わせを実行するように設計されています。この関数は、Linux 用 EC2Rescue の使用に通常必要なステップを自動化するものです。
追加のトラブルシューティング
- Linux インスタンスの復旧に関する一般的な手順については、「ホストコンピュータに障害が発生した場合のインスタンスの復旧」をご参照ください。Windows インスタンスの場合は、「接続できないインスタンスのトラブルシューティング」をご参照ください。
- インスタンスのルートデバイスが Amazon EBS でバックアップされたボリュームである場合、インスタンスの停止と起動を試してください。詳細については、「インスタンスの停止と起動」をご参照ください。
- インスタンスストアでバックアップされているインスタンスの場合、インスタンスのカスタム AMI を作成すると、その AMI をバックアップとして使用してインスタンスを復元できる場合があります。所有する AMI から新しいインスタンスを作成する手順については、「AMI からのインスタンスの起動」をご参照ください。
- 場合によっては、EBS ボリュームの I/O アクセスが無効になっていることがあります。これにより、インスタンスにアクセスできなくなる可能性があります。こうした場合を特定しトラブルシューティングする方法については、「AutoEnable IO ボリューム属性の操作」をご参照ください。
- SSH キーペアを紛失した場合は、Systems Manager Automation および AWSSupport-ResetAccess ドキュメントを使用してリセットできます。