UNPKG

@studion/infra-code-blocks

Version:
59 lines (58 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.XRayConnection = void 0; const aws = require("@pulumi/aws"); const pulumi = require("@pulumi/pulumi"); const grafana = require("@pulumiverse/grafana"); const resolve_aws_region_1 = require("../../../shared/resolve-aws-region"); const connection_1 = require("./connection"); class XRayConnection extends connection_1.GrafanaConnection { name; dataSource; rolePolicy; constructor(name, args, opts = {}) { super('studion:grafana:XRayConnection', name, args, opts); const region = (0, resolve_aws_region_1.resolveAwsRegion)(args, this); this.name = name; this.rolePolicy = this.createRolePolicy(); this.dataSource = this.createDataSource(region); this.registerOutputs(); } createRolePolicy() { const policy = aws.iam.getPolicyDocumentOutput({ statements: [ { effect: 'Allow', actions: [ 'xray:BatchGetTraces', 'xray:GetTraceSummaries', 'xray:GetTraceGraph', 'xray:GetGroups', 'xray:GetTimeSeriesServiceStatistics', 'xray:GetInsightSummaries', 'xray:GetInsight', 'xray:GetServiceGraph', 'ec2:DescribeRegions', ], resources: ['*'], }, ], }); return new aws.iam.RolePolicy(`${this.name}-x-ray-policy`, { role: this.role.id, policy: policy.json, }, { parent: this }); } createDataSource(region) { return new grafana.oss.DataSource(`${this.name}-x-ray-datasource`, { name: this.dataSourceName, type: 'grafana-x-ray-datasource', jsonDataEncoded: pulumi.jsonStringify({ authType: 'grafana_assume_role', assumeRoleArn: this.role.arn, defaultRegion: region, }), }, { parent: this }); } } exports.XRayConnection = XRayConnection;