【新機能】EC2に任意のコマンドを実行できるボタン「Run Command」がついにLinuxにも追加
こんにちは、せーのです。 今日は地味に待っていた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になります。
つけるポリシーは[SSM]で検索して[AmazonEC2RoleForSSM]を選択します。
こちらの権限でIAM Roleを作成します。
次にEC2の立ち上げです。今回はVirginiaリージョンでやってみます。Amazon Linuxを立ち上げます。
先程作成したIAM RoleをRole部分に選択しUser Dataに上記の様なSSMのインストールコマンドを追加します。
出来上がったのがこちらになります。ではコマンドを打ち込んでみましょう。コマンドナビをクリックします。
AWSおなじみのウェルカム画面からコマンドの登録をクリックします。
選択肢に[Linux]のものが入ってきていますね!今回は単純にifconfigを打ち込みたいと思います。ここらへんはWindowsの時と変わりませんね。
後は開始ボタンを押すとコマンドが開始されます。
結果を見てみましょう。結果の出力リンクをクリックします。
IPがキチンと取れていますね!
ちなみに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です。
まとめ
いかがでしたでしょうか。待ちに待った機能の登場ですね。年末年始で是非とも使いこなして実案件に使ってみましょう!!
参考リンク
- https://aws.amazon.com/about-aws/whats-new/2015/12/ec2-run-command-now-supports-linux/
- https://aws.amazon.com/blogs/aws/ec2-run-command-update-now-available-for-linux-instances/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+AmazonWebServicesBlog+%28Amazon+Web+Services+Blog%29
- http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/remote-commands-prereq.html
- http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ssm-iam.html
- http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-ssm-agent.html