Amazon EC2でRHEL9 AMIを使用したときにEC2インスタンスに接続できずつまづいた話

Amazon EC2でRHEL9 AMIを使用したときにEC2インスタンスに接続できずつまづいた話

Clock Icon2024.12.20

Amazon EC2でRHEL9 AMIを使用したときにEC2インスタンスに接続できずつまづいた話

こんにちは。まるとです。
今回はAmazon EC2でAWS公式で提供しているRedHat Enterprise Linux 9のAMIを利用してEC2インスタンスを起動したとき、AWSマネジメントコンソールからEC2インスタンスに接続できず、悩んだので解決方法をメモします。

先に結論

  • 起動直後はSSHを利用して接続する必要がある
  • セッションマネージャーを利用する場合、手動でインストールする必要がある
  • EC2 Instant Connectを利用する場合は、別途設定が必要

一部のAMIは上記3点が適用されるのでドキュメントを確認しよう

背景

個人で検証する際、Amazon EC2 インスタンスを起動時にAmazon Linux 2023を良く選択するのですが、RedHat Enterprise Linux 9を使用する必要があり、普段通りSystems Managerを利用して接続をしようとしたところ、エンドポイントに接続できないエラーが発生しました。
「あ、SSM エージェントを入れ忘れたな」と思い、EC2 Instance Connectを使用して接続しようとしたところ以下のエラーが出力されました。

1

Failed to connect to your instance
Error establishing SSH connection to your instance. Try again later.

更にまだ起動中かな?と思い時間をかけて再度試したり、以下の記事に沿って、ネットワークACLやセキュリティグループの見直し、ルートテーブルの確認などトラブルシューティングを行いましたが、同じエラーが表示されます。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-prerequisites.html

しかし、このドキュメントをよく読むと

EC2 Instance Connect を使用してインスタンスに接続するには、インスタンスに EC2 Instance Connect がインストールされている必要があります。

との記載があります。また、EC2 Instance Connectのインストールというドキュメントを読むと以下の記載があります。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html

注記
以下のいずれかの AMI を使用してインスタンスを起動した場合は、EC2 Instance Connect がプリインストールされているため、このステップをスキップできます。

  • AL2023 標準 AMI
  • Amazon Linux 2 2.0.20190618 以降
  • macOS Sonoma 14.2.1 以降
  • macOS Ventura 13.6.3 以降
  • macOS Monterey 12.7.2 以降
  • Ubuntu 20.04 以降

つまり、上記のAMI以外は別途EC2 Instance Connectを利用するためにパッケージのインストールが必要となります。
クイックスタートタブに表示されているかつ公式のAMIであれば、EC2 Instance Connectをすぐに利用できると自身は勘違いしていました。

どうするか

上記を踏まえて、RedHat Enterprise Linux 9(またはEC2 Instance ConnectがプリインストールされていないAMI)を利用した場合、どのように接続するかを考えていきます。

SSH による接続

一番シンプルな方法です。
ただし、EC2 インスタンスがインターネットに接続されていない場合、インターネットから接続できる踏み台用インスタンスが必要となります。
また、セキュリティグループにインバウンドルールを追加する必要があります。

Systems Manager による接続

多くの方が使いたいと思われるSystems Managerでの接続方法です。
インターネットへの接続が可能な場合、インスタンス起動時にユーザデータにSSM エージェントをインストールするスクリプトを書いておきます。

#!/bin/bash
# ARM系CPUの場合は linux_amd64 を linux_arm64にしてください
cd /tmp
sudo dnf install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

インターネットアクセスがない場合、Amazon S3へのVPCエンドポイントを作成後、作業中リージョンに合わせたS3バケットを指定することでSSM エージェントを取得&インストール可能です。
※ Systems ManagerへのVPCエンドポイントにはすでに作成しているものとします。

#!/bin/bash
# ARM系CPUの場合は linux_amd64 を linux_arm64にしてください
cd /tmp
sudo dnf install --disablerepo="*" -y https://s3.<リージョン>.amazonaws.com/amazon-ssm-<リージョン>/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

以下の記事も参考になるのでおすすめです。

https://dev.classmethod.jp/articles/ssm-agent-private-install/

その後、EC2 インスタンスにSystems Managerへのアクセス権が含まれるIAMロールをアタッチすればOKです。

EC2 Instance Connect による接続

基本的には以下のドキュメントに沿って実施します。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html

EC2を起動する際にインストールするのであれば、以下のbashをユーザデータとして指定します。
なお、インストールに必要なrpmファイルはus-west-2のみとなっているため、インターネットを経由してS3にアクセスできない場合は、別途ファイルを取得してEC2 インスタンス上に転送する必要があります。

#!/bin/bash
# ARM系CPUの場合は linux_amd64 を linux_arm64にしてください
mkdir /tmp/ec2-instance-connect
curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm

まとめ

普段、Amazon Linux 2023を中心に利用していたため、別途インストールなどを意識していませんでしたが、一部AMIではSystems ManagerだけでなくEC2 Instance Connectも別途インストールが必要となることがわかりました。
セキュリティグループなどは問題ないけど、うまくEC2 インスタンスに接続できないことがございましたら、別途インストールが必要か確認してみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.