ちょっと話題の記事

【新機能】EC2に任意のコマンドを実行できるボタン「Run Command」がついにLinuxにも追加

2015.12.16

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

こんにちは、せーのです。 今日は地味に待っていたRun CommandボタンがLinuxにもついに適用されましたので早速ご紹介します。

Run Commandボタンって何

これは10月に出来た新機能で「マネージメントコンソール上から各種コマンドを実行できる」機能になります。こちらを使うとSSH等でサーバー内に入る事なく、マネージメントコンソール上から色々なコマンドが打てるようになりました。詳しくはこちらを御覧ください。

10月の時点ではWindowsのみでLinuxには「近々」ということだったのですが本日ついに出来るようになりました!!

主な機能

AWSが公表しているRun Commandで出来る主なことはこちらです。

  • シェルやスクリプトの実行
  • ユーザー、グループの追加
  • ユーザー、グループの権限変更
  • 実行中のサービス一覧の参照
  • サービスの停止、起動
  • システムリソースの参照
  • ログファイルの参照
  • アプリケーションのインストール、アンインストール
  • cronタスクの更新

どうでしょう。通常の運用はほぼこれでカバーできてしまっているように見えます。これがSSHアクセスなしで出来るとなるとオペレーション方法も大きく変わるのではないでしょうか。Bastionは要らなくなる??

前提条件

LinuxでRun Commandを使うにはいくつか前提条件がありますのでまずはこちらを押さえておきましょう。

使えるリージョン

Run Commandが使えるリージョンは現在

  • US East (N. Virginia)
  • US West (Oregon)
  • Europe (Ireland)

の3つになります。東京まだかなー。

サポートOS

Run CommandがサポートされるLinux OSは

  • Amazon Linux (64-bit) 2015.09, 2015.03, 2014.09, 2014.03
  • Ubuntu Server (64-bit) 14.04 LTS, 12.04 LTS
  • Red Hat Enterprise Linux (RHEL 64-bit) 7.x

となります。

SSMエージェントが必要

Linuxの立ち上げ時にSSMエージェント(Amazon EC2 Simple Systems Manager agent)のインストールが必要になります。こちらはUser Dataで次のようなコマンドを入れておくことでインストールできます。

Amazon Linux / RHEL

#!/bin/bash
yum -y update
curl https://[bucket-name].s3.amazonaws.com/latest/linux_amd64/amazon-ssm-agent.rpm -o amazon-ssm-agent.rpm
yum install -y amazon-ssm-agent.rpm

Ubuntu

#!/bin/bash
apt-get update -y --force-yes
curl https://bucket-name.s3.amazonaws.com/latest/debian_amd64/amazon-ssm-agent.rpm -o amazon-ssm-agent.deb
dpkg -i amazon-ssm-agent.deb

※[bucket-name]には各リージョンでVirginia[amazon-ssm-us-east-1]、Oregon[amazon-ssm-us-west-2]、Ireland[amazon-ssm-eu-west-1]を選んで入れます

IAM RoleでSSMの権限を追加

SSMのエージェントをEC2から操作するためにEC2にSSMを操作する権限を追加する必要があります。Run Commandを使うにはマネージドポリシーに[AmazonEC2RoleForSSM]というポリシーがあるので、こちらをIAM Roleに追加しておけばOKです。

所属するサブネットにはIGWをつける

EC2からインターネットへのアクセスが必要となりますので、EC2が所属しているサブネットにはインターネットゲートウェイ(IGW)をつけましょう。ちなみにEC2からのアクセスのみですのでOutboundがインターネットに出ていればInboundは閉じていても大丈夫です。

結果を保存するにはS3バケット

Windowsの時と同様にRun Commandの結果はS3バケットに保存できますので、バケットを作っておくと便利かと思います。

やってみた

それではやってみましょう。まずはSSMを触れるようなIAM Roleを作ります。マネージメントコンソールよりIAMを開き新規でIAM Roleを作成します。対象はEC2になります。

runcommandlinux1

つけるポリシーは[SSM]で検索して[AmazonEC2RoleForSSM]を選択します。

runcommandlinux2

こちらの権限でIAM Roleを作成します。

次にEC2の立ち上げです。今回はVirginiaリージョンでやってみます。Amazon Linuxを立ち上げます。

runcommandlinux3

先程作成したIAM RoleをRole部分に選択しUser Dataに上記の様なSSMのインストールコマンドを追加します。

出来上がったのがこちらになります。ではコマンドを打ち込んでみましょう。コマンドナビをクリックします。

runcommandlinux4

AWSおなじみのウェルカム画面からコマンドの登録をクリックします。

runcommandlinux5

選択肢に[Linux]のものが入ってきていますね!今回は単純にifconfigを打ち込みたいと思います。ここらへんはWindowsの時と変わりませんね。

runcommandlinux6

後は開始ボタンを押すとコマンドが開始されます。

runcommandlinux7

結果を見てみましょう。結果の出力リンクをクリックします。

runcommandlinux8

IPがキチンと取れていますね!

runcommandlinux9

ちなみにAWS CLIでも同じことが出来ます。今回のコマンドであれば

aws ssm send-command --document-name "AWS-RunShellScript" \
--instance-ids "i-20fb2991" \
--parameters '{"commands":["ifconfig"],"executionTimeout":["3600"]}' \
--timeout-seconds 600 \
--region us-east-1

と打ち込めばOKです。

まとめ

いかがでしたでしょうか。待ちに待った機能の登場ですね。年末年始で是非とも使いこなして実案件に使ってみましょう!!

参考リンク