Terraformで起動したEC2インスタンスにセッションマネージャーで接続できなかった

Terraformを利用して検証用のEC2インスタンスを起動し、セッションマネージャーで接続しようとすると「SSM Agent is not online」と表示が出ました。セッションマネージャーに接続する要件はすべて満たしていると思っていましたが、どこかに誤りがあったようです。

 

この記事では、セッションマネージャー接続要件を満たしている(と思っている)のに接続できない人向けに、わたしが解決した方法を紹介します。

 

 

セッションマネージャーに接続できない?

■結論

結論から言いますと、AMIの選択に誤りがあった、です。

 

TerraformのAMIを指定する記述で[al2023-ami-2023]を指定していると思っていましたが、
正規表現に誤りがあり、[al2023-ami-minimal-2023]を指定していました。

 

のちほど"minimal"について紹介します。

 

 

■状況

わたしは普段AWSサービスの検証をする際に、Terraformで構築します。接続もローカルからsshアクセスするのですが、セッションマネージャーで接続する要件があったためマネコンから接続を試みると以下のエラーが表示されました。

 

saitou-ami-minimal接続できない

 

SSM Agent is not online
The SSM Agent was unable to connect to a Systems Manager endpoint to register itself with the service.

・Verify that the IAM instance profile has the correct permissions. 
・Verify that your instance's security group and VPC allow HTTPS (port 443) outbound traffic to the following Systems Manager endpoints:
    ・ssm.ap-southeast-1.amazonaws.com
    ・ec2messages.ap-southeast-1.amazonaws.com
    ・ssmmessages.ap-southeast-1.amazonaws.com
    If your VPC does not have internet access, you can use VPC endpoints  to allow outbound traffic from your instance.

If you still can't connect to your instance, or if you receive an error, including an error about SSM Agent, see:

・セッションマネージャーでのトラブルシューティング 
・Troubleshooting managed node availability using ssm-cli 
・Troubleshooting with Automation Runbook AWSSupport-TroubleshootSessionManager 

 

↓ためしにTerraformで作成した環境に手動で同じOSのEC2インスタンスを起動してみると、問題なくセッションマネージャーで接続できます。

 

saitou-ami-minimal接続

 

OSはどちらともAmazzon Linux 2023なのでエージェントの有無は関係ないし、同じネットワーク内に作成したEC2インスタンス(手動)にはセッションマネージャーでアクセスできるからネットワークの問題ではないなぁと思ってました。一応二つのEC2インスタンスの詳細を見比べてみると、

 

[手動]
saitou-ami-minimalAMI詳細

 

 

[Terraform]
saitou-ami-minimalAMI詳細

 

Terraformで起動したインスタンスのAMIが[al2023-ami-minimal-2023]となっていますね。

 

 

minimal?

 

 

■AMIのminimalとは

AWSの公式ドキュメントで「minimal」に関して調べてみると、

 

The standard AL2023 AMI is the default AMI that you create. This version comes installed with all of the most commonly used applications and tools. We recommend the standard AMI if you want to get started quickly and aren’t interested in customizing the AMI.

標準の AL2023 AMI は、ユーザーが作成するデフォルト AMI です。このバージョンには、最も一般的に使用されるアプリケーションとツールがすべてインストールされています。すぐに使い始めたいが AMI のカスタマイズは不要な場合は、標準 AMI をお勧めします。

 

The minimal AL2023 AMI is the basic, streamlined version that contains only the most basic tools and utilities necessary to run the OS. We recommend the minimal AMI if you want to have the smallest OS footprint possible. The minimal AMI offers slightly reduced disk space utilization and better long-term cost efficiency. The minimal AMI is suitable if you want a smaller OS and don’t mind manually installing tools and applications.

最小 AL2023 AMI は、OS の実行に必要な最も基本的なツールとユーティリティのみを含む、基本的で効率的なバージョンです。OS のフットプリントをできるだけ小さくしたい場合は、最小 AMI を使用することをお勧めします。最小 AMI では、ディスク容量の使用率がわずかに低下し、長期的なコスト効率が向上します。OS を小さくしたいが、ツールやアプリケーションを手動でインストールしてもかまわない場合は、最小 AMI が適しています。 (Amazon Linux 2023 標準 (デフォルト) と最小 AMI の比較より)

 

"Amazon Linux 2023"には[minimal(最小)]という、必要最低限のパッケージのみがプリインストールされているAMIのようです。もしかしてssm-agentが入っていないのでは?と思い、プリインストール一覧を見てみると、

 

saitou-ami-minimalプリインストール

 

やはり[amazon-ssm-agent]はプリインストールされていませんでした。

 

 

■tfファイル修正

そもそもなぜminimalなAMIが指定されたのか、自分が作成したTerraformの記述を確認してみると、

 

data "aws_ami" "amazon_linux_2023" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["al2023-ami-*-kernel-6.1-x86_64"]
  }

}

 

↓この記述だと、デフォルトの[al2023-ami-2023]ではなく、最小構成の[al2023-ami-minimal-2023]が指定されるんですね。
values = ["al2023-ami-*-kernel-6.1-x86_64"]

 

↓[al2023-ami-2023]を指定するように、[*]から[2*]に変更しました。

 

data "aws_ami" "amazon_linux_2023" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["al2023-ami-2*-kernel-6.1-x86_64"]
  }

}

 

 

まとめ

普段問題なく利用しているツールも、他の使い方をしてみると意外な穴があります。継続的なリファクタリングで、使いやすさと安全性を求めていきたいですね。

 

 

参考リンク:AWS公式ドキュメント

 

 

↓ほかの協栄情報メンバーのAMIについての記事を公開しています。ぜひ参考にしてみてください。
 

 
【Bitnami AMI】WordPressを手作業でサーバ移行する方法(kioka)

 
AWSで特定Red Hat Enterprise Linux (RHEL) の AMIを探す方法(dapeng)

 

 

 

Last modified: 2024-03-30

Author