Amazon Web Services ブログ
新しい EC2 Serial Console による、起動とネットワーク問題のトラブルシューティング
本番稼働上の問題の修正は、システム管理者とネットワーク管理者の重要な役割の 1 つです。実際、私はいつも、それがインフラストラクチャエンジニアリングの最も興味深い要素の 1 つであることに気づきます。目の前の問題を必要に応じて深く掘り下げれば、問題解決に (最終的に) 満足できるだけでなく、その過程で通常であれば目にすることのできない多くのことを学べます。
オペレーティングシステムは、まさしくそうした機会を提供します。OS は時間とともにますます複雑化し、管理者はおびただしい数の構成ファイルや設定を習熟せざるを得ません。Infrastructure as Code やオートメーションによりサーバーのプロビジョニングや管理が大幅に向上しましたが、システムの正常な起動を妨げる間違いや故障が発生する余地は、常に存在しています。ハードウェアドライバーがない、ファイルシステムの構成が間違っている、ネットワーク構成が無効である、アクセス許可が不正であるなど、尽きることはありません。さらに悪いことに、管理者は多くの問題によって実質的にシステムから締め出され、ログインや問題の診断、適切な修正の適用を行えなくなります。唯一の選択肢はサーバーに帯域外接続を確立することで、そうすることでユーザーは EC2 インスタンスのコンソールの出力を確認することができます。操作はできません ― でした、これまでは。
本日、 EC2 Serial Console を発表できることをうれしく思います。こちらは、Amazon Elastic Compute Cloud (EC2) インスタンスへのシリアル接続を確立することで、起動やネットワーク接続の問題をトラブルシューティングする、簡単かつ安全な方法です。
EC2 Serial Console のご紹介
EC2 Serial Console アクセスは、AWS Nitro System をベースとする EC2 インスタンスで利用できます。主要な Linux ディストリビューション (FreeBSD、NetBSD、Microsoft Windows、VMware) のすべてをサポートしています。
実行中のネットワーク設定がなくても、AWS マネジメントコンソールのブラウザベースのシェル、またはマネージドコンソールサーバーへの SSH 接続を使用することで、インスタンスに接続することができます。インスタンスで sshd
サーバーを実行する必要はありません。唯一の要件は、root
アカウントにパスワードを割り当てていることです。ログインにはこれを使用します。その後、インスタンスのシリアルポートの 1 つに、キーボードとモニターを直接接続しているかのように、コマンドを入力することができます。
さらに、オペレーティングシステムに固有の手順をトリガーすることができます。
- Linux の場合、Magic SysRq コマンドをトリガーして、クラッシュダンプの生成やプロセスの強制終了などが行えます。
- Windows の場合、起動プロセスを中断して、Emergency Management Service (EMS) と Special Admin Console (SAC) を使用してセーフモードで起動できます。
インスタンスのコンソールにアクセスすることは、厳密に制御されるべき特権的操作です。そのため、EC2 Serial Console へのアクセスがデフォルトではアカウントレベルで許可されていないのです。アカウントでアクセスを許可すると、このアカウント内のすべてのインスタンスにそれが適用されます。管理者は、サービスコントロールポリシーにより組織レベルで、また AWS Identity and Access Management (IAM) のアクセス許可によりインスタンスレベルで、それぞれコントロールを適用することもできます。ご想像のとおり、EC2 Serial Console との通信はすべて暗号化され、セッションごとに一意のキーが生成されます。
Linux で簡単なデモをやってみましょう。このプロセスは、他のオペレーティングシステムでも同じです。
AWS マネジメントコンソールを使用した EC2 Serial Console への接続
まず、Amazon Linux 2 インスタンスを起動します。ログインして、イーサネットネットワークインターフェイス (/etc/sysconfig/network-scripts/ifcfg-eth0
) のネットワーク設定を分割し、架空の静的 IP アドレスを設定してみます。これは本番稼働用のインスタンスには決して使用しないでください。
そして、インスタンスを再起動します。数秒後、インスタンスが EC2 コンソールで実行され、セキュリティグループでポート 22 が開きますが、SSH を使用してインスタンスに接続することはできません。
$ ssh -i ~/.ssh/mykey.pem ec2-user@ec2-3-238-8-46.compute-1.amazonaws.com
ssh: connect to host ec2-3-238-8-46.compute-1.amazonaws.com port 22: Operation timed out
EC2 Serial Console を救いましょう!
まず、アカウントでコンソールアクセスを許可する必要があります。EC2 設定のボックスにチェックを入れれば完了です。
次に、EC2 コンソールでインスタンスの名前を右クリックし、[Monitor and troubleshoot (モニタリングおよびトラブルシューティング)]、[EC2 Serial Console] の順に選択します。
接続先のインスタンス ID とシリアル番号を確認する新しいウィンドウが開きます。[Connect (接続)] をクリックします。
これで、ブラウザに新しいタブが開きます。Enter
を押すと、おなじみのログインプロンプトが表示されます。
Amazon Linux 2
Kernel 4.14.225-168.357.amzn2.x86_64 on an x86_64
ip-172-31-67-148 login:
root
としてログインします。おなじみのシェルプロンプトが表示されています。
このセッションの Magic SysRq を有効化します (sysctl -w kernel.sysrq=1
)。最初に、利用可能なコマンドをリスト化し (CTRL-0
+ h
)、続いてメモリレポートを要求します (CTRL-0
+ m
)。下のイメージをクリックすると拡大表示できます。
すばらしいですね。 これは、複雑な問題のトラブルシューティングに間違いなく役立ちます。今は必要ありません。ネットワークインターフェイスの有効な設定をすばやく復元し、ネットワークスタックを再起動しましょう。
インスタンスに再度接続すると、問題が解決されていることがわかります。
$ ssh -i ~/.ssh/mykey.pem ec2-user@ec2-3-238-8-46.compute-1.amazonaws.com
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-67-148 ~]$
次に、AWS コマンドラインインターフェイスを使用して、同じようなコマンドを簡単にご紹介します。
AWS CLI を使用した EC2 Serial Console への接続
これも同じように簡単です。まず、インスタンスキーペアの SSH パブリックキーをシリアルコンソールに送信します。必ずプレフィックス file://
を追加します。
$ aws ec2-instance-connect send-serial-console-ssh-public-key --instance-id i-003aecec198b537b0 --ssh-public-key file://~/.ssh/mykey.pub --serial-port 0 --region us-east-1
次に、<instance id>.port<port number>
をユーザー名として使用して、シリアルコンソールに ssh 接続を行います。ログインプロンプトが表示されます。
$ ssh -i ~/.ssh/mykey.pem i-003aecec198b537b0.port0@serial-console.ec2-instance-connect.us-east-1.aws
Amazon Linux 2
Kernel 4.14.225-168.357.amzn2.x86_64 on an x86_64
ip-172-31-67-148 login:
ログインすると、Magic SysRq を使用できます。これは ~B
+command
でトリガーします。コンソールセッションは ~.
で終了することもできます。
EC2 Serial Console の使用
ご覧いただいたように、EC2 Serial Console を使うと、EC2 インスタンスの複雑な起動や、そこで生じるネットワーク上の問題を、とても簡単にデバッグし修正することができます。こちらは本日より、次の AWS リージョンでご利用いただけます。追加料金はかかりません。
- 米国東部 (バージニア北部)、米国西部 (オレゴン)、米国東部 (オハイオ)
- 欧州 (アイルランド)、欧州 (フランクフルト)
- アジアパシフィック (東京)、アジアパシフィック (シドニー)、アジアパシフィック (シンガポール)
ぜひお試しいただき、ご意見をお聞かせください。皆様のフィードバックをお待ちしています。 通常の AWS サポートの連絡先までお寄せいただくか、Amazon EC2 の AWS フォーラムから送信していただくことができます。