Skip to content

Commit dd25e81

Browse files
committed
add graviton pattern
1 parent 2d1e525 commit dd25e81

File tree

3 files changed

+103
-1
lines changed

3 files changed

+103
-1
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { configureApp } from '../lib/common/construct-utils';
2+
import SingleNewEksOpenSourceGravitonObservabilityConstruct from '../lib/single-new-eks-opensource-observability-construct/graviton-index';
3+
4+
const app = configureApp();
5+
6+
new SingleNewEksOpenSourceGravitonObservabilityConstruct(app, 'single-new-eks-opensource-graviton')

bin/single-new-eks-opensource-observability.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ import { configureApp } from '../lib/common/construct-utils';
33

44
const app = configureApp();
55

6-
new SingleNewEksOpenSourceobservabilityConstruct(app, 'single-new-eks-opensource');
6+
new SingleNewEksOpenSourceobservabilityConstruct(app, 'single-new-eks-opensource');
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import { Construct } from 'constructs';
2+
import { EksBlueprint, utils } from '@aws-quickstart/eks-blueprints';
3+
import * as blueprints from '@aws-quickstart/eks-blueprints';
4+
import { GrafanaOperatorSecretAddon } from './grafanaoperatorsecretaddon';
5+
import * as amp from 'aws-cdk-lib/aws-aps';
6+
import * as eks from 'aws-cdk-lib/aws-eks';
7+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
8+
import * as assert from "assert";
9+
10+
export default class SingleNewEksOpenSourceGravitonObservabilityConstruct {
11+
constructor(scope: Construct, id: string) {
12+
// AddOns for the cluster
13+
const stackId = `${id}-observability-accelerator`;
14+
// All Grafana Dashboard Default URLs
15+
const clusterDefaultDashUrl = "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/cluster.json";
16+
const kubeletDefaultDashUrl = "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/kubelet.json";
17+
const namespaceWorkloadsDefaultDashUrl = "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/namespace-workloads.json";
18+
const nodeExporterDefaultDashUrl = "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/nodeexporter-nodes.json";
19+
const nodesDefaultDashUrl = "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/nodes.json";
20+
const workloadsDefaultDashUrl = "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/workloads.json";
21+
22+
const account = process.env.COA_ACCOUNT_ID! || process.env.CDK_DEFAULT_ACCOUNT!;
23+
const region = process.env.COA_AWS_REGION! || process.env.CDK_DEFAULT_REGION!;
24+
const ampWorkspaceName = process.env.COA_AMP_WORKSPACE_NAME! || 'observability-amp-Workspace';
25+
const ampPrometheusEndpoint = (blueprints.getNamedResource(ampWorkspaceName) as unknown as amp.CfnWorkspace).attrPrometheusEndpoint;
26+
27+
const amgEndpointUrl = process.env.COA_AMG_ENDPOINT_URL;
28+
29+
// All Grafana Dashboard URLs from `cdk.json` if present
30+
const clusterDashUrl: string = utils.valueFromContext(scope, "cluster.dashboard.url", clusterDefaultDashUrl);
31+
const kubeletDashUrl: string = utils.valueFromContext(scope, "kubelet.dashboard.url", kubeletDefaultDashUrl);
32+
const namespaceWorkloadsDashUrl: string = utils.valueFromContext(scope, "cluster.dashboard.url", namespaceWorkloadsDefaultDashUrl);
33+
const nodeExporterDashUrl: string = utils.valueFromContext(scope, "kubelet.dashboard.url", nodeExporterDefaultDashUrl);
34+
const nodesDashUrl: string = utils.valueFromContext(scope, "cluster.dashboard.url", nodesDefaultDashUrl);
35+
const workloadsDashUrl: string = utils.valueFromContext(scope, "kubelet.dashboard.url", workloadsDefaultDashUrl);
36+
37+
Reflect.defineMetadata("ordered", true, blueprints.addons.GrafanaOperatorAddon);
38+
const addOns: Array<blueprints.ClusterAddOn> = [
39+
new blueprints.addons.AwsLoadBalancerControllerAddOn(),
40+
new blueprints.addons.VpcCniAddOn(),
41+
new blueprints.addons.CoreDnsAddOn(),
42+
new blueprints.addons.KubeProxyAddOn("v1.27.1-eksbuild.1"),
43+
new blueprints.addons.CertManagerAddOn(),
44+
new blueprints.addons.ExternalsSecretsAddOn(),
45+
new blueprints.addons.PrometheusNodeExporterAddOn(),
46+
new blueprints.addons.KubeStateMetricsAddOn(),
47+
new blueprints.addons.CloudWatchLogsAddon({
48+
logGroupPrefix: `/aws/eks/${stackId}`,
49+
logRetentionDays: 30
50+
}),
51+
new blueprints.addons.AdotCollectorAddOn(),
52+
new blueprints.addons.AmpAddOn({
53+
ampPrometheusEndpoint: ampPrometheusEndpoint,
54+
}),
55+
new blueprints.addons.XrayAdotAddOn(),
56+
new blueprints.addons.GrafanaOperatorAddon({
57+
version: 'v5.0.0-rc3'
58+
}),
59+
new blueprints.addons.FluxCDAddOn({
60+
bootstrapRepo: {
61+
repoUrl: 'https://github.com/aws-observability/aws-observability-accelerator',
62+
name: "grafana-dashboards",
63+
targetRevision: "main",
64+
path: "./artifacts/grafana-operator-manifests/eks/infrastructure"
65+
},
66+
fluxTargetNamespace: "grafana-operator",
67+
bootstrapValues: {
68+
"AMG_AWS_REGION": region,
69+
"AMP_ENDPOINT_URL": ampPrometheusEndpoint,
70+
"AMG_ENDPOINT_URL": amgEndpointUrl,
71+
"GRAFANA_CLUSTER_DASH_URL" : clusterDashUrl,
72+
"GRAFANA_KUBELET_DASH_URL" : kubeletDashUrl,
73+
"GRAFANA_NSWRKLDS_DASH_URL" : namespaceWorkloadsDashUrl,
74+
"GRAFANA_NODEEXP_DASH_URL" : nodeExporterDashUrl,
75+
"GRAFANA_NODES_DASH_URL" : nodesDashUrl,
76+
"GRAFANA_WORKLOADS_DASH_URL" : workloadsDashUrl
77+
},
78+
}),
79+
new GrafanaOperatorSecretAddon(),
80+
];
81+
82+
const mngProps: blueprints.MngClusterProviderProps = {
83+
version: eks.KubernetesVersion.of("1.27"),
84+
instanceTypes: [new ec2.InstanceType("m7g.large")],
85+
amiType: eks.NodegroupAmiType.AL2_ARM_64,
86+
}
87+
88+
EksBlueprint.builder()
89+
.account(account)
90+
.region(region)
91+
.resourceProvider(ampWorkspaceName, new blueprints.CreateAmpProvider(ampWorkspaceName, ampWorkspaceName))
92+
.clusterProvider(new blueprints.MngClusterProvider(mngProps))
93+
.addOns(...addOns)
94+
.build(scope, stackId);
95+
}
96+
}

0 commit comments

Comments
 (0)