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 の使用に通常必要なステップを自動化するものです。

追加のトラブルシューティング