Amazon Managed Grafana の Grafana バージョン 9 以降でプラグインを追加する場合は、プラグイン管理オプションを有効にする必要があったので対応してみた

2023.12.28

こんにちは、CX 事業本部 Delivery 部の若槻です。

4 ヶ月ほど前のAmazon Managed Grafana(AMG)のアップデートで、Grafana ワークスペースバージョン 9.4 を選択できるようになりました。

そしてこのアップデートにより AMG ではバージョン 9 以降で プラグイン管理オプション 機能が追加され、ワークスペースで追加のプラグインを使用する場合は、このオプションの有効化が必要になりました。

ワークスペースには既定では Prometheus や CloudWatch などのコアデータソースプラグインのみがインストールされていますが、プラグイン管理オプションを有効化することにより、追加のプラグインをインストールできるようになります。

2024/01/30 追記:v9 で利用可能なこの追加のプラグインは「コミュニティプラグイン」と言うそうです。

試してみた

予め作成したバージョン 9.4 のワークスペースで試してみます。

オプション有効化前はプラグインを追加できない

既定ではプラグイン管理オプションは無効化されています。

ワークスペースにログインします。

プラグインメニューで追加したいプラグインを検索することは可能です。

しかしプラグインの追加は制限されているため、インストールメニューは表示されません。

オプション有効化

マネジメントコンソールからプラグイン管理オプションを有効化します。有効化手順はこちらのドキュメントに記載があります。

プラグイン管理オプションのメニューに移動します。

オプションを有効化して保存します。

ワークスペースのステータスがアップデート中となります。完了までに数分ほど掛かります。

プラグインを追加

アップデートの完了後に、ワークスペース内のプラグインに再度アクセスすると、インストールメニューが表示されるようになりました。(ワークスペースへの再ログインは不要でした)

プルダウンメニューから過去のバージョンを選択することも可能です。

インストールをクリックして、追加を開始します。

追加できました。

データソース追加メニューでも追加可能となっています。

データソースとして追加できました。

AWS CDK で有効化する場合

AWS CDK で CfnWorkspace クラスを使用してワークスペースを構築する際にプラグイン管理オプションを有効化する場合は、pluginAdminEnabled プロパティを true に設定します。

lib/cdk-sample-stack.ts

import {
  aws_grafana,
  aws_iam,
  Stack,
  StackProps,
  CfnOutput,
} from 'aws-cdk-lib';
import { Construct } from 'constructs';

interface CdkSampleStackProps extends StackProps {
  readonly grafanaWorkspaceSamlAdminRoles: string[];
  readonly grafanaWorkspaceSamlEditorRoles: string[];
  readonly grafanaWorkspaceSamlIdpMetadataUrl: string;
}

export class CdkSampleStack extends Stack {
  constructor(scope: Construct, id: string, props: CdkSampleStackProps) {
    super(scope, id, props);

    const region = this.region;
    const accountId = this.account;

    // Grafana Workspace 用の IAM Role を作成
    const principal = new aws_iam.ServicePrincipal(
      'grafana.amazonaws.com'
    ).withConditions({
      StringEquals: {
        'aws:SourceAccount': accountId,
      },
      StringLike: {
        'aws:SourceArn': `arn:aws:grafana:${region}:${accountId}:/workspaces/*`,
      },
    });
    const grafanaRole = new aws_iam.Role(this, 'GrafanaRole', {
      assumedBy: principal,
    });

    // Grafana Workspace を作成
    const cfnWorkspace = new aws_grafana.CfnWorkspace(this, 'workspace', {
      accountAccessType: 'CURRENT_ACCOUNT',
      authenticationProviders: ['SAML'],
      permissionType: 'SERVICE_MANAGED',
      roleArn: grafanaRole.roleArn,
      samlConfiguration: {
        assertionAttributes: {
          name: 'nickname',
          login: 'email',
          email: 'email',
          role: 'email', // どの SAML 属性をロールのアサーションに使用するか(Assertion attribute role)を指定
        },
        loginValidityDuration: 1440,
        roleValues: {
          admin: props.grafanaWorkspaceSamlAdminRoles,
          editor: props.grafanaWorkspaceSamlEditorRoles,
        },
        idpMetadata: {
          url: props.grafanaWorkspaceSamlIdpMetadataUrl,
        },
      },
      pluginAdminEnabled: true,
      grafanaVersion: '9.4',
    });

    const workspaceId = cfnWorkspace.ref;

    // Grafana workspace URL の出力
    new CfnOutput(this, 'WorkspaceServiceProviderIdentifier', {
      value: `https://${workspaceId}.grafana-workspace.${region}.amazonaws.com`,
    });
  }
}

おわりに

Amazon Managed Grafana の Grafana バージョン 9 以降でプラグインを追加する場合は、プラグイン管理オプションを有効にする必要があったので対応してみました。

AWS IoT TwinMaker や IoT SiteWise など一部の AWS サービスへデータソースとして接続する場合も、このオプションを有効化する必要があるので、必要に応じて設定するようにしましょう。

参考

以上