プライベートサブネットのEC2にMackerelエージェントをSSMでインストールしてみた

Mackerelでプライベートサブネットに配置されているEC2を監視する機会があり、導入をSSMで行ったので、備忘録として残して書き残して置きたいと思います。
2019.08.21

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

ご機嫌いかがでしょうか、豊崎です。

Mackerelでプライベートサブネットに配置されているEC2を監視する機会があり、導入をSSMで行ったので、備忘録として残して書き残して置きたいと思います。

環境

ある環境においてオンプレミスとVPCがVPN接続されており、インターネット側からプライベートサブネットにあるEC2にSSHができない状況でした。現在、AWSではいくつかのサーバへのログイン方法がありますが、ここではお馴染み、AWS Systems ManagerのAWS-RunShellScriptでMackerelエージェントをインストールしました。

EC2について

  • Amazon Linux2 : amzn2-ami-hvm-2.0.20190618-x86_64-gp2
  • SSM Agentがインストールされている状態
  • NATGatewayがパブリックサブネットに配置されていてインターネット向けのアウトバウンド通信は可能
    • つまりSSMのパブリックエンドポイントとMackerelへメトリクス送信が可能

やってみた

まずはSSMを利用するためにEC2にアタッチするIAMRoleを作成していきます。

IAMRoleダッシュボードから左ペインのロールを選択して、ロールの作成から進んでいきます。

AWSサービス、EC2を選択し、次のステップに進みます。

ここではAWSのマネージドポリシーの「AmazonEC2RoleforSSM」を設定しました。

あとは特に設定せずに進んで「demo-mackerel-role」という名前でIAMRoleを作成しました。

作成したIAMRoleを対象のEC2にアタッチしました。 これでAWS Systems Managerを利用する準備が整いました。

AWS Systems Managerダッシュボードからコマンドの実行を行う前に、Mackerel側でエージェントインストール用のコマンド(APIKEY含む)をコピーしてきます。そのためにMackerelにログインしました。

左ペインからHostsを選択して、エージェントをインストールをクリックします。

OSをAmazon Linux2と選択し、対象のコマンド(APIKEY含む)をコピーしました。

ようやく、AWS Systems Managerからコマンドの実行(RunCommand)が実行できます。

AWS Systems Managerダッシュボードの左ペインからコマンドの実行を選択し、コマンドの実行を行います。

コマンドのドキュメントでAWS-RunShellScriptを選択します。

Commandsの項目に先ほどコピーしたコマンドをコピーします※先頭に"sudo"をつけるのを忘れないようにしてください。

実行するして成功となることを確認します。

Mackerelのダッシュボード側でもホストが追加されていることが確認できます。 あとはMackerel上で好きに設定を行えばOKです。

さいごに

今回はSSH通信できないケースでAWS Systems ManagerのRunCommandを利用してMackerel-Agentをインストールする方法をご紹介しました。誰かのお役に立てれば幸いです。