Grafana v10.4 の Amazon Managed Grafana ワークスペースを AWS CDK で構築してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、製造ビジネステクノロジー部の若槻です。
少し前のアップデートですが、2024/5/15 のアナウンスで Amazon Managed Grafana で Grafana バージョン 10.4 がサポートが開始されました。
Grafana v10.4 自体は同年 3 月に Grafana Labs で v10 の最終マイナーバージョンとしてリリースされていたものとなります。
ちなみに Amazon Managed Grafana で新バージョンがサポートされるタイミングは、今までのバージョン履歴を見る限り Grafana Labs で最後のマイナーバージョンがリリースされたタイミング後となるようです。
Amazon Managed Grafana の v10.4 で追加された機能は以下で確認可能です。
今回は、この Grafana v10.4 の Amazon Managed Grafana ワークスペースを AWS CDK で構築してみました。
試してみた
ワークスペースを作成する(Grafana バージョン未指定の場合)
Amazon Managed Grafana のワークスペースを作成するには、aws-grafana.CfnWorkspace Construct を使用します。Cfn とある通り現在適用されているのは L1 Construct のみです。
Grafana Workspace の CloudFormation ドキュメントを参照すると、GrafanaVersion というプロパティがありますが、これはオプションであり、また既定値は無いようです。
そこでまずは Grafana バージョンを指定せずにワークスペースを作成してみます。下記がその CDK コードです。
import * as grafana from 'aws-cdk-lib/aws-grafana';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class CdkSampleStack extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);
    // ワークスペースによる AWS リソースへのアクセス許可を付与する IAM Role を作成
    const principal = new iam.ServicePrincipal(
      'grafana.amazonaws.com'
    ).withConditions({
      StringLike: {
        'aws:SourceArn': `arn:aws:grafana:${this.region}:${this.account}:/workspaces/*`,
      },
    });
    const grafanaRole = new iam.Role(this, 'GrafanaWorkspaceRole', {
      assumedBy: principal,
    });
    // Grafana ワークスペースの作成
    new grafana.CfnWorkspace(this, 'GrafanaWorkspace', {
      accountAccessType: 'CURRENT_ACCOUNT',
      authenticationProviders: ['SAML'],
      permissionType: 'SERVICE_MANAGED',
      roleArn: grafanaRole.roleArn,
      pluginAdminEnabled: true,
      // Grafana バージョンは指定しない
    });
  }
}
デプロイを実行すると、CloudFormation スタックでワークスペースが作成されました。

Amazon Managed Grafana のダッシュボードから作成されたワークスペースを確認すると、バージョン 10.4 で作成されていました。

AWS CDK で構築して Amazon Managed Grafana ワークスペースのバージョンは、既定で v10.4 が適用されるようです。
ワークスペースを作成する(Grafana バージョンを明示的に指定する場合)
CfnWorkspace の grafanaVersion で v10.4 を明示的にした場合はどうなるでしょうか。
以下のように CDK コードを修正します。
$ git diff
diff --git a/lib/cdk-sample-stack.ts b/lib/cdk-sample-stack.ts
index fe79c20..b90306d 100644
--- a/lib/cdk-sample-stack.ts
+++ b/lib/cdk-sample-stack.ts
@@ -26,6 +26,7 @@ export class CdkSampleStack extends cdk.Stack {
       permissionType: 'SERVICE_MANAGED',
       roleArn: grafanaRole.roleArn,
       pluginAdminEnabled: true,
+      grafanaVersion: '10.4',
     });
   }
 }
CDK Diff を確認すると、CloudFormation 上では GrafanaVersion プロパティが追加されるという差分が出ました。Grafana バージョンが既定で最新バージョンになるのは Amazon Managed Grafana 側の仕様のようです。
$ npx cdk diff
Stack CdkSampleStack
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Resources
[~] AWS::Grafana::Workspace GrafanaWorkspace GrafanaWorkspace
 └─ [+] GrafanaVersion
     └─ 10.4
✨  Number of stacks with differences: 1
デプロイをするとワークスペースの更新が走りますが、更新完了後の Grafana バージョンはもちろん 10.4 のままです。

使いたいバージョンが最新でなくなった場合でも、このように明示的にバージョンを指定することにより利用が可能となります。
ダッシュボードにログインする
下記を参考にしてワークスペースの SAML を設定し、ダッシュボードにログインしてみます。
参考までに、SAML を構成したワークスペースの CDK コードは以下のようになります。
import * as grafana from 'aws-cdk-lib/aws-grafana';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
const GRAFANA_WORKSPACE_SAML_ADMIN_ROLE =
  process.env.GRAFANA_WORKSPACE_SAML_ADMIN_ROLE || '';
const GRAFANA_WORKSPACE_SAML_EDITOR_ROLE =
  process.env.GRAFANA_WORKSPACE_SAML_EDITOR_ROLE || '';
const GRAFANA_WORKSPACE_SAML_IDP_METADATA_URL =
  process.env.GRAFANA_WORKSPACE_SAML_IDP_METADATA_URL || '';
export class CdkSampleStack extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);
    // ワークスペースによる AWS リソースへのアクセス許可を付与する IAM Role を作成
    const principal = new iam.ServicePrincipal(
      'grafana.amazonaws.com'
    ).withConditions({
      StringLike: {
        'aws:SourceArn': `arn:aws:grafana:${this.region}:${this.account}:/workspaces/*`,
      },
    });
    const grafanaRole = new iam.Role(this, 'GrafanaWorkspaceRole', {
      assumedBy: principal,
    });
    // Grafana ワークスペースの作成
    new grafana.CfnWorkspace(this, 'GrafanaWorkspace', {
      accountAccessType: 'CURRENT_ACCOUNT',
      authenticationProviders: ['SAML'],
      permissionType: 'SERVICE_MANAGED',
      roleArn: grafanaRole.roleArn,
      pluginAdminEnabled: true,
      grafanaVersion: '10.4',
      samlConfiguration: {
        assertionAttributes: {
          name: 'nickname',
          login: 'email',
          email: 'email',
          role: 'email',
        },
        loginValidityDuration: 1440,
        roleValues: {
          admin: [GRAFANA_WORKSPACE_SAML_ADMIN_ROLE],
          editor: [GRAFANA_WORKSPACE_SAML_EDITOR_ROLE],
        },
        idpMetadata: {
          url: GRAFANA_WORKSPACE_SAML_IDP_METADATA_URL,
        },
      },
    });
  }
}
ダッシュボードにログインすると、Grafana バージョンが 10.4.1 であることが確認できました。

おわりに
Grafana v10.4 の Amazon Managed Grafana ワークスペースを AWS CDK で構築してみました。
新バージョンのサポートは嬉しいですが、最も心待ちにしているのはやはり Cognito User Pool によるユーザー認証のサポートです。引き続きアップデートをウォッチしていきたいと思います。
参考
以上







