[アップデート]EC2 Run Commandがクロスプラットフォームで利用可能になりました!AWS以外でのクラウド、オンプレミス環境でも使えます!

2016.07.07

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

コンニチハ、千葉です。

本日7/7はクラスメソッド創立記念日でもあり、私の誕生日でもあります。とってもめでたいのでブログを書いてお祝いです!この後も記念日ブログラッシュは続きます!

ということで!EC2 Run Commandにアップデートがありました!

EC2 Run CommandがAWS以外のクラウドや、VMware ESXi、Hyper-V、オンプレミスサーバ等色々なプラットフォームでも利用可能となりました。もちろん、Linux、Windowsどちらも利用可能です。

ハイブリット環境で運用していて、サーバへ対し同じアクションを何度も行いたい場合はかなり便利なのではないでしょうか。また、EC2 Run Commandの監査ログはCloudTrailで取得可能ですし、IAMによるアクセス制御も可能なため、セキュリティとしてのメリットもあります。

EC2 Run Commandに関する過去記事も合わせて確認!!

今回は、どのようにすれば利用できるのか試してみました。

手順

今回は、某クラウド上にWindowsインスタンスを起動して、AWSからコマンドを発行してみました。手順は以下となります。

  • マネージドインスタンスアクティベーション
  • SSMエージェントのインストール

前提条件については、LinuxWindowsでご確認ください。

インターネットへのアウトバウンド接続があればokそうです。

やってみた

マネージドインスタンスアクティベーション

EC2のコンソールから、Activationsを選択

20160705-runcommando-cross-1

Run a commandをクリック

20160705-runcommando-cross-2

Registration Limitに管理対象となるサーバー数、Expiration DateにRun Commandが有効な期間を入力します。また、Run Command用のIAMロールが自動で作成されます。

20160705-runcommando-cross-3

Activation CodeActivation IDが払い出されるのでメモしておきます。

20160705-runcommando-cross-4

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

今回は、某クラウド上にWindows2012のインスタンスを作成しました。某クラウド上のインスタンスに、SSMエージェントをインストールしてみます。

AWS Tools for Windows PowerShellをインストールします。

20160705-runcommando-cross-5

AWS Tools for Windows PowerShellを起動して、以下のコマンドをコピペします。(AWS Tools for Windows PowerShell起動時にアクセスキーの入力を求められますが未入力でも大丈夫でした)

以下の項目は環境に合わせて変更します。

  • https://amazon-ssm-region.s3.amazonaws.com/のregion。東京の場合は、https://amazon-ssm-ap-northeast-1.s3.amazonaws.com/
  • CODE=codeのcode。先ほど取得したActivation Codeを指定
  • ID=idのid。先ほど取得したActivation IDを指定
  • REGION=regionのregion。東京の場合はap-northeast-1を指定
$dir = $env:TEMP + "\ssm"
New-Item -ItemType directory -Path $dir
cd $dir
(New-Object System.Net.WebClient).DownloadFile("https://amazon-ssm-region.s3.amazonaws.com/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir + "\AmazonSSMAgentSetup.exe")
Start-Process .\AmazonSSMAgentSetup.exe -ArgumentList @("/q", "/log", "install.log", "CODE=code", "ID=id", "REGION=region") -Wait
Get-Content ($env:ProgramData + "\Amazon\SSM\InstanceData\registration")
Get-Service -Name "AmazonSSMAgent"

上記コマンド実行後に、マネジメントコンソールを覗いてみると...

20160705-runcommando-cross-6

Managed Instanceに表示されました!!!

コマンドを実行してみた

hostnameコマンドを実行して、ホスト名を取得してみます。

20160705-runcommando-cross-7

取得できました!!

20160705-runcommando-cross-8

最後に

某クラウド上のインスタンスに、AWSコンソールから簡単に操作することを確認できました。ハイブリットクラウドやマルチクラウド環境での運用負荷軽減の効果が期待できそうです。 Windowsアップデートもマネジメントコンソールからボタンポチで実行できるので定期的な運用項目に対して自動化して効率化が期待できます。

参考

http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/execute-remote-commands.html