AWS Systems ManagerをRaspberry Piで使用してみた

Developers.IO CAFE、先日オープンしたDevelopers.IO CAFE 上越店では多くのRaspberry Piを使用しています。まとめて操作したいと思いAWS Systems Managerを使ってみました。
2019.11.13

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

こんにちはCX事業本部のさかじです。
Developers.IO CAFE、先日オープンしたDevelopers.IO CAFE 上越店では多くのRaspberry Piを使用しています。まとめて操作したいと思っていたところ以下の記事がありました。

Amazon EC2 Systems ManagerがRaspbian OSに対応したのでRaspberry Piにインストールしてみた

アップデートがあり若干内容が変わっていたので、改めて手順をまとめました。

環境

  • MacBook Pro(macOS Mojave 10.14.6)
  • Raspberry Pi 3 Model B+

Raspberry Piの準備

ハイブリット環境のIAMサービスロールを作成する

  • 以下の信頼ボリシーを使用してSSMService-Trust.jsonファイルを作成
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {"Service": "ssm.amazonaws.com"},
    "Action": "sts:AssumeRole"
  }
}
  • AWS CLIを使用してIAMへロールを作成します
$ aws iam create-role --role-name SSMServiceRole --assume-role-policy-document file://SSMService-Trust.json
  • 先ほど作成したIAM Role Policyをマネージドインスタンスで AWS Systems Manager サービスの主要機能を使用できるように設定
aws iam attach-role-policy --role-name SSMServiceRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

アクティベーションを作成

  • AWS Systems Managerコンソールを開く
  • 「ハイブリッドアクティベーション」をクリック

  • 「アクティベーションの作成」をクリック

  • アクティベーションの説明、インスタンスの制限を入力 AWSに登録するサーバーとVMの合計数

  • 「必要な権限を備えた既存のカスタムIAMロールを選択」を選び先ほど作成したIAMロールを選択する

  • アクティベーションの有効期限を設定する

  • 必要に応じてインスタンス名を入力して「アクティベーションの作成」をクリック

  • 完了したら"Activation Code"と”Activation ID”を保存する

Raspberry PiへSSMエージェントをインストール、起動

  • RasPiへSSHでログイン

  • 以下のコマンドを実施ししてエージェントをインストール、起動

$ 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

マネージメントコンソールからRaspberry Piを操作

  • "AWS Systems Manager" - "マネージドインスタンス"を選択
  • 操作したいインスタンスIDを選択して"アクション" - "コマンドの実行"をクリック

  • AWS-RunShellScriptを選択

  • Commandsへ"ls -l"と入力

  • "Choose Instaces manually"を選択して操作したいインスタンスを選択

  • 画面の下の方まで行き"実行"をクリック

  • 実行が開始されると以下の画面に遷移する

  • 実行したインスタンスIDをクリック

  • 「ステップ1 - 出力」を開くと実行した結果が表示

参考

最後に

普段たくさんのVMなど扱っていて、遠隔操作する方には当たり前の機能なのかもしれませんがIoTばかり使っていると、なんとかIoT関連で解決しようと思ってしまいますがクラウドからコマンドを実施できるのでその機材があるところまで行かなくても対応できることが増えるのは非常に助かりますね。