@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
@@ -1,357 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsService = exports.assumeRolePolicy = exports.awsRegion = void 0;
4
- const pulumi = require("@pulumi/pulumi");
5
- const aws = require("@pulumi/aws");
6
- const constants_1 = require("../constants");
7
- const config = new pulumi.Config('aws');
8
- exports.awsRegion = config.require('region');
9
- exports.assumeRolePolicy = {
10
- Version: '2012-10-17',
11
- Statement: [
12
- {
13
- Action: 'sts:AssumeRole',
14
- Principal: {
15
- Service: 'ecs-tasks.amazonaws.com',
16
- },
17
- Effect: 'Allow',
18
- Sid: '',
19
- },
20
- ],
21
- };
22
- /**
23
- * Standard directory permissions:
24
- * - Owner: read, write, execute (7)
25
- * - Group: read, execute (5)
26
- * - Others: read, execute (5)
27
- */
28
- const STANDARD_DIRECTORY_PERMISSIONS = '0755';
29
- const FIRST_POSIX_NON_ROOT_USER = {
30
- userId: 1000,
31
- groupId: 1000,
32
- permissions: STANDARD_DIRECTORY_PERMISSIONS,
33
- };
34
- const defaults = {
35
- desiredCount: 1,
36
- size: 'small',
37
- environment: [],
38
- secrets: [],
39
- enableServiceAutoDiscovery: false,
40
- assignPublicIp: false,
41
- taskExecutionRoleInlinePolicies: [],
42
- taskRoleInlinePolicies: [],
43
- autoscaling: {
44
- enabled: false,
45
- minCount: 1,
46
- maxCount: 1,
47
- },
48
- };
49
- class EcsService extends pulumi.ComponentResource {
50
- constructor(name, args, opts = {}) {
51
- const aliases = opts.aliases || [];
52
- super('studion:ecs:LegacyService', name, {}, Object.assign(Object.assign({}, opts), { aliases: [...aliases, { type: 'studion:ecs:Service' }] }));
53
- const argsWithDefaults = Object.assign({}, defaults, args);
54
- this.name = name;
55
- this.logGroup = this.createLogGroup();
56
- this.taskDefinition = this.createTaskDefinition(args);
57
- if (argsWithDefaults.enableServiceAutoDiscovery) {
58
- this.serviceDiscoveryService = this.createServiceDiscovery(argsWithDefaults.vpcId);
59
- }
60
- this.service = this.createEcsService(args, opts);
61
- if (argsWithDefaults.autoscaling.enabled) {
62
- this.enableAutoscaling(args);
63
- }
64
- this.registerOutputs();
65
- }
66
- createLogGroup() {
67
- const logGroup = new aws.cloudwatch.LogGroup(`${this.name}-log-group`, {
68
- retentionInDays: 14,
69
- namePrefix: `/ecs/${this.name}-`,
70
- tags: constants_1.commonTags,
71
- }, { parent: this });
72
- return logGroup;
73
- }
74
- createPersistentStorage({ vpcId, vpcCidrBlock, subnetIds, }) {
75
- const efs = new aws.efs.FileSystem(`${this.name}-efs`, {
76
- encrypted: true,
77
- lifecyclePolicies: [
78
- {
79
- transitionToPrimaryStorageClass: 'AFTER_1_ACCESS',
80
- },
81
- {
82
- transitionToIa: 'AFTER_7_DAYS',
83
- },
84
- ],
85
- performanceMode: 'generalPurpose',
86
- throughputMode: 'bursting',
87
- tags: Object.assign(Object.assign({}, constants_1.commonTags), { Name: `${this.name}-data` }),
88
- }, { parent: this });
89
- const securityGroup = new aws.ec2.SecurityGroup(`${this.name}-persistent-storage-security-group`, {
90
- vpcId: vpcId,
91
- ingress: [
92
- {
93
- fromPort: 2049,
94
- toPort: 2049,
95
- protocol: 'tcp',
96
- cidrBlocks: [vpcCidrBlock],
97
- },
98
- ],
99
- tags: constants_1.commonTags,
100
- }, { parent: this });
101
- pulumi.all([subnetIds]).apply(([ids]) => {
102
- ids.forEach(it => {
103
- const mountTarget = new aws.efs.MountTarget(`${this.name}-mount-target-${it}`, {
104
- fileSystemId: efs.id,
105
- subnetId: it,
106
- securityGroups: [securityGroup.id],
107
- }, { parent: this });
108
- });
109
- });
110
- return efs;
111
- }
112
- createTaskDefinition(args) {
113
- const argsWithDefaults = Object.assign({}, defaults, args);
114
- const stack = pulumi.getStack();
115
- const secretManagerSecretsInlinePolicy = {
116
- name: `${this.name}-secret-manager-access`,
117
- policy: JSON.stringify({
118
- Version: '2012-10-17',
119
- Statement: [
120
- {
121
- Sid: 'AllowContainerToGetSecretManagerSecrets',
122
- Effect: 'Allow',
123
- Action: ['ssm:GetParameters', 'secretsmanager:GetSecretValue'],
124
- Resource: '*',
125
- },
126
- ],
127
- }),
128
- };
129
- const taskExecutionRole = new aws.iam.Role(`${this.name}-ecs-task-exec-role`, {
130
- namePrefix: `${this.name}-ecs-task-exec-role-`,
131
- assumeRolePolicy: exports.assumeRolePolicy,
132
- managedPolicyArns: [
133
- 'arn:aws:iam::aws:policy/CloudWatchFullAccess',
134
- 'arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess',
135
- ],
136
- inlinePolicies: [
137
- secretManagerSecretsInlinePolicy,
138
- ...argsWithDefaults.taskExecutionRoleInlinePolicies,
139
- ],
140
- tags: constants_1.commonTags,
141
- }, { parent: this });
142
- const execCmdInlinePolicy = {
143
- name: `${this.name}-ecs-exec`,
144
- policy: JSON.stringify({
145
- Version: '2012-10-17',
146
- Statement: [
147
- {
148
- Sid: 'AllowContainerToCreateECSExecSSMChannel',
149
- Effect: 'Allow',
150
- Action: [
151
- 'ssmmessages:CreateControlChannel',
152
- 'ssmmessages:CreateDataChannel',
153
- 'ssmmessages:OpenControlChannel',
154
- 'ssmmessages:OpenDataChannel',
155
- ],
156
- Resource: '*',
157
- },
158
- ],
159
- }),
160
- };
161
- const taskRole = new aws.iam.Role(`${this.name}-ecs-task-role`, {
162
- namePrefix: `${this.name}-ecs-task-role-`,
163
- assumeRolePolicy: exports.assumeRolePolicy,
164
- inlinePolicies: [
165
- execCmdInlinePolicy,
166
- ...argsWithDefaults.taskRoleInlinePolicies,
167
- ],
168
- tags: constants_1.commonTags,
169
- }, { parent: this });
170
- const parsedSize = pulumi.all([argsWithDefaults.size]).apply(([size]) => {
171
- const mapCapabilities = ({ cpu, memory }) => ({
172
- cpu: String(cpu),
173
- memory: String(memory),
174
- });
175
- if (typeof size === 'string') {
176
- return mapCapabilities(constants_1.PredefinedSize[size]);
177
- }
178
- if (typeof size === 'object') {
179
- return mapCapabilities(size);
180
- }
181
- throw Error('Incorrect EcsService size argument');
182
- });
183
- const fileSystemId = this.createPersistentStorage(argsWithDefaults).id;
184
- const accessPoint = new aws.efs.AccessPoint(`${this.name}-efs-ap`, {
185
- fileSystemId,
186
- posixUser: {
187
- uid: FIRST_POSIX_NON_ROOT_USER.userId,
188
- gid: FIRST_POSIX_NON_ROOT_USER.groupId,
189
- },
190
- rootDirectory: {
191
- path: '/data',
192
- creationInfo: {
193
- ownerUid: FIRST_POSIX_NON_ROOT_USER.userId,
194
- ownerGid: FIRST_POSIX_NON_ROOT_USER.groupId,
195
- permissions: FIRST_POSIX_NON_ROOT_USER.permissions,
196
- },
197
- },
198
- });
199
- const taskDefinition = new aws.ecs.TaskDefinition(`${this.name}-task-definition`, Object.assign(Object.assign({ family: `${this.name}-task-definition-${stack}`, networkMode: 'awsvpc', executionRoleArn: taskExecutionRole.arn, taskRoleArn: taskRole.arn, cpu: parsedSize.cpu, memory: parsedSize.memory, requiresCompatibilities: ['FARGATE'], containerDefinitions: pulumi
200
- .all([
201
- this.name,
202
- argsWithDefaults.image,
203
- argsWithDefaults.port,
204
- argsWithDefaults.environment,
205
- argsWithDefaults.secrets,
206
- argsWithDefaults.persistentStorageConfig,
207
- argsWithDefaults.dockerCommand,
208
- this.logGroup.name,
209
- exports.awsRegion,
210
- ])
211
- .apply(([containerName, image, port, environment, secrets, persistentStorageConfig, command, logGroup, region,]) => {
212
- return JSON.stringify([
213
- Object.assign(Object.assign({ readonlyRootFilesystem: false, name: containerName, image, essential: true, portMappings: [
214
- {
215
- containerPort: port,
216
- protocol: 'tcp',
217
- },
218
- ] }, (persistentStorageConfig && {
219
- mountPoints: persistentStorageConfig.mountPoints.map(mountPoint => {
220
- var _a;
221
- return ({
222
- containerPath: mountPoint.containerPath,
223
- sourceVolume: mountPoint.sourceVolume,
224
- readOnly: (_a = mountPoint.readOnly) !== null && _a !== void 0 ? _a : false,
225
- });
226
- }),
227
- user: `${FIRST_POSIX_NON_ROOT_USER.userId}:${FIRST_POSIX_NON_ROOT_USER.groupId}`,
228
- })), { logConfiguration: {
229
- logDriver: 'awslogs',
230
- options: {
231
- 'awslogs-group': logGroup,
232
- 'awslogs-region': region,
233
- 'awslogs-stream-prefix': 'ecs',
234
- },
235
- }, command,
236
- environment,
237
- secrets }),
238
- ]);
239
- }) }, (argsWithDefaults.persistentStorageConfig && {
240
- volumes: argsWithDefaults.persistentStorageConfig.volumes.map(volume => ({
241
- name: volume.name,
242
- efsVolumeConfiguration: {
243
- fileSystemId,
244
- transitEncryption: 'ENABLED',
245
- authorizationConfig: {
246
- accessPointId: accessPoint.id,
247
- iam: 'ENABLED',
248
- },
249
- },
250
- })),
251
- })), { tags: Object.assign(Object.assign({}, constants_1.commonTags), argsWithDefaults.tags) }), { parent: this });
252
- return taskDefinition;
253
- }
254
- createServiceDiscovery(vpcId) {
255
- const privateDnsNamespace = new aws.servicediscovery.PrivateDnsNamespace(`${this.name}-private-dns-namespace`, {
256
- vpc: vpcId,
257
- name: this.name,
258
- tags: constants_1.commonTags,
259
- }, { parent: this });
260
- return new aws.servicediscovery.Service(`${this.name}-service-discovery`, {
261
- name: this.name,
262
- dnsConfig: {
263
- namespaceId: privateDnsNamespace.id,
264
- dnsRecords: [
265
- {
266
- ttl: 10,
267
- type: 'A',
268
- },
269
- ],
270
- routingPolicy: 'MULTIVALUE',
271
- },
272
- tags: constants_1.commonTags,
273
- }, { parent: this });
274
- }
275
- createEcsService(args, opts) {
276
- const argsWithDefaults = Object.assign({}, defaults, args);
277
- const securityGroup = argsWithDefaults.securityGroup ||
278
- new aws.ec2.SecurityGroup(`${this.name}-service-security-group`, {
279
- vpcId: argsWithDefaults.vpcId,
280
- ingress: [
281
- {
282
- fromPort: 0,
283
- toPort: 0,
284
- protocol: '-1',
285
- cidrBlocks: [argsWithDefaults.vpcCidrBlock],
286
- },
287
- ],
288
- egress: [
289
- {
290
- fromPort: 0,
291
- toPort: 0,
292
- protocol: '-1',
293
- cidrBlocks: ['0.0.0.0/0'],
294
- },
295
- ],
296
- tags: constants_1.commonTags,
297
- }, { parent: this });
298
- const service = new aws.ecs.Service(`${this.name}-service`, Object.assign(Object.assign(Object.assign(Object.assign({ name: this.name, cluster: argsWithDefaults.clusterId, launchType: 'FARGATE', desiredCount: argsWithDefaults.desiredCount, taskDefinition: this.taskDefinition.arn, enableExecuteCommand: true }, (argsWithDefaults.lbTargetGroupArn && {
299
- loadBalancers: [
300
- {
301
- containerName: this.name,
302
- containerPort: argsWithDefaults.port,
303
- targetGroupArn: argsWithDefaults.lbTargetGroupArn,
304
- },
305
- ],
306
- })), { networkConfiguration: {
307
- assignPublicIp: argsWithDefaults.assignPublicIp,
308
- subnets: argsWithDefaults.subnetIds,
309
- securityGroups: [securityGroup.id],
310
- } }), (argsWithDefaults.enableServiceAutoDiscovery &&
311
- this.serviceDiscoveryService && {
312
- serviceRegistries: {
313
- registryArn: this.serviceDiscoveryService.arn,
314
- },
315
- })), { tags: Object.assign(Object.assign({}, constants_1.commonTags), argsWithDefaults.tags) }), {
316
- parent: this,
317
- dependsOn: opts.dependsOn,
318
- });
319
- return service;
320
- }
321
- enableAutoscaling(args) {
322
- const argsWithDefaults = Object.assign({}, defaults, args);
323
- const autoscalingTarget = new aws.appautoscaling.Target(`${this.name}-autoscale-target`, {
324
- minCapacity: argsWithDefaults.autoscaling.minCount,
325
- maxCapacity: argsWithDefaults.autoscaling.maxCount,
326
- resourceId: pulumi.interpolate `service/${argsWithDefaults.clusterName}/${this.service.name}`,
327
- serviceNamespace: 'ecs',
328
- scalableDimension: 'ecs:service:DesiredCount',
329
- tags: constants_1.commonTags,
330
- }, { parent: this });
331
- const memoryAutoscalingPolicy = new aws.appautoscaling.Policy(`${this.name}-memory-autoscale-policy`, {
332
- policyType: 'TargetTrackingScaling',
333
- resourceId: autoscalingTarget.resourceId,
334
- scalableDimension: autoscalingTarget.scalableDimension,
335
- serviceNamespace: autoscalingTarget.serviceNamespace,
336
- targetTrackingScalingPolicyConfiguration: {
337
- predefinedMetricSpecification: {
338
- predefinedMetricType: 'ECSServiceAverageMemoryUtilization',
339
- },
340
- targetValue: 70,
341
- },
342
- }, { parent: this });
343
- const cpuAutoscalingPolicy = new aws.appautoscaling.Policy(`${this.name}-cpu-autoscale-policy`, {
344
- policyType: 'TargetTrackingScaling',
345
- resourceId: autoscalingTarget.resourceId,
346
- scalableDimension: autoscalingTarget.scalableDimension,
347
- serviceNamespace: autoscalingTarget.serviceNamespace,
348
- targetTrackingScalingPolicyConfiguration: {
349
- predefinedMetricSpecification: {
350
- predefinedMetricType: 'ECSServiceAverageCPUUtilization',
351
- },
352
- targetValue: 70,
353
- },
354
- }, { parent: this });
355
- }
356
- }
357
- exports.EcsService = EcsService;
@@ -1,39 +0,0 @@
1
- import * as pulumi from '@pulumi/pulumi';
2
- import { EcsService, EcsServiceArgs } from './ecs-service';
3
- import { Password } from './password';
4
- export type MongoArgs = Pick<EcsServiceArgs, 'size' | 'clusterId' | 'clusterName' | 'vpcId' | 'vpcCidrBlock' | 'tags'> & {
5
- privateSubnetIds: pulumi.Input<pulumi.Input<string>[]>;
6
- /**
7
- * Username for the master DB user.
8
- */
9
- username: pulumi.Input<string>;
10
- /**
11
- * Password for the master DB user. If not specified it will be autogenerated.
12
- * The value will be stored as a secret in AWS Secret Manager.
13
- */
14
- password?: pulumi.Input<string>;
15
- /**
16
- * Mongo Docker image. Defaults to mongo:7.0.3.
17
- */
18
- image?: pulumi.Input<string>;
19
- /**
20
- * Exposed service port. Defaults to 27017.
21
- */
22
- port?: pulumi.Input<number>;
23
- /**
24
- * Configuration for persistent storage using EFS volumes.
25
- * By default, creates a volume named 'mongo' mounted at '/data/db'.
26
- * You can override this by providing your own volume and mount point configuration.
27
- */
28
- persistentStorageConfig?: EcsServiceArgs['persistentStorageConfig'];
29
- };
30
- export declare class Mongo extends pulumi.ComponentResource {
31
- readonly name: string;
32
- readonly username: pulumi.Output<string>;
33
- readonly port: pulumi.Output<number>;
34
- readonly host: pulumi.Output<string>;
35
- readonly service: EcsService;
36
- readonly password: Password;
37
- constructor(name: string, args: MongoArgs, opts?: pulumi.ComponentResourceOptions);
38
- }
39
- //# sourceMappingURL=mongo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../../src/components/mongo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,MAAM,SAAS,GAAG,IAAI,CAC1B,cAAc,EACd,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CACzE,GAAG;IACF,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;CACrE,CAAC;AAEF,qBAAa,KAAM,SAAQ,MAAM,CAAC,iBAAiB;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAG1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACf,IAAI,GAAE,MAAM,CAAC,wBAA6B;CA8D7C"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.Mongo = void 0;
15
- const pulumi = require("@pulumi/pulumi");
16
- const ecs_service_1 = require("./ecs-service");
17
- const password_1 = require("./password");
18
- class Mongo extends pulumi.ComponentResource {
19
- constructor(name, args, opts = {}) {
20
- super('studion:Mongo', name, args, opts);
21
- const image = args.image ||
22
- 'mongo:7.0.3@sha256:238b1636bdd7820c752b91bec8a669f92568eb313ad89a1fc4a92903c1b40489';
23
- const port = args.port || 27017;
24
- const persistentStorageConfig = args.persistentStorageConfig || {
25
- volumes: [{ name: 'mongo' }],
26
- mountPoints: [
27
- {
28
- sourceVolume: 'mongo',
29
- containerPath: '/data/db',
30
- },
31
- ],
32
- };
33
- const { username, password, privateSubnetIds } = args, ecsServiceArgs = __rest(args, ["username", "password", "privateSubnetIds"]);
34
- this.name = name;
35
- this.host = pulumi.output(`${name}.${name}`);
36
- this.username = pulumi.output(username);
37
- this.port = pulumi.output(port);
38
- this.password = new password_1.Password(`${this.name}-mongo-password`, { value: password }, { parent: this });
39
- this.service = new ecs_service_1.EcsService(name, Object.assign(Object.assign({}, ecsServiceArgs), { port,
40
- image, desiredCount: 1, autoscaling: { enabled: false }, enableServiceAutoDiscovery: true, persistentStorageConfig, dockerCommand: ['mongod', '--port', port.toString()], assignPublicIp: false, subnetIds: privateSubnetIds, environment: [
41
- {
42
- name: 'MONGO_INITDB_ROOT_USERNAME',
43
- value: username,
44
- },
45
- ], secrets: [
46
- {
47
- name: 'MONGO_INITDB_ROOT_PASSWORD',
48
- valueFrom: this.password.secret.arn,
49
- },
50
- ] }), Object.assign(Object.assign({}, opts), { parent: this }));
51
- this.registerOutputs();
52
- }
53
- }
54
- exports.Mongo = Mongo;
@@ -1,44 +0,0 @@
1
- import * as pulumi from '@pulumi/pulumi';
2
- import * as aws from '@pulumi/aws';
3
- import { AcmCertificate } from './acm-certificate';
4
- import { EcsService, EcsServiceArgs } from './ecs-service';
5
- export type NuxtSSRArgs = Pick<EcsServiceArgs, 'image' | 'port' | 'clusterId' | 'clusterName' | 'vpcId' | 'vpcCidrBlock' | 'desiredCount' | 'autoscaling' | 'size' | 'environment' | 'secrets' | 'tags'> & {
6
- publicSubnetIds: pulumi.Input<pulumi.Input<string>[]>;
7
- /**
8
- * The domain which will be used to access the service.
9
- * The domain or subdomain must belong to the provided hostedZone.
10
- */
11
- domain?: pulumi.Input<string>;
12
- /**
13
- * The ID of the hosted zone.
14
- */
15
- hostedZoneId?: pulumi.Input<string>;
16
- /**
17
- * Path for the health check request. Defaults to "/".
18
- */
19
- healthCheckPath?: pulumi.Input<string>;
20
- };
21
- export declare class NuxtSSR extends pulumi.ComponentResource {
22
- name: string;
23
- service: EcsService;
24
- certificate?: AcmCertificate;
25
- lbSecurityGroup: aws.ec2.SecurityGroup;
26
- serviceSecurityGroup: aws.ec2.SecurityGroup;
27
- customCFHeader: {
28
- name: pulumi.Output<string>;
29
- value: pulumi.Output<string>;
30
- };
31
- lb: aws.lb.LoadBalancer;
32
- lbTargetGroup: aws.lb.TargetGroup;
33
- lbHttpListener: aws.lb.Listener;
34
- cloudfront: aws.cloudfront.Distribution;
35
- constructor(name: string, args: NuxtSSRArgs, opts?: pulumi.ComponentResourceOptions);
36
- private createTlsCertificate;
37
- private createCustomCFHeader;
38
- private createLoadBalancer;
39
- private createSecurityGroup;
40
- private createEcsService;
41
- private createCloudfrontDistribution;
42
- private createDnsRecord;
43
- }
44
- //# sourceMappingURL=nuxt-ssr.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nuxt-ssr.d.ts","sourceRoot":"","sources":["../../src/components/nuxt-ssr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAGnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,cAAc,EACZ,OAAO,GACP,MAAM,GACN,WAAW,GACX,aAAa,GACb,OAAO,GACP,cAAc,GACd,cAAc,GACd,aAAa,GACb,MAAM,GACN,aAAa,GACb,SAAS,GACT,MAAM,CACT,GAAG;IACF,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtD;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;CACxC,CAAC;AAMF,qBAAa,OAAQ,SAAQ,MAAM,CAAC,iBAAiB;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;IACvC,oBAAoB,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;IAC5C,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IAC9E,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC;IACxB,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC;IAClC,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;IAChC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC;gBAGtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE,MAAM,CAAC,wBAA6B;IAoC5C,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,oBAAoB;IAqC5B,OAAO,CAAC,kBAAkB;IAuH1B,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,4BAA4B;IA0GpC,OAAO,CAAC,eAAe;CAsBxB"}