EC2インスタンス(RHEL)構築時にUserdataでSSM Agentをインストールしてみた

記事タイトルとURLをコピーする

はじめに

SRE2課の篠﨑です。

今回はEC2インスタンス作成の際に使うUserdataでSSM Agentを入れる方法について書いていこうと思います。

Amazon LinuxなどAMIによってはデフォルトで入っているものもあるかとは思いますが、RHEL 7やRHEL 8などではデフォルトでSSM Agentが入っていないものしか用意されていない場合もあります。

こういった場合、Userdataに組み込んであげてSSM Agentの導入ができればインスタンスに入って行う作業が減るので楽ですよね!!

ということで今回は特にRHEL 7、RHEL 8でSSM Agentを導入するためのUserdataの書き方について紹介していこうと思います。

全体像

先に、今回のゴールとなるものを提示します。 こちらはRHEL 7にUserdataを用いたSSM Agentを導入するためのものとなります。

#!/bin/bash -v

# Metadata
AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
Region=$(echo ${AZ} | sed -e 's/.$//g')

# Install SSM Agent
yum install -y https://s3.${Region}.amazonaws.com/amazon-ssm-${Region}/latest/linux_amd64/amazon-ssm-agent.rpm

# Enable SSM Agent
systemctl enable amazon-ssm-agent
systemctl is-enabled amazon-ssm-agent
systemctl restart amazon-ssm-agent
systemctl status amazon-ssm-agent

部分解説

基本的には、Amazon公式ドキュメントにある通りに入れてあげることでインストールすることが可能です。

後述するインストールコマンドを見ていただくと分かるかとは思うのですが、インスタンスを立てるリージョンの識別子が必要となりますので、先に、インスタンスメタデータを活用して取得しましょう。

# Metadata
AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
Region=$(echo ${AZ} | sed -e 's/.$//g')

インストールコマンド

次に、インストールコマンドを書きます。

RHEL 7.xの場合

Intel 64-bit (x86_64) インスタンス:

yum install -y https://s3.${Region}.amazonaws.com/amazon-ssm-${Region}/latest/linux_amd64/amazon-ssm-agent.rpm

ARM 64-bit (arm64) インスタンス:

yum install -y https://s3.${Region}.amazonaws.com/amazon-ssm-${Region}/latest/linux_arm64/amazon-ssm-agent.rpm

(${Region}には立てるリージョンの識別子を代入します。)

※ 注意点

インターネットと接続ができない場合、S3のエンドポイントの設定をすることでインストールをすることができます。

RHEL 8.xの場合

Intel 64-bit (x86_64) インスタンス:

sudo dnf install -y https://s3.${Region}.amazonaws.com/amazon-ssm-${Region}/latest/linux_amd64/amazon-ssm-agent.rpm

ARM 64-bit (arm64) インスタンス:

sudo dnf install -y https://s3.${Region}.amazonaws.com/amazon-ssm-${Region}/latest/linux_arm64/amazon-ssm-agent.rpm

(${Region}には立てるリージョンの識別子を代入します。)

※ 注意点

RHEL 8の場合はinstall時にレポジトリと通信を行うため、S3エンドポイントがあっても、インターネットと接続ができない場合はインストールができません。

また、インターネットと接続ができないままUserdataに入れてインスタンスを起動させると、タイムアウトが起こるため、時間がかかってしまいますので、NATやプロキシの設定を行うなどしてからインストールを行ってください。

Agentの有効化

以下コマンドを入れることで、SSM Agentを有効にすることができます。

systemctl status amazon-ssm-agent
systemctl enable amazon-ssm-agent
systemctl is-enabled amazon-ssm-agent
systemctl restart amazon-ssm-agent
systemctl status amazon-ssm-agent

さいごに

「そういえばこのEC2、RHELだからSSMできないのでは、、」と不安になることもあるかと思いますので、ぜひ構築をする際にはUserdataを活用してSSMを導入してみてください。

篠﨑 勇輔(書いた記事を見る)

クラウドインテグレーション部 SRE2課

入社4年目