@studion/infra-code-blocks 0.8.0-next.2 → 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/components/acm-certificate/index.d.ts +20 -0
  2. package/dist/components/acm-certificate/index.d.ts.map +1 -0
  3. package/dist/components/acm-certificate/index.js +40 -0
  4. package/dist/components/cloudfront/index.d.ts +97 -0
  5. package/dist/components/cloudfront/index.d.ts.map +1 -0
  6. package/dist/components/cloudfront/index.js +215 -0
  7. package/dist/components/cloudfront/lb-cache-strategy.d.ts +21 -0
  8. package/dist/components/cloudfront/lb-cache-strategy.d.ts.map +1 -0
  9. package/dist/components/cloudfront/lb-cache-strategy.js +93 -0
  10. package/dist/components/cloudfront/s3-cache-strategy.d.ts +22 -0
  11. package/dist/components/cloudfront/s3-cache-strategy.d.ts.map +1 -0
  12. package/dist/components/cloudfront/s3-cache-strategy.js +79 -0
  13. package/dist/components/cloudfront/types.d.ts +10 -0
  14. package/dist/components/cloudfront/types.d.ts.map +1 -0
  15. package/dist/components/database/builder.d.ts +32 -0
  16. package/dist/components/database/builder.d.ts.map +1 -0
  17. package/dist/components/database/builder.js +82 -0
  18. package/dist/components/database/database-replica.d.ts +35 -0
  19. package/dist/components/database/database-replica.d.ts.map +1 -0
  20. package/dist/components/database/database-replica.js +40 -0
  21. package/dist/components/database/ec2-ssm-connect.d.ts +26 -0
  22. package/dist/components/database/ec2-ssm-connect.d.ts.map +1 -0
  23. package/dist/components/{ec2-ssm-connect.js → database/ec2-ssm-connect.js} +42 -34
  24. package/dist/components/database/index.d.ts +67 -0
  25. package/dist/components/database/index.d.ts.map +1 -0
  26. package/dist/components/database/index.js +144 -0
  27. package/dist/{v2/components → components}/ecs-service/index.d.ts +4 -3
  28. package/dist/components/ecs-service/index.d.ts.map +1 -0
  29. package/dist/{v2/components → components}/ecs-service/index.js +18 -29
  30. package/dist/components/ecs-service/policies.d.ts.map +1 -0
  31. package/dist/components/ecs-service/task-size.d.ts +37 -0
  32. package/dist/components/ecs-service/task-size.d.ts.map +1 -0
  33. package/dist/{constants.js → components/ecs-service/task-size.js} +17 -7
  34. package/dist/components/grafana/dashboards/index.d.ts.map +1 -0
  35. package/dist/components/grafana/dashboards/panels.d.ts.map +1 -0
  36. package/dist/components/grafana/dashboards/types.d.ts.map +1 -0
  37. package/dist/components/grafana/dashboards/web-server-slo.d.ts.map +1 -0
  38. package/dist/components/grafana/index.d.ts.map +1 -0
  39. package/dist/components/{password.d.ts → password/index.d.ts} +7 -5
  40. package/dist/components/password/index.d.ts.map +1 -0
  41. package/dist/components/{password.js → password/index.js} +5 -8
  42. package/dist/components/prometheus/index.d.ts.map +1 -0
  43. package/dist/components/prometheus/queries.d.ts.map +1 -0
  44. package/dist/components/prometheus/queries.test.d.ts.map +1 -0
  45. package/dist/components/redis/elasticache-redis.d.ts +38 -0
  46. package/dist/components/redis/elasticache-redis.d.ts.map +1 -0
  47. package/dist/components/redis/elasticache-redis.js +58 -0
  48. package/dist/components/redis/upstash-redis.d.ts +20 -0
  49. package/dist/components/redis/upstash-redis.d.ts.map +1 -0
  50. package/dist/components/redis/upstash-redis.js +29 -0
  51. package/dist/components/static-site/cache-rule-ttl.d.ts +13 -0
  52. package/dist/components/static-site/cache-rule-ttl.d.ts.map +1 -0
  53. package/dist/components/static-site/cache-rule-ttl.js +18 -0
  54. package/dist/components/static-site/index.d.ts +47 -0
  55. package/dist/components/static-site/index.d.ts.map +1 -0
  56. package/dist/components/static-site/index.js +45 -0
  57. package/dist/components/static-site/s3-assets.d.ts +20 -0
  58. package/dist/components/static-site/s3-assets.d.ts.map +1 -0
  59. package/dist/components/static-site/s3-assets.js +63 -0
  60. package/dist/components/vpc/index.d.ts +20 -0
  61. package/dist/components/vpc/index.d.ts.map +1 -0
  62. package/dist/components/vpc/index.js +31 -0
  63. package/dist/{v2/components → components}/web-server/builder.d.ts +5 -1
  64. package/dist/components/web-server/builder.d.ts.map +1 -0
  65. package/dist/{v2/components → components}/web-server/builder.js +11 -1
  66. package/dist/{v2/components → components}/web-server/index.d.ts +29 -7
  67. package/dist/components/web-server/index.d.ts.map +1 -0
  68. package/dist/{v2/components → components}/web-server/index.js +48 -39
  69. package/dist/{v2/components → components}/web-server/load-balancer.d.ts +2 -1
  70. package/dist/components/web-server/load-balancer.d.ts.map +1 -0
  71. package/dist/{v2/components → components}/web-server/load-balancer.js +16 -13
  72. package/dist/index.d.ts +24 -11
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +38 -26
  75. package/dist/otel/batch-processor.d.ts.map +1 -0
  76. package/dist/{v2/otel → otel}/builder.d.ts +14 -1
  77. package/dist/otel/builder.d.ts.map +1 -0
  78. package/dist/{v2/otel → otel}/builder.js +47 -2
  79. package/dist/{v2/otel → otel}/config.d.ts +13 -1
  80. package/dist/otel/config.d.ts.map +1 -0
  81. package/dist/{v2/otel → otel}/config.js +20 -3
  82. package/dist/{v2/otel → otel}/index.d.ts +8 -0
  83. package/dist/otel/index.d.ts.map +1 -0
  84. package/dist/otel/memory-limiter-processor.d.ts.map +1 -0
  85. package/dist/otel/otlp-receiver.d.ts.map +1 -0
  86. package/dist/otel/prometheus-remote-write-exporter.d.ts.map +1 -0
  87. package/dist/shared/common-tags.d.ts +5 -0
  88. package/dist/shared/common-tags.d.ts.map +1 -0
  89. package/dist/shared/common-tags.js +8 -0
  90. package/dist/shared/merge-with-defaults.d.ts +2 -0
  91. package/dist/shared/merge-with-defaults.d.ts.map +1 -0
  92. package/dist/shared/merge-with-defaults.js +7 -0
  93. package/package.json +35 -16
  94. package/dist/components/acm-certificate.d.ts +0 -11
  95. package/dist/components/acm-certificate.d.ts.map +0 -1
  96. package/dist/components/acm-certificate.js +0 -30
  97. package/dist/components/database-replica.d.ts +0 -69
  98. package/dist/components/database-replica.d.ts.map +0 -1
  99. package/dist/components/database-replica.js +0 -40
  100. package/dist/components/database.d.ts +0 -99
  101. package/dist/components/database.d.ts.map +0 -1
  102. package/dist/components/database.js +0 -118
  103. package/dist/components/ec2-ssm-connect.d.ts +0 -22
  104. package/dist/components/ec2-ssm-connect.d.ts.map +0 -1
  105. package/dist/components/ecs-service.d.ts +0 -143
  106. package/dist/components/ecs-service.d.ts.map +0 -1
  107. package/dist/components/ecs-service.js +0 -357
  108. package/dist/components/mongo.d.ts +0 -39
  109. package/dist/components/mongo.d.ts.map +0 -1
  110. package/dist/components/mongo.js +0 -54
  111. package/dist/components/nuxt-ssr.d.ts +0 -44
  112. package/dist/components/nuxt-ssr.d.ts.map +0 -1
  113. package/dist/components/nuxt-ssr.js +0 -277
  114. package/dist/components/password.d.ts.map +0 -1
  115. package/dist/components/project.d.ts +0 -77
  116. package/dist/components/project.d.ts.map +0 -1
  117. package/dist/components/project.js +0 -171
  118. package/dist/components/redis.d.ts +0 -23
  119. package/dist/components/redis.d.ts.map +0 -1
  120. package/dist/components/redis.js +0 -35
  121. package/dist/components/static-site.d.ts +0 -36
  122. package/dist/components/static-site.d.ts.map +0 -1
  123. package/dist/components/static-site.js +0 -138
  124. package/dist/components/web-server.d.ts +0 -38
  125. package/dist/components/web-server.d.ts.map +0 -1
  126. package/dist/components/web-server.js +0 -185
  127. package/dist/constants.d.ts +0 -23
  128. package/dist/constants.d.ts.map +0 -1
  129. package/dist/types/pulumi.d.ts +0 -5
  130. package/dist/types/pulumi.d.ts.map +0 -1
  131. package/dist/types/size.d.ts +0 -8
  132. package/dist/types/size.d.ts.map +0 -1
  133. package/dist/types/size.js +0 -2
  134. package/dist/v2/components/ecs-service/index.d.ts.map +0 -1
  135. package/dist/v2/components/ecs-service/policies.d.ts.map +0 -1
  136. package/dist/v2/components/grafana/dashboards/index.d.ts.map +0 -1
  137. package/dist/v2/components/grafana/dashboards/panels.d.ts.map +0 -1
  138. package/dist/v2/components/grafana/dashboards/types.d.ts.map +0 -1
  139. package/dist/v2/components/grafana/dashboards/web-server-slo.d.ts.map +0 -1
  140. package/dist/v2/components/grafana/index.d.ts.map +0 -1
  141. package/dist/v2/components/prometheus/index.d.ts.map +0 -1
  142. package/dist/v2/components/prometheus/queries.d.ts.map +0 -1
  143. package/dist/v2/components/prometheus/queries.test.d.ts.map +0 -1
  144. package/dist/v2/components/web-server/builder.d.ts.map +0 -1
  145. package/dist/v2/components/web-server/index.d.ts.map +0 -1
  146. package/dist/v2/components/web-server/load-balancer.d.ts.map +0 -1
  147. package/dist/v2/index.d.ts +0 -13
  148. package/dist/v2/index.d.ts.map +0 -1
  149. package/dist/v2/index.js +0 -16
  150. package/dist/v2/otel/batch-processor.d.ts.map +0 -1
  151. package/dist/v2/otel/builder.d.ts.map +0 -1
  152. package/dist/v2/otel/config.d.ts.map +0 -1
  153. package/dist/v2/otel/index.d.ts.map +0 -1
  154. package/dist/v2/otel/memory-limiter-processor.d.ts.map +0 -1
  155. package/dist/v2/otel/otlp-receiver.d.ts.map +0 -1
  156. package/dist/v2/otel/prometheus-remote-write-exporter.d.ts.map +0 -1
  157. /package/dist/{v2/components/grafana/dashboards → components/cloudfront}/types.js +0 -0
  158. /package/dist/{v2/components → components}/ecs-service/policies.d.ts +0 -0
  159. /package/dist/{v2/components → components}/ecs-service/policies.js +0 -0
  160. /package/dist/{v2/components → components}/grafana/dashboards/index.d.ts +0 -0
  161. /package/dist/{v2/components → components}/grafana/dashboards/index.js +0 -0
  162. /package/dist/{v2/components → components}/grafana/dashboards/panels.d.ts +0 -0
  163. /package/dist/{v2/components → components}/grafana/dashboards/panels.js +0 -0
  164. /package/dist/{v2/components → components}/grafana/dashboards/types.d.ts +0 -0
  165. /package/dist/{types/pulumi.js → components/grafana/dashboards/types.js} +0 -0
  166. /package/dist/{v2/components → components}/grafana/dashboards/web-server-slo.d.ts +0 -0
  167. /package/dist/{v2/components → components}/grafana/dashboards/web-server-slo.js +0 -0
  168. /package/dist/{v2/components → components}/grafana/index.d.ts +0 -0
  169. /package/dist/{v2/components → components}/grafana/index.js +0 -0
  170. /package/dist/{v2/components → components}/prometheus/index.d.ts +0 -0
  171. /package/dist/{v2/components → components}/prometheus/index.js +0 -0
  172. /package/dist/{v2/components → components}/prometheus/queries.d.ts +0 -0
  173. /package/dist/{v2/components → components}/prometheus/queries.js +0 -0
  174. /package/dist/{v2/components → components}/prometheus/queries.test.d.ts +0 -0
  175. /package/dist/{v2/components → components}/prometheus/queries.test.js +0 -0
  176. /package/dist/{v2/otel → otel}/batch-processor.d.ts +0 -0
  177. /package/dist/{v2/otel → otel}/batch-processor.js +0 -0
  178. /package/dist/{v2/otel → otel}/index.js +0 -0
  179. /package/dist/{v2/otel → otel}/memory-limiter-processor.d.ts +0 -0
  180. /package/dist/{v2/otel → otel}/memory-limiter-processor.js +0 -0
  181. /package/dist/{v2/otel → otel}/otlp-receiver.d.ts +0 -0
  182. /package/dist/{v2/otel → otel}/otlp-receiver.js +0 -0
  183. /package/dist/{v2/otel → otel}/prometheus-remote-write-exporter.d.ts +0 -0
  184. /package/dist/{v2/otel → otel}/prometheus-remote-write-exporter.js +0 -0
package/dist/index.js CHANGED
@@ -1,28 +1,40 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.next = void 0;
18
- __exportStar(require("./components/web-server"), exports);
19
- __exportStar(require("./components/mongo"), exports);
20
- __exportStar(require("./components/static-site"), exports);
21
- __exportStar(require("./components/database"), exports);
22
- __exportStar(require("./components/database-replica"), exports);
23
- __exportStar(require("./components/redis"), exports);
24
- __exportStar(require("./components/project"), exports);
25
- __exportStar(require("./components/ec2-ssm-connect"), exports);
26
- __exportStar(require("./components/ecs-service"), exports);
27
- __exportStar(require("./components/nuxt-ssr"), exports);
28
- exports.next = require("./v2");
3
+ exports.prometheus = exports.grafana = exports.openTelemetry = exports.S3Assets = exports.StaticSite = exports.CloudFront = exports.Password = exports.AcmCertificate = exports.Ec2SSMConnect = exports.DatabaseReplica = exports.DatabaseBuilder = exports.Database = exports.Vpc = exports.UpstashRedis = exports.ElastiCacheRedis = exports.WebServerLoadBalancer = exports.WebServerBuilder = exports.WebServer = exports.EcsService = void 0;
4
+ var ecs_service_1 = require("./components/ecs-service");
5
+ Object.defineProperty(exports, "EcsService", { enumerable: true, get: function () { return ecs_service_1.EcsService; } });
6
+ var web_server_1 = require("./components/web-server");
7
+ Object.defineProperty(exports, "WebServer", { enumerable: true, get: function () { return web_server_1.WebServer; } });
8
+ var builder_1 = require("./components/web-server/builder");
9
+ Object.defineProperty(exports, "WebServerBuilder", { enumerable: true, get: function () { return builder_1.WebServerBuilder; } });
10
+ var load_balancer_1 = require("./components/web-server/load-balancer");
11
+ Object.defineProperty(exports, "WebServerLoadBalancer", { enumerable: true, get: function () { return load_balancer_1.WebServerLoadBalancer; } });
12
+ var elasticache_redis_1 = require("./components/redis/elasticache-redis");
13
+ Object.defineProperty(exports, "ElastiCacheRedis", { enumerable: true, get: function () { return elasticache_redis_1.ElastiCacheRedis; } });
14
+ var upstash_redis_1 = require("./components/redis/upstash-redis");
15
+ Object.defineProperty(exports, "UpstashRedis", { enumerable: true, get: function () { return upstash_redis_1.UpstashRedis; } });
16
+ var vpc_1 = require("./components/vpc");
17
+ Object.defineProperty(exports, "Vpc", { enumerable: true, get: function () { return vpc_1.Vpc; } });
18
+ var database_1 = require("./components/database");
19
+ Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return database_1.Database; } });
20
+ var builder_2 = require("./components/database/builder");
21
+ Object.defineProperty(exports, "DatabaseBuilder", { enumerable: true, get: function () { return builder_2.DatabaseBuilder; } });
22
+ var database_replica_1 = require("./components/database/database-replica");
23
+ Object.defineProperty(exports, "DatabaseReplica", { enumerable: true, get: function () { return database_replica_1.DatabaseReplica; } });
24
+ var ec2_ssm_connect_1 = require("./components/database/ec2-ssm-connect");
25
+ Object.defineProperty(exports, "Ec2SSMConnect", { enumerable: true, get: function () { return ec2_ssm_connect_1.Ec2SSMConnect; } });
26
+ var acm_certificate_1 = require("./components/acm-certificate");
27
+ Object.defineProperty(exports, "AcmCertificate", { enumerable: true, get: function () { return acm_certificate_1.AcmCertificate; } });
28
+ var password_1 = require("./components/password");
29
+ Object.defineProperty(exports, "Password", { enumerable: true, get: function () { return password_1.Password; } });
30
+ var cloudfront_1 = require("./components/cloudfront");
31
+ Object.defineProperty(exports, "CloudFront", { enumerable: true, get: function () { return cloudfront_1.CloudFront; } });
32
+ var static_site_1 = require("./components/static-site");
33
+ Object.defineProperty(exports, "StaticSite", { enumerable: true, get: function () { return static_site_1.StaticSite; } });
34
+ var s3_assets_1 = require("./components/static-site/s3-assets");
35
+ Object.defineProperty(exports, "S3Assets", { enumerable: true, get: function () { return s3_assets_1.S3Assets; } });
36
+ const builder_3 = require("./otel/builder");
37
+ const otel_1 = require("./otel");
38
+ exports.openTelemetry = { OtelCollector: otel_1.OtelCollector, OtelCollectorBuilder: builder_3.OtelCollectorBuilder };
39
+ exports.grafana = require("./components/grafana");
40
+ exports.prometheus = require("./components/prometheus");
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-processor.d.ts","sourceRoot":"","sources":["../../src/otel/batch-processor.ts"],"names":[],"mappings":"AAAA,yBAAiB,cAAc,CAAC;IAC9B,KAAY,MAAM,GAAG;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,eAAO,MAAM,QAAQ;;;;;CAKpB,CAAC"}
@@ -2,6 +2,16 @@ import * as pulumi from '@pulumi/pulumi';
2
2
  import * as aws from '@pulumi/aws';
3
3
  import { OtelCollector } from '.';
4
4
  import { OTLPReceiver } from './otlp-receiver';
5
+ import { PrometheusRemoteWriteExporter } from './prometheus-remote-write-exporter';
6
+ export declare namespace OtelCollectorBuilder {
7
+ type WithDefaultArgs = {
8
+ prometheusNamespace: PrometheusRemoteWriteExporter.Config['namespace'];
9
+ prometheusWorkspace: aws.amp.Workspace;
10
+ region: string;
11
+ logGroupName: OtelCollector.AwsCloudWatchLogsExporterConfig['log_group_name'];
12
+ logStreamName: OtelCollector.AwsCloudWatchLogsExporterConfig['log_stream_name'];
13
+ };
14
+ }
5
15
  export declare class OtelCollectorBuilder {
6
16
  private readonly _serviceName;
7
17
  private readonly _env;
@@ -12,6 +22,7 @@ export declare class OtelCollectorBuilder {
12
22
  withBatchProcessor(name?: string, size?: number, maxSize?: number, timeout?: string): this;
13
23
  withMemoryLimiterProcessor(checkInterval?: string, limitPercentage?: number, spikeLimitPercentage?: number): this;
14
24
  withAWSXRayExporter(region: string): this;
25
+ withCloudWatchLogsExporter(region: OtelCollector.AwsCloudWatchLogsExporterConfig['region'], logGroupName: OtelCollector.AwsCloudWatchLogsExporterConfig['log_group_name'], logStreamName: OtelCollector.AwsCloudWatchLogsExporterConfig['log_stream_name'], logRetention?: OtelCollector.AwsCloudWatchLogsExporterConfig['log_retention']): this;
15
26
  withHealthCheckExtension(endpoint?: string): this;
16
27
  withPprofExtension(endpoint?: string): this;
17
28
  withAPS(namespace: pulumi.Input<string>, workspace: aws.amp.Workspace, region: string): this;
@@ -19,9 +30,11 @@ export declare class OtelCollectorBuilder {
19
30
  withTelemetry(logLevel?: 'debug' | 'warn' | 'error', metricsVerbosity?: 'basic' | 'normal' | 'detailed'): this;
20
31
  withMetricsPipeline(receivers: OtelCollector.ReceiverType[], processors: OtelCollector.ProcessorType[], exporters: OtelCollector.ExporterType[]): this;
21
32
  withTracesPipeline(receivers: OtelCollector.ReceiverType[], processors: OtelCollector.ProcessorType[], exporters: OtelCollector.ExporterType[]): this;
22
- withDefault(prometheusNamespace: pulumi.Input<string>, prometheusWorkspace: aws.amp.Workspace, awsRegion: string): this;
33
+ withLogsPipeline(receivers: OtelCollector.ReceiverType[], processors: OtelCollector.ProcessorType[], exporters: OtelCollector.ExporterType[]): this;
34
+ withDefault({ prometheusNamespace, prometheusWorkspace, region, logGroupName, logStreamName, }: OtelCollectorBuilder.WithDefaultArgs): this;
23
35
  build(): OtelCollector;
24
36
  private createAPSInlinePolicy;
25
37
  private createAWSXRayPolicy;
38
+ private createCloudWatchLogsPolicy;
26
39
  }
27
40
  //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/otel/builder.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,11 @@ class OtelCollectorBuilder {
30
30
  this.createAWSXRayPolicy();
31
31
  return this;
32
32
  }
33
+ withCloudWatchLogsExporter(region, logGroupName, logStreamName, logRetention) {
34
+ this._configBuilder.withCloudWatchLogsExporter(region, logGroupName, logStreamName, logRetention);
35
+ this.createCloudWatchLogsPolicy(logGroupName);
36
+ return this;
37
+ }
33
38
  withHealthCheckExtension(endpoint = '0.0.0.0:13133') {
34
39
  this._configBuilder.withHealthCheckExtension(endpoint);
35
40
  return this;
@@ -59,10 +64,21 @@ class OtelCollectorBuilder {
59
64
  this._configBuilder.withTracesPipeline(receivers, processors, exporters);
60
65
  return this;
61
66
  }
62
- withDefault(prometheusNamespace, prometheusWorkspace, awsRegion) {
63
- this._configBuilder.withDefault(pulumi.output(prometheusNamespace), pulumi.interpolate `${prometheusWorkspace.prometheusEndpoint}api/v1/remote_write`, awsRegion);
67
+ withLogsPipeline(receivers, processors, exporters) {
68
+ this._configBuilder.withLogsPipeline(receivers, processors, exporters);
69
+ return this;
70
+ }
71
+ withDefault({ prometheusNamespace, prometheusWorkspace, region, logGroupName, logStreamName, }) {
72
+ this._configBuilder.withDefault({
73
+ prometheusNamespace,
74
+ prometheusEndpoint: pulumi.interpolate `${prometheusWorkspace.prometheusEndpoint}api/v1/remote_write`,
75
+ region,
76
+ logGroupName,
77
+ logStreamName,
78
+ });
64
79
  this.createAPSInlinePolicy(prometheusWorkspace);
65
80
  this.createAWSXRayPolicy();
81
+ this.createCloudWatchLogsPolicy(logGroupName);
66
82
  return this;
67
83
  }
68
84
  build() {
@@ -108,5 +124,34 @@ class OtelCollectorBuilder {
108
124
  }));
109
125
  this._taskRoleInlinePolicies.push(policy);
110
126
  }
127
+ createCloudWatchLogsPolicy(logGroupName) {
128
+ const policy = pulumi
129
+ .all([this._serviceName, logGroupName])
130
+ .apply(([serviceName, logGroupName]) => {
131
+ return {
132
+ name: `${serviceName}-task-role-cloudwatch-logs`,
133
+ policy: JSON.stringify({
134
+ Version: '2012-10-17',
135
+ Statement: [
136
+ {
137
+ Effect: 'Allow',
138
+ Action: ['logs:CreateLogGroup', 'logs:PutRetentionPolicy'],
139
+ Resource: '*',
140
+ },
141
+ {
142
+ Effect: 'Allow',
143
+ Action: [
144
+ 'logs:CreateLogStream',
145
+ 'logs:DescribeLogStreams',
146
+ 'logs:PutLogEvents',
147
+ ],
148
+ Resource: `arn:aws:logs:*:*:log-group:${logGroupName}:*`,
149
+ },
150
+ ],
151
+ }),
152
+ };
153
+ });
154
+ this._taskRoleInlinePolicies.push(policy);
155
+ }
111
156
  }
112
157
  exports.OtelCollectorBuilder = OtelCollectorBuilder;
@@ -1,6 +1,16 @@
1
1
  import * as pulumi from '@pulumi/pulumi';
2
2
  import { OTLPReceiver } from './otlp-receiver';
3
3
  import type { OtelCollector } from '.';
4
+ import type { PrometheusRemoteWriteExporter } from './prometheus-remote-write-exporter';
5
+ export declare namespace OtelCollectorConfigBuilder {
6
+ type WithDefaultArgs = {
7
+ prometheusNamespace: PrometheusRemoteWriteExporter.Config['namespace'];
8
+ prometheusEndpoint: PrometheusRemoteWriteExporter.Config['endpoint'];
9
+ region: string;
10
+ logGroupName: OtelCollector.AwsCloudWatchLogsExporterConfig['log_group_name'];
11
+ logStreamName: OtelCollector.AwsCloudWatchLogsExporterConfig['log_stream_name'];
12
+ };
13
+ }
4
14
  export declare class OtelCollectorConfigBuilder {
5
15
  private readonly _receivers;
6
16
  private readonly _processors;
@@ -11,6 +21,7 @@ export declare class OtelCollectorConfigBuilder {
11
21
  withBatchProcessor(name?: string, size?: number, maxSize?: number, timeout?: string): this;
12
22
  withMemoryLimiterProcessor(checkInterval?: string, limitPercentage?: number, spikeLimitPercentage?: number): this;
13
23
  withAWSXRayExporter(region: string): this;
24
+ withCloudWatchLogsExporter(region: OtelCollector.AwsCloudWatchLogsExporterConfig['region'], logGroupName: OtelCollector.AwsCloudWatchLogsExporterConfig['log_group_name'], logStreamName: OtelCollector.AwsCloudWatchLogsExporterConfig['log_stream_name'], logRetention?: OtelCollector.AwsCloudWatchLogsExporterConfig['log_retention']): this;
14
25
  withHealthCheckExtension(endpoint?: string): this;
15
26
  withPprofExtension(endpoint?: string): this;
16
27
  withAPS(namespace: pulumi.Input<string>, endpoint: pulumi.Input<string>, region: string): this;
@@ -18,7 +29,8 @@ export declare class OtelCollectorConfigBuilder {
18
29
  withTelemetry(logLevel?: 'debug' | 'warn' | 'error', metricsVerbosity?: 'basic' | 'normal' | 'detailed'): this;
19
30
  withMetricsPipeline(receivers: OtelCollector.ReceiverType[], processors: OtelCollector.ProcessorType[], exporters: OtelCollector.ExporterType[]): this;
20
31
  withTracesPipeline(receivers: OtelCollector.ReceiverType[], processors: OtelCollector.ProcessorType[], exporters: OtelCollector.ExporterType[]): this;
21
- withDefault(prometheusNamespace: pulumi.Input<string>, prometheusWriteEndpoint: pulumi.Input<string>, awsRegion: string): this;
32
+ withLogsPipeline(receivers: OtelCollector.ReceiverType[], processors: OtelCollector.ProcessorType[], exporters: OtelCollector.ExporterType[]): this;
33
+ withDefault({ prometheusNamespace, prometheusEndpoint, region, logGroupName, logStreamName, }: OtelCollectorConfigBuilder.WithDefaultArgs): this;
22
34
  build(): OtelCollector.Config;
23
35
  private validatePipelineProcessorOrder;
24
36
  private validatePipelineComponents;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/otel/config.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,10 @@ class OtelCollectorConfigBuilder {
46
46
  this._exporters.awsxray = { region };
47
47
  return this;
48
48
  }
49
+ withCloudWatchLogsExporter(region, logGroupName, logStreamName, logRetention) {
50
+ this._exporters.awscloudwatchlogs = Object.assign({ region, log_group_name: logGroupName, log_stream_name: logStreamName }, (logRetention && { log_retention: logRetention }));
51
+ return this;
52
+ }
49
53
  withHealthCheckExtension(endpoint = '0.0.0.0:13133') {
50
54
  this._extensions.health_check = { endpoint };
51
55
  return this;
@@ -95,23 +99,36 @@ class OtelCollectorConfigBuilder {
95
99
  };
96
100
  return this;
97
101
  }
98
- withDefault(prometheusNamespace, prometheusWriteEndpoint, awsRegion) {
102
+ withLogsPipeline(receivers, processors, exporters) {
103
+ this._service.pipelines.logs = {
104
+ receivers,
105
+ processors,
106
+ exporters,
107
+ };
108
+ return this;
109
+ }
110
+ withDefault({ prometheusNamespace, prometheusEndpoint, region, logGroupName, logStreamName, }) {
99
111
  return this.withOTLPReceiver(['http'])
100
112
  .withMemoryLimiterProcessor()
101
113
  .withBatchProcessor('batch/metrics')
102
114
  .withBatchProcessor('batch/traces', 2000, 5000, '2s')
103
- .withAPS(prometheusNamespace, prometheusWriteEndpoint, awsRegion)
104
- .withAWSXRayExporter(awsRegion)
115
+ .withBatchProcessor('batch/logs', 1024, 5000, '2s')
116
+ .withAPS(prometheusNamespace, prometheusEndpoint, region)
117
+ .withAWSXRayExporter(region)
118
+ .withCloudWatchLogsExporter(region, logGroupName, logStreamName)
105
119
  .withHealthCheckExtension()
106
120
  .withMetricsPipeline(['otlp'], ['memory_limiter', 'batch/metrics'], ['prometheusremotewrite'])
107
121
  .withTracesPipeline(['otlp'], ['memory_limiter', 'batch/traces'], ['awsxray'])
122
+ .withLogsPipeline(['otlp'], ['memory_limiter', 'batch/logs'], ['awscloudwatchlogs'])
108
123
  .withTelemetry();
109
124
  }
110
125
  build() {
111
126
  this.validatePipelineComponents('metrics');
112
127
  this.validatePipelineComponents('traces');
128
+ this.validatePipelineComponents('logs');
113
129
  this.validatePipelineProcessorOrder('metrics');
114
130
  this.validatePipelineProcessorOrder('traces');
131
+ this.validatePipelineProcessorOrder('logs');
115
132
  // FIX: Fix type inference
116
133
  const extensions = Object.keys(this._extensions);
117
134
  if (extensions.length) {
@@ -20,6 +20,12 @@ export declare namespace OtelCollector {
20
20
  region: string;
21
21
  endpoint?: string;
22
22
  };
23
+ type AwsCloudWatchLogsExporterConfig = {
24
+ region: string;
25
+ log_group_name: pulumi.Input<string>;
26
+ log_stream_name: pulumi.Input<string>;
27
+ log_retention?: number;
28
+ };
23
29
  type DebugExportedConfig = {
24
30
  verbosity: string;
25
31
  };
@@ -27,6 +33,7 @@ export declare namespace OtelCollector {
27
33
  prometheusremotewrite?: PrometheusRemoteWriteExporter.Config;
28
34
  awsxray?: AwsXRayExporterConfig;
29
35
  debug?: DebugExportedConfig;
36
+ awscloudwatchlogs?: AwsCloudWatchLogsExporterConfig;
30
37
  };
31
38
  type ExporterType = keyof Exporter;
32
39
  type SigV4AuthExtensionConfig = {
@@ -62,6 +69,7 @@ export declare namespace OtelCollector {
62
69
  pipelines: {
63
70
  metrics?: PipelineConfig;
64
71
  traces?: PipelineConfig;
72
+ logs?: PipelineConfig;
65
73
  };
66
74
  extensions?: ExtensionType[];
67
75
  telemetry?: TelemetryConfig;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/otel/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-limiter-processor.d.ts","sourceRoot":"","sources":["../../src/otel/memory-limiter-processor.ts"],"names":[],"mappings":"AAAA,yBAAiB,sBAAsB,CAAC;IACtC,KAAY,MAAM,GAAG;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,QAAQ;;;;CAIpB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-receiver.d.ts","sourceRoot":"","sources":["../../src/otel/otlp-receiver.ts"],"names":[],"mappings":"AAAA,yBAAiB,YAAY,CAAC;IAC5B,KAAY,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACvC,KAAY,MAAM,GAAG;QACnB,SAAS,EAAE;aACR,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE;gBAChB,QAAQ,EAAE,MAAM,CAAC;aAClB;SACF,CAAC;KACH,CAAC;CACH;AAED,eAAO,MAAM,QAAQ;;;;;;;CAOpB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prometheus-remote-write-exporter.d.ts","sourceRoot":"","sources":["../../src/otel/prometheus-remote-write-exporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAEzC,yBAAiB,6BAA6B,CAAC;IAC7C,KAAY,MAAM,GAAG;QACnB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE;YACL,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACrC,CAAC;KACH,CAAC;CACH"}
@@ -0,0 +1,5 @@
1
+ export declare const commonTags: {
2
+ Env: string;
3
+ Project: string;
4
+ };
5
+ //# sourceMappingURL=common-tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-tags.d.ts","sourceRoot":"","sources":["../../src/shared/common-tags.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU;;;CAGtB,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.commonTags = void 0;
4
+ const pulumi = require("@pulumi/pulumi");
5
+ exports.commonTags = {
6
+ Env: pulumi.getStack(),
7
+ Project: pulumi.getProject(),
8
+ };
@@ -0,0 +1,2 @@
1
+ export declare function mergeWithDefaults<T extends Record<PropertyKey, unknown>, U extends Record<PropertyKey, unknown>>(defaults: T, args: U): T & U;
2
+ //# sourceMappingURL=merge-with-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-with-defaults.d.ts","sourceRoot":"","sources":["../../src/shared/merge-with-defaults.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAC/B,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EACtC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EACtC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAM7B"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeWithDefaults = mergeWithDefaults;
4
+ function mergeWithDefaults(defaults, args) {
5
+ const argsWithoutUndefined = Object.fromEntries(Object.entries(args).filter(([, value]) => value !== undefined));
6
+ return Object.assign({}, defaults, argsWithoutUndefined);
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studion/infra-code-blocks",
3
- "version": "0.8.0-next.2",
3
+ "version": "2.0.0-alpha.1",
4
4
  "description": "Studion common infra components",
5
5
  "keywords": [
6
6
  "infrastructure",
@@ -29,46 +29,65 @@
29
29
  "build": "npm run clean && tsc -b src",
30
30
  "format": "prettier -w .",
31
31
  "release": "release-it --only-version",
32
- "test": "TS_NODE_PROJECT=tests node --test --test-concurrency=none -r ts-node/register tests/**[!build]/index.test.ts",
32
+ "test": "tsx --tsconfig tests/tsconfig.json tests/run.ts",
33
33
  "test:build": "npm run build && tstyche build",
34
34
  "prepare": "husky"
35
35
  },
36
36
  "prettier": "@studion/prettier-config",
37
37
  "dependencies": {
38
- "@pulumi/aws": "^6.66.3",
39
- "@pulumi/awsx": "^2.21.0",
38
+ "@pulumi/aws": "^7.15.0",
39
+ "@pulumi/aws-native": "^1.38.0",
40
+ "@pulumi/awsx": "^3.1.0",
40
41
  "@pulumi/pulumi": "^3.146.0",
41
42
  "@pulumi/random": "^4.17.0",
42
43
  "@pulumiverse/grafana": "^0.16.3",
43
- "@upstash/pulumi": "^0.3.14",
44
+ "@upstash/pulumi": "^0.5.0",
44
45
  "yaml": "^2.7.1"
45
46
  },
46
47
  "devDependencies": {
47
- "@aws-sdk/client-acm": "^3.782.0",
48
- "@aws-sdk/client-application-auto-scaling": "^3.758.0",
49
- "@aws-sdk/client-cloudwatch-logs": "^3.767.0",
50
- "@aws-sdk/client-ec2": "^3.767.0",
51
- "@aws-sdk/client-ecs": "^3.766.0",
52
- "@aws-sdk/client-efs": "^3.758.0",
53
- "@aws-sdk/client-elastic-load-balancing-v2": "^3.764.0",
54
- "@aws-sdk/client-route-53": "^3.782.0",
55
- "@aws-sdk/client-servicediscovery": "^3.758.0",
48
+ "@aws-sdk/client-acm": "^3.973.5",
49
+ "@aws-sdk/client-application-auto-scaling": "^3.973.5",
50
+ "@aws-sdk/client-cloudfront": "^3.973.5",
51
+ "@aws-sdk/client-cloudwatch-logs": "^3.973.5",
52
+ "@aws-sdk/client-ec2": "^3.973.5",
53
+ "@aws-sdk/client-ecs": "^3.973.5",
54
+ "@aws-sdk/client-efs": "^3.973.5",
55
+ "@aws-sdk/client-elastic-load-balancing-v2": "^3.764.5",
56
+ "@aws-sdk/client-elasticache": "^3.901.5",
57
+ "@aws-sdk/client-iam": "^3.973.5",
58
+ "@aws-sdk/client-kms": "^3.973.5",
59
+ "@aws-sdk/client-rds": "^3.973.5",
60
+ "@aws-sdk/client-route-53": "^3.973.5",
61
+ "@aws-sdk/client-s3": "^3.982.0",
62
+ "@aws-sdk/client-secrets-manager": "^3.973.5",
63
+ "@aws-sdk/client-servicediscovery": "^3.973.5",
64
+ "@aws-sdk/client-ssm": "^3.986.0",
56
65
  "@studion/prettier-config": "^0.1.0",
57
66
  "@types/node": "^22",
58
67
  "exponential-backoff": "^3.1.2",
59
68
  "http-status": "^2.1.0",
60
69
  "husky": "^9.1.7",
70
+ "ioredis": "^5.8.1",
61
71
  "lint-staged": "^16.1.2",
72
+ "mime": "^4.1.0",
62
73
  "nanospinner": "^1.2.2",
63
74
  "pathe": "^2.0.3",
64
75
  "prettier": "^3.4.2",
65
76
  "release-it": "^18.1.1",
66
- "ts-node": "^10.9.2",
67
- "tsconfig-paths": "^4.2.0",
68
77
  "tstyche": "^4.0.0-beta.9",
78
+ "tsx": "^4.21.0",
69
79
  "typescript": "^5.7.3",
70
80
  "undici": "^6.21.2"
71
81
  },
82
+ "overrides": {
83
+ "@pulumi/pulumi": {
84
+ "glob": "10.5.0",
85
+ "tar": "7.5.9"
86
+ },
87
+ "@aws-sdk/core": {
88
+ "fast-xml-parser": "5.3.6"
89
+ }
90
+ },
72
91
  "publishConfig": {
73
92
  "access": "public"
74
93
  }
@@ -1,11 +0,0 @@
1
- import * as pulumi from '@pulumi/pulumi';
2
- import * as aws from '@pulumi/aws';
3
- export type AcmCertificateArgs = {
4
- domain: pulumi.Input<string>;
5
- hostedZoneId: pulumi.Input<string>;
6
- };
7
- export declare class AcmCertificate extends pulumi.ComponentResource {
8
- certificate: aws.acm.Certificate;
9
- constructor(name: string, args: AcmCertificateArgs, opts?: pulumi.ComponentResourceOptions);
10
- }
11
- //# sourceMappingURL=acm-certificate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acm-certificate.d.ts","sourceRoot":"","sources":["../../src/components/acm-certificate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAGnC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,qBAAa,cAAe,SAAQ,MAAM,CAAC,iBAAiB;IAC1D,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;gBAG/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,kBAAkB,EACxB,IAAI,GAAE,MAAM,CAAC,wBAA6B;CAsC7C"}
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AcmCertificate = void 0;
4
- const pulumi = require("@pulumi/pulumi");
5
- const aws = require("@pulumi/aws");
6
- const constants_1 = require("../constants");
7
- class AcmCertificate extends pulumi.ComponentResource {
8
- constructor(name, args, opts = {}) {
9
- super('studion:acm:Certificate', name, {}, opts);
10
- this.certificate = new aws.acm.Certificate(`${args.domain}-certificate`, { domainName: args.domain, validationMethod: 'DNS', tags: constants_1.commonTags }, { parent: this });
11
- const certificateValidationDomain = new aws.route53.Record(`${args.domain}-cert-validation-domain`, {
12
- name: this.certificate.domainValidationOptions[0].resourceRecordName,
13
- type: this.certificate.domainValidationOptions[0].resourceRecordType,
14
- zoneId: args.hostedZoneId,
15
- records: [
16
- this.certificate.domainValidationOptions[0].resourceRecordValue,
17
- ],
18
- ttl: 600,
19
- }, {
20
- parent: this,
21
- deleteBeforeReplace: true,
22
- });
23
- const certificateValidation = new aws.acm.CertificateValidation(`${args.domain}-cert-validation`, {
24
- certificateArn: this.certificate.arn,
25
- validationRecordFqdns: [certificateValidationDomain.fqdn],
26
- }, { parent: this });
27
- this.registerOutputs();
28
- }
29
- }
30
- exports.AcmCertificate = AcmCertificate;
@@ -1,69 +0,0 @@
1
- import * as aws from '@pulumi/aws';
2
- import * as pulumi from '@pulumi/pulumi';
3
- export type DatabaseReplicaArgs = {
4
- /**
5
- * ARN of the primary DB that we want to replicate.
6
- */
7
- replicateSourceDb: pulumi.Input<string>;
8
- /**
9
- * DB subnet group name. Should be the same as primary instance.
10
- * * If primary DB is instance of studion:Database, it can be accessed as
11
- * `db.dbSubnetGroup.name`.
12
- */
13
- dbSubnetGroupName?: pulumi.Input<string>;
14
- /**
15
- * DB security group ID. Should be the same as primary instance.
16
- * If primary DB is instance of studion:Database, it can be accessed as
17
- * `db.dbSecurityGroup.id`.
18
- */
19
- dbSecurityGroupId: pulumi.Input<string>;
20
- /**
21
- * IAM Monitoring role. Should be the same as primary instance.
22
- */
23
- monitoringRole?: aws.iam.Role;
24
- /**
25
- * Specifies if the RDS instance is multi-AZ. Defaults to false.
26
- */
27
- multiAz?: pulumi.Input<boolean>;
28
- /**
29
- * Specifies whether any database modifications are applied immediately,
30
- * or during the next maintenance window. Default is false.
31
- */
32
- applyImmediately?: pulumi.Input<boolean>;
33
- /**
34
- * The allocated storage in gibibytes. Defaults to 20GB.
35
- */
36
- allocatedStorage?: pulumi.Input<number>;
37
- /**
38
- * The upper limit to which Amazon RDS can automatically scale
39
- * the storage of the DB instance. Defaults to 100GB.
40
- */
41
- maxAllocatedStorage?: pulumi.Input<number>;
42
- /**
43
- * The instance type of the RDS instance. Defaults to 'db.t4g.micro'.
44
- */
45
- instanceClass?: pulumi.Input<string>;
46
- /**
47
- * The name of custom aws.rds.ParameterGroup. Setting this param will apply custom
48
- * DB parameters to this instance.
49
- */
50
- parameterGroupName?: pulumi.Input<string>;
51
- /**
52
- * The DB engine version. Defaults to '17.2'.
53
- */
54
- engineVersion?: pulumi.Input<string>;
55
- /**
56
- * A map of tags to assign to the resource.
57
- */
58
- tags?: pulumi.Input<{
59
- [key: string]: pulumi.Input<string>;
60
- }>;
61
- };
62
- export declare class DatabaseReplica extends pulumi.ComponentResource {
63
- name: string;
64
- instance: aws.rds.Instance;
65
- monitoringRole?: aws.iam.Role;
66
- constructor(name: string, args: DatabaseReplicaArgs, opts?: pulumi.ComponentResourceOptions);
67
- private createDatabaseInstance;
68
- }
69
- //# sourceMappingURL=database-replica.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database-replica.d.ts","sourceRoot":"","sources":["../../src/components/database-replica.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAGzC,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC;;OAEG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KACrC,CAAC,CAAC;CACJ,CAAC;AAYF,qBAAa,eAAgB,SAAQ,MAAM,CAAC,iBAAiB;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC3B,cAAc,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAG5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,mBAAmB,EACzB,IAAI,GAAE,MAAM,CAAC,wBAA6B;IAa5C,OAAO,CAAC,sBAAsB;CAyC/B"}
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DatabaseReplica = void 0;
4
- const aws = require("@pulumi/aws");
5
- const pulumi = require("@pulumi/pulumi");
6
- const constants_1 = require("../constants");
7
- const defaults = {
8
- multiAz: false,
9
- applyImmediately: false,
10
- allocatedStorage: 20,
11
- maxAllocatedStorage: 100,
12
- instanceClass: 'db.t4g.micro',
13
- enableMonitoring: false,
14
- engineVersion: '17.2',
15
- };
16
- class DatabaseReplica extends pulumi.ComponentResource {
17
- constructor(name, args, opts = {}) {
18
- super('studion:DatabaseReplica', name, {}, opts);
19
- this.name = name;
20
- const argsWithDefaults = Object.assign({}, defaults, args);
21
- this.monitoringRole = argsWithDefaults.monitoringRole;
22
- this.instance = this.createDatabaseInstance(args);
23
- this.registerOutputs();
24
- }
25
- createDatabaseInstance(args) {
26
- const argsWithDefaults = Object.assign({}, defaults, args);
27
- const stack = pulumi.getStack();
28
- const monitoringOptions = argsWithDefaults.enableMonitoring && this.monitoringRole
29
- ? {
30
- monitoringInterval: 60,
31
- monitoringRoleArn: this.monitoringRole.arn,
32
- performanceInsightsEnabled: true,
33
- performanceInsightsRetentionPeriod: 7,
34
- }
35
- : {};
36
- const instance = new aws.rds.Instance(`${this.name}-rds`, Object.assign(Object.assign({ identifierPrefix: `${this.name}-`, engine: 'postgres', engineVersion: argsWithDefaults.engineVersion, allocatedStorage: argsWithDefaults.allocatedStorage, maxAllocatedStorage: argsWithDefaults.maxAllocatedStorage, instanceClass: argsWithDefaults.instanceClass, dbSubnetGroupName: argsWithDefaults.dbSubnetGroupName, vpcSecurityGroupIds: [argsWithDefaults.dbSecurityGroupId], storageEncrypted: true, multiAz: argsWithDefaults.multiAz, publiclyAccessible: false, applyImmediately: argsWithDefaults.applyImmediately, autoMinorVersionUpgrade: true, maintenanceWindow: 'Mon:07:00-Mon:07:30', replicateSourceDb: argsWithDefaults.replicateSourceDb, parameterGroupName: argsWithDefaults.parameterGroupName, skipFinalSnapshot: true }, monitoringOptions), { tags: Object.assign(Object.assign({}, constants_1.commonTags), argsWithDefaults.tags) }), { parent: this });
37
- return instance;
38
- }
39
- }
40
- exports.DatabaseReplica = DatabaseReplica;