【アップデート】Mackerelでタグを利用したロールの割り当てが可能になりました

Mackerelで2022/3/1にリリースされた「タグを利用したロールの割り当て機能」を使ってみました。
2022.04.11

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

みなさん、こんにちは。

AWS事業本部コンサルティング部の芦沢(@ashi_ssan)です。

2022/3/1のアップデートですが、Mackerelにタグを利用したロールの割り当て機能がリリースされました。

アップデートの概要は以下になります(上記アップデート資料からの引用)

  • AWSのリソースに事前に特定の書式でタグを設定しておけば、AWSインテグレーションによりホストが登録された際に、タグ情報より自動でサービス・ロールが設定されます。
    • 指定されたサービス・ロールが存在しない場合は、AWSインテグレーションが新しく作成します。
  • タグの書式は以下の通りです。
    • Key : mackerel-integration
    • Value : Service:Role [/Service:Role...]
  • 最初のリリースでは、以下のAWSサービスに対応します。
    • EC2
    • ELB
    • ALB
    • NLB
    • RDS
    • Lambda
    • ElastiCache
    • SQS
    • API Gateway

何がどう変わったの?

これまでは以下のような制約がありました。

  • 自動で単一のサービス・ロールを設定する場合は、デフォルトロールを使用する必要がある
    • デフォルトロールはAWSサービス(EC2、ALB、ECS等)毎に1つのデフォルトロールしか設定できない
    • つまり、デフォルトロールを使う場合、サービス毎に一律で同じ設定になってしまう
  • 自動で複数のサービス・ロールを設定する場合は、mackerel-agentのconfigファイルに書き込む必要がある(参考リンク)
    • Webコンソール上から操作できず、場合によってはEC2インスタンス等にログインして直接ファイル修正を行う必要がある

今回のアップデートにより、以下のように変わります。

  • 自動で単一のサービス・ロールを設定する場合は、mackerel-integrationタグから設定できる
    • デフォルトロールを使用せず、AWS側のタグで設定できる
  • 自動で複数のサービス・ロールを設定する場合は、mackerel-integrationタグから設定できる
    • 複数サービス・ロールであっても、AWS側のタグで設定できる

これまで、AWSインテグレーション機能を使って自動でサービスやロールを付与させる設定をするための制約がいくつかありましたが、このアップデートによって、よりシンプルな、より効率的なサービス・ロール設定が可能になります。

リリースから少し時間が経ってしまいましたが、とても気になるアップデートなので実際に試してみます。

EC2インスタンスを利用して検証を行ってみます。

事前準備

事前にAWSインテグレーション設定を実施しておきます。

私の検証環境では、以下を指定しました。

  • リージョン:ap-northeast-1
  • メトリックを収集するサービス:EC2
    • デフォルトロールは指定しません
  • (タグを指定して登録するホストを絞り込む:mackerel-enable:true)
    • (特定のインスタンスのみを監視対象にするため設定しました)
    • (リージョン配下の全EC2インスタンスを監視対象にする場合は不要です)

また、サービスおよびロールを作成します。

私の検証環境では、以下を作成しました。

  • サービス:DevIO
  • ロール:Role-1,Role-2

やってみた

以下の3パターンでアップデートの検証を行ってみます。

  • タグで既存のサービス・ロールを1つ指定してみる
  • タグで既存のサービス・ロールを2つ指定してみる
  • タグで存在しないサービス・ロールを指定してみる

タグで既存のサービス・ロールを1つ指定してみる

監視対象のインスタンスへ以下のタグを設定します

  • タグ
    • key:mackerel-integration
    • value:DevIO:Role-1

タグの設定後、しばらく待ち、監視対象ホストのページへアクセスします。

以下のようにホストにサービス・ロールが登録されたことを確認できました。

設定したサービス(DevIO)のページへアクセスします。

ロール(Role-1)側からも、ホストが登録できていることが確認できます。

タグで既存のサービス・ロールを2つ指定してみる

監視対象のインスタンスへ以下のタグを設定します

  • タグ
    • key:mackerel-integration
    • value:DevIO:Role-1/DevIO:Role-2
      • タグを2つ指定する場合は"/(スラッシュ)"区切りで2つのサービス:ロールを記載します。

タグの設定後、しばらく待つと、以下のようにホストにサービス・ロールが登録されたことを確認できました。

ロール(Role-1、Role-2)側からも、ホストが登録できていることが確認できます。

タグで存在しないサービス・ロールを指定してみる

監視対象のインスタンスへ以下のタグを設定します

  • タグ
    • key:mackerel-integration
    • value:Sonzaishinai-Service:Sonzaishinai-Role

タグの設定後、しばらく待つと、以下のようにホストにサービス・ロールが登録されたことを確認できました。

サービスおよびロール(Sonzaishinai-Service:Sonzaishinai-Role)が新規作成されており、ホストが登録できていることが確認できます。

Q&A

以下公式ドキュメントからの引用です。

  • デフォルトロールとmackerel-integration タグを同時に設定した場合、どうなりますか?
    • mackerel-integration タグの内容を優先するため、デフォルトロールは設定されません(既に割り当てられているサービス・ロールは残ります)。デフォルトロールも割り当てたい場合は、上記の複数ロール設定をご利用ください。
  • デフォルトロールとどう使い分けますか?
    • mackerel-integration タグによるサービス・ロール設定では、AWS のリソースとそれに紐付けたいサービス・ロールをAWS のリソースのタグとして設定するため、AWS のリソース単位でのサービス・ロールの管理ができます。タグによる設定では、1つのAWSのサービスに複数のサービス・ロールを割り当てるようなより細かな設定が可能なため基本的にはこちらの利用を推奨します。デフォルトロールは、AWSのサービス単位でサービス・ロールを分ける必要がないものに適しています。

その他Q&Aについては公式ドキュメントをご覧ください。

まとめ

  • 監視対象のリソースに、AWSのタグmackerel-integrationを設定することでMackerel側のサービス・ロールを設定できるようになった
  • 従来の設定方法(デフォルトロール、mackerel-agent)ではできなかった、柔軟で使いやすいサービス・ロール設定が可能になりました

最後に

本エントリでは、Mackerelのアップデートで追加されたタグを利用したロールの割り当て機能について紹介しました。

みなさんもぜひ試してみてください。

以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。