Grafana v10.4 の Amazon Managed Grafana ワークスペースを AWS CDK で構築してみた
こんにちは、製造ビジネステクノロジー部の若槻です。
少し前のアップデートですが、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 によるユーザー認証のサポートです。引き続きアップデートをウォッチしていきたいと思います。
参考
以上