オンプレミス・他クラウドでも大丈夫!AWS Systems Managerでマシンなどを一括管理する
こんにちは、最近Savings Plansを購入した(※)まると(@MaruDevG)です。
前回と同じく自分で運営しているサービスに関連して、ちょっと弄った話です。
※前回の記事はこちら
(先に)この記事のまとめ・伝えたいこと
- オンプレミスでも使えるサービスがある
- Systems Managerを利用することでクラウド・オンプレミスのノードを一括で管理できる
- コマンドの一斉実行ができ非常に便利(ほか)
課題
本題です。現状、自身が運営しているサービスは図の構成を取っています。
※かなりざっくりと書いています
個人的にはせっかくAWSを触っているので、全てAWSにまとめたい気持ちもありますが、趣味で運用しているもののため、コスト効率を重視して上記の構成となりました。
サーバーレスアーキテクチャではなく、VPSやオンプレミスなどを利用しているため、OSやミドルウェアのパッチが必要となります。
つい最近まではマシン一つ一つに対し、SSH接続を行なっていたのですが、サーバー台数がそこそこ多く、作業に30分〜1時間ほどかかっていました。
アップデートとかであれば定期的に実行...でも良いのですが、イベントであったり特定のコンテンツが盛り上がっている、年末年始などではアクティブユーザ数が増えるため、スケジュールを組みつつ作業する必要がありました。
要件
今回やりたいこととしては、以下の通りです。
- クラウド・オンプレミス関わらず、複数サーバーにまたがって一括でコマンドを実行したい
- OSやミドルウェアなどのパッチが適用されているか確認したい
- マネージドサービス、ツールを使いたい
- 趣味の範囲なので、ある程度コストは抑えたい
AWS Systems Managerで解決する
タイトルの伏線回収にはなりますが、上記の要件を満たすにあたり、AWS Systems Manager(SSM※)を利用します。
※元々はAmazon Simple Systems Managerという名前でした。旧名称の頭文字を取ってSSMと記載されることが多いです。
AWS Systems Managerとは
EC2インスタンスだけでなく、オンプレミス・他クラウド環境など、複数マシン(ノード)をAWS上で一元的に管理できるサービスです。
パッチ管理やコマンドの実行、リモート接続など運用に関連する操作を行うことができます。
AWS Systems Managerは主に以下の機能から構成されます。
- ノードツール
- コンプライアンス
- ディストリビューター
- フリートマネージャー
- ハイブリッドアクティベーション
- インベントリ
- パッチマネージャー
- Run Command
- セッションマネージャー
- ステートマネージャー
- 変更管理ツール
- 自動化
- カレンダーの変更
- 変更マネージャー
- ドキュメント
- メンテナンスウィンドウ
- 高速セットアップ
- アプリケーションツール
- AppConfig
- アプリケーションマネージャー
- パラメータストア
- オペレーションツール
- CloudWatch ダッシュボード
- エクスプローラー
- インシデントマネージャー
- OpsCenter
全て説明しようとすると冗長になるため、各機能の概要については、以下のAWSドキュメントをご確認ください。
オンプレミス、他クラウドのマシンをAWS Systems Managerに登録する
Amazon EC2の場合、SSM AgentがプリインストールされているAMIを使用することで、AWS Systems Managerに自動登録されます。
一方で、SSM AgentがプリインストールされていないAMIやオンプレミスのマシン、他クラウドのマシンを利用する場合は、手動でインストールを行う必要があります。
また、オンプレミスのマシン、他クラウドのマシンを利用する場合はSSM Agentのインストールに加えて、ハイブリッドアクティベーションと呼ばれる機能を使用して、登録する必要があります。
オンプレミスのマシンを登録するまで
以下のフローで行います。
- ハイブリッドアクティベーションより、登録用の各種コードの発行
- SSM Agentのインストール、セットアップ
- 完了
本記事では実際にオンプレミスインスタンスを登録するまでやってみます。
やってみる
それでは、実際にやってみましょう。
最初にSystems Managerコンソールから、「ノードツール」>「ハイブリッドアクティベーション」を選択し、「アクティベーションの作成」の選択します。
その後、アクティベーションの説明(名前)など必要な項目を埋めていきます。
必要な項目を埋めたら、アクティベーションの作成をクリックします。
すると、アクティベーションコードとIDが発行されるので、別の場所にコピーしておきます。(この後必要になります。)
これで、登録の準備は完了です。
続いて。マシン側でSSM Agentのインストール、セットアップを行います。
また、先ほど発行されたアクティベーションコードとIDを入力します。
Ubuntuの場合、以下のコマンドとなります。
sudo snap install amazon-ssm-agent --classic
sudo systemctl stop snap.amazon-ssm-agent.amazon-ssm-agent.service
sudo /snap/amazon-ssm-agent/current/amazon-ssm-agent -register -code "<アクティベーションコード>" -id "<アクティベーションID>" -region "ap-northeast-1"
sudo systemctl start snap.amazon-ssm-agent.amazon-ssm-agent.service
これで完了です。
OS毎にコマンドが異なるので、詳細はAWS公式ドキュメントを確認してください。
正しく登録されていれば、Systems Managerコンソールのフリートマネージャーにノードが表示されます。
これでオンプレミスインスタンスのSystems Managerへの登録は完了です。
制限事項
登録に料金が発生しない、オンプレミスインスタンスティアがスタンダードの場合、アカウントごとにリージョンあたり1,000台まで登録できます。
この上限を超えたい場合、有償の「アドバンスド」に切り替える必要があります。
コマンド実行する
複数のマシン(ノード)に対して、一括でコマンドを実行したい場合、Run Commandを使用します。
例えば複数のサーバーに対して、メンテナンススクリプトやアップデートの確認、実行などのユースケースが挙げられます。
やってみる
それではやってみましょう。
分かりやすく説明するために、今回はOS/パッケージのアップデートを行なっていきます。
コマンドを実行するには「ノードツール」>「Run Command」を選択し、右上にある「Run Command」をクリックします。
今回登録したノードはUbuntu Serverのため、コマンドドキュメント(実行するコマンドの種類)は「AWS-RunShellScript」を選択します。
続いて、実行したいコマンドを「コマンドのパラメータ」>「Commands」に記述します。
コマンドを記述したら、コマンドを実行させたいノードを選択して、残りのオプションは省略し、一番下にある「実行」をしてみます。
※実際に動いているシステムでは、何のために実行したか分かりやすくこメンドを記述することを推奨します。
実行を押すと、選択したノード上でコマンドが実行されます。
インスタンスIDをクリックすると、実行時の出力なども確認できます。
※画像では仮でEC2上にインスタンスを構築したため、EC2向けのアップデートサーバーに接続されています。
Run Commandを実行することで、マネージドでノードを跨いでコマンドを実行できるため非常に便利です。
メンテナンス用シェルスクリプトなどを作成して実行するといったユースケースなどに有効です。
終わりに
今回、オンプレミス環境のもの一括でAWSで管理することができました。
実はこの記事を書いた朝4:30頃にサービスのメンテナンスをしてきたのですが、今まで1時間前から準備していたものが5分ほどで完了できました。
オンプレミス向けのサービスは他にもあるので、ぜひ使っていきたいです。
クラウド、というと全てそこで完結する必要がある、と思うことがあるかもしれませんが、クラウドとオンプレミスのハイブリッド構成向けでも便利なサービスをいくつも提供しています。
いきなり100%クラウドにするのではなく、まずは使えるところから使ってみて、クラウド/オンプレミス両方のメリットを得るのが、はじめの一歩として良いと思います。
以上、まるとでした。