この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
CX事業本部の平内(SIN)です。
RaspberryPiのシャットダウンを電源OFFで行うのは、リクスのある作業となります。しかし、ディスプレイやキーボードが接続されていない、多数のRaspberryPiがある場合、これををシャットダウンするのは、やや面倒です。
今回は、遠隔地にある多数のRaspberryPiをAWS Systems Manager(以下、SSM)のエージェントにより、AWS CLIでシャットダウンする作業を確認してみました。
2 環境
既にSSMエージェントがインストールされアクティベーションが終わっている環境が前提です。
参考:AWS Systems ManagerをRaspberry Piで使用してみた
下記のように、5台のRaspberryPiがオンラインとなっています。
3 AWS-RunShellScript
AWS-RunShellScriptでコマンドを実行するには、aws ssm send-commandを使用します。
参考:Walkthrough: Use the AWS CLI with Run Command
RaspberryPiのシャットダウンコマンドは、下記のように利用されますが、AWS-RunShellScriptはroot権限で実行されるため、sudoは必要ありません。
pi@raspberrypi:~ $ sudo shutdown -h now
4 シェル
AWS CLIを実行するシェルスクリプトです。idsに対象となるインスタンスIDを列挙して使用します。
raspi-shoutdown.sh
#!/bin/bash
ids=(
"mi-0b1bf21cb921d30c3"
"mi-05fc7778a79f6af73"
"mi-0ff983b55d321d1ba"
"mi-0ac1df76fe0f72153"
"mi-088cb4680de05f836"
)
cmd="shutdown -h now"
profile=profileName
region=ap-northeast-1
for id in ${ids[@]};do
echo Instance $id
param={"\"commands\"":[\"$cmd\"],"\"executionTimeout\"":["\"3600\""]}
aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids $id --parameters "$param" --timeout-seconds 600 --region $region --p $profile | jq .Command.CommandId
done
実行している様子です。インスタンスIDとコマンドIDが出力されています。
% ./raspi-shoutdown.sh
mi-0b1bf21cb921d30c3
"a1187563-1c31-49eb-b0ae-3be79526240b"
mi-05fc7778a79f6af73
"f17b29ee-2706-4291-bbf2-11da79e5b3a6"
mi-0ff983b55d321d1ba
"b3c9a3aa-6bd1-dfae-5e96-9a7034747922"
mi-0ac1df76fe0f72153
"799458c7-0d77-611d-6669-2ba41b7e201b"
mi-088cb4680de05f836
"5d115928-8460-fa88-fe3c-a96a1b7aee98"
5 最後に
今回は、遠隔地で多数運用されているRaspberryPiのシャットダウンを、SSMのエージェントにより実施する要領を試してみました。 とりあえず、離れた場所にあるRaspberryPiには、SSM入れとくと何かと便利かもしれません。