[AWS Systems Manager] SSM経由のsshで再度アクティベーションするとどうなるのか試してみました

2020.08.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

CX事業本部の平内(SIN)です。

AWS Systems Manager(以下、SSM)を利用すると、RaspberryPiにSSMエージェントをインストールし、アクティベーションすることで、遠隔からssh/scpできる環境が構築可能です。
AWS Systems Manager セッションマネージャーでSSH・SCPできるようになりました
AWS Systems ManagerをRaspberry Piで使用してみた

今回は、SSM経由のsshで、再アクティベーションを行うと、どうのような動きをするかを確認してみました。

[2020/08/19] 表現が不適切とのご指摘を頂き、訂正させて頂きました。 結果としては、「再アクティベーション可能」なのですが、これは、あくまで、私が手元で試してみた結果です。正規にドキュメントに紹介されている使用方法ではないので、その点、ご了承ください。

※ 記事中、識別しやすい事を意図として、アクティベーションのコードやIDなどが記載されていますが、既に削除されており、利用することは出来ません。

2 想定場面

想定しているのは、すでにSSMでssh/scpできる1台のRaspberryPiが遠隔地にある時、そのRaspberryPiのSDカードを複製して、台数を増やす場面です。

単純にコピーしたイメージを起動すると、同じインスタンスとなってしまうはずなので、複製したRaspberryPiにsshで接続し、アクティベーションを実行すると、別のインスタンスとして管理できるようになるのでは?という意図です。

3 既存の接続

下記は、既存の接続です。インスタンスID mi-0a0a552936c4b8abfとして一覧されていることが確認できます。

手元からインスタンスIDでsshが可能であり、/var/lib/amazon/ssm/registrationを確認すると、現在のIDも確認できます。

% ssh pi@mi-0a0a552936c4b8abf
Linux raspberrypi 5.4.51-v7+ #1327 SMP Thu Jul 23 10:58:46 BST 2020 armv7l

pi@raspberrypi:~ $ sudo cat /var/lib/amazon/ssm/registration
{"ManagedInstanceID":"mi-0a0a552936c4b8abf","Region":"ap-northeast-1"}

4 アクティベーションの作成

複製したRaspberryPiのためのアクティベーションを作成します。(既に使用可能なものがあれば、そのまま利用可能です)

SSMのコンソールで、ハイブリッドアクティベーション > アクティベーションの作成から、適当な名前で作成します。

作成時に表示される、CodeとIDをコピーします。

5 アクティベーション

既に、RaspberryPIには、amazon-ssm-agentがインストールされているはずです。

参考:Step 5: Install SSM エージェント for a hybrid environment (Linux)

mkdir /tmp/ssm
sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
sudo service amazon-ssm-agent stop
sudo amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "region" 
sudo service amazon-ssm-agent start

よって、sshで接続し、サービスが起動したまま、取得したIDとCodeでアクティベーションを行います。(上書きの確認には、Yesを入れます。)

出力から、新しく登録されたインスタンスIDは、mi-0a3579457b06355efとなっていることが確認できます。

pi@raspberrypi:~ $ sudo amazon-ssm-agent -register -code "k0jbTD0UUb0FrQsm3IOj" -id "300b65f2-a3fc-49cd-a70a-2afcc8da738d" -region "ap-northeast-1"
Initializing new seelog logger
Error parsing logger config. Creating logger from default config: xml has no content
New Seelog Logger Creation Complete

Instance already registered. Would you like to override existing with new registration information? [Yes/No]: Yes
2020-08-19 10:02:54 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-0a3579457b06355ef

この時、コンソールを確認すると、新しくmi-0a3579457b06355efが増えて、オフラインとなっています。

なお、作業中のsshは継続して利用可能ですが、既存のmi-0a0a552936c4b8abfへの新たな接続はできませんでした。 (作業が完了するまで、切断しないように注意が必要そうです)

6 エージェント再起動

継続中のssh接続で、エージェントの再起動を行います。

pi@raspberrypi:~ $ sudo service amazon-ssm-agent restart
pi@raspberrypi:~ $ service amazon-ssm-agent status
● amazon-ssm-agent.service - amazon-ssm-agent
   Loaded: loaded (/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-08-19 10:20:53 JST; 13s ago

再起動すると、コンソール上でオンラインとなっていることが確認できます。

そして、新しいインスタンスIDへのsshも可能になります。(既存の接続は、残っていますが、切断した時点で終わりです)

7 最後に

結果としては、想定以上に安定して利用可能でした。 この動作をうまく組み合わせれば、現地では、イメージを複製するだけでRaspberryPIの増加作業がうまく行えそうな気がしています。