このエントリーをはてなブックマークに追加
facebooktwittergoogle_plusredditpinterestlinkedinmail

こんばんは、tapunです。

久しぶりの更新になってしまいました。今日は仕事でAWSのRun CommandでリモートからOSコマンドを実行させる方法について検証したので、メモします。

はじめに

今回は、イベントトリガーでOSコマンドを実行させる仕組みを作るためにLambdaを使えないかな~という構想のもと、まずはRun Commnadの検証をしました!

具体的には、S3にログが保存されたら、OSコマンドを実行させる!的なことをやりたいと思ってます。

やったこと

先にやっておくべきこと

※私はこれを忘れたので二度手間になりました

  1. Runコマンド用のIAMロールとユーザ設定
    参考:http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ssm-iam.html

    デフォルトのIAMポリシー”AmazonEC2RoleforSSM”を割り当てたロールを作成します。
    [ロールの作成]から[EC2]を選択して、上記のポリシーを割り当てます。

    IAM-SSM

    ここで作ったロールをこれから立ち上げるインスタンス作成時に割り当てます。

コマンド実行させるOSの準備

  1. EC2にUbuntuのインスタンスを作成します
    今回、私はWordPress入りのAMIをMarket Placeから選択してみました。
    >bitnami-wordpress-4.4-0-linux-ubuntu-14.04.3-x86_64-ebs-mp-dff9bfa7-e43e-4c06-bafd-756e9d331d18-ami-53682139.3 (ami-21d0fb4f)
    # Ubuntuじゃなくても、こちらに記載されてるOSなら何でもいいです
  2. インスタンスタイプを選択し、[次の手順:インスタンスの詳細の設定]を押します
  3. IAMロールで先ほど作成した”AmazonEC2RoleforSSM”ポリシーが割り当っているロールを選択します。
    ※インスタンスのIAMロールはインスタンス作成時にしか選択できないので、ここで設定し忘れると作り直しになります。
    Select-IAMRole
  4. そのままウィザードを進めてインスタンス作成を完了させます
    ※インスタンスからOutboundでインターネットに出れるように設定してください!

SSMエージェントのインストール

予めUser Dataに入れてもいいけど、OS立ち上げた後でもインストールできます。

A)UserDataからインストールさせる場合

こちらを参考にしましょう。

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-ssm-agent.html#d0e44905

Ubuntu(64bit)の場合はこんな感じ

#!/bin/bash
cd /tmp			
curl https://bucket-name.s3.amazonaws.com/latest/debian_amd64/amazon-ssm-agent.deb -o amazon-ssm-agent.deb
dpkg -i amazon-ssm-agent.deb

B)手動でインストールする場合

こちらを参考にしましょう。

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-ssm-agent.html#manual-agent-install

Ubuntu(64bit)の場合はこんな感じ

mkdir /tmp/ssm
curl https://bucket-name.s3.amazonaws.com/latest/debian_amd64/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb

※いずれの場合も、東京リージョンであれば「bucket-name」が「amazon-ssm-ap-northeast-1」に変わります。

status amazon-ssm-agent

 上記のコマンドを実行して、SSMエージェントが動いていることを確認します。

動いてなかったら、sudo start amazon-ssm-agentで起動しましょう

Run Commandを試します

  1. EC2のメニューの中にある”コマンド”を選択します。初めての場合は[コマンドを実行]をクリック
    command
  2. 今回はOSコマンドを実行するので、[AWS-runshellScript]を選択します。
  3. [インスタンスの選択]をクリックすると、SSMエージェントがインストールされているインスタンスの一覧が表示されます。
    1個表示されてますので、それを選択します。
    runcommand
  4. Commnads 欄に実行したいコマンドを入力します。
    今回は何でもいいので、
    echo Hi! This is Test!

    にしました。
    コマンドを入力したら、[実行]をクリックします。

  5. コマンド実行が成功したら、”View Result”をクリック
    result1
  6. コマンド実行が成功していることを確認します。
    出力結果を見てみます。
    result2
  7. ちゃんと出力されています!
    ifconfigとかでも、きちんとネットワーク情報が出力されていました~
    result3

まとめ

EC2インスタンスにSSMエージェントをインストールしておくことで、リモートからOSコマンドを実行させることが可能になりました!

次回は、イベントトリガーでLambda経由で実行するテストをしようと思っています。